2011-02-04 175 views
2

腳本語言是否可以轉換爲C,C++或Java,以便它可以在IDE上運行而無需重寫代碼?腳本語言是否可以翻譯成其他語言?

+3

是,以同樣的方式,日本可以翻譯成英語。這不是一件小事,你可能在這個過程中失去一些意義,但這是可能的。 – 2011-02-04 06:21:21

+0

基本上?是的,總是 - 因爲大多數腳本語言都是用C編寫的,並且不能獲得底層語言缺乏的功能。幾乎?取決於語言和編譯腳本是否可以接受。 – SpliFF 2011-02-04 06:24:41

回答

5

從理論上說,是的,它可以把任何腳本語言爲C,C++或Java代碼。一個理論上有效的方法是獲取解釋器的源代碼,然後在要執行的腳本中進行硬編碼。最終的代碼將會「運行用C/C++/Java編寫的指定源代碼解釋器」。

在實踐中,通常不是從腳本語言中,可以保留原來的編碼風格的方式一些其他的目標語言翻譯的好方法。每種語言都有其自己的構造,習慣用語和特質,並且在從源腳本語言翻譯成目標語言時,很多原始結構都會丟失。也就是說,出於性能方面的原因,有許多項目會進行這種轉換。例如,出於效率原因,Facebook的HipHop編譯器將PHP轉換爲C++。不過,由此產生的代碼並不適合人類閱讀。

因此,在短期,是的,是可以做到的,但不是在那將導致相當代碼的方式。

1

理論上,是的,這是可能的。根據腳本語言和它支持「虛擬機」,有些工具可以自動執行此操作(半自動)。語言的解釋越嚴重,代碼翻譯的可能性就越小(例如,將HTML網頁翻譯爲本地C有點荒謬,而不是將matlab代碼翻譯成C或C++)。一般來說,用於翻譯代碼的通用工具很少,您可以編譯和運行生成的代碼,但通常它們會執行大部分的語法翻譯(基本上可以找到替換操作),也可能是一些更高級的東西。但是,大多數情況下,您仍然需要做大量的工作(例如使用谷歌翻譯器將網頁從一種語言翻譯成另一種語言,但這絕不是完美的,這取決於兩種語言的接近程度)。

在我看來,不過,我要說的是,代碼轉換是一種非常危險的事情。當你手動重寫你知之甚少的代碼時,犯錯字或其他錯誤要容易得多。自動翻譯工具在這方面的表現也不會好得多。然後,一旦你翻譯了代碼,如果有錯誤怎麼辦?你應該如何找到它們?並修復它們?當你對實際的代碼知之甚少。這可以很快成爲一種夢魘般的體驗。我過去做過,不要再做了!

BTW:如果你正在尋找使用上所寫的腳本語言編寫另一種語言項目中的代碼,那麼你可以考慮接口的轉換,而不是一個代碼,以另一種語言的語言。大多數編程語言和腳本語言都具有與其他語言(例如DLL或COM/ActiveX組件)接口的功能。如果可能的話,最好是用最初編寫的語言來保存代碼。

3

看看shedskin爲一個Python到C++轉換的一個例子。這並不完美。它對可以翻譯的代碼有一些限制。但總的來說,它是有效的。

在這種情況下,這樣做的主要原因是與其他現有C++軟件的集成速度和易用性。

0

對於C來說,有些腳本語言看上去有點像C,也許這是一個起點。我想起了Lua。

對於java,有一種腳本語言beanshell/bsh,它將簡化的java代碼作爲腳本運行。但是您必須重寫它才能使Java代碼不在其中,並且我不知道這個過程會多麼容易,以便使這個過程自動發生。

另一種方法是:編寫一個C解釋器,這樣您就可以使用C代碼進行腳本編寫,並在需要時編譯它。

1

有一種編程語言叫做Haxe,可以轉換成C++,Java,Javascript,C#和其他幾種語言。這種語言最近纔出現,並被設計成可以翻譯成儘可能多的目標語言。

0

取決於你想要什麼。一般來說,您可以使用任何語言構建語法樹,並使用C/C++/Java/whatever構建等價的結構。不要指望代碼超快,只是因爲現在編譯它在某些情況下可能會更慢。

這裏有一些項目是做源到JIT或源到可執行:基於

Java字節碼:會給你的Java類,你可以從Java調用它們。 您也可以反編譯它們以獲取源代碼,但這不會提升性能。

C++: