2011-03-04 377 views
38

有沒有什麼辦法將C代碼轉換爲JavaScript,並從JavaScript轉換爲C?我發現V8 juice可以從C++生成JavaScript-side類,但它只是一種方法(從C++到JavaScript)。將JavaScript代碼轉換爲C代碼

我不是在尋找一個軟件。

+2

我正在運行node.js來執行我的linux服務器下的javascript代碼,所以我想讓其他人通過編寫c代碼來添加插件。這就是爲什麼我需要一個庫或像v8汁的引擎將c代碼自動轉換爲javascript的原因。 – 2011-03-04 10:12:55

+0

不是答案,只是一個評論: 有一個JScript編譯器的Windows/.NET帶來的。它被稱爲jsc.exe。 它無法編譯每個JavaScript。 如果安裝它,它位於c:\ Windows \ winsxs或C:\ Windows \ Microsoft.NET \ Framework \ 中。 如果你有一個沒有花哨的東西的簡單的JavaScript算法,它可能會工作。 – Laokoon 2016-10-06 07:48:46

+0

它對我沒有任何意義。 – Rolf 2016-11-03 11:04:17

回答

35

非常,非常棘手--- JavaScript是一種嚴重的動態語言,其中幾乎一切都可以在運行時更改:變量,函數,類型等的名稱因此,它非常糟糕映射到C.而這還不是即使考慮eval(),它可以讓你在字符串中構造任意的Javascript塊並運行它們。

任何Javascript翻譯器都必須能夠處理這些事情,這意味着它必須在運行時將Javascript翻譯成C語言,這使得它成爲JIT,而您已經在使用它。

你可能想看看在寫C綁定的Javascript來代替。這些將允許您的Javascript代碼調用C代碼,反之亦然。這將允許人們使用C語言編寫插件,將它們編譯到.so共享庫中,您現在可以從您的Javascript代碼加載並運行該庫。這意味着你不需要翻譯任何東西。

Javascript的不是我的區域,所以我不能推薦任何特定的機制,我怕 - 但是如果你已經找到的V8Juice不讓你這樣做,我會非常驚訝。

+4

儘管如此,計算機程序是確定性的,所以理論上可以將所有東西都編譯回C,因爲所有用於解釋JavaScript的機制都已經存在於C中。有人不得不花費時間製作該工具。誰在做志願者? x} – trusktr 2015-12-13 08:06:04

+0

這很可能也很容易。你所要做的就是將PHP作爲C的預處理器,而不是它現在使用的(如果你希望得到的代碼是可讀的,#ifdef不會剪切它,並且你需要類似通用映射的構造來完成轉換) 。之後,你所做的只是在「編譯時」代碼和「運行時代碼」之間建立一堵牆,在此之後,通過json將js添加到c和反之亦然,並讓c評估javascript到JavaScript的內部表示形式,但要做到這一點,並有很好的代碼,你需要一個更強大的c預處理器。 – Dmitry 2016-08-10 03:27:35

+0

不幸的是,目前在C中沒有「好方法」來製作地圖,它們都是醜陋和混亂的,並且容易出錯,而且JavaScript幾乎完全依賴於地圖。你可以用C++來完成,但是現在你可能只是嵌入了V8,因爲它是用C++編寫的,並且會比你做得更好,但是不會有C的「絕對自由的非抽象抽象和gdb友好」。使用功能更強大的預處理器,C很容易連接到任何向上語言(通過對象支持運行時泛型,而在C中,您需要發明一個對象來存儲void指針的元數據) – Dmitry 2016-08-10 03:29:33

6

爲什麼要轉變時,你可以簡單地嵌入?

https://code.google.com/p/v8/ 「V8可以獨立運行,也可以嵌入到任何C++應用程序中。」

嵌入到C++應用程序允許JavaScript訪問的C++應用程序可以訪問到任何系統,無需首先轉換。儘管如此,爲了安全起見,我會限制訪問權限。 Web瀏覽器顯然是嵌入在C++應用程序中的最突出的JavaScript形式。正如名稱所暗示的那樣,JavaScript是一種腳本語言,不打算像C代碼那樣編譯爲彙編/機器代碼。

+6

在微控制器上怎麼樣?我的目標是自動將一些數學算法從js轉換爲C++,所以我不需要手動移植 – Funkodebat 2015-03-24 00:45:56

17

使用Castl可能會將JavaScript的子集轉換爲Lua,然後使用lua2c將Lua代碼轉換爲C.

或者,它可能是可能compile JavaScript to Python,然後convert the Python source code into C使用RPython編譯器。由於RPython是Python中的一個子集,這應該允許JavaScript的一個子集被翻譯成C.

還有一個叫ts2c編譯器,這顯然是能夠JavaScript和打字稿源代碼翻譯成C.

+1

但是我們想要全集!這很有趣。 – trusktr 2015-12-13 08:09:43

0

C語言可以做的很多東西,JavaScript或V8發動機不能做,尤其是系統程序,如地獄內存管理,直接內存訪問,中斷,彙編代碼,線程管理。 因此,不可能將c轉換爲javascript,除非它是非常簡單的代碼而沒有一些系統代碼。使用nodeJS(不是v8 javascript)以及系統包裝代碼可以執行一些系統級功能。這又是一個複雜的轉換部分。 即使我們能夠轉換這個簡單的代碼,c和轉換後的javascript的執行也不同,因爲它基於v8引擎。

可以將JavaScript轉換爲C.因爲C可以虛擬地處理任何執行內容,包括解釋器的執行內容。

+0

嘿!回到1990年代!現在沒有人用C中斷了! (除了osdev瘋子,像我一樣!) – 2018-02-16 16:37:50