亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標(biāo)題: 【大話(huà)IT】編譯器的設(shè)計(jì)其實(shí)遠(yuǎn)沒(méi)想象中那么妖魔化 [打印本頁(yè)]

作者: cjaizss    時(shí)間: 2016-08-03 09:34
標(biāo)題: 【大話(huà)IT】編譯器的設(shè)計(jì)其實(shí)遠(yuǎn)沒(méi)想象中那么妖魔化
話(huà)題背景:

軟件工程師需要經(jīng)常面對(duì)著各種編程語(yǔ)言編譯器、解釋器,通過(guò)各種語(yǔ)言編譯器、解釋器,軟件工程師的一切工作成果才會(huì)變的有意義。本次活動(dòng)將基于編譯器與軟件工程師之間的關(guān)系展開(kāi)討論。


討論話(huà)題(包括但不限于)

1. 你平常用哪種語(yǔ)言編寫(xiě)程序?用什么編譯環(huán)境?
2. 你熟悉編譯原理嗎,了解詞法分析、語(yǔ)法分析、上下文無(wú)關(guān)文法、IR、LL(k)文法、LR(k)文法等術(shù)語(yǔ)嗎?
3. 你了解過(guò)lex/yacc嗎?使用它們做過(guò)分析嗎?
4. 你想過(guò)自己設(shè)計(jì)一種語(yǔ)言,并為之設(shè)計(jì)編譯器嗎?如果你想設(shè)計(jì),那你該如何一步步的做呢?


活動(dòng)時(shí)間:2016年8月4日—9月4日


活動(dòng)獎(jiǎng)勵(lì):

活動(dòng)結(jié)束后,我們將選取5位亮點(diǎn)回復(fù),送技術(shù)圖書(shū)《自制編譯器》各一本。



作者: [日] 青木峰郎   
譯者: 嚴(yán)圣逸 絕云
叢書(shū)名: 圖靈程序設(shè)計(jì)叢書(shū)
出版社:人民郵電出版社
ISBN:9787115422187
上架時(shí)間:2016-5-31
出版日期:2016 年6月
開(kāi)本:16開(kāi)
頁(yè)碼:445
版次:1-1

內(nèi)容簡(jiǎn)介:本書(shū)將帶領(lǐng)讀者從頭開(kāi)始制作一門(mén)語(yǔ)言的編譯器。筆者特意為本書(shū)設(shè)計(jì)了C?語(yǔ)言,C?可以說(shuō)是C語(yǔ)言的子集,實(shí)現(xiàn)了包括指針運(yùn)算等在內(nèi)的C語(yǔ)言的主要部分。本書(shū)所實(shí)現(xiàn)的編譯器就是C?語(yǔ)言的編譯器, 是實(shí)實(shí)在在的編譯器,而非有諸多限制的玩具。另外,除編譯器之外,本書(shū)對(duì)以編譯器為中心的編程語(yǔ)言的運(yùn)行環(huán)境,即編譯器、匯編器、鏈接器、硬件、運(yùn)行時(shí)環(huán)境等都有所提及,介紹了程序運(yùn)行的所有環(huán)節(jié)。

樣章試讀: 試讀1、2章.pdf (1.69 MB, 下載次數(shù): 168)

作者: shenlanyouyu    時(shí)間: 2016-08-04 15:48
妖魔化倒是沒(méi)有,就是說(shuō)簡(jiǎn)單也不簡(jiǎn)單,容易也不容易。
作者: GB_juno    時(shí)間: 2016-08-04 23:16
如果僅僅是簡(jiǎn)單規(guī)則的語(yǔ)言,那么編譯器確實(shí)也不難。
問(wèn)題在于:
1)復(fù)雜的語(yǔ)言特性,C++的某些語(yǔ)法特性據(jù)說(shuō)現(xiàn)有的編譯器都支持不是很好
2)代碼優(yōu)化部分,越快越難..
3)運(yùn)行時(shí)的問(wèn)題..
編譯器每一步都要做得非常好,就特別難了。
即使做出編譯器了,人們還會(huì)拿它去和市面上最快的編譯器對(duì)比...
作者: mqiezi    時(shí)間: 2016-08-05 15:00
1. 你平常用哪種語(yǔ)言編寫(xiě)程序?用什么編譯環(huán)境?
語(yǔ)言一般是 Objective-C C/C++
編譯環(huán)境是 LLVM 和 GCC

2. 你熟悉編譯原理嗎,了解詞法分析、語(yǔ)法分析、上下文無(wú)關(guān)文法、IR、LL(k)文法、LR(k)文法等術(shù)語(yǔ)嗎?
編譯原理還是大學(xué)時(shí)學(xué)習(xí)的,后面偶爾有看過(guò)一些博客介紹這方面的,不過(guò)相對(duì)其他方面的資源來(lái)說(shuō)這方面的資源少多了。
詞法分析:面向代碼,將代碼翻譯成 token 序列
語(yǔ)法分析:將token序列組合成各類(lèi)語(yǔ)法短語(yǔ),如“程序”,“語(yǔ)句”,“表達(dá)式”
上下文無(wú)關(guān)文法:不太好用語(yǔ)言描述,基本上字面意思就可以理解了
IR:中間代碼吧,跟網(wǎng)頁(yè)的后端類(lèi)似,相當(dāng)于編譯器的后端。主要為了適配高級(jí)語(yǔ)言。
LL(k)文法:上下文無(wú)關(guān)文法,可以自左到右掃描,自上而下分析。
LR(k)文法:上下文無(wú)關(guān)文法,可以自左到右掃描,自下而上分析。

3. 你了解過(guò)lex/yacc嗎?使用它們做過(guò)分析嗎?
還有 FLex/bison ,以前好像只做過(guò)分詞方面。

