「解釋」和「編譯」語言之間的界限現在真的很模糊。例如,Python在看到源代碼時所做的第一件事就是將其編譯成字節碼錶示形式,這與Java在編譯類文件時的做法基本相同。這是* .pyc文件包含的內容。然後,python運行時會執行字節碼而不會引用原始源代碼。傳統上,純粹的解釋語言會在執行程序時連續引用源代碼。
在構建語言時,建立可以實現更高級別功能的堅實基礎是一種很好的方法。如果你有一個穩定,快速的字符串處理系統,那麼語言設計者可以(也應該)在基本運行時之外實現諸如stripslashes()之類的東西。這是因爲至少幾個原因:
- 語言設計者可以顯示語言足夠靈活來處理這類任務。
- 語言設計師實際上是用語言編寫真實代碼,該代碼進行了測試,因此表明該基礎是堅實的。
- 其他人可以更輕鬆地閱讀,借閱甚至更改高級功能,而無需構建甚至理解語言核心。
僅僅因爲像Python這樣的語言編譯爲字節碼並執行它並不意味着它很慢。沒有理由說爲什麼有人不能爲Python編寫一個Just-In-Time(JIT)編譯器,就像Java和.NET已經做的那樣,以進一步提高性能。事實上,IronPython直接將Python編譯爲.NET字節碼,然後使用.NET系統(包括JIT)運行。
要直接回答你的問題,語言設計者唯一需要在運行時使用語言來實現一個函數的時候(比如Python中的C語言)就是最大化該函數的性能。這就是爲什麼諸如正則表達式解析器之類的模塊是用C語言而不是本地Python編寫的。另一方面,像getopt.py這樣的模塊在純Python中實現,因爲它可以在那裏完成,並且使用相應的C庫沒有任何好處。
而不是「利用」編譯語言,爲什麼不「利用」它或「利用它」呢?我們不要增加英文語言關鍵字的數量,除非我們必須:) – MarkJ 2009-01-28 12:57:15