2011-08-04 65 views
0

我想知道是否有可能編寫一個JavaScript程序,並將其編譯並鏈接到可執行文件中?有沒有這樣的事情作爲一個JavaScript編譯器?

如果能的話,是否有可能創建一個libjs,這相當於c/C++世界的libc?不會創建這樣的東西使JavaScript成爲一個完整的語言,然後可以編譯並直接在目標硬件上運行?

如果你有一個JavaScript的編譯器,你不能在javascript中編寫一個新的編譯器嗎?

+0

我不知道編譯爲可執行文件的Javascript編譯器,但現代瀏覽器JavaScript引擎是JIT編譯器將Javscript直接轉換爲機器語言。然而,Javascript是如此的動態,我不知道如果靜態編譯會有多好。 –

+0

「不會創建像這樣的東西讓JavaScript成爲一種完全成熟的語言」 - JavaScript已經成爲一種完整的語言。 – nnnnnn

+0

@nnnnnn - 真的,我想我是精神疾病一個完全成熟的編譯語言(C/C++),而不是一個完全成熟的解釋語言(JavaScript的/的Perl/Python的/ PHP)。 – Justin808

回答

3

是的,你可以寫一個js編譯器。不知道這將是多麼受歡迎:

  1. js引擎現在非常快,所以你沒有獲得太多的速度。

  2. 這將是特定平臺,或者你將不得不支持多個平臺。不愉快。

  3. 它有什麼用?解釋型語言的優點在於它不需要編譯。它縮短了開發週期和構建時間(曾經坐在C程序前面,必須更改整個項目所依賴的文件,並且必須運行並重新運行,需要花費幾分鐘來編譯所有內容?)。

關於你的最後一點,你是對的。如果你是這些編譯器之一,你確實可以在javascript中編寫另一個編譯器。

+0

我認爲這個問題是什麼是可能的一個,因爲從一個完全獨立於設備,實時編譯,動態語言的移動,運行在瀏覽器中一個老式的操作系統特定的,本機應用程序似乎就像是在時間上倒退。然後再次,應用程序在移動和本機桌面應用程序確實訪問真正的文件系統...... –

+0

@Ray,有很多服務器端js的東西,其中包括從文件訪問到數據庫驅動程序的一切,你知道從Java或任何東西其他這樣的服務器/正常技術(除了併發控制,但不影響它是否可以編譯的問題)。 – davin

+0

是的,使用節點。謝謝,不過。 :-) –

1

閱讀this ...並且不要錯過評論。

Here也是一些選擇。

+0

+1有趣的鏈接。 – davin

+0

這看起來很有趣,儘管它編譯爲.NET應用程序以在CLR上運行,而不是在硬件上運行。 – Justin808

0

是的,你有一些所謂Google Closure Compiler,但它不是傳統意義上的一個編譯器,它不JavaScript的轉換成機器代碼,但轉化成JavaScript的JavaScript的,但高度優化的JavaScript。它實際上一個優化compiler.Also編譯運行一些測試,以檢測很像工具JSLint。但谷歌建議使用這個編譯器寫在Closure庫中的JavaScript像錯別字的錯誤。有關Closure編譯器的更多信息,請參閱this

但我不認爲編譯客戶端JavaScript到機器代碼是一個好主意,因爲機器代碼是機器相關的,所以然後在您發送JavaScript到客戶端之前,你必須檢測它的操作系統和處理器架構。所以這將變得像在Linux上的firefox的javascipt,在Windows上的firefox的javascipt,在x86上的firefox的javascipt等

+0

是的,我看到很多這些類型的編譯器,但沒有任何編譯到機器可執行代碼。 – Justin808

+0

非常真實,我沒有想過在那種情況下使用它。我正在考慮更多地使用JavaScript作爲一種語言來編程一個裝有intel或其他cpu的設備。 – Justin808

相關問題