Kay*_*ote 3 javascript c c++ asm.js
对于asm.js以及它如何能够运行一些非常繁重的应用程序有一点兴奋.但是,它是从C++代码编译的.如果不了解C++或其他低级语言,是否仍然可以获得当前改进的好处?
以下是我的想法:我们是否可以在Js中编写代码,为asm.js重新编译以进行优化?
小智 5
但是,它是从C++代码编译的.
它不是.这是一种语言.任何程序都可以发出包含asm.js代码的文本文件.Emscripten将LLVM IR编译为asm.js,并且有从C和C++到LLVM IR的编译器,但这只是获取asm.js代码的一种可能方式.不可否认,它目前是最成熟,最实用和最受欢迎的方式,但如果其他语言的其他asm.js编译器在未来的某个时间出现,我也不会感到惊讶.
如果不了解C++或其他低级语言,是否仍然可以获得当前改进的好处?
那么,从理论上讲,任何能够有效地编译成机器代码的语言都可以使用asm.js高效地实现,并且包括一些相当高级的语言(例如Haskell).但是目前,没有人有工作实施,我不希望这种情况变得非常流行.现在,如果你想要asm.js性能,你可能会编写C或C++代码并将其编译为asm.js,是的.
请注意,上面排除(以及其他许多)Javascript .Asm.js是Javascript的子集这一事实很方便,因为asm.js代码将在未修改的浏览器上运行,但对于任何编写Javascript的人来说都没有多大用处.asm.js基本上只是机器代码之上的一个薄层,对安全性和JS互操作性有一些修正.将JS编译为asm.js与将其编译为机器代码一样困难:如果你不吝啬性能(只是总是使用盒装的动态类型值,如解释器,并发出对运行时库函数的调用),那就很容易了,非常你做的很难.
实际上,经过几十年的研究,仍然没有像Javascript,Ruby或Python这样的高度动态语言提前编译成机器代码并且运行速度比聪明的解释器快得多的例子.另一方面,即时编译非常实用 - 但主要的JS引擎已经这样做了,比编译为asm.js更简单,然后再次解析并将其编译为机器代码.