C# 編譯或者解釋?

來源:互聯網
上載者:User

昨天有個哥們:寫了這麼篇文章:星期六不談技術->>走出程式員的悲哀。

 

拋開這些不談,誰能給編譯型和解釋型給下個定義。無一例外,要麼就是某人的部落格,要麼就是搜尋來的網頁,再要麼就是放個闕詞就消失,這些作為論據充分不?

昨天翻了翻龍書,也沒有給這兩個概念下詳細的定義,可見兩個概念是很難下個精確的定義的。

在<<Programming Language Pragmatics>>(by Michaei L. Scott)這本書裡面,我找到了相關的定義和說明,特摘錄如下

Compilation and Interpretation

進階語言裡一個程式的編譯和執行大概是 下面的情況:


編譯器將進階語言從原始碼翻譯成與之等價的目標程式(就相當於從中文翻譯成中文),而後就隱退了。在隨後的某個時刻,使用者啟動目標程式由作業系統執行。
實現進階語言的另外一種方式為解釋:

與編譯不同的是,解譯器在目標程式(其實根本就沒有目標程式,只是與編譯來對比)執行期間,解譯器一直隨之運行。這種執行過程完全由解譯器控制的。
從效果上看,解譯器實現了一台“虛擬電腦”,其“機器語言”就是進階語言,解譯器一次讀入一條或多條語句,按照其自身規定的方式去執行相應的操作。
一般說來,解釋比編譯有著很好的靈活性;編譯一般有著較好的效能。
但是有些語言確是採用了兩者的混合形式:

書中的原文:
”如果初始階段的翻譯器比較簡單,我們就說這個語言是“解釋的”。如果翻譯器很複雜,我們就說這一語言是“編譯的”。
現在兩者的區分變得有些模糊了,因為“簡單”和“複雜”都是修飾性術語,也因為完全可能出現用一個編譯器(複雜的翻譯過程)產生代碼,
而後又由一個複雜的虛擬機器(解譯器)執行。對於最後這種情況,如果翻譯器對程式做了徹底的分析(而不是做某種“機械的”變換),而且有關
的中繼語言程式與來源程式並沒有很強的相似性,我們還是說這個語言是編譯的。這兩種特性----徹底的分析和非平凡的變換-----是刻畫編譯方式的標誌性特徵。“

根據以上標準,首先CSC只是對C#到IL做”機械“的翻譯,而且C#和IL之間有很強的相似性,因為兩者的程式碼幾乎可以100%相互轉換(比如reflector可以將C#反編成IL,也可以將IL反編為C#)。
您認為呢?

PS:再者某些人認為的ngen和cache程式集其實也是支援C#是解釋語言的結論,因為編譯型語言因為效能的天然因素是不需要這些手段的。
也許我是錯的,請您不吝賜教,感激涕零.
本人禁止了不負責任的匿名評論,請大家海涵。

郵件來自scott教授:
 

> My problem is that: when I reading the example 1.6 Mixing complication

> and interpretation, according this definition in your words: “These

> two characteristics--thorough analysis and nontrivial transformation

> --

> are the hallmarks of compilation.”,

> It confused me that if the C# language is  complication language or

> not.  As far as I know, the C# first translate C# to IL(Intermediate

> Language), and when the application is executing, the second compiler

> JITTTER will compile the IL to binary code.

> Based on your definition, I think  C# is belong to interpretation

> language, because:

> 1. C# to IL is a simple translation process, IL is a high level

> language 2. C# and IL has lots of similar language filters, they can

> be transformed to each other freely

 

Actually both the translators you mention are real compilers.  One compiles from C# to CIL; the other compiles fro CIL to machine code.

Both transformations are nontrivial, and both involve detailed analysis of the source.

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.