我正在尝试将使用Pythonic语义编写的代码自动编译/转换为本地的、快速的Javascript代码。
有什么工具可以做到这一点,可以使用Java等工具提供良好的调试支持?
有人做过这个吗?
为什么?
我试图用复杂的主循环、时间线、一些物理模拟和一些复杂的交互来编写一些可视化代码。这是一个实际的CPU绑定问题。
使用Javascript编写并在它的浏览器环境中进行测试要比在一个体面的IDE中运行的Java、.NET或Python更难调试。但是要用复杂的客户端代码进行大规模的web开发,至少需要编译到Javascript,如果不是直接在Javascript中编写的话。
背景:的最新进展
Emscripten允许将C/C++编译成Javascript,由于ArrayBuffer的类型化数组支持和新的browser JS引擎,它可以在浏览器中以更高的效率运行,因为ASM.js和http://jlongster.com/Compiling-LLJS-to-asm.js,-Now-Available-利用了Mozilla最近的速度改进(其他供应商可能很快也会这样)。
http://altjs.org/列出了大量的Javascript替代词,但还没有特别关注最近的速度改进或良好的语义,但它正在成为人们使用更好工具为浏览器编写代码的常见地方。特别是Emscripten有https://github.com/kripken/emscripten/wiki。
已考虑的可能选项:
附加约束:
“构建指令表的过程应该是非常有趣的。它永远不会成为苦力的真正危险,因为任何相当机械的过程都可能被移交给机器本身。”--艾伦·M·图灵,1946年
发布于 2013-03-25 09:36:45
您想要一种高级别的动态语言,它可以编译成高效的低级别JavaScript?没有这回事。如果动态语言是快速的,我们一开始就不需要asm.js。
如果您想要编写编译成高效JavaScript的代码,您必须学习一种较低级别的语言。Emscripten之所以快速,是因为它使用的是一种低级语言(C/C++),它允许比常规JavaScript更好地优化编译器。这也是为什么asm.js和LLVM可以更快的原因。它们的速度来自于不具有动态类型、垃圾收集(特别是这使得可以将ArrayBuffer用于内存)和其他高级特性。
底线是。没有将具有Pythonic语义的语言编译成本地和快速Javascript代码的工具。根据语义的含义,不太可能出现这样的东西,因为Python本身是一种缓慢的语言。
现在生成快速JavaScript的最佳选择是Emscripten。您也可以考虑使用LLJS或手工编写快速JavaScript (Chrome有此调试工具)。
此外,考虑到你问题的标题,你非常关心语法。你不应该这样。在为作业选择合适的语言时,语法是最不重要的因素之一。
发布于 2013-07-22 21:35:03
既然您自己提到了脱落皮,我想您可以分享一些经验(并解释在您看来到底缺少了什么,除了它的输入是一个受限的python语法)。我还可以假设Cython/Pyrex是不可接受的(由于语法限制)。
如果对您来说,shedskin太过处于alpha阶段,那么您可能会寻找类似于南巴项目的东西,它包括一个将动态python编译到LLVM中的编译器,以及llvm-py,它允许链接LLVM公开的字节码,类似于ctype允许链接共享库和构建LLVM编译器。
下面是博客中的一个片段,展示了如何使用Numba作为numpy的JIT (包括。与等效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
https://stackoverflow.com/questions/15587572
复制相似问题