2008-09-16 31 views
7

尼基爾科塔裏的Script#很可能是最驚人的概念,我已經看到了在JavaScript的舞臺上很長一段時間的。這個問題不是關於JavaScript,而是關於.NET運行時的語言編譯。如何使一個側面並排編譯器.NET

我一直對如何使用.NET平臺很感興趣,可以爲已經有一個編譯器(如C#)的語言編寫編譯器,該編譯器將在原始編譯器中生成單獨的輸出,同時允許原始編譯器在同一個構建操作中爲同一個源生成輸出,同時引用/使用另一個編譯器的輸出。

我不能完全肯定,我懂得這個過程不夠好,請用正確的細節問題,但是這是我目前看到的過程中,按照圖中的腳本#文檔的方式。我曾考慮過涉及複雜語言設計和編譯的許多事情,可能會利用這樣的概念,並且我對其他人對這些概念的看法感興趣。

-

編輯:感謝評論,迄今;你的信息本身是非常有趣的,我想更多地研究它,但是我的問題實際上是關於如何能夠編寫我自己的編譯器/ s,它可以同時在同一個源上運行使用CLR產生多種不同類型的(可能)相互依存的輸出。 Script#是一個例子,因爲它會生成JavaScript和一個使用相同C#源代碼的程序集,同時使編譯後的程序集與JavaScript協作。我很好奇各種方法和理論概念在設計這種性質的東西方面。

回答

2

認識到編譯器所做的一切都是採用源語言(在這種情況下是C#),解析它以使編譯器具有對其有意義的表示,而不是人類(這是抽象語法樹),然後對目標語言進行無用代碼生成(msil是在.NET運行時運行的語言的目標)。

現在,如果腳本#代碼變成組件;以及與其他.NET代碼,這意味着該編譯器必須產生MSIL相互作用。腳本#正在使用csc.exe,這只是標準的c#編譯器。現在要生成JavaScript,它必須採用c#或msil,解析它,並生成JavaScript以發送到瀏覽器。文檔說它有一個名爲ssc.exe的自定義c# - > js編譯器。

爲了使事情變得同時在客戶端,它有一組寫在.NET,但也編譯爲JavaScript基準組件服務器端一致交互。這不是編譯器特定的問題,但是,這些引用程序集是腳本#運行時。運行時可能會負責很多你感覺到的腳本#魔法。

0

所以我們說要編譯C#轉換爲JavaScript。您在問是否可以利用現有的C#編譯器,所以不是直接將C#編譯爲Javascript,而是將C#編譯器生成的MSIL轉換爲Javascript?

當然,你可以這樣做。一旦你有了MSIL二進制文件,你可以做任何你想做的事情。

0

微軟呼籲Volta一個研究項目,其中,除其他事項外,MSIL編譯爲JavaScript。

開發人員工具包使用 現有的和熟悉的工具, 技術和模式構建 多層Web應用程序。沃爾的 聲明一線分裂使 開發商推遲大約分佈架構 的決定,直到最後 可能責任時刻。 此外,由於跨多層的共享編程模型 ,Volta 支持新的端到端分析和 應用程序性能,健壯性, 和可靠性的更高級別測試。通過使用聲明式 層級分割,開發人員可以根據此 分析數據來改進 體系結構決策。這節省了時間和與重構手冊 相關的成本。事實上,沃爾延伸 .NET平臺,以進一步實現 的軟件+服務 應用程序,使用現有的和 熟悉的工具和技術的發展。

您設計和構建 應用程序作爲.NET客戶端應用程序 ,分配的 是在服務器 層和客戶層的 發展過程中下旬運行應用程序的部分。您可以針對 無論是網頁瀏覽器或CLR爲 客戶和沃爾特處理層分裂的 複雜性。該 編譯器創建跨瀏覽器的JavaScript 爲客戶層,Web服務器層 服務,以及所有 通信,系列化, 同步,安全和其他 樣板代碼扳平層 在一起。事實上,沃爾多提供 盡力而爲體驗 環境,而不需要 定製應用程序的。

+0

不正是我一直在尋找在這裏(見上文),但我欣賞的沃爾的信息,因爲這是沿着這些線路,我想更多地瞭解另一個令人興奮的實現。 – TheXenocide 2008-09-17 03:31:24

+0

MS報廢沃爾,但你可以做類似的東西與http://jsc.sourceforge.net/ – mcintyre321 2009-08-06 11:35:45