新型编译器将原生代码转换为JavaScript

导读:Emscripten C/C++到JavaScript项目利用来自LLVM的后端构建起更具速度与针对性优势的编译方案。

在当初刚刚公布时,Emsripten听起来完全像是个冲劲十足的技术笑谈:一款能够将C/C++代码转换成Asm.js的编译器,其处理成果能够通过Web浏览器或者在Node.js框架中作为JavaScript子集加以运行。

然而事实证明这一切并非笑谈。Emscripten与Asm.js(后者最初为Mozilla公司发起的一个研究项目)已经自诞生之日起逐步发展,并最终取得了令人瞩目的重大进展。最新公布的技术成果是,Emscripten新版本利用来自LLVM的编译器核心取代了原有机制——这项编译器技术框架原本主要用于C/C++环境,但在理论上也能够支持多种其它语言。

根据Emscripten项目的开发者们所言,转而选择LLVM给Emscripten带来了多项全新优势。首先,整个编译过程更加快捷——“通常能够带来四倍甚至更高的转换效率提升,”他们指出,而且转换所需要的内存容量也有所降低。此次更替还“避免了原有编译器偶尔出现的不可预知的恶性拖慢现象。”更重要的是,LLVM后端允许Emscripten与LLVM自身以更为紧密的方式实现对接。

使用LLVM的惟一缺点在于,其必须经过有针对性的重新编译才能与Emscripten顺利协作。LLVM的处理成果只能为我们提供上述优势当中的一部分,除非具备其它选项、否则很难将其充分发挥。

Asm.js仍然被普遍视为一种实验性技术,目前能够直接为其提供支持的也只有Mozilla火狐这一款浏览器。不过它的实际表现仍然令人印象深刻。就在最近,Asm.js成功将虚幻游戏引擎移植到了JavaScript环境之下,从而在无需任何插件或者非原生代码配合的情况下使该平台能够直接运行在浏览器当中。

谷歌目前尚未最终决定是否为Asm.js提供全面支持,不过Chrome浏览器已经确定将向由其生成的JavaScript应用敞开怀抱——虽然速度提升水平还远无法与火狐相比肩。谷歌的计划似乎是将Dart语言作为浏览器平台的近原生代码执行速度提升方案,不过JavaScript的普及度以及灵活性至少就目前来看仍具备极为显著的优势、Dart在短时间内恐怕很难取得竞争优势。

原文转载:51CTO

英文原文:http://www.infoworld.com/t/javascript/new-compiler-cranks-javascript-native-code-240923

时间: 2024-11-09 15:27:49

新型编译器将原生代码转换为JavaScript的相关文章

Birdge.NET:将C#代码转换为JavaScript

Birdge.NET是一个可以将C#代码转换为JavaScript的开源编译器,由Object.NET于2015年5月推出.它允许开发者使用C#编写平台独立的移动.Web和桌面应用,并运行在iOS.Windows.Mac.Linux及其它任意支持JavaScript的设备上. Birdge.NET的最新版本是2015年8月17日发布的1.8版本.该版本的一项特性是支持多平台操作系统.这一特性可以让Birdge.NET本身运行在多个平台上.目前,Birdge.NET可以运行在Windows.Lin

HTML代码转换为JavaScript字符串

<script type="text/javascript"> function javascript() { var isArraySel = $("#arrays-sel").prop("checked"); var htmlArr = $("#content").val().replace(/\\/g, "\\\\").replace(/\\/g, "\\/").rep

React—Native开发之原生模块向JavaScript发送事件

首先,由RN中文网关于原生模块(Android)的介绍可以看到,RN前端与原生模块之 间通信,主要有三种方法: (1)使用回调函数Callback,它提供了一个函数来把返回值传回给JavaScript. (2)使用Promise来实现. (3)原生模块向JavaScript发送事件. 其中,在我的博客React-Native开发之原生模块封装(Android)升级版 较为详细的阐述了如何使用回调函数Callback 来将数据传向JavaScript 端. 但是有一个比较难以解决的问题是: cal

PhoneGap或者Cordova框架下实现Html5中JS调用Android原生代码

PhoneGap或者Cordova框架下实现Html5中JS调用Android原生代码 看看新闻网>看引擎>开源产品 0人收藏此文章, 发表于8小时前(2013-09-06 00:39) , 已有13次阅读 ,共0个评论 依照我一惯得套路,我会先说一点废话. PhoneGap和Cordova什么关系?为什么有的地方叫Cordova而有的地方叫PhoneGap ?PhoneGap是一款HTML5平台.通过它,开发商能够使用HTML.CSS及JavaScript来开发本地移动应用程序.因此,眼下开

Notepad++根据语言类型自动选择对应编译器来编译代码

Notepad++的NppExec插件可以调用好多编译器来编译代码. 比如编译Java: NPP_SAVE javac "$(FULL_CURRENT_PATH)" java -cp "$(CURRENT_DIRECTORY)" "$(NAME_PART)" 保存为:Run Java 编译Python: NPP_SAVE python "$(FULL_CURRENT_PATH)" 保存为:Run Python 然后就是自动切换

仿jQuery的siblings效果的js原生代码

仿jQuery的siblings效果的js原生代码 <previousSibling> 属性返回选定节点的上一个同级节点(在相同树层级中的前一个节点). <nextSibling> 属性返回被选节点的下一个同级节点(在相同树层级中的下一个节点). 如果不存在这样的节点,则该属性返回 null.//元素节点的节点类型是 1  obj.previousSibling.nodeType ==1; reverse() 方法用于颠倒数组中元素的顺序. push() 方法可向数组的末尾添加一个

Android NDK开发篇(五):Java与原生代码通信(数据操作)

尽管说使用NDK能够提高Android程序的运行效率,可是调用起来还是略微有点麻烦.NDK能够直接使用Java的原生数据类型,而引用类型,由于Java的引用类型的实如今NDK被屏蔽了,所以在NDK使用Java的引用类型则要做对应的处理. 一.对引用数据类型的操作 尽管Java的引用类型的实如今NDK被屏蔽了,JNI还是提供了一组API,通过JNIEnv接口指针提供原生方法改动和使用Java的引用类型. 1.字符串操作 JNI把Java的字符串当作引用来处理,在NDK中使用Java的字符串,须要相

60行代码:Javascript 写的俄罗斯方块游戏

先看效果图: 游戏结束图: javascript实现源码: <!doctype html> <html><head><title>俄罗斯方块</title> <meta name="Description" content="俄罗斯方块Javascript实现"> <meta name="Keywords" content="俄罗斯方块,Javascript,

本地java代码和javascript进行交互(java和js互调)

在android的开发过程中,有很多时候需要用到本地java代码和javascript进行交互.android对交互进行了很好的封装,在开发中我们可以很简单的用java代码调用webview中的js,也可以用webview中的js来调用本地的java代码,这样我们可以实现很多原来做不了的功能,比如点击网页上的电话号码后,手机自动拨打电话,点击网页中的笑话,自动发送短信等. 废话不多说,这次教程的目标如下 android 中的java代码调用webview里面的js脚本 webview中的js脚本