导读: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

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

  1. HTML代码转换为JavaScript字符串

    我有时在工作中用到字符串拼接基本上来自于此,链接 http://www.css88.com/tool/html2js/

  2. JavaScript调用App原生代码(iOS、Android)通用解决方案

    实际场景 场景:现在有一个H5活动页面,上面有一个登陆按钮,要求点击登陆按钮以后,唤出App内部的登录界面,当登录成功以后将用户的手机号返回给H5页面,显示出来.这个场景应该算是比较完整的一次H5中的 ...

  3. JavaScript 十行原生代码实现复制内容到剪贴板

    十行原生代码,不引入任何 JS 库,目前大部分浏览器与移动平台都可兼容. function copyToClipboard(value, callback) { var textarea = docu ...

  4. [.NET] 怎样使用 async & await 一步步将同步代码转换为异步编程

    怎样使用 async & await 一步步将同步代码转换为异步编程 [博主]反骨仔 [出处]http://www.cnblogs.com/liqingwen/p/6079707.html  ...

  5. Cordova - 与iOS原生代码交互2(使用Swift开发Cordova的自定义插件)

    在前一篇文章中我介绍了如何通过 js 与原生代码进行交互(Cordova - 与iOS原生代码交互1(通过JS调用Swift方法)),当时是直接对Cordova生成的iOS工程项目进行编辑操作的(添加 ...

  6. Cordova - 与iOS原生代码交互1(通过JS调用Swift方法)

    在前面的文章中介绍的了如何使用Cordova进行跨平台应用的开发,使用Cordova的话基本上就不需要在写系统原生代码了,只要通过编写html页面和js方法即可. 但在有些特殊情况下,还是是需要htm ...

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

    PhoneGap或者Cordova框架下实现Html5中JS调用Android原生代码 看看新闻网>看引擎>开源产品 0人收藏此文章, 发表于8小时前(2013-09-06 00:39) ...

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

    首先,由RN中文网关于原生模块(Android)的介绍可以看到,RN前端与原生模块之 间通信,主要有三种方法: (1)使用回调函数Callback,它提供了一个函数来把返回值传回给JavaScript ...

  9. 【原】iOS学习之苹果原生代码实现Autolayout和VFL语言

    1.添加约束的规则 在创建约束之后,需要将其添加到作用的view上 在添加时要注意目标view需要遵循以下规则: 1)对于 两个同层级view之间 的约束关系,添加到它们的父view上 2)对于 两个 ...

随机推荐

  1. AWS助理架构师认证考经

    上周考了亚马逊的解决方案架构师-助理级别的认证考试并顺利通过.这也算是对自己AWS服务熟悉程度的一种检验.在准备考试的过程中,把自己学习到的AWS知识都梳理了一遍,也算是收获颇丰.这次特意分享了该认证 ...

  2. Entity Framework中IQueryable, IEnumerable, IList的区别

    博客园里有这样的总结.这里姑且先列个题目, 提醒自己记忆.

  3. 状态栏 a.getBoolean(1, false) 报错

    状态栏 a.getBoolean(1, false) 报错 这个错误在编译运行时候并不会出现,但是当需要编译打包的时候,就会报出这个异常. TypedArray a = mContext.obtain ...

  4. Java线程:线程状态的转换

    Java线程:线程状态的转换   一.线程状态   线程的状态转换是线程控制的基础.线程状态总的可分为五大状态:分别是生.死.可运行.运行.等待/阻塞.用一个图来描述如下:   1.新状态:线程对象已 ...

  5. 国内常用的三种框架:ionic/mui/framework7对比

    国内常用的三种框架:ionic/mui/framework7对比 原文连接:http://zhihu.com/question/19558750/answer/91179040

  6. vsCode 添加浏览器调试和js调试的方法

    1.直接按F5可以调试的方法或者点击运行按钮(可以直接运行html文件或者js文件) 在launch.json文件中的配置如下: {     "version": "0. ...

  7. :after和:before炫酷用法总结

    引入 提到伪类,在我的印象中最常用的不过是:hover.:active.:link.:visited,还有css3里的常用伪类选择器:last-child.:first-child.nth-child ...

  8. Python中的字符串与字符编码

    本节内容: 前言 相关概念 Python中的默认编码 Python2与Python3中对字符串的支持 字符编码转换 一.前言 Python中的字符编码是个老生常谈的话题,同行们都写过很多这方面的文章. ...

  9. iReport 中使用 Chart 图

    iReport 中使用 Chart 图 SSH2项目中需要引入如下两个jar包: jfreechart-1.0.12.jar jcommon-1.0.15.jar 从 iReport 的安装目录下搜索 ...

  10. ::after::before清除浮动原理

    先来看一段代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...