4. 你想過(guò)自己設(shè)計(jì)一種語(yǔ)言,并為之設(shè)計(jì)編譯器嗎?如果你想設(shè)計(jì),那你該如何一步步的做呢?
想過(guò)一些,不過(guò)只是空想。
現(xiàn)在看來(lái),從詞法分析->語(yǔ)法分析->。。。還有很多路要走。不過(guò)LLVM現(xiàn)在已經(jīng)相對(duì)簡(jiǎn)化現(xiàn)在的編譯器開(kāi)發(fā)模式了。
作者: action08    時(shí)間: 2016-08-05 21:34
這技術(shù)禍害人,不提也罷
作者: lgp687    時(shí)間: 2016-08-06 21:30
哈哈,這本書(shū)我有原版,雖然我?guī)缀跻粋(gè)日文字也看不懂, 這是我的第一本外文原版書(shū)籍(不包括影印版)
作者: 劍魂簫心    時(shí)間: 2016-08-09 13:55
本帖最后由 劍魂簫心 于 2016-08-10 10:18 編輯

1. 你平常用哪種語(yǔ)言編寫(xiě)程序?用什么編譯環(huán)境?
我工作中主要使用C語(yǔ)言,因?yàn)槲沂亲鰃nome開(kāi)發(fā)的。編譯環(huán)境就是gcc和gtk+函數(shù)庫(kù)了,也會(huì)用到glib函數(shù)庫(kù)。自己寫(xiě)的小工具如果要界面就用Java,不要界面的話(huà)就用Python。我還會(huì)AT&T匯編語(yǔ)言,不過(guò)現(xiàn)在很少直接動(dòng)手寫(xiě)匯編,只是看匯編代碼而已。C++這門(mén)語(yǔ)言一直是我的痛,太難了,大學(xué)學(xué)的現(xiàn)在忘得干干凈凈,而且如果工作不需要的話(huà)我是永遠(yuǎn)不會(huì)學(xué)C++的......

2. 你熟悉編譯原理嗎,了解詞法分析、語(yǔ)法分析、上下文無(wú)關(guān)文法、IR、LL(k)文法、LR(k)文法等術(shù)語(yǔ)嗎?
大學(xué)學(xué)編譯原理那會(huì)兒我可是費(fèi)盡心機(jī)啊,學(xué)校的教材是國(guó)防科大出版的那本《程序設(shè)計(jì)語(yǔ)言編譯原理》,真的是很難懂,看這本書(shū)簡(jiǎn)直找虐。大名鼎鼎的龍書(shū)《編譯原理》看起來(lái)也是很有難度,后來(lái)從圖書(shū)館借出了《編譯器設(shè)計(jì)》這本書(shū),那看的是相當(dāng)爽,思路清晰還有偽代碼,堪稱(chēng)天下奇書(shū),而且這本書(shū)在我們本科校區(qū)圖書(shū)館沒(méi)有,我專(zhuān)門(mén)坐車(chē)40分鐘跑到研究生校區(qū)借來(lái)的。我還從孔夫子舊書(shū)網(wǎng)買(mǎi)了本上個(gè)世紀(jì)出版的絕版書(shū)——Kenneth C.Louden的《Compiler Construction: Principles and Practice》,這本書(shū)估計(jì)已經(jīng)成孤本了。不過(guò)一學(xué)期時(shí)間畢竟有限,也沒(méi)深入學(xué)習(xí)多少,學(xué)完中間代碼生成那部分基本就要期末考試了,而且考試內(nèi)容比較死板,還要抽出時(shí)間復(fù)習(xí)。
詞法分析、語(yǔ)法分析、上下文無(wú)關(guān)文法、IR、LL(k)文法、LR(k)文法這些術(shù)語(yǔ)是每本編譯原理書(shū)里都會(huì)講到的,在《編譯器設(shè)計(jì)》這本書(shū)里講的尤其清楚,我當(dāng)時(shí)的感覺(jué)我現(xiàn)在還記得,簡(jiǎn)直是醍醐灌頂。!不過(guò),現(xiàn)在早已忘得差不多了,畢竟工作內(nèi)容和編譯器沒(méi)有什么交集。
當(dāng)時(shí)做課程作業(yè)我還用C語(yǔ)言寫(xiě)了一個(gè)簡(jiǎn)單的計(jì)算器語(yǔ)法的詞法分析器+語(yǔ)法分析器,直接在文本文檔里寫(xiě)上一系列3/4+(1+12/6*7)=?這樣的算式,然后經(jīng)過(guò)詞法分詞、語(yǔ)法分析、文法分析后就可以算出結(jié)果,還是很有成就感的。

3. 你了解過(guò)lex/yacc嗎?使用它們做過(guò)分析嗎?
這兩個(gè)工具當(dāng)年學(xué)編譯原理時(shí)學(xué)過(guò),但是也就當(dāng)時(shí)做作業(yè)用了下,后來(lái)再也沒(méi)用過(guò)。據(jù)說(shuō)這兩個(gè)工具可以直接用來(lái)構(gòu)建出編譯器的詞法分析和語(yǔ)法分析部分,也就是說(shuō)編譯器前端靠這倆工具就能完成很大一塊功能。

