成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

C語言這么厲害,它自身又是用什么語言寫的?

開發 開發工具
這是來自我的星球的一個提問:“C語言本身用什么語言寫的?”換個角度來問,其實是:C語言在運行之前,得編譯才行,那C語言的編譯器從哪里來? 用什么語言來寫的?如果是用C語言本身來寫的,到底是先有蛋還是先有雞?

 這是來自我的星球的一個提問:“C語言本身用什么語言寫的?”

[[278189]]

換個角度來問,其實是:C語言在運行之前,得編譯才行,那C語言的編譯器從哪里來? 用什么語言來寫的?如果是用C語言本身來寫的,到底是先有蛋還是先有雞?

1

我們假設世界上不存在任何編譯器, 先從機器語言說起,看看怎么辦。

機器語言可以直接被CPU執行,不需要編譯器。

然后是匯編語言, 匯編語言雖然只是機器語言的助記符,但是也需要編譯成機器語言才能執行,沒辦法只能用機器語言來寫這第一個編譯器了(以后就不用了)。

匯編語言的問題解決了,就往前邁進了一大步,這時候就可以用匯編語言去寫C語言的編譯器,我們說這是C編譯器的老祖宗。

有了這個老祖宗,就可以編譯任意的C語言程序了,那是不是可以用C語言本身寫一個編譯器?只要用老祖宗編譯一下就可以了。

OK, 這么一層層上來,終于得到了一個用C語言寫的編譯器, 真是夠麻煩的。

到這個時候,之前那個匯編寫的C語言編譯器就可以拋棄了。

當然,如果在C語言之前,已經出現了別的高級語言,例如Pascal,那就可以用Pascal來寫一個C語言的編譯器。

第一個Pascal的編譯器據說使用Fortran寫的。而做為第一個高級語言的Fortran,它的編譯器應該是匯編語言寫的。

2

關于編譯器,這里邊有個有趣的傳說:

傳說Unix 發明人之一的 Ken Thompson在貝爾實驗室,大搖大擺的走到任何一臺Unix機器前,輸入自己的用戶名和密碼,就能以root的方式登錄!

貝爾實驗室人才濟濟,另外一些大牛發誓要把這個漏洞找出來,他們通讀了Unix的C源碼,終于找到了登錄的后門, 清理后門以后編譯Unix , 運行, 可是Thompson 還是能夠登錄進去。

有人覺得可能是編譯器中有問題,在編譯Unix的時候植入了后門, 于是他們又用C語言重新寫了一個編譯器,用新的編譯器再次編譯了Unix, 這下總算天下太平了吧。

可是仍然不管用, Thompson 依然可以用root登錄,真是讓人崩潰 !

后來Thompson 本人解開了秘密,是第一個C 語言編譯器有問題, 這個編譯器在編譯Unix源碼的時候,當然會植入后門, 這還不夠,更牛的是,如果你用C 語言寫了一個新編譯器,肯定也需要編譯成二進制代碼啊,用什么來編譯,只有用Thompson寫的那第一個編譯器來編譯,好了, 你寫的這個編譯器就會被污染了,你的編譯器再去編譯Unix , 也會植入后門 :-)

說到這里我就想起了幾年前的XcodeGhost 事件,簡單來說就是在Xcode(非官方渠道下載的)中植入了木馬,這樣XCode編譯出的ios app都被污染了,這些app就可以被黑客利用做非法之事。

雖然這個XCodeGhost和Thompson的后面相比差得遠,但是提醒我們,下載軟件的時候要走正規渠道,從官方網站下載,認準網站的HTTPS標準,甚至可以驗證一下checksum。

3

可能有人問:我用匯編寫一段Hello World都很麻煩,居然有人可以用它寫復雜的編譯器?這可能嗎?

當然可能,在開發第一代Unix的時候,連C語言都沒有, Ken Thompson 和 Dennis Ritchie 可是用匯編一行行把Unix敲出來的。 WPS第一版是求伯君用匯編寫出來的, Turbo Pascal 的編譯器也是Anders 用匯編寫出來的,大神們的能力不是普通人能想象得到的。

對于編譯器來說,還可以采用“滾雪球”的方式來開發:

還是以C語言為例,第一個版本可以先選擇C語言的一個子集,例如只支持基本的數據類型,流程控制語句,函數調用...... 我們把這個子集稱為C0。

然后用匯編語言寫個編譯器,只搞定這個語言的子集C0,這樣寫起來就容易不少。

C0這個語言可以工作了,然后我們擴展這個子集,例如添加struct,指針...... ,把新的語言稱為C1。

那C1這個語言的編譯器由誰來寫? 自然是C0。

等到C1可以工作了,再次擴展語言特性,用C1寫編譯器,得到C2。

然后是C3, C4...... 最后得到完整的C語言。

這個過程被稱為bootstraping , 中文叫做自舉。

 

責任編輯:武曉燕 來源: 51CTO專欄
相關推薦

2020-04-25 20:18:04

C語言編程匯編語言

2020-02-21 16:43:00

C語言編程語言程序員

2025-02-19 08:50:05

2011-07-05 16:57:53

C語言

2014-04-15 15:35:32

CC語言

2017-03-10 09:09:41

C語言體驗

2010-01-20 17:23:03

C++編程語言

2019-04-23 09:58:22

Windows 10語言代碼

2022-07-29 08:25:02

volatileC語言原子

2013-01-15 09:41:45

編程語言

2012-05-16 13:11:28

編程語言開發語言Java

2020-05-15 14:34:16

C語言丹尼斯 · 里奇開發者

2010-01-15 17:38:37

C++語言

2022-06-26 00:24:57

C語言操作系統語言

2025-01-06 08:28:45

C語言操作系統程序

2021-05-06 20:51:52

跨域http協議

2015-03-19 09:46:32

程序員

2022-07-26 23:43:29

編程語言開發Java

2022-11-01 11:22:38

2013-05-07 13:19:07

語言
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产在线视频一区 | 中文字幕一区二区三区四区五区 | 91精品国产一区二区三区 | 视频一区中文字幕 | 国产精品极品美女在线观看免费 | 午夜在线影院 | 国产精品区一区二区三 | 午夜天堂精品久久久久 | 亚洲一区二区精品视频 | 精品1区2区 | 久久久久久久网 | 午夜影晥| 免费观看一级特黄欧美大片 | 亚洲在线免费观看 | 国产精品日韩欧美一区二区三区 | 91看片在线 | 精品免费观看 | 国产露脸国语对白在线 | 中文字幕精品一区二区三区精品 | 国产三级精品视频 | 国产精品精品视频一区二区三区 | 亚洲精品99| 欧美一级视频免费看 | 日韩视频在线播放 | 久久精品视频99 | 国产伦精品一区二区三区四区视频 | 欧美精品一区二区三区视频 | 欧美国产一区二区三区 | 久久在线免费 | 国产精品国产精品国产专区不片 | 亚洲天堂一区二区 | 国产精品中文字幕在线 | 91私密视频 | 久久亚洲一区二区 | 中文av在线播放 | 91久久久久久久 | 国产精品乱码一区二三区小蝌蚪 | 亚洲一区 | 精品国产乱码久久久久久丨区2区 | 国产一区二区三区精品久久久 | 日韩视频专区 |