{eval=Array;=+count(Array);}
既然你能提出這個級別的問題,說明你應該學過C。既然你能提出這個級別的問題,說明你沒學過編譯原理(或者全還給老師了[捂臉],容我不厚道一下下)。
你所謂的"C語言",準確來說,指的是能把C語言程序翻譯成機器指令程序的"編譯器"程序。
先用匯編寫一個極小的原始編譯器(AC),能編譯最簡單的C語法。然后用該原始編譯器AC編譯一個最簡單的C編譯器(CC1)。然后用CC1編譯一個稍微復雜一點的C編譯器(CC2)。最終,像滾雪球一樣,C語言就把一個擁有完全編譯功能的C編譯器給編譯出來了。
推薦資料:陳火旺老師的經典教材《編譯原理》,開篇講的就是這個問題。
是用C語言編寫的。
這里有一個概念,就是編程語言的自舉。
自舉(bootstrapping)字面理解就是自己能把自己給舉起來,換做編程語言來講就是,自己編譯自己。也就是C語言能通過C語言自己編寫自己的編譯器。
完成自舉通常需要3-4個步驟。
1、創建自舉編譯器環境。
2、編譯自舉編譯器。
3、通過自舉編譯器編譯完整的編譯器。
4、通過第三步里面的完整的編譯器編譯完整的編譯器。
第四步得到的編譯器就是一個自舉編譯器。
那么問題來了,第2步中的編譯器是什么語言寫的呢,是這么來的呢?
這個就要了解編程語言是什么了,簡單而言編程語言分為,機器語言(就是0101),匯編語言(可以理解為機器語言簡單英文翻譯),高級語言(這個就是我們通常接觸到的編程語言了,細分的話,還有編譯型的語言和解析型的語言等)。
參考 Dennis M. Ritchie 寫的 The Development of the C Language:Chistory。
Ken Thomson 不滿意 BCPL,于是設計了 B 語言,并且用 BCPL 為 B 語言寫了一個編譯器,然后從這個編譯器開始自舉寫新的 B 語言編譯器。
貝爾實驗室的眾人在 PDP-7 上用 B 語言寫了各種各樣的東西后又不滿意 B 語言了,于是 1971 年 DMR 開始在新買的 PDP-11 上用 B 給 B 寫擴展,稱之為 new B(簡稱NB),new B和原來的B語言漸行漸遠,于是就取了BCPL的第二個字母C當作new B的新名字,C語言就這么誕生了。
1973 年夏天他們用手頭的編譯器和語言給 PDP-11 重寫了一個 Unix Kernel。C語言就這樣和unix/linux結下不解之緣。
對了,BCPL也是一門能自舉的語言,后來有些人也用匯編語言寫了C語言的編譯器,并且C語言的語法都是透明公開的,你可以用任何語言實現C語言的編譯器。
所以答案就變成了,第一版C語言編譯器是由B語言編寫的。現在你可以用任何語言去實現C語言的編譯器。
最早的計算機語言是機器語言,直接面向計算機硬件。雖然指令不多,但實現特定任務需要編制復雜的程序。由于缺乏存儲系統,程序存儲于紙帶上。隨著存儲介質的發展和程序模塊化演變,計算機語言由低級向高級不斷發展。尤其是視窗操作系統的出現,使得計算機對用戶更加友好。
C語言本身是基于英語的。C語言的創始人丹尼斯里奇是美國人,哈佛大學畢業。
比如C語言里的數據定義:int出自于integer;比如結構語句:if... else... 等等。
這個問題導致我有一個問題,漢語是什么語言創建的?
只能說c語言的運行原理是啥,通過什么能編譯執行c語言的命令。所以感覺這個問題很奇怪
語言就是一套語法規則,都是用文字寫的,在美國是用英文寫的,到了中國翻譯成中文。語言的編譯器才是用計算機語言編的。能將C語言源程序翻譯成可執行代碼的任何計算機語言,都可以用來編寫C語言編譯器。
10
回答10
回答0
回答2
回答9
回答10
回答0
回答5
回答10
回答6
回答