1. 程式人生 > >NectarJS:編譯JavaScript為任意平臺原生二進位制程式碼

NectarJS:編譯JavaScript為任意平臺原生二進位制程式碼


大家好,我是Adrien Thierry,我啟動了一個alpha版本重要的專案,這個專案我付出了一年多的時間,這個專案就是NectarJs.

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

你可以從github獲取NectarJS客戶端:

感謝您的幫助