編譯器70
Ⅰ 交叉編譯器的發展歷史
20世紀50年代,IBM的John Backus帶領一個研究小組對FORTRAN語言及其編譯器進行開發。但由於當時人們對編譯理論了解不多,開發工作變得既復雜又艱苦。與此同時,Noam Chomsky開始了他對自然語言結構的研究。他的發現最終使得編譯器的結構異常簡單,甚至還帶有了一些自動化。Chomsky的研究導致了根據語言文法的難易程度以及識別它們所需要的演算法來對語言分類。正如所稱的Chomsky架構(Chomsky Hierarchy),它包括了文法的四個層次:0型文法、1型文法、2型文法和3型文法,且其中的每一個都是其前者的特殊情況。2型文法(或上下文無關文法)被證明是程序設計語言中最有用的,而且今天它已代表著程序設計語言結構的標准方式。分析問題(parsing problem,用於上下文無關文法識別的有效演算法)的研究是在60年代和70年代,它相當完善的解決了這個問題。它已是編譯原理中的一個標准部分。
有限狀態自動機(Finite Automation)和正則表達式(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系統開發)是這其中的佼佼者。
在20世紀70年代後期和80年代早期,大量的項目都貫注於編譯器其它部分的生成自動化,這其中就包括了代碼生成。這些嘗試並未取得多少成功,這大概是因為操作太復雜而人們又對其不甚了解。
編譯器設計最近的發展包括:首先,編譯器包括了更加復雜演算法的應用程序它用於推斷或簡化程序中的信息;這又與更為復雜的程序設計語言的發展結合在一起。其中典型的有用於函數語言編譯的Hindley-Milner類型檢查的統一演算法。其次,編譯器已越來越成為基於窗口的交互開發環境(Interactive Development Environment,IDE)的一部分,它包括了編輯器、連接程序、調試程序以及項目管理程序。這樣的IDE標准並沒有多少,但是對標準的窗口環境進行開發已成為方向。另一方面,盡管在編譯原理領域進行了大量的研究,但是基本的編譯器設計原理在近20年中都沒有多大的改變,它正迅速地成為計算機科學課程中的中心環節。
在20世紀90年代,作為GNU項目或其它開放源代碼項目標一部分,許多免費編譯器和編譯器開發工具被開發出來。這些工具可用來編譯所有的計算機程序語言。它們中的一些項目被認為是高質量的,而且對現代編譯理論感興趣的人可以很容易的得到它們的免費源代碼。
大約在1999年,SGI公布了他們的一個工業化的並行化優化編譯器Pro64的源代碼,後被全世界多個編譯器研究小組用來做研究平台,並命名為Open64。Open64的設計結構好,分析優化全面,是編譯器高級研究的理想平台。
Ⅱ python速度編譯神器學生來看
Python速度編譯神器快來體驗吧
Python速度編譯神器
Python的運行速度快嗎?雖說不同場景不同定論, 但整體而言
, 它沒有C、Java快。這也導致Python憑借可讀性、簡單易
上手、良好的生態系統橫行AI領域時,一提到速度,就成為眾
多開發者頭疼的問題。
為了解決這一難題,麻省理工學院的計算機科學家出手了,他
們共同研發了一種名為Codon的Python編譯器, 可以將
Python代碼轉化為本地機器代碼, 而不會對運行時的性能產生
影響。
當前, Codon已經在Git Hub上開源:https:
//github.com/exaloop/codon, 斬獲6300個Star。
1、Codon與C/C++性能相當
"在單線程上, 比Python的典型速度提高了10-100倍或更多,
"Codon repo寫道, "Codon的性能通常與C/C++的性能相當
(有時甚至更好)。"
codon
與Python不同的是, Codon支持本地多線程, 這可以使速度
提高許多倍。
Codon最初是作為一個在Python中創建高性能特定領域語言
(DSL, domain-specific language) 的框架而開發的。DSL
是專注於特定目的的語言, 而不是像Python或C這樣的通用
編程語言。
據官方Git Hub repo透露, Codon源於Seq項目, 後者是一個
用於生物信息學和遺傳學的DSL, 現如今它已經成長為一個與
Python 3基本兼容的語言編譯器。
近期, 外媒The Register通過該工具的研究團隊內部最新分享
了一個關於Codon的論文。
這篇論文指出, "與其他面向性能的Python實現(如PyPy或
Numba) 不同, Codon是作為一個獨立的系統從頭開始構建的
, 它可以提前編譯為靜態可執行文件, 並且不與現有的Python
運行時(如CPython或RPython) 綁定執行。因此, Codon
可以實現更好的性能,並克服運行時的特定問題,如全局解釋
器鎖"。
2、測試
那麼Codon是否真的如說的那樣快?在Codon論壇上, 一位
開發者進行了測試:
CPython 3.11
PyPy 7.3.9
Codon compiled
Codon with python interpreter
最終發現, 一個簡單的Codon編譯的斐波那契腳本比CPython
版本快70多倍。
據Codon官方文檔顯示, 雖然Codon的語法和語義與Python
的幾乎相同,但還是有一些值得一提的區別,如數據類型方面
整數。Codon的int是一個64位有符號的整數, 而Python
的(在版本3之後) 可以是任意大的。然而Codon通過Int[N]
支持更大的整數,其中N是位寬。
字元串。Codon目前使用ASCII字元串, 與Python的
unicode字元串不同。
字典。Codon的字典類型不保留插入順序, 與Python 3.6的
不同。
此外, Codon和Python在類型檢查、數值運算、模塊等維度
還有些許的不同, 更詳細的內容可參考:https:
//docs.exaloop.io/codon/general/differences據悉, Codon
已經被商業化地應用在金融和生物信息學、深度學習等領域。
Ⅲ 編譯技術的發展歷程
1954年至1957年間,IBM的John Backus帶領一個小組開發FORTRAN語言及其編譯器,使得上面的擔憂不必要了。
但由於當時處理中所涉及到的大多數程序設計語言的翻譯並不為人所掌握,所以這個項目的成功也伴隨著巨大的辛勞。
幾乎與此同時,人們也在開發著第一個編譯器,Noam Chomsky開始自然語言結構的研究。使得編譯器結構異常簡單,甚至還帶有了一些自動化。
Chomsky的研究導致了根據語言文法(grammar,結構規則)的難易程度以及識別它們所需的演算法來為語言分類。文法有4個層次:0型、1型、2型和3型文法,且其中的每一個都是其前者的專門化。2型(或上下文無關文法context-free grammar)是程序設計語言中最有用的,代表著程序設計語言結構的標准方式。
人們接著又深化了生成有效的目標代碼的方法,這就是最初的編譯器,它們被一直使用至今。人們通常將其誤稱為優化技術(optimization technique),但因其從未真正地得到過被優化了的目標代碼而僅僅改進了它的有效性,因此實際上應稱作代碼改進技術(code improvement technique)。
在70年代後期和80年代早期,大量的項目都關注於編譯器其他部分的生成自動化,這其中就包括了代碼生成。這些嘗試並未取得多少成功,這大概是因為操作太復雜而人們又對其不甚了解。