欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

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

2021-02-13    分類: 網(wǎng)站建設(shè)

C語言這么厲害,它自身又是用什么語言寫的?
這是來自我的星球的一個(gè)提問:“C語言本身用什么語言寫的?”
換個(gè)角度來問,其實(shí)是:C語言在運(yùn)行之前,得編譯才行,那C語言的編譯器從哪里來? 用什么語言來寫的?如果是用C語言本身來寫的,到底是先有蛋還是先有雞?
我們假設(shè)世界上不存在任何編譯器, 先從機(jī)器語言說起,看看怎么辦。
機(jī)器語言可以直接被CPU執(zhí)行,不需要編譯器。
然后是匯編語言, 匯編語言雖然只是機(jī)器語言的助記符,但是也需要編譯成機(jī)器語言才能執(zhí)行,沒辦法只能用機(jī)器語言來寫這第一個(gè)編譯器了(以后就不用了)。
匯編語言的問題解決了,就往前邁進(jìn)了一大步,這時(shí)候就可以用匯編語言去寫C語言的編譯器,我們說這是C編譯器的老祖宗。
有了這個(gè)老祖宗,就可以編譯任意的C語言程序了,那是不是可以用C語言本身寫一個(gè)編譯器?只要用老祖宗編譯一下就可以了。
OK, 這么一層層上來,終于得到了一個(gè)用C語言寫的編譯器, 真是夠麻煩的。
到這個(gè)時(shí)候,之前那個(gè)匯編寫的C語言編譯器就可以拋棄了。
當(dāng)然,如果在C語言之前,已經(jīng)出現(xiàn)了別的高級(jí)語言,例如Pascal,那就可以用Pascal來寫一個(gè)C語言的編譯器。
第一個(gè)Pascal的編譯器據(jù)說使用Fortran寫的。而做為第一個(gè)高級(jí)語言的Fortran,它的編譯器應(yīng)該是匯編語言寫的。
關(guān)于編譯器,這里邊有個(gè)有趣的傳說:
傳說Unix 發(fā)明人之一的 Ken Thompson在貝爾實(shí)驗(yàn)室,大搖大擺的走到任何一臺(tái)Unix機(jī)器前,輸入自己的用戶名和密碼,就能以root的方式登錄!
貝爾實(shí)驗(yàn)室人才濟(jì)濟(jì),另外一些大牛發(fā)誓要把這個(gè)漏洞找出來,他們通讀了Unix的C源碼,終于找到了登錄的后門, 清理后門以后編譯Unix , 運(yùn)行, 可是Thompson 還是能夠登錄進(jìn)去。
有人覺得可能是編譯器中有問題,在編譯Unix的時(shí)候植入了后門, 于是他們又用C語言重新寫了一個(gè)編譯器,用新的編譯器再次編譯了Unix, 這下總算天下太平了吧。
可是仍然不管用, Thompson 依然可以用root登錄,真是讓人崩潰 !
后來Thompson 本人解開了秘密,是第一個(gè)C 語言編譯器有問題, 這個(gè)編譯器在編譯Unix源碼的時(shí)候,當(dāng)然會(huì)植入后門, 這還不夠,更牛的是,如果你用C 語言寫了一個(gè)新編譯器,肯定也需要編譯成二進(jìn)制代碼啊,用什么來編譯,只有用Thompson寫的那第一個(gè)編譯器來編譯,好了, 你寫的這個(gè)編譯器就會(huì)被污染了,你的編譯器再去編譯Unix , 也會(huì)植入后門 :-)
說到這里我就想起了幾年前的XcodeGhost 事件,簡單來說就是在Xcode(非官方渠道下載的)中植入了木馬,這樣XCode編譯出的ios app都被污染了,這些app就可以被黑客利用做非法之事。
雖然這個(gè)XCodeGhost和Thompson的后面相比差得遠(yuǎn),但是提醒我們,下載軟件的時(shí)候要走正規(guī)渠道,從官方網(wǎng)站下載,認(rèn)準(zhǔn)網(wǎng)站的HTTPS標(biāo)準(zhǔn),甚至可以驗(yàn)證一下checksum。
可能有人問:我用匯編寫一段Hello World都很麻煩,居然有人可以用它寫復(fù)雜的編譯器?這可能嗎?
當(dāng)然可能,在開發(fā)第一代Unix的時(shí)候,連C語言都沒有, Ken Thompson 和 Dennis Ritchie 可是用匯編一行行把Unix敲出來的。 WPS第一版是求伯君用匯編寫出來的, Turbo Pascal 的編譯器也是Anders 用匯編寫出來的,大神們的能力不是普通人能想象得到的。
對(duì)于編譯器來說,還可以采用“滾雪球”的方式來開發(fā):
還是以C語言為例,第一個(gè)版本可以先選擇C語言的一個(gè)子集,例如只支持基本的數(shù)據(jù)類型,流程控制語句,函數(shù)調(diào)用...... 我們把這個(gè)子集稱為C0。
然后用匯編語言寫個(gè)編譯器,只搞定這個(gè)語言的子集C0,這樣寫起來就容易不少。
C0這個(gè)語言可以工作了,然后我們擴(kuò)展這個(gè)子集,例如添加struct,指針...... ,把新的語言稱為C1。
那C1這個(gè)語言的編譯器由誰來寫? 自然是C0。
等到C1可以工作了,再次擴(kuò)展語言特性,用C1寫編譯器,得到C2。
然后是C3, C4...... 最后得到完整的C語言。
這個(gè)過程被稱為bootstraping , 中文叫做自舉。

文章標(biāo)題:C語言這么厲害,它自身又是用什么語言寫的?
分享鏈接:http://aaarwkj.com/news/100762.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開發(fā)ChatGPT、定制開發(fā)網(wǎng)站策劃、搜索引擎優(yōu)化、營銷型網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)
国产av日韩精品一区二区三区| 国产精品乱码中文字幕| 亚洲欧美半夜激情一区二区| 国产欧美日韩综合激情| 97国产精品视频在线观看| 午夜夫妻生活视频在线观看| 亚洲黄色av网址在线观看| 清纯唯美校园春色亚洲激情| 69国产精品久久久久久人| 午夜黄色福利在线观看| 日本一道二区三区我不卡| 国产三级在线dvd观看| 91午夜福利国产在线观看| 男人的天堂成人午夜视频 | 久久综激情丁香开心婷婷| 国产精品自产拍av在线| 人妻一区二区三区久久| 午夜在线成人免费观看| 少妇高潮惨叫久久麻豆传| 暖暖免费中文高清日本三区| 亚洲欧美日韩之国产综合| 久久国产国内精品国语对白| 日韩高清在线不卡视频| 中文字幕精品一区二区三| 亚洲黄色成人免费观看| 日本免费一区二区三区手机在线| 日韩中文字幕乱码卡一| 国产黄片a三级久久久久久| av中文字幕在线电影| 久久精品91久久久| 91国产性感美女视频| 中文字幕色视频在线观看| 最新日韩人妻中文字幕一区| 成人福利午夜一区二区| 日本亚洲中文字幕无吗| 国产自拍偷拍自拍偷拍| 日本在线免费观看91| 日本成人午夜电影网站| 免费av中文字幕电影| 99热成人精品热久久| 中国一区二区三区毛片|