[譯]NectarJS:編譯JavaScript爲任意平臺原生二進制代碼

你們好,我是Adrien Thierry,我啓動了一個alpha版本重要的項目,這個項目我付出了一年多的時間,這個項目就是 NectarJs.

NectarJS 是一個JavaScript編譯器,他可使JS開發者作任何事情都十分有效而且使用他們最喜歡的語言。javascript

自從上個九月,我決定放棄一切其餘活動,來讓本身全身心的投入到這個項目中。java

這是我這樣作的緣由node

開始

當我年輕的時候,我對計算機充滿了興趣而且瘋狂的迷戀它的效率。我喜歡軟件開發和計算機技術。我在我五歲的時候就開始使用Windows3.1和DOS。我用C/C++寫一些有趣的遊戲和工具在Windows 95和Windows98或者97裏。在高中,我開始學習Ruby,python,perl和Java,而且我開始使用Metasploit.python

通過不太使人興奮的科學學習,我決定不在浪費個人時間,而且開啓我本身的事業,在cyber security作一些使人興奮的副業。git

在2016年11月的一個下雨天,我工做致力於FortressJS,和I/O NodeJS框架的速度和安全。我如飢似渴的成爲JS的粉絲,由於它十分的全能和完美的原型。github

在這個特定的項目,我嘗試不一樣的解決方案去打包一個APP用個人框架,像Nexe,JXCore或者EncloseJS.算法

我發現好多開發者都搜索過,我一樣如此,如何打包一個JS的app。Nexe或者EncloseJS 不能編譯JS;他們使用V8生成的字節碼。所以他們不能徹底和NodeJS兼容。關於JXCore這個項目已經廢棄了。api

除了打包,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…

感謝您的幫助

相關文章
相關標籤/搜索