4. 你想過(guò)自己設(shè)計(jì)一種語(yǔ)言,并為之設(shè)計(jì)編譯器嗎?如果你想設(shè)計(jì),那你該如何一步步的做呢?
我非常想實(shí)現(xiàn)一下c語(yǔ)言編譯器,即使是一個(gè)小的子集!禖ompiler Construction: Principles and Practice》這本書(shū)就是在最后實(shí)現(xiàn)了一個(gè)小編譯器,不過(guò)和c語(yǔ)言還是有點(diǎn)區(qū)別的。我想,學(xué)習(xí)做編譯器的過(guò)程會(huì)加深對(duì)已存在編譯器的理解,比如gcc編譯優(yōu)化的原理等等。實(shí)現(xiàn)編譯器的全過(guò)程我只知道個(gè)大概,編譯器前端里面的詞法分析、語(yǔ)法分析這兩步可以借助lex/yacc,不必完全自己重復(fù)造輪子,語(yǔ)義分析開(kāi)始就要自己做了,經(jīng)歷了中間代碼生成之后就要進(jìn)入編譯器后端了,后端包括代碼優(yōu)化和目標(biāo)代碼生成以及優(yōu)化,這會(huì)涉及與機(jī)器架構(gòu)相關(guān)的部分,那就是相當(dāng)麻煩的事情了。我對(duì)匯編層很感興趣,曾經(jīng)還專(zhuān)門(mén)找資料學(xué)習(xí)過(guò)二次遍歷匯編器(Two-pass assembler)的原理,那會(huì)兒在學(xué)一些關(guān)于內(nèi)核底層的東西,所以就順帶看了下,對(duì)理解匯編指令轉(zhuǎn)化為機(jī)器碼的過(guò)程很有幫助。

最重要的是。!編譯器/操作系統(tǒng)/計(jì)算機(jī)圖形學(xué) 這三者并稱(chēng)為計(jì)算機(jī)領(lǐng)域的三座大山,如果能有機(jī)會(huì)攀登一下那對(duì)于自身來(lái)說(shuō)將會(huì)是非常大的提高!。
作者: chenxing2    時(shí)間: 2016-08-09 22:00
1. 你平常用哪種語(yǔ)言編寫(xiě)程序?用什么編譯環(huán)境?
    用java比較多,有時(shí)用C語(yǔ)言

2. 你熟悉編譯原理嗎,了解詞法分析、語(yǔ)法分析、上下文無(wú)關(guān)文法、IR、LL(k)文法、LR(k)文法等術(shù)語(yǔ)嗎?
    編譯原理,在大學(xué)時(shí)上完課就還給老師了,一直想重新拾起來(lái)研究下,一直沒(méi)動(dòng)手....

3. 你了解過(guò)lex/yacc嗎?使用它們做過(guò)分析嗎?
    lex/yacc用過(guò)。
    寫(xiě)NoSQL數(shù)據(jù)庫(kù)引擎時(shí),需要給java調(diào)用,當(dāng)時(shí)就用lex/yacc來(lái)解析tcp傳過(guò)來(lái)的sql語(yǔ)句,復(fù)雜的SQL沒(méi)解析出來(lái),就沒(méi)再研究下去.....

4. 你想過(guò)自己設(shè)計(jì)一種語(yǔ)言,并為之設(shè)計(jì)編譯器嗎?如果你想設(shè)計(jì),那你該如何一步步的做呢?
    想實(shí)現(xiàn)一個(gè)簡(jiǎn)單的腳本語(yǔ)言,直接解析執(zhí)行的。
    沒(méi)想實(shí)現(xiàn)C這種的編譯器,需要了解底層?xùn)|西太多了,像cpu指令、匯編等等.....
    要實(shí)現(xiàn)的話(huà),要先定義關(guān)鍵字,語(yǔ)法。然后根據(jù)關(guān)鍵字、語(yǔ)法做詞法分析、語(yǔ)法等分析、文法定義等等,最后形成語(yǔ)法樹(shù),再生成目標(biāo)文件或計(jì)算結(jié)果等等
作者: niao5929    時(shí)間: 2016-08-10 10:37
有時(shí)間和精力就好好投入到GCC中吧。!
作者: EricFisher    時(shí)間: 2016-08-11 09:09
1. 你平常用哪種語(yǔ)言編寫(xiě)程序?用什么編譯環(huán)境?

c/c++, linux+vi+gcc/llvm

2. 你熟悉編譯原理嗎,了解詞法分析、語(yǔ)法分析、上下文無(wú)關(guān)文法、IR、LL(k)文法、LR(k)文法等術(shù)語(yǔ)嗎?

了解編譯原理,不過(guò)對(duì)于LL,LR沒(méi)深入學(xué)習(xí),搞不清。

3. 你了解過(guò)lex/yacc嗎?使用它們做過(guò)分析嗎?

了解,用lex/yacc寫(xiě)過(guò)簡(jiǎn)單的文件處理程序,以及匯編器。

4. 你想過(guò)自己設(shè)計(jì)一種語(yǔ)言,并為之設(shè)計(jì)編譯器嗎?如果你想設(shè)計(jì),那你該如何一步步的做呢?

做過(guò)這樣的項(xiàng)目,是基于C語(yǔ)言擴(kuò)展數(shù)據(jù)類(lèi)型和運(yùn)算,基于clang開(kāi)發(fā)的。

-------------
我覺(jué)得啊,真正設(shè)計(jì)編譯器的機(jī)會(huì)和需求不多,大多數(shù)情況就是在現(xiàn)有的基礎(chǔ)上,做個(gè)移植,增加新的功能支持,修個(gè)bug之類(lèi)的活。
弄編譯器,有三部分需要搞明白,一是語(yǔ)言,詞法,語(yǔ)法之類(lèi)的;二是體系結(jié)構(gòu),寄存器,棧,指令之類(lèi)的;三是優(yōu)化分析,控制流,數(shù)據(jù)流,指針別名,各種優(yōu)化之類(lèi)的。
最后,最關(guān)鍵的還是工程能力要強(qiáng),能把這些理論漂亮的實(shí)現(xiàn)出來(lái)。

