㈠ 編譯器是怎麼被編譯出來的
我們要在Y系統上做一個C語言的編譯器,假定:X與Y是不同的兩種計算機,其指令系統不兼容。考慮以下幾種情況:
Case 1: Y上沒有C語言編譯器,但X系統上有。
那麼我們可以先在X系統上開發一個針對Y系統的C語言交叉編譯器。然後用這個交叉編譯器重新編譯已有的這個C編譯器的源代碼,就可以得到能在Y系統上運行的C語言編譯器了。(交叉編譯器:在X系統上運行的編譯器,但編譯出來的目標代碼在Y系統上運行。嵌入式平台上的程序基本都是交叉編譯得到的,因為嵌入式平台上很少會有自己的編譯器)
Case 2: X,Y上都沒有C語言編譯器,但有另一種語言的編譯器。
a.我們可以先劃出C語言的一個子集,這個子集必須滿足兩個條件:首先,必須足夠簡單,簡單到可以用另一種語言來編寫接受這個子集的編譯器;其次,必須足夠強大,強大到用這個語言子集就可以編寫出接受C語言的編譯器。(你一定奇怪為什麼一個語言的子集就能寫出接收整個語言的編譯器,呵呵。我猜是因為一個語言的很多復雜特性都是由簡單特性構成的,就像一個struct結構完全可以用幾個定義在一起的簡單變數代替實現;而且,編譯器的實現往往不會用到這個語言的高級特性,需要用的都加到那個子集里就行。)
b.再用另一種語言編寫一個能接受這個C語言子集的編譯器,只要保證可以在Y系統上正確運行就行,並不對其效率作要求,因為基本上它只被用一次。
c.然後,用C語言的子集編寫一個在Y系統上的C語言編譯器,用上一步得到的編譯器編譯得到可用的Y系統上的C編譯器。
㈡ 什麼編譯器是首個中國公司開發出來的具有世界影響力的編譯器
是化為公司開發出來的方舟編譯器
㈢ 小米手機會不會用華為的方舟編譯器
答案是不會!至少小米手機短期內不會使用方舟編譯器。首先,方舟編譯器開源的,它只是一個編譯工具,主要給開發人員使用,理論上只要編譯好APP之後,就可以在所有Android核心的手機上運行。不過由於目前方舟編譯器還只是部分開源,工具鏈和運行時庫還沒有公布完整的代碼,所以小米的開發人員現在想用也用不了,只有等方舟編譯器繼續開源、完善之後,小米等其它手機廠商才能夠使用。
如果未來方舟編譯器能夠進一步完善,比如真的和宣傳的那樣,大大提高系統的流暢度和應用的打開速度,讓用戶感受到切切所說的變化。甚至在同一價位、相同的配置,華為手機如果能夠做到比其它友商競品更快、更流暢。那麼方舟編譯器以及相關技術也自然會受到其它廠商的重視,甚至直接拿去使用也是有可能的。所以華為想要推廣方舟編譯器,關鍵還是在於要給用戶帶來更好的體驗,用戶的口碑上來了,其它友商自然也會選擇和華為合作。
㈣ 編譯器的發展史
編譯器
編譯器,是將便於人編寫,閱讀,維護的高級計算機語言翻譯為計算機能識別,運行的低級機器語言的程序。編譯器將源程序(Source program)作為輸入,翻譯產生使用目標語言(Target language)的等價程序。源程序一般為高級語言(High-level language),如Pascal,C++等,而目標語言則是匯編語言或目標機器的目標代碼(Object code),有時也稱作機器代碼(Machine code)。
一個現代編譯器的主要工作流程如下:
源程序(source code)→預處理器(preprocessor)→編譯器(compiler)→匯編程序(assembler)→目標程序(object code)→連接器(鏈接器,Linker)→可執行程序(executables)
目錄 [隱藏]
1 工作原理
2 編譯器種類
3 預處理器(preprocessor)
4 編譯器前端(frontend)
5 編譯器後端(backend)
6 編譯語言與解釋語言對比
7 歷史
8 參見
工作原理
翻譯是從源代碼(通常為高級語言)到能直接被計算機或虛擬機執行的目標代碼(通常為低級語言或機器言)。然而,也存在從低級語言到高級語言的編譯器,這類編譯器中用來從由高級語言生成的低級語言代碼重新生成高級語言代碼的又被叫做反編譯器。也有從一種高級語言生成另一種高級語言的編譯器,或者生成一種需要進一步處理的的中間代碼的編譯器(又叫級聯)。
典型的編譯器輸出是由包含入口點的名字和地址以及外部調用(到不在這個目標文件中的函數調用)的機器代碼所組成的目標文件。一組目標文件,不必是同一編譯器產生,但使用的編譯器必需採用同樣的輸出格式,可以鏈接在一起並生成可以由用戶直接執行的可執行程序。
編譯器種類
編譯器可以生成用來在與編譯器本身所在的計算機和操作系統(平台)相同的環境下運行的目標代碼,這種編譯器又叫做「本地」編譯器。另外,編譯器也可以生成用來在其它平台上運行的目標代碼,這種編譯器又叫做交叉編譯器。交叉編譯器在生成新的硬體平台時非常有用。「源碼到源碼編譯器」是指用一種高級語言作為輸入,輸出也是高級語言的編譯器。例如: 自動並行化編譯器經常採用一種高級語言作為輸入,轉換其中的代碼,並用並行代碼注釋對它進行注釋(如OpenMP)或者用語言構造進行注釋(如FORTRAN的DOALL指令)。
預處理器(preprocessor)
作用是通過代入預定義等程序段將源程序補充完整。
編譯器前端(frontend)
前端主要負責解析(parse)輸入的源程序,由詞法分析器和語法分析器協同工作。詞法分析器負責把源程序中的『單詞』(Token)找出來,語法分析器把這些分散的單詞按預先定義好的語法組裝成有意義的表達式,語句 ,函數等等。 例如「a = b + c;」前端詞法分析器看到的是「a, =, b , +, c;」,語法分析器按定義的語法,先把他們組裝成表達式「b + c」,再組裝成「a = b + c」的語句。 前端還負責語義(semantic checking)的檢查,例如檢測參與運算的變數是否是同一類型的,簡單的錯誤處理。最終的結果常常是一個抽象的語法樹(abstract syntax tree,或 AST),這樣後端可以在此基礎上進一步優化,處理。
編譯器後端(backend)
編譯器後端主要負責分析,優化中間代碼(Intermediate representation)以及生成機器代碼(Code Generation)。
一般說來所有的編譯器分析,優化,變型都可以分成兩大類: 函數內(intraproceral)還是函數之間(interproceral)進行。很明顯,函數間的分析,優化更准確,但需要更長的時間來完成。
編譯器分析(compiler analysis)的對象是前端生成並傳遞過來的中間代碼,現代的優化型編譯器(optimizing compiler)常常用好幾種層次的中間代碼來表示程序,高層的中間代碼(high level IR)接近輸入的源程序的格式,與輸入語言相關(language dependent),包含更多的全局性的信息,和源程序的結構;中層的中間代碼(middle level IR)與輸入語言無關,低層的中間代碼(Low level IR)與機器語言類似。 不同的分析,優化發生在最適合的那一層中間代碼上。
常見的編譯分析有函數調用樹(call tree),控制流程圖(Control flow graph),以及在此基礎上的 變數定義-使用,使用-定義鏈(define-use/use-define or u-d/d-u chain),變數別名分析(alias analysis),指針分析(pointer analysis),數據依賴分析(data dependence analysis)等等。
上述的程序分析結果是編譯器優化(compiler optimization)和程序變形(compiler transformation)的前提條件。常見的優化和變新有:函數內嵌(inlining),無用代碼刪除(Dead code elimination),標准化循環結構(loop normalization),循環體展開(loop unrolling),循環體合並,分裂(loop fusion,loop fission),數組填充(array padding),等等。 優化和變形的目的是減少代碼的長度,提高內存(memory),緩存(cache)的使用率,減少讀寫磁碟,訪問網路數據的頻率。更高級的優化甚至可以把序列化的代碼(serial code)變成並行運算,多線程的代碼(parallelized,multi-threaded code)。
機器代碼的生成是優化變型後的中間代碼轉換成機器指令的過程。現代編譯器主要採用生成匯編代碼(assembly code)的策略,而不直接生成二進制的目標代碼(binary object code)。即使在代碼生成階段,高級編譯器仍然要做很多分析,優化,變形的工作。例如如何分配寄存器(register allocatioin),如何選擇合適的機器指令(instruction selection),如何合並幾句代碼成一句等等。
編譯語言與解釋語言對比
許多人將高級程序語言分為兩類: 編譯型語言 和 解釋型語言 。然而,實際上,這些語言中的大多數既可用編譯型實現也可用解釋型實現,分類實際上反映的是那種語言常見的實現方式。(但是,某些解釋型語言,很難用編譯型實現。比如那些允許 在線代碼更改 的解釋型語言。)
歷史
上世紀50年代,IBM的John Backus帶領一個研究小組對FORTRAN語言及其編譯器進行開發。但由於當時人們對編譯理論了解不多,開發工作變得既復雜又艱苦。與此同時,Noam Chomsky開始了他對自然語言結構的研究。他的發現最終使得編譯器的結構異常簡單,甚至還帶有了一些自動化。Chomsky的研究導致了根據語言文法的難易程度以及識別它們所需要的演算法來對語言分類。正如現在所稱的Chomsky架構(Chomsky Hierarchy),它包括了文法的四個層次:0型文法、1型文法、2型文法和3型文法,且其中的每一個都是其前者的特殊情況。2型文法(或上下文無關文法)被證明是程序設計語言中最有用的,而且今天它已代表著程序設計語言結構的標准方式。分析問題(parsing problem,用於上下文無關文法識別的有效演算法)的研究是在60年代和70年代,它相當完善的解決了這個問題。現在它已是編譯原理中的一個標准部分。
有限狀態自動機(Finite Automaton)和正則表達式(Regular Expression)同上下文無關文法緊密相關,它們與Chomsky的3型文法相對應。對它們的研究與Chomsky的研究幾乎同時開始,並且引出了表示程序設計語言的單詞的符號方式。
人們接著又深化了生成有效目標代碼的方法,這就是最初的編譯器,它們被一直使用至今。人們通常將其稱為優化技術(Optimization Technique),但因其從未真正地得到過被優化了的目標代碼而僅僅改進了它的有效性,因此實際上應稱作代碼改進技術(Code Improvement Technique)。
當分析問題變得好懂起來時,人們就在開發程序上花費了很大的功夫來研究這一部分的編譯器自動構造。這些程序最初被稱為編譯器的編譯器(Compiler-compiler),但更確切地應稱為分析程序生成器(Parser Generator),這是因為它們僅僅能夠自動處理編譯的一部分。這些程序中最著名的是Yacc(Yet Another Compiler-compiler),它是由Steve Johnson在1975年為Unix系統編寫的。類似的,有限狀態自動機的研究也發展了一種稱為掃描程序生成器(Scanner Generator)的工具,Lex(與Yacc同時,由Mike Lesk為Unix系統開發)是這其中的佼佼者。
在70年代後期和80年代早期,大量的項目都貫注於編譯器其它部分的生成自動化,這其中就包括了代碼生成。這些嘗試並未取得多少成功,這大概是因為操作太復雜而人們又對其不甚了解。
編譯器設計最近的發展包括:首先,編譯器包括了更加復雜演算法的應用程序它用於推斷或簡化程序中的信息;這又與更為復雜的程序設計語言的發展結合在一起。其中典型的有用於函數語言編譯的Hindley-Milner類型檢查的統一演算法。其次,編譯器已越來越成為基於窗口的交互開發環境(Interactive Development Environment,IDE)的一部分,它包括了編輯器、連接程序、調試程序以及項目管理程序。這樣的IDE標准並沒有多少,但是對標準的窗口環境進行開發已成為方向。另一方面,盡管近年來在編譯原理領域進行了大量的研究,但是基本的編譯器設計原理在近20年中都沒有多大的改變,它現在正迅速地成為計算機科學課程中的中心環節。
在九十年代,作為GNU項目或其它開放源代碼項目的一部分,許多免費編譯器和編譯器開發工具被開發出來。這些工具可用來編譯所有的計算機程序語言。它們中的一些項目被認為是高質量的,而且對現代編譯理論感性趣的人可以很容易的得到它們的免費源代碼。
大約在1999年,SGI公布了他們的一個工業化的並行化優化編譯器Pro64的源代碼,後被全世界多個編譯器研究小組用來做研究平台,並命名為Open64。Open64的設計結構好,分析優化全面,是編譯器高級研究的理想平台。
編譯器是一種特殊的程序,它可以把以特定編程語言寫成的程序變為機器可以運行的機器碼。我們把一個程序寫好,這時我們利用的環境是文本編輯器。這時我程序把程序稱為源程序。在此以後程序員可以運行相應的編譯器,通過指定需要編譯的文件的名稱就可以把相應的源文件(通過一個復雜的過程)轉化為機器碼了。
編譯器工作方法
首先編譯器進行語法分析,也就是要把那些字元串分離出來。然後進行語義分析,就是把各個由語法分析分析出的語法單元的意義搞清楚。最後生成的是目標文件,我們也稱為obj文件。再經過鏈接器的鏈接就可以生成最後的可執行代碼了。有些時候我們需要把多個文件產生的目標文件進行鏈接,產生最後的代碼。我們把一過程稱為交叉鏈接。
㈤ 小米將在下周一召開發布會!除了有紅米note9,MIUI12也要來了!
提到目前國產手機定製ROM最好用的,相信大多數用戶都會想到MIUI。而要說到國產手機中哪一個廠商的性價比最高,當然也要數小米旗下的紅米了。可以說將兩者結合,使得紅米在近幾年憑著超高的性價比以及MIUI的人性化系統一直受到了一大批米粉的喜愛。而目前來說,距離紅米K30Pro發布已經有一段時間了,那麼最近還會不會有什麼紅米新品發布呢?
不錯,就在最近,根據一些小米高管以及一些數碼博主的透露,紅米note9也即將在周一也就是4月27號這天召開發布會正式發布。我們還不能確定是發布一款手機還是兩款手機,不過更令我們驚喜的是,MIUI12也將在這一天正式發布!
首先我們來先來說說紅米note9系列。我們都知道這次的紅米note9將搭載的是聯發科天璣800處理器。不過前段時間OPPO的一款新品OPPO A92s也即將搭載這款處理器正式開售。不過根據之前數碼博主透露,紅米將會是首次搭載這款晶元發布的手機。如此看來27號這場發布會也是實錘了。除此之外,這次的紅米note9將搭載超大電池,支持22.5W快充,採用後置浴霸四攝,挖孔屏幕的設計。而在售價方面極有可能會定價在1500元左右。那麼這樣的話,可能就會與最近即將發布的榮耀10X做一個正面的競爭。而相信紅米note9在對比中也不會輸。
而接下來再讓我們說說最新的MIUI12。去年的MIUI11與小米9Pro一起發布。不過實話實說,MIUI11較比於MIUI10的提升並不大,用戶也是戲稱為MIUI10.5。而這次的MIUI12將帶來一些全新的與眾不同的設計。據說這次的MIUI12提升也是巨大,將會有新的相機界面與新的深色模式,桌面圖標以及 游戲 模式。並且也會有新的系統動畫,同時也會添加全新的小米編輯器。而這個功能也就與華為的方舟編譯器的功能差不多。
而根據一些小米用戶的反饋,目前在小米手機的最後一款MIUI開發版也已經正式停止推送了。那麼這也就表明MIUI12也會在一個月內發布。並且這次的MIUI12也會在預計會在29號開始內測報名。相信這樣在一定程度上也會為小米的手機再次迎來一波高銷量。
人們都說近幾年小米的MIUI也逐漸要被OPPO的ColorOS7以及華為的EMUI10所超越。而這次的MIUI12,可以說小米也要向國產其他手機廠商證明,小米的MIUI才是目前國產手機的最強定製UI系統!
可以說這次不僅帶來了全新的紅米手機,也帶來了全新系統MIUI12。這次足以讓每一個米粉而感到歡呼雀躍了。而4月27號的發布會距離我們也已經不遠了,那麼在此之前,你是更期待紅米note9系列,還是全新的MIUI12呢?
㈥ 請問,編譯軟體最早是由誰發明出來的
Grave of Grace
後記
Grace Hopper是個非常amazing的人 (常被稱為Amazing Grace),崇拜她的人相當多。雖然她的事跡很多,但是還有很多有類似事跡的人並沒有像她這樣受到眾人的崇拜。由其中一點我們可以看出來:從1947年開始 (二戰結束後第二年),她獲得了第一個榮譽博士學位 (賓州大學),從那以後,她先後被40多所大學授予榮譽博士學位,其中包括芝加哥大學、華盛頓大學、馬里蘭大學等知名學府。各種婦女社會團體和學術組織都曾授予Grace各種稱號和獎勵。1991年,布希總統在白宮授予她的「美國國家技術獎」 (National Medal of Technology) 是其中的最高獎項,她也是至今惟一獲此殊榮的美國女性。她的名言有很多,她自己最喜歡的,也是她最喜歡對所謂的「年輕人」說的 (在她年老時,她所謂的年輕人就是「年齡不到我的一半的人就叫做年輕人」),這句話是:
「A ship in port is safe, but that is not what ships are built for.」
語錄
下面Grace的語錄中有幾句比較有意思的話。
From then on, when anything went wrong with a computer, we said it had bugs in it.
The most dangerous phrase in the language is, 「We』ve always done it this way.」
Humans are allergic to change. They love to say, 「We』ve always done it this way.」 I try to fight that. That』s why I have a clock on my wall that runs counter-clockwise.
Leadership is a two-way street, loyalty up and loyalty down. Respect for one』s superiors; care for one』s crew.
One accurate measurement is worth a thousand expert opinions.
Someday, on the corporate balance sheet, there will be an entry which reads, 「Information」; For in most cases, the information is more valuable than the hardware which processes it.
We』re flooding people with information. We need to feed it through a processor. A human must turn information into intelligence or knowledge. We』ve tended to forget that no computer will ever ask a new question.
To me programming is more than an important practical art. It is also a gigantic undertaking in the foundations of knowledge.
They told me computers could only do arithmetic.
In pioneer days they used oxen for heavy pulling, and when one ox couldn』t budge a log, they didn』t try to grow a larger ox. We shouldn』t be trying for bigger computers, but for more systems of computers.
Life was simple before World War II. After that, we had systems.
We went overboard on management and forgot about leadership. It might help if we ran the MBAs out of Washington.
At any given moment, there is always a line representing what your boss will believe. If you step over it, you will not get your budget. Go as close to that line as you can.
I seem to do a lot of retiring.
I handed my passport to the immigration officer, and he looked at it and looked at me and said, 「What are you?」
參考
維基網路:
http://en.wikipedia.org/wiki/Grace_Hopper
國立中央大學數學系:
http://li.math.ncu.e.tw/bcc16/pool/3.06.shtml
耶魯大學計算機系:
http://cs-www.cs.yale.e/homes/tap/Files/hopper-story.html
計算機先驅:
http://202.207.0.245:9001/jisuanjifazhanshi/xianqu/18.htm
This entry was posted in網路3Cand taggedcompiler,debug,Grace Murray Hopper,傳記,發明,編譯器,起源. Bookmark thepermalink.Post a commentor leave a trackback:Trackback URL.
㈦ 蘋果系統和安卓系統哪個先出來的
安卓系統是先出來的。
安卓操作系統最初2003年10月由Andy Rubin開發,主要支持手機。2005年8月安卓系統由Google收購注資。蘋果系統最早於由蘋果公司在2007年1月9日的Macworld大會上公布。
㈧ 首個中國公司開發出來的具有世界影響力的編譯器是什麼
是華為公司的方舟編譯器。