2011年7月27日 星期三

《CPython 源碼剖析》讀書心得 - ch1 - bytecode

複習一下過年時讀的筆記, 若妄想等我全讀完再整理成文章, 大概這輩子都不會有結果吧。還是讀個一個段落就隨手寫寫, 比較實際。我相當地不熟這個領域, 有錯還請指正。

ch1 開頭只提了一點, 剛好幫我串起了之前的一些記憶。想到其實任何語言都可以自己搞個 VM 和 bytecode,
接著在針對各種硬體實作 VM, 就能跨平台了,
當然, 那些用到硬體相關 函式庫/指令 的程式碼, 就無法跨平台

所以, JVM 之所在在跨平台這點上被特別提及,
主要應該是 JIT 讓 java bytecode 執行得很有效率,
且主要的硬體裝置都有支援, 才會覺得很威。而容易實作 JIT 的原因, 和 bytecode 的設計有很大關聯,
像 JVM 針對 stack machine 不用 register 就省掉不少工
( 但 Anroid 用的 Dalvik 為了快, 又加回使用 register 的設計 )。

而其它語言一開始沒規劃好 bytecode 轉 native code 這段,
後期要補就比較辛苦:

  • 像 Unladen Swallow 想 100% 支援 Python 3 的 CPython,
    得在既有的 python object 上多加其它欄位存 JIT 相關資訊,
    結果是速度有可能變快, 但占用的記憶體空間會變更大
  • PyPy 沒要求 100% 相容 Python, 也沒要求相容 CPython, 做起來省了不少工, 較易發揮
  • JavaScript 的 V8 雖然很威, 也有不少限制, 像是它沒實作 multi-thread, 在瀏覽器端不成問題, 換到平常的應用時, 就會有點綁手綁腳的。《Is node.js best for Comet?提到Plurk 用 node.js 卻因 gc 也在 main process 裡執行, 造成的效率問題。

ps. Unladen Swallow 和 PyPy 是很久以前和 Scott 聊到的, 我沒深入看相關文件, 可能會有誤解。另外, 半年前寫這份筆記後沒多久, 就看到《Unladen Swallow Retrospective》, 科技變遷的太快, 令人不勝唏噓。還沒開始讀相關的文獻, 就聽到它掛掉的消息...。

沒有留言:

張貼留言

在 Fedora 下裝 id-utils

Fedora 似乎因為執行檔撞名,而沒有提供 id-utils 的套件 ,但這是使用 gj 的必要套件,只好自己編。從官網抓好 tarball ,解開來編譯 (./configure && make)就是了。 但編譯後會遇到錯誤: ./stdio.h:10...