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