[译]NectarJS:编译JavaScript为任意平台原生二进制代码
NectarJS 是一个JavaScript编译器,他可以使JS开发者做任何事情都十分有效并且使用他们最喜欢的语言。
自从上个九月,我决定放弃一切其他活动,来让自己全身心的投入到这个项目中。
这是我这样做的原因
开始
当我年轻的时候,我对计算机充满了兴趣并且疯狂的迷恋它的效率。我喜欢软件开发和计算机技术。我在我五岁的时候就开始使用Windows3.1和DOS。我用C/C++写一些有趣的游戏和工具在Windows 95和Windows98或者97里。在高中,我开始学习Ruby,python,perl和Java,并且我开始使用Metasploit
.
经过不太令人兴奋的科学学习,我决定不在浪费我的时间,并且开启我自己的事业,在cyber security做一些令人兴奋的副业。
在2016年11月的一个下雨天,我工作致力于FortressJS,和I/O NodeJS框架的速度和安全。我如饥似渴的成为JS的粉丝,因为它十分的全能和完美的原型。
在这个特定的项目,我尝试不同的解决方案去打包一个APP用我的框架,像Nexe,JXCore或者EncloseJS.
我发现好多开发者都搜索过,我同样如此,如何打包一个JS的app。Nexe或者EncloseJS 不能编译JS;他们使用V8生成的字节码。因此他们不能完全和NodeJS兼容。关于JXCore这个项目已经废弃了。
除了打包,http基准,NodeJS并不比编译的语言快。我做了科学的测试去观察最有效的事情去实现打包和有效率这两件事情。
我最终找到了crystal 。Crystal是一个Ruby-like-compiler,基于LLVM,真的快。在http基准上,它速度比NodeJS快。对我来说两种方法解决这个问题:
- 重写我的APP用Crystal或Go
- 尝试编译JS
Crystal够快,够棒,但是它并不能实现所有跨平台。我喜欢Ruby的语法,但是NodeJS的生态很大,并且JS无处不在。关于Go,他是个很棒的语言,有很棒的生态,但是我我更喜欢JS(任性)。
第二种解决方案对我来说看似疯狂,但是这听起来是充满激情的挑战:编译JS
编译器即服务
我开始为JS创建一个编译器,我关注与编译一些JS功能在Linux平台,像数学表达式,逻辑运算。我开始编译循环和函数。管理空类型的变量也编译了一点,但是我实现了时间,测试和跨平台算法。它是在龙书 的帮助下一步一步工作的。
在两个星期在这个项目的辛苦工作后,我开始去展示,大小和时间来编译。
十分震惊的是! 展示令人印象深刻(这篇文章用一个简单的算法展示了编译后的JS代码竟然比C和NodeJS快)
这是一个好的开始,但是我只能编译JS在我的Linux电脑
这是我开始设想为JS弄一个CAAS(编译就是服务):写我的App和我需要的,剩下的全部交给编译器
很快的我开始这个项目,一些疯狂的想法涌上我的大脑,包括:
- 对于JS更好的展示
- 编译JS成WASM(Web组件)
- 写一个为物联网小的框架(Arduino作为例子)
- 做任何事情用JS
- 编译一个APP给任意平台,包含所有的东西
- 更多的功能
一个月过去了,它越来越消耗时间。继续这个令人兴奋的项目此外做我其他活动,我尝试和一些朋友做一个众筹活动。尽管它似乎很疯狂,我希望建立一个强大的社区网络去完成NectarJS,带有很多库和编译工具,招聘工程师去为它工作。
然而,显然,没有创建一个社区在开启众筹之前,我没有达到我的目标。虽然所有都落空了;但是一些人表示对这个项目十分感兴趣。
我面临这重要的决定:
- 停止NectarJS,并继续我的专业活动
- 或贡献我的项目。
再次,我选择后者
为什么?
因为我坚信这个解决方案有未来,以后的JS开发者将有能力写出效率接近C语言编写者的代码,我希望有一个团队与我一起为NectarJS工作。
它将做的更好
我们自举一个alpha版本带有一个嵌入JS引擎他能在Windows,Linux,WASM和ASM.JS工作的很好。即使他不能工作的像我们希望的速度。它可以让用户编译EcmasScript 5,和一部分ES6和ES7,我们添加NodeJS编译库,像FS,Process和HTTP.
关于未来
我们希望让JS变成一个普世的语言。JS是代表任意的Web浏览器,越来越多的代表服务端像NodeJS,并且它也通过Espruino用在物联网。然而,每个平台都有它的特殊性。用NectarJS,我们希望整合所有的内容通过一种解决方案。
它是一个新的,奇妙的冒险,你可以成为它的一部分
为了尽可能的快,我们需要反馈NecatarJS来改进它。我们有一个Slack,你可以订阅:NectarJS'Slack
NectarJS的alpha 在测试阶段将免费。你可以得到你免费的key在 nectar-lang.com/key/
你可以从github获取NectarJS客户端:
github.com/seraum/nect…
感谢您的帮助
转载于:https://juejin.im/post/5a33b5035188250690541893
[译]NectarJS:编译JavaScript为任意平台原生二进制代码相关推荐
- 转译和编译_10个有趣又能编译为JavaScript的语言,你用过哪些?
点击上方"IT平头哥联盟",选择"置顶或者星标" 你的关注意义重大! 来源:https://www.sitepoint.com/ 现代应用相比普通的网页有不同的 ...
- linux编译x86和arm平台的x264
摘抄网址:http://blog.csdn.net/baliguan163/article/details/11773363 参考网址:http://blog.csdn.net/evsqiezi/ar ...
- 一个近乎完美的Unity全平台原生c#热更方案
今天给大家推荐一个近乎完美的Unity全平台原生c#热更方案,相对比其他方案,此方案学习成本更低.完全支持c#所有特性.兼容性极高.占用内存低.执行小高. 项目简介 HybridCLR是一个特性完整. ...
- [译] 漫画图解 JavaScript 引擎: let jsCartoons = ‘Awesome’;
原文地址:Understanding JavaScript's Engine with Cartoons 原文作者:Codesmith Staffing 译文出自:掘金翻译计划 本文永久链接:gith ...
- 使用JavaScript调用手机平台上的原生API
我之前曾经写过一篇文章使用Cordova将您的前端JavaScript应用打包成手机原生应用,介绍了如何使用Cordova框架将您的用JavaScript和HTML开发的前端应用打包成某个手机平台(比 ...
- 【译】用JavaScript写一个区块链
原文:Writing a tiny blockchain in JavaScript 作者:Savjee.be 译者:JeLewine 几乎每个人都听说过像比特币和以太币这样的加密货币,但是只有极少数 ...
- 使用Mono将C#编译运行至WebAssembly平台
因为所有的主流网页浏览器都支持WebAssembly,开发者们现在可以寻找一个新的平台来部署他们的应用程序.由WebAssembly团队提供的标准工具链仅能将C.C++编译成为WebAssembly, ...
- javascript对象分类(原生对象,内置对象)
<!-- javascript对象分类 javascript的对象大致可以分为以下几种: --原生对象:又名本地对象.native object.独立于宿主环境的ECMAScript实现提供的对 ...
- 【译】理解Javascript函数执行—调用栈、事件循环、任务等
原文作者:Gaurav Pandvia 原文链接:medium.com/@gaurav.pan- 文中部分链接可能需要梯子. 欢迎批评指正. 现如今,web开发者(我们更喜欢被叫做前端工程师)用一门脚 ...
最新文章
- STM32 DMA正常模式等待传输完成和开始下一次传输
- RHEL/CentOS/Fedora各种源
- HTML5新特性之Mutation Observer
- java dao层的泛型get方法_dao层的泛型实现(2种方法)
- 怎么讲d 盘里的软件弄到桌面_GNOME 2 粉丝喜欢 Mate Linux 桌面的什么?
- MyBatis之基于XML的动态SQL
- python, numpy
- 计算机应用基础165791,人大网大计算机应用基础试题答案资料.doc
- java地址有什么构成_IP地址采用分层结构,由( )组成。
- 目标跟踪算法的分类(一)
- c语言联盟,程序设计(C语言)(山东联盟)
- 小程序会话服务器,完美解决小程序session问题
- 管螺纹如何标注_天天和螺纹打交道,你知道有多少种螺纹吗,原来螺纹种类这么乱...
- DNA拷贝数变异CNV检测——基础概念篇
- ES5实现组合继承的原理
- CentOS7安装squid代理服务器
- 量子态层析(quantum state tomography)
- 罗尔定理与零点定理判断实际应用与判断
- 第九讲:Python爬取网页图片并保存到本地
- 腾讯云TVP大佬十年心血MySQL工作笔记,看完还不懂MySQL来打我!