Cython
PyPy 用 rpy 因此語法底層就限定靜態型別 相較 llvm 沒管這部份 程式員要自己檢查
HotPy 仿 tracemonkey 要執行數次後才做 just in time compile
再額外記錄 type 使用次數
導入 writelock
修改 runtime 內容 用 freeze/unfreeze 壓解 檔名用 sha 編碼 修改了 signature 造成 zip 能看到但解不開
pypy: 80 times faster Gentle Introduction on Youtube
Language Performance Benchmark
%cython def var2(list v): cdef double m, x m = float(sum(v)) / len(v) return sum([(x-m)**2 for x in v]) / len(v)
%timeit var2(v)
Plone
從原始碼編譯 lxml 的過程,會決定是否使用 Cython 來編譯,雖然 lxml 使用 Cython 寫成,但不同版本的 Cython 可能導致 lxml 編譯失敗,建議不要使用 Cython 來編譯。
SWIG
當 C++ 與 Python 透過 SWIG 兜在一起的時候,C++ class 把資料傳到 Python wrapper object,再由 Python wrapper object 傳遞到下一個 Python wrapper object 然後在傳到 C++ class。如果是單純想把C/C++的資源快速移到像Ruby, Python這類語言上的話SWIG是滿好用的, 但是用起來就會很C/C++的Style因為只是單純透過SWIG產生的glue code做移植的動作, 個人是偏好用C API把需要的轉化成Target Language的Style移植過去(例如:建個Class把它更高階抽象化之類。如果需要 wrap 多種語言,就得使用 SWIG 沒更好方法了。