為什麼Delphi的編譯速度如此之快?
01-05
雖然已經很久不用Delphi了,但是我依舊記得,當年的Object Pascal的編譯速度(因為看到了關於Qt編譯速度的問題)。
我記得似乎Delphi是將.pas代碼即時的編譯成.dcu文件(似乎就是Delphi的Object文件),然後啟動的時候只用link一下?求解?為何如此之快?
關於anders用彙編寫編譯器的段子我就不講了。delphi之所以編譯那麼快,跟他的語言設計得便於編譯器實現是有莫大的關係的。現在的delphi不知道怎麼樣了,當年的delphi沒有模板,整個語言是LALR(1)就可以搞定的,杜絕了所有可能讓parser變慢的可能性。至於優化和代碼生成的部分,因為對於所有語言都是一樣的,所以這隻能歸咎於anders實在太牛逼了。
說道delphi的unit,因為unit是不能循環引用的,所以一個unit發生了變化,什麼unit需要重新編譯是能算出來的。而且delphi的符號系統不複雜,unit編譯完了他完全可以把符號表直接cache下來(不知道dcu是不是起到這麼一個作用)。這個時候依賴他的unit重新編譯,也不需要編譯這個unit。C/C++因為是通過文件#include的,所以幾乎做不到這一點。VC++的precompiled header為了做到這一點,要求你必須在文件的第一行就#include "stdafx.h「,就是為了讓這個文件被include的時候,不會因為別的文件的內容而產生一些多餘的#define,從而影響文件的內容什麼的。
所以當年挖Anders需要Bill Gates親自打電話。
傳說當年anders用彙編寫編譯器的實力無人能出其右。但寫完delphi 2的32位編譯器後與團隊在方向上有了分歧,加上種種原因,去了微軟做VJ++。然後微軟的jvm速度碾壓其他廠商。Borland剩下的人無人能改anders的編譯器,於是讓C++ builder和delphi共用編譯器後端。總的來說就是anders大神的設計與實現成就的。包括語言的設計。
我恨微軟無絕期
你加了宏定義,速度就慢多啦,當然還是比別的語言要快
anders大神呀
只能說編譯器做得牛
推薦閱讀:
※對於以中序表達式為主的編程語言,不實現運算符優先順序,統一求值順序(例如從左往右)會是個好主意嗎?
※如何編寫高效的 R 語言程序?
※十一歲的兒童學編程該如何開始,有什麼合適的入門書?