作者: hztj2005    時(shí)間: 2016-08-13 10:19
我們國(guó)家軟件業(yè)基礎(chǔ)不扎實(shí)原因之一就是不重視編譯器的開(kāi)發(fā)。
作者: 劍魂簫心    時(shí)間: 2016-08-14 15:46
回復(fù) 11# hztj2005


    全球也只有IBM和GCC那么一些人在開(kāi)發(fā)編譯器,正如操作系統(tǒng)一樣,這些東西沒(méi)必要重復(fù)造輪子
作者: 爻易    時(shí)間: 2016-08-14 18:51
光是C語(yǔ)言的編譯器就有好多家在造,而各種編程語(yǔ)言更已經(jīng)成百上千。編譯器的設(shè)計(jì)確實(shí)不應(yīng)該用重復(fù)造輪子之類(lèi)的蹩腳理由來(lái)妖魔化,它不是少數(shù)人的專(zhuān)利,而是程序員的基礎(chǔ)技能,當(dāng)然也會(huì)作用于一個(gè)國(guó)家的軟件業(yè)基礎(chǔ)
作者: 劍魂簫心    時(shí)間: 2016-08-15 08:49
回復(fù) 13# 爻易


    我覺(jué)得程序員的技能應(yīng)該包括了解編譯原理,但無(wú)需直接做編譯器,另外據(jù)我所知,國(guó)內(nèi)的硬件廠(chǎng)商的設(shè)備依靠gcc就可以搞定,看現(xiàn)在國(guó)產(chǎn)操作系統(tǒng)的混亂狀態(tài),要是再出個(gè)國(guó)產(chǎn)編譯器,那就爆炸了,F(xiàn)在國(guó)產(chǎn)操作系統(tǒng)那群人終于意識(shí)到從頭開(kāi)干是不可行的,他們需要踩在巨人的肩膀上,于是借助Ubuntu、RedHat這樣的系統(tǒng)來(lái)定制便成了最好的途徑,我想編譯器也是如此,拿GCC做一下修改就可以了,從頭來(lái)一個(gè)這沒(méi)必要了吧。
作者: 爻易    時(shí)間: 2016-08-15 11:49
回復(fù) 14# 劍魂簫心

的確不是每個(gè)人都要做編譯器,但如果一個(gè)國(guó)家都沒(méi)人做編譯器,那就相當(dāng)不正常了。編譯器的研制相當(dāng)重要,以操作系統(tǒng)為例,當(dāng)年做unics的同時(shí),也做了編譯器,而當(dāng)時(shí)已經(jīng)有其它語(yǔ)言的編譯器了,以重復(fù)造輪子的觀(guān)點(diǎn)來(lái)看,這也是重復(fù)造輪子。

操作系統(tǒng)與編譯器結(jié)合相當(dāng)緊密,是互相促進(jìn)的關(guān)系,要么一起成功,要么一起失敗。產(chǎn)業(yè)鏈就是這么形成的!單個(gè)根據(jù)地容易被圍剿,多個(gè)根據(jù)地就能互相響應(yīng),要研制國(guó)產(chǎn)操作系統(tǒng)的話(huà),國(guó)產(chǎn)編譯器就不能拉下,不僅不會(huì)爆炸,反而能穩(wěn)定產(chǎn)業(yè)鏈。借別人的肩膀并非不行(早期階段,沒(méi)有槍?zhuān)瑳](méi)有炮,敵人給我們?cè)欤,但畢竟是借的,不是長(zhǎng)久之計(jì)(后期,天上地下海中,到處都有中國(guó)造)。

所以并非國(guó)產(chǎn)操作系統(tǒng)那群人終于意識(shí)到從頭開(kāi)干不可行,而是僅干操作系統(tǒng)這一個(gè)節(jié)點(diǎn)不可行!從點(diǎn)到鏈,才是思想認(rèn)識(shí)上的進(jìn)步

   
作者: 劍魂簫心    時(shí)間: 2016-08-15 12:40
回復(fù) 15# 爻易


    我則認(rèn)為沒(méi)有從頭做操作系統(tǒng)主要是因?yàn)殡y以形成生態(tài)環(huán)境,即使從頭搞一個(gè)內(nèi)核出來(lái),但是僅憑國(guó)內(nèi)這幾號(hào)人是無(wú)法和全球內(nèi)核黑客的力量相提并論的,沒(méi)有人來(lái)為操作系統(tǒng)開(kāi)發(fā)應(yīng)用程序如何能使其發(fā)展壯大呢。我現(xiàn)在的公司就是做國(guó)產(chǎn)系統(tǒng)的,特別令我印象深刻的是我們老大很強(qiáng)調(diào)和上游開(kāi)發(fā)社區(qū)的合作,這樣可以借助他們的力量讓我們發(fā)展的更快,僅靠我們自己是不行的,我們的能力還遠(yuǎn)遠(yuǎn)達(dá)不到要求。
    Unix誕生的年代是一個(gè)計(jì)算機(jī)技術(shù)激烈動(dòng)蕩的年代,那時(shí)候沒(méi)有成熟的編譯器,甚至還要靠匯編語(yǔ)言而且是極其原始的匯編語(yǔ)言來(lái)寫(xiě)程序,用匯編語(yǔ)言寫(xiě)出的Unix相當(dāng)難以維護(hù),在這種情況下兩位祖師爺才創(chuàng)造出了C語(yǔ)言,并用C語(yǔ)言重寫(xiě)了Unix,從此計(jì)算機(jī)領(lǐng)域天地初開(kāi),編譯器與操作系統(tǒng)兩條支線(xiàn)并行發(fā)展,20年后才最終造就了GCC和Linux的輝煌盛世,F(xiàn)在又過(guò)了20年,時(shí)代已然不同,這20年有多少技術(shù)淪為歷史塵埃,而Unix和C語(yǔ)言歷盡風(fēng)霜卻愈發(fā)昌盛,這就是精華和積淀,至少?gòu)奈业挠^(guān)點(diǎn)來(lái)看,有這么多優(yōu)秀的、沉淀了幾十年的工具可用,從頭來(lái)一套工具鏈并不會(huì)產(chǎn)生多少促進(jìn)作用,反而會(huì)花費(fèi)巨大的人力和財(cái)力。所以我才認(rèn)為個(gè)人興趣可以玩玩編譯器和操作系統(tǒng),讓國(guó)家從頭搞一套就沒(méi)必要了。
