javascript
[译]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为任意平台原生二进制代码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CentOS 6.5安装与配置Postg
- 下一篇: 33.Node.js 文件系统fs