Duetto —— 一个用于 Web 的 C++ 编译器,超越 Emscripten 和 Node.js

Duetto —— 一个用于 Web 的 C++ 编译器,超越 Emscripten 和 Node.js_第1张图片

Leaning Technologies公司于今天发布了一款使用用于Web应用集成开发的C++编译器duetto(包括前端开发和后台开发)。duetto目前是一款免费的开源软件(Github地址),不久之后也将提供闭源许可的商业版本

无论在未来的消费者应用领域还是商业应用领域,基于浏览器的应用无疑会扮演者重要的角色。与传统应用相比,web应用有一些明显的优势。比如说原生地支持云计算和协作式服务,同时也很便携。这要特别感谢浏览器厂商对于Web兼容标准越来越多的关注和做出的贡献。现代的Web标准通常符合HTML5,非常接近原生语言,并且这个和原生语言的差距会随着时间越来越缩小。

为了弥补Javascript的缺陷和不足,人们开发了很多工具来用于大规模Web应用前端的开发。比如CoffeeScript,Microsoft TypeScript,Google Dart,Google GWT等等。最近还发布了可以将LLVM字节码编译成Javascrpt的工具emscripten。由于LLVM是C++编写的,因此emscripten也就提供了C++到Javascript的转化功能。在服务器端编程方面,比较常用的语言有PHP,Python和Ruby等。由于没有使用Javascript,后台的代码库是分离独立的。这导致了很多问题:比如代码冗余(通常会引入新的Bug),需要手动处理RPC等等,也就占据了本该用于正常开发的时间。针对这个问题,现在有一个较为流行的解决方案,就是使用node.js在服务器端用Javascript进行编程。

我们发布的用于Web开发的C++编译器duetto现在已经面向公众开放下载了。我们的方案集成并超越了现有工具的特性,并且支持使用C++同时进行前端和后台的开发,并且将前端代码编译为JavaScript,将后台代码变异为机器码。

Duetto通过允许编程人员做如下的事情,来组合emscripten和node.js的优势:

  • 用C++编写web应用,重用现有的代码,并且使得移植到浏览器的应用和游戏看起来和原生应用一样;
  • 用同一种语言和代码库编写web应用的前端和后端

另外,duetto提供一些非常好的特性:

  • 为web带来C++编程的鲁棒性和经过验证的可扩展性
  • 你可以直接调用所有浏览器的APIs。Duetto继承了C++暴露平台能力(以及限制)给用户的理念。不存在任何的中介;
  • Duetto是基于LLVM/clang的。工业标准的C++编译器是程序员最好的朋友:代码合理性在编译时被检查,其中包括RPC(远程过程调用)签名;
  • LLVM工具链同样保证了在编译时运行了一堆令人兴奋的优化,从而产生高效率的代码。这会降低JavaScript的JIT编译器在运行时的负担;
  • 与emscripten,我们没有尝试用类型化数组去模拟一个传统的地址空间,而是直接将C++的对象映射到JS对象。这降低了内存开销,因为垃圾回收器可以删除没有被使用的对象。

你对duetto感兴趣么?你现在可以尝试它。我们刚刚将整个技术作为一个FOSS项目发布,点击这里获取。此外,我们还坚持了在四月份的第一次公布后的六个月内发布的承诺。

该编译器本身是派生字LLVM/clang,并以和LLVM/clang相同的许可证(UI/NCSA)发布,并且我们计划向上游贡献普遍有用的代码。相关的头文件和库文件将会以GPLv2+标准发布。我们将同时提供闭源收费的友好授权的组件。下面是各种相关库在Github的链接:

  • 支持LLVM的duetto
  • 支持clang的duetto
  • duetto的头文件和实用程序
  • 支持libclibc++libc++abi的duetto

正式发布的tar包不久后将可以在项目的Launchpad页面获取: https://launchpad.net/duetto。Launchpad也将是我们的bug报告系统,所以请您使用它来报告您发现的任何的问题。我们也将使用PPA来提供duetto的Ubuntu linux版本。我们也计划为Mac OS X和Windows提供二进制的版本,但我们仍然致力于自动化构建这些版本。

请在https://launchpad.net/~duetto-users订阅我们的Launchpad小组/邮件列表,来讨论Bugs、期望的特性以及可用性问题。你也可以在twit­ter (@leaningtech)上关注我们或者访问我们的网站来获取duetto相关的新闻。

你可能感兴趣的:(C++,Web,node.js,Web应用,编译器)