作者: 爻易    時(shí)間: 2016-08-15 13:20
回復(fù) 16# 劍魂簫心

以中國(guó)自身的市場(chǎng)容量形成生態(tài)系統(tǒng)沒(méi)問(wèn)題,能力不是一天形成的,也沒(méi)讓你現(xiàn)在就扔掉9cc,這是持久戰(zhàn)!

C編譯器出現(xiàn)之前,pascal就有了,比c還成熟,只不過(guò)不是M國(guó)產(chǎn)罷了。你所說(shuō)的,都是M國(guó)對(duì)外的口徑。而事實(shí)上,M國(guó)自己都不信你說(shuō)的那一套。微軟既造操作系統(tǒng)輪子,又重復(fù)造編譯器的輪子;9nu/9cc-lunix貌似天作之合,但9cc本身也是重復(fù)造出的輪子,而且9nu從未停止研發(fā)自己的操作系統(tǒng)內(nèi)核。。。

能力從哪里來(lái),就是從建設(shè)實(shí)踐中來(lái),必須的花費(fèi)不是浪費(fèi),要提高能力,沒(méi)花費(fèi)怎么行??jī)?yōu)秀的、沉淀了幾十年的工具我們也要有,沒(méi)有就是落后
作者: glovey    時(shí)間: 2016-08-15 14:18
記得之前做過(guò)一個(gè)編譯器的活動(dòng),感覺(jué)圖書(shū)不錯(cuò),占樓支持!
作者: yellowduck007    時(shí)間: 2016-08-15 14:24
大部分編譯環(huán)境都會(huì)把編程語(yǔ)言編譯成機(jī)器碼,也就是操作系統(tǒng)能識(shí)別的“1”“0”組成的“程序”。當(dāng)然效率可能不同。
所以,編程語(yǔ)言不一樣,但是經(jīng)驗(yàn)編譯后,出來(lái)的東西都是一樣的。

JAVA也可以用來(lái)寫(xiě)軟件的,不知道你聽(tīng)誰(shuí)說(shuō)的,而且JAVA還有一個(gè)功能是其它大部分編程語(yǔ)言沒(méi)有的,就是它可以跨平臺(tái);就是說(shuō)你寫(xiě)的程序,只要與操作系統(tǒng)無(wú)關(guān),你可以只字不改的在不同的操作系統(tǒng)編譯、運(yùn)行。
作者: helei1000    時(shí)間: 2016-08-15 14:39
編譯技術(shù)說(shuō)起來(lái)就大了,屬于計(jì)算機(jī)科學(xué)了,象咱們碼農(nóng)整天忙前忙后哪有時(shí)間精力智力深入,就是那本國(guó)內(nèi)書(shū)上概念,理解起來(lái)也不會(huì)很簡(jiǎn)單。
作者: 劍魂簫心    時(shí)間: 2016-08-16 10:28
回復(fù) 19# yellowduck007


    Java編譯出來(lái)的東西不給操作系統(tǒng),而是由JVM來(lái)解釋執(zhí)行的。
作者: 劍魂簫心    時(shí)間: 2016-08-16 10:29
回復(fù) 20# helei1000


    是啊,感覺(jué)絕大多數(shù)搞程序的很少有時(shí)間自己鉆研東西了。
作者: pinja    時(shí)間: 2016-08-16 10:41
占位學(xué)習(xí),樓上是大黃嗎?
作者: supersea    時(shí)間: 2016-08-16 10:46
打個(gè)醬油,看大家聊聊
作者: yuanxueming    時(shí)間: 2016-08-16 10:58
編譯原理,在大學(xué)時(shí)上完課就還給老師了,一直想重新拾起來(lái)研究下,一直沒(méi)動(dòng)手....

作者: devinw    時(shí)間: 2016-08-16 11:05
小白一個(gè),有意思的話(huà)題,但對(duì)編譯方面的內(nèi)容沒(méi)那么深入了解,所以不敢妄下結(jié)論吸收和學(xué)習(xí)下樓上幾位同學(xué)的回答。
作者: 爻易    時(shí)間: 2016-08-16 11:10
學(xué)如逆水行舟,不進(jìn)則退。一個(gè)寫(xiě)編譯器、操作系統(tǒng),能培養(yǎng)出什么樣的能力;另一個(gè)只是寫(xiě)些無(wú)關(guān)緊要的邊邊角角,又會(huì)培養(yǎng)出什么樣的能力?落后就是這樣形成的。。。

要破除落后,首先要解放思想,讓“妖魔”回歸本來(lái)面目


   
作者: eagleajy    時(shí)間: 2016-08-16 11:14
1)理論上,  任何語(yǔ)言寫(xiě)的代碼都可以編譯成機(jī)器碼,甚至自然語(yǔ)言也能編譯成機(jī)器碼, 前提是有這樣的編譯器存在;

2)任何語(yǔ)言的最終編譯的結(jié)果都與編譯器有關(guān), 不同編譯器編譯的結(jié)果肯定是有差別的,甚至同一種編譯器的不同版本,編譯的結(jié)果也不一樣.
作者: 爻易    時(shí)間: 2016-08-16 11:18
自然語(yǔ)言可由人工智能來(lái)處理,這也是一個(gè)重要研究方向。。。

