![](/img/trans.png)
[英]Bad results with Emscripten compiling C++ to JavaScript & Asm.js
[英]Tools for compiling Python / Boo / Ruby like syntax to C / C++ / LLVM / Javascript (using JS ArrayBuffer for speed)
我正在嘗試將使用Pythonic語義編寫的代碼自動編譯/轉換為本機和快速Javascript代碼。
有什么工具可以做到這一點,可以像Java等一樣提供良好的調試支持?
有沒有人這樣做過?
為什么?
我正在嘗試用復雜的主循環,時間軸,一些物理模擬和一些復雜的交互來編寫一些可視化代碼。 IE:它是一個實際的CPU綁定問題。
使用Javascript編寫並在其瀏覽器環境中進行測試比在一個體面的IDE中運行的Java,.NET或Python更難調試。 但是對於使用復雜的客戶端代碼進行實際的大規模Web開發,至少需要編譯為Javascript,如果不直接寫入它。
背景:最新進展
Emscripten允許將C / C ++編譯為Javascript,由於ArrayBuffer的類型化陣列支持和新的瀏覽器JS引擎,可以在瀏覽器中提高效率,因為ASM.js和LLJS利用了Mozilla最近的速度改進(其他供應商可能很快跟隨)。
Altjs.org有一個Javascript holternaltives的清單,但是還沒有專注於最近的速度改進或特別好的語義,但它已成為人們用更好的工具為瀏覽器編碼的常見地方。 特別是Emscripten有很多令人驚嘆的演示 。
已考慮的可能選擇:
附加限制:
“構建指令表的這個過程應該非常有趣。它不需要成為苦差事的真正危險,因為任何非常機械化的過程都可能被轉移到機器本身。” - 艾倫·圖靈,1946年
您想要一種高級動態語言,可以編譯為高效的低級JavaScript嗎? 哪有這回事。 如果動態語言很快,我們首先不需要asm.js。
如果您想編寫編譯為高效JavaScript的代碼,您將需要學習較低級別的語言。 Emscripten快速的原因是因為它從低級語言(C / C ++)編譯,允許比常規JavaScript更好的編譯器優化。 這也是asm.js和LLVM可以更快的原因。 他們從沒有動態類型,垃圾收集(這特別是使得可以使用ArrayBuffer用於內存)和其他高級功能得到他們的速度。
底線是。 沒有工具可以將Pythonic語義編譯成本機和快速Javascript代碼。 根據你對語義的意思,不太可能出現這樣的事情,因為Python本身就是一種緩慢的語言。
現在生成快速JavaScript的最佳選擇是Emscripten。 你也可以考慮LLJS或手工編寫快速JavaScript(Chrome有調試工具)。
另外,考慮到你的問題的標題,你非常關心語法。 你不應該。 在為工作選擇正確的語言時,語法是最不重要的因素之一。
既然你自己提到了脫殼 ,我會想象一下你可以分享一些你的經驗(並解釋你的看法究竟是什么樣的,除了它的輸入是一個受限制的python語法之外)。 我還可以假設Cython / Pyrex是不可接受的(由於語法限制太多)。
如果在你的alpha階段對於脫殼太多了,那么你可能正在尋找像Numba項目這樣的東西,其中包括一個動態python到LLVM的編譯器以及llvm-py,它允許鏈接LLVM暴露的字節碼,類似於ctypes允許鏈接共享庫和構建LLVM IR編譯器。
這是博客中的一個剪輯,其中顯示了如何使用Numba作為JIT進行numpy(包括與等效Cython代碼的性能比較):
import numpy as np
from numba import double
from numba.decorators import jit
@jit(arg_types=[double[:,:], double[:,:]])
def pairwise_numba(X, D):
M = X.shape[0]
N = X.shape[1]
for i in range(M):
for j in range(M):
d = 0.0
for k in range(N):
tmp = X[i, k] - X[j, k]
d += tmp * tmp
D[i, j] = np.sqrt(d)
Emscripten應該允許你公開和調用你的python - > llvm - > JS代碼,如下所述: https : //github.com/kripken/emscripten/wiki/Interacting-with-code
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.