开源工具Emscripten,让C++秒变JavaScript


开源最前线(ID:OpenSourceTop) 猿妹 整编

综合自:https://spectrum.ieee.org/computing/software/webassembly-will-finally-let-you-run-highperformance-applications-in-your-browser

近日,Mozilla 的开发人员 Alon Zakai 成功将一个他曾经用 C++ 编写的游戏转换为 JavaScript 代码并在 Web 上运行。



以前要想将 C++ 转换为 JavaScript 几乎是不能可能的事情,尤其用 C ++ 编写的游戏代码十分庞大,有数百万行代码,那对于 JavaScript 实在是太多了。更糟糕的是,游戏强调底层平台,因为它们有几个不同的组件 - 音频,视频,物理,人工智能 - 需要协调运行。


为了让不可能变成可能 Alon Zakai 开始着手编写一个开源工具,可以自动将 C++ 代码转换成 JavaScript,于是开始着手开发 Emscripten

LLVM 转 JavaScript 编译器 Emscripten


授权协议:MIT

开发语言:JavaScript Lua

操作系统:跨平台

Github:https://github.com/kripken/emscripten


 Emscripten 简介


Alon Zakai 开发的项目叫 Emscripten,是一个独特的 LLVM 后端,能够将 C++ 快速的转换为 JavaScript,并且可以兼容现有的浏览器,同时他们还将优化 Firefox 中的 JavaScript 引擎,提高运行速度。

Emscripten 发展历程


几年前,AlonZakai 他就通用的 Web 字节码写了一篇博客,列出了实现该目标所面临的一些困难,同时提到了JavaScript仍然存在的一些不足:


这方面 JavaScript 主要有两点不足。首先,对有些语言的支持尚不成熟;其次,有些平台限制会影响性能,尤其是缺乏SIMD和共享状态的线程。


同时,Zakai也列举了这样的字节码应该满足的一些条件:

● 支持所有语言

● 高速运行代码

● 便于编译器生成

● 格式紧凑,容易转换

● 标准化

● 平台独立

● 安全


经过几年的开发,现在,Emscripten 可以将用 C++ 编写的代码直接转换成 WebAssembly。并且在未来还会支持更多的语言,包括 Rust,Lua,Python,Java 和C#。


现在,Mozilla Firefox,Google Chrome,Apple Safari和Microsoft Edge都在其最新版本中提供对 WebAssembly 的支持。


使用 WebAssembly,几百万行代码库可以在几秒钟内完成加载,其运行速度能够达到本地程序的 80%。并且随着浏览器引擎的更新换代,预计加载时间和执行速度都将得到进一步的提升。

推荐↓↓↓
开源最前线
上一篇:Mozilla 开源音频数据库已成为第二大公开语音数据集 下一篇:18 年技术老兵、恒拓开源架构师、远光软件架构师曹勇谈架构师之路及开源项目 AWCP 的发展历程