編譯器的版本演進(jìn)反映了發(fā)展的進(jìn)步,由此,我們也就堅(jiān)持自己的發(fā)展權(quán)。。。
作者: longmanma    時(shí)間: 2016-08-16 11:23
不是編譯器存不存在,而是設(shè)計(jì)語(yǔ)言的目的回復(fù) 28# eagleajy


   
作者: 爻易    時(shí)間: 2016-08-16 11:26
爻易 發(fā)表于 2016-08-16 11:10
學(xué)如逆水行舟,不進(jìn)則退。一個(gè)寫(xiě)編譯器、操作系統(tǒng),能培養(yǎng)出什么樣的能力;另一個(gè)只是寫(xiě)些無(wú)關(guān)緊要的邊邊角 ...


從簡(jiǎn)單做起,逐步提高能力
作者: 爻易    時(shí)間: 2016-08-16 11:29
語(yǔ)言的目的是交流信息:一是與人交流,一是與機(jī)器交流,故有人的語(yǔ)言與機(jī)器的語(yǔ)言。

以人與機(jī)器為兩端,還設(shè)計(jì)有不同級(jí)別的中間語(yǔ)言以平滑轉(zhuǎn)換
作者: MMMIX    時(shí)間: 2016-08-16 15:18
本帖最后由 MMMIX 于 2016-08-16 15:20 編輯

相對(duì)于自己設(shè)計(jì)編程語(yǔ)言并實(shí)現(xiàn)對(duì)應(yīng)編譯器/解釋器,或者重新為已有編程語(yǔ)言實(shí)現(xiàn)編譯器/解釋器,或者直接研究現(xiàn)有的成熟編譯器(GCC,CLang),編譯相關(guān)技術(shù)本身還有更廣泛的用途,例如:

1. 配置文件解析
2. 規(guī)則文本的解析
3. 代碼生成
4. DSL
等等

對(duì)于編譯相關(guān)技術(shù)的學(xué)習(xí)掌握,不但可以讓你對(duì)現(xiàn)在許多軟件如何工作理解更深入,同時(shí)在面對(duì)許多問(wèn)題的時(shí)候,也能提供一條額外的、往往更高效的思路(這也正是學(xué)習(xí)編譯相關(guān)技術(shù)的意義所在)。

另外,編譯相關(guān)技術(shù)并不是屠龍之技,而是已經(jīng)滲透到整個(gè)軟件系統(tǒng)當(dāng)中,在從內(nèi)核到最頂層的用戶(hù)界面,幾乎涉及的每一個(gè)軟件模塊中都能看到它們的應(yīng)用。
作者: lgw    時(shí)間: 2016-08-16 18:07
本帖最后由 lgw 于 2016-08-16 18:07 編輯


所有語(yǔ)言最終都是編譯成機(jī)器碼
作者: 爻易    時(shí)間: 2016-08-17 07:22
最終留存的還是語(yǔ)言的兩端:給人讀的源代碼以及給機(jī)器執(zhí)行的機(jī)器碼。

相比較而言,還是源代碼更加重要,只要有源代碼,可以隨時(shí)轉(zhuǎn)換為機(jī)器碼,而反向轉(zhuǎn)換則更為困難!

由此,圍繞源代碼的控制權(quán),也會(huì)展開(kāi)一系列的合縱連橫。這也從另一方面要求我們掌握編譯器設(shè)計(jì),從點(diǎn)到鏈地發(fā)展(星火之點(diǎn)->燎原之線(xiàn))
作者: 劍魂簫心    時(shí)間: 2016-08-17 13:40
回復(fù) 23# pinja


    不不不,是柴犬~
作者: snoopygod    時(shí)間: 2016-08-18 17:05
其實(shí)如果把虛擬機(jī)看作硬件的話(huà),那之上跑的也是“機(jī)器語(yǔ)言”
作者: micromad    時(shí)間: 2016-08-18 17:11
從事IT行業(yè)兩年了,最近才知曉語(yǔ)言的編譯原理。

請(qǐng)問(wèn),為什么說(shuō) C# Java Python 等高級(jí)語(yǔ)言是虛擬機(jī)語(yǔ)言呢?

C/C++呢,他們不需要依靠所謂的虛擬機(jī)去解釋?zhuān)ǚg)的過(guò)程嗎?

C/C++編譯后 exe可執(zhí)行文件中是機(jī)器碼對(duì)吧,

Java 編譯后的 exe文件是JDK什么才認(rèn)識(shí)的代碼,通過(guò)JDK來(lái)解釋翻譯執(zhí)行對(duì)吧

(最近在研究使用Python來(lái)寫(xiě)Socket通訊,據(jù)說(shuō)性能很好)

------------------------

C/C++最終編譯的結(jié)果與編譯器有關(guān)系嗎? 比如VS編譯的或者使用其他IDE編譯。

Python呢? 是否也跟IDE有關(guān)系嗎? 可以編譯成機(jī)器碼的exe可執(zhí)行文件嗎?
作者: kissxun    時(shí)間: 2016-08-18 17:23
解釋型語(yǔ)言有哪些? 編譯型語(yǔ)言有哪些? 感覺(jué)不需要虛擬機(jī)(JDK/.NetFramework)的語(yǔ)言運(yùn)行起來(lái)性能更好。回復(fù) 38# micromad


   
作者: bacer    時(shí)間: 2016-08-18 17:30
用過(guò)debug寫(xiě)過(guò)程序就能理解 或者masm/nasm
作者: 104359176    時(shí)間: 2016-08-21 18:58
終于可以發(fā)帖了, 其實(shí)很多人都把編譯器搞復(fù)雜了, 如果用復(fù)雜的工具和復(fù)雜的思路去思考問(wèn)題, 問(wèn)題就會(huì)更加復(fù)雜.

