2009-07-13 124 views
40

是否有JavaScript的本地機器代碼編譯器? 我不是在談論虛擬機。 如果它不存在可以這樣做嗎?
我想知道是否可以編譯爲二進制由於語言的動態性質。是否有JavaScript的本地機器代碼編譯器?

+0

你說的是JScript.NET嗎? – Shimmy 2009-07-13 07:52:33

+0

我會問一個小小的說明:通過「本地機器代碼編譯器」,你的意思是一個編譯器,它需要一個JavaScript程序並生成一個可執行文件(靜態編譯),或者你的意思是將JavaScript代碼轉換爲機器代碼(例如Tracemonkey(Firefox)和V8(Chrome)中的JIT編譯器將從當前正在執行的JavaScript中生成本地機器代碼,因此它不必多次解釋它們。) – Falaina 2009-07-13 08:15:30

+1

我要求進行靜態編譯。 – 2009-07-13 09:18:43

回答

26

據我所知,JavaScript沒有靜態編譯器。這在理論上是可行的;然而,JavaScript的靜態編譯需要非常重量級的運行時來支持其所有功能(例如動態類型和eval)。作爲一個小問題,當需要靜態編譯Python(另一種動態語言)時,開發人員最終創建了一種語言,該語言是Python的一個非常有限的子集(稱爲RPython),沒有使用某些Python更動態的特性,那是能夠靜態編譯的。

如果你問這是爲了從JavaScript代碼創建一個獨立的可執行文件,我確定必須有一個包裝器,它基本上會創建一個包含腳本和嵌入式JavaScript VM的可執行文件(不幸的是,不知道什麼)。

2

這在理論上是可行的,但會涉及很多運行時支持包(甚至是一個完整的Javascript編譯器或解釋器來支持eval)。

你正在尋找一個真正的本地代碼編譯器,或者你在尋找可以將Javascript代碼和運行時一起捆綁到一個可執行二進制文件中的東西嗎?

+3

我正在尋找一個實際的本地代碼編譯器 – 2009-07-13 07:49:03

25

這絕對是可行的,但唯一的辦法我知道如何在目前這樣做是一個兩步的過程......

  1. 編譯使用Mozilla Rhino JSC的JavaScript到Java。
  2. 使用類似GNU's GCJ的方式將生成的java類文件編譯爲可執行文件。

爲什麼你想要?你期望找到什麼優勢?

+12

這只是出於好奇。 我很喜歡javascript。 – 2009-07-13 07:51:27

1

TraceMonkey在FF3.5中對javascript代碼的某些部分執行此操作。你可能能從那裏得到一些方向!

+0

不是。我在那裏找不到有用的東西。 – 2009-07-14 03:33:31

2

我相信微軟有一個可下載的Jscript(「微軟的JavaScript」)編譯器

如果您有Windows: 使用打開命令提示符 : 如果你寫一個javascript文本文件,你可以通過編譯CD才能到文本文件目錄 (如果您有Windows)輸入:C:\ WINDOWS \ Microsoft.NET \框架\ V2.0.50727 \器jsc.exe textfile.js

否則: 下載一個JScript編譯器 鍵入jscript編譯器的目錄,然後鍵入javascript tex的名稱t文件

如果您不想輸出整個目錄名稱給編譯器,則可以添加環境變量。

這傢伙更好地解釋它: http://www.phpied.com/make-your-javascript-a-windows-exe/

我個人認爲這是真的很酷。我只希望有更多的文檔。

我很確定那是你在找什麼,但我有點新。

4

請注意,所有這些解決方案都DOM較少,所以沒有像angular.jsjquery庫,只有underscore.js/lodash

跟進到Falaina的回答, PyPy確實有一dist for JavaScript

另外,Appcelerator Titanium有一個js>JavaBit >android

最後,node.js可以使用nexe 在這個其他answer

8

谷歌的V8引擎解釋JavaScript的編譯成機器碼。這個特性用於我爲node.js和io.js項目編寫的EncloseJS編譯器。

1

Adob​​e AIR針對iOS的AOT編譯器靜態編譯JavaScript超集稱爲Actionscript 3.0,直到ABC字節碼,然後通過LLVM編寫機器代碼。如果您要編寫不帶類的AS3代碼並且沒有類型註釋,那麼它本質上應該是JavaScript,然後編譯器會很樂意將其編譯爲機器代碼。可悲的是,這不是開源軟件,你不能訪問任何DOM(許多人想到JavaScript時會想到它),因爲它本質上是在Flash Player實例中運行的。

相關問題