總的來(lái)說(shuō), 編譯器技術(shù)就是將一種語(yǔ)法的文本解析 , 用另外一種語(yǔ)言來(lái)表達(dá)它的邏輯. 如果是翻譯, 就是編譯, 如果是解釋, 就是解釋器.
作者: 爻易    時(shí)間: 2016-08-26 09:52
對(duì),從簡(jiǎn)單做起,C語(yǔ)法太復(fù)雜,另外設(shè)計(jì)個(gè)語(yǔ)法簡(jiǎn)單的語(yǔ)言并實(shí)現(xiàn)之,逐步提高能力
作者: jackie_ikernel    時(shí)間: 2016-08-30 09:27
1. 你平常用哪種語(yǔ)言編寫(xiě)程序?用什么編譯環(huán)境?
  1. 碩士畢業(yè)第7年了,平時(shí)主要使用c/c++;輔助性的語(yǔ)言包括bash shell, python, ruby, lua, vimscript;這些語(yǔ)言我主要是用于一些需要腳本及快速開(kāi)發(fā)的地方,比如程序編譯(scons依賴(lài)python), ruby偶爾用來(lái)開(kāi)發(fā)一些工具,lua因?yàn)槲倚枰胠ualatex,vimscript因?yàn)槲倚枰胿im,有時(shí)候需定制化修改vim插件;java和c#很少用了,雖然很多人認(rèn)為java和c#才是現(xiàn)代語(yǔ)言;對(duì)了,golang花了很多時(shí)間學(xué)習(xí),那時(shí)候想通過(guò)它做服務(wù)端,被rob pike影響了,但最后也沒(méi)怎么學(xué)以致用。
  2. 編譯環(huán)境我主要使用GCC,也安裝了LLVM-clang,現(xiàn)在主要在linux和osx上面工作和學(xué)習(xí)。
復(fù)制代碼

2. 你熟悉編譯原理嗎,了解詞法分析、語(yǔ)法分析、上下文無(wú)關(guān)文法、IR、LL(k)文法、LR(k)文法等術(shù)語(yǔ)嗎?
  1. 編譯原理與形式語(yǔ)言這門(mén)課大學(xué)學(xué)過(guò),留在記憶里面的只有自動(dòng)機(jī),詞法分析;其它的全部忘記了。工作之后抽空了解了并研究了一些這方面的知識(shí):詞法分析即lexcial analysis(scanning),編譯器的第一步,生成詞法單元序列;語(yǔ)法分析即syntax analysis(parsing),編譯器的第二步,根據(jù)詞法單元序列生成語(yǔ)法樹(shù)(syntax tree),然后交給后面的語(yǔ)義分析去處理;上下文無(wú)關(guān)文法,LL,LR文法看過(guò)又忘了,屬于形式語(yǔ)言里面的東西吧,能記得就是LL,LR如何更好的掃描,掃描更少次數(shù)得到生成式。
復(fù)制代碼

3. 你了解過(guò)lex/yacc嗎?使用它們做過(guò)分析嗎?
  1. 了解過(guò)一些,包括flex,bison,還有boost里面的spirit;方便生成詞法分析器,語(yǔ)法分析器,cc即compiler compiler;曾經(jīng)要做點(diǎn)regex相關(guān)的東西,嘗試了一點(diǎn)點(diǎn)。
復(fù)制代碼

4. 你想過(guò)自己設(shè)計(jì)一種語(yǔ)言,并為之設(shè)計(jì)編譯器嗎?如果你想設(shè)計(jì),那你該如何一步步的做呢?
  1. 想過(guò)的;尤其在我了解過(guò)llvm項(xiàng)目之后;llvm會(huì)讓編譯器設(shè)計(jì)更簡(jiǎn)單,更加模塊化,包括更容易給end user使用編譯器的庫(kù);比如vim的插件ycm就依賴(lài)llvm-clang;
  2. 我是想設(shè)計(jì)自己的語(yǔ)言,但還沒(méi)有頭緒;我想首先要想明白設(shè)計(jì)語(yǔ)言干嘛?無(wú)論為了學(xué)習(xí)還是工作;我想設(shè)計(jì)一門(mén)類(lèi)似ruby的語(yǔ)言,我喜歡ruby的style勝過(guò)python;
  3. 我想首先我要了解一些編譯器制作工具,前期盡量通過(guò)集成利用的方式來(lái)實(shí)驗(yàn)吧,先娛樂(lè)為主,just for fun。
復(fù)制代碼

作者: folklore    時(shí)間: 2017-01-20 13:44
1. 你平常用哪種語(yǔ)言編寫(xiě)程序?用什么編譯環(huán)境?
   >> 我要書(shū), 快把書(shū)給我
2. 你熟悉編譯原理嗎,了解詞法分析、語(yǔ)法分析、上下文無(wú)關(guān)文法、IR、LL(k)文法、LR(k)文法等術(shù)語(yǔ)嗎?
   >> 我要書(shū), 快把書(shū)給我
3. 你了解過(guò)lex/yacc嗎?使用它們做過(guò)分析嗎?
   >> 我要書(shū), 快把書(shū)給我
4. 你想過(guò)自己設(shè)計(jì)一種語(yǔ)言,并為之設(shè)計(jì)編譯器嗎?如果你想設(shè)計(jì),那你該如何一步步的做呢?
   >> 我要書(shū), 快把書(shū)給我


:luya::luya::luya::luya::luya::luya:
:luya::luya::luya::luya::luya::luya::luya::luya:
:luya::luya::luya::luya::luya::luya::luya::luya:
作者: sditmaner    時(shí)間: 2017-01-20 15:08
1,強(qiáng)烈支持樓主ing……

作者: chaoswind    時(shí)間: 2017-06-24 22:42
活動(dòng)過(guò)了,貼子就空了。

才看到,補(bǔ)充幾句無(wú)關(guān)的吧。

編譯器是所有軟件的重中之重,包括os的構(gòu)建都不能離開(kāi)編譯器,確保編譯器正確是編譯器實(shí)現(xiàn)的首要目標(biāo),注意,這個(gè)目標(biāo)不是優(yōu)化。

編譯器優(yōu)化很復(fù)雜,很復(fù)雜, 看VLIW編譯器的實(shí)現(xiàn)就可以理解當(dāng)前VLIW的處理器基本上死光了。

lex/yacc/ bison這些已經(jīng)算是古老工具了。

當(dāng)前編譯器源到源的編譯反而是重點(diǎn),例如openCL 轉(zhuǎn)。。。 , verilog/VHDL轉(zhuǎn)c, system-c 等。

國(guó)際上開(kāi)發(fā)編譯器的很多,例如 ibm, intel, microsoft, gcc, llvm , sdcc,  ...... 國(guó)內(nèi)不清楚,易語(yǔ)言算一個(gè)?  其他定制gcc之類(lèi)的還是不要算。

國(guó)內(nèi)編譯器看法基本上已經(jīng)沒(méi)有曙光了。
作者: _nosay    時(shí)間: 2017-08-20 07:56
gcc源碼看不懂,求版主送我一本
作者: duanlin    時(shí)間: 2018-04-12 11:07
很久沒(méi)來(lái)了,既然看到了,我也來(lái)補(bǔ)充
1. 你平常用哪種語(yǔ)言編寫(xiě)程序?用什么編譯環(huán)境?
C/C++,VS、KeilC和GCC
2. 你熟悉編譯原理嗎,了解詞法分析、語(yǔ)法分析、上下文無(wú)關(guān)文法、IR、LL(k)文法、LR(k)文法等術(shù)語(yǔ)嗎?
熟悉。有幸參與了一個(gè)編譯器設(shè)計(jì)項(xiàng)目,對(duì)于機(jī)器運(yùn)行代碼的原理和認(rèn)識(shí)有了一刀999級(jí)的提升
3. 你了解過(guò)lex/yacc嗎?使用它們做過(guò)分析嗎?
實(shí)操過(guò)Flex/Bison。原理很簡(jiǎn)單,發(fā)明這個(gè)人的有點(diǎn)不算震撼的小聰明
4. 你想過(guò)自己設(shè)計(jì)一種語(yǔ)言,并為之設(shè)計(jì)編譯器嗎?如果你想設(shè)計(jì),那你該如何一步步的做呢?
沒(méi)想過(guò)設(shè)計(jì)一種語(yǔ)言,更沒(méi)想過(guò)為之設(shè)計(jì)編譯器。我真的老了。
編程語(yǔ)言無(wú)外乎就是變量、計(jì)算、賦值、此外配合調(diào)用分支和循環(huán),把所有細(xì)節(jié)都做一遍,做為自修的話(huà),實(shí)在浪費(fèi)時(shí)間。


吐槽:
國(guó)內(nèi)企業(yè)和單位普遍都比較浮躁、自私、貪婪,投入成本做不立即出效益的事情是不會(huì)做的。
連政府也是,啥掙錢(qián)干啥。啥掙錢(qián)呢?納稅最多的掙錢(qián),啥納稅最多?浮躁的暴利行業(yè),誰(shuí)干這個(gè)?無(wú)恥的單位和土豹子老板們。誰(shuí)成就的他們?是我們百姓自己。為什么?還是浮躁、自私、貪婪。


給后來(lái)者一些忠告:
在這細(xì)節(jié)浩如煙海的計(jì)算機(jī)世界里,如果你是做純軟應(yīng)用的,比如做WEB的或者銀行證券類(lèi)這種應(yīng)用,純玩應(yīng)用邏輯的,大可不必浪費(fèi)太多時(shí)間研究編譯器實(shí)現(xiàn)。
如果是做性能密集應(yīng)用的,比如密集計(jì)算、信號(hào)處理、圖形、嵌入式等,編譯器實(shí)現(xiàn)是絕對(duì)的必修課。
作者: rawa9999    時(shí)間: 2018-05-09 18:22
恕我直言編譯器可不是編譯原理那本書(shū),編譯器和系統(tǒng)密不可分,諸如LISP、BISCE、forch這樣的教學(xué)型語(yǔ)言,pascal那么流行,最終也是停留在大學(xué)校園里,我們現(xiàn)在見(jiàn)到的所有的操作系統(tǒng)都有UNIX V的影子,可能win95與眾不同,但是Win95開(kāi)始的所有的版本采用的都是C和C++編譯器構(gòu)建的內(nèi)核,曾經(jīng)有傳言,xp系統(tǒng)使用的是BISCE編寫(xiě)的大多數(shù)源代碼,事實(shí)上,win10的內(nèi)核仍然都是C++和C編譯器構(gòu)建的,由于微軟不開(kāi)源,誰(shuí)也不知道微軟這個(gè)編譯器的構(gòu)建原理,毋庸置疑也是當(dāng)年UNIX V的386移植版改寫(xiě)而來(lái)的。所以說(shuō),你要想真正的成為大牛,必須吃透當(dāng)年UNIX V那25000行C語(yǔ)言的內(nèi)核源代碼,那是我們現(xiàn)在計(jì)算機(jī)軟件工業(yè)的基礎(chǔ)。




歡迎光臨 Chinaunix (http://www.72891.cn/) Powered by Discuz! X3.2