2015-11-27 40 views
3

切換到Visual Studio 2015後,我們注意到在Roslyn中如何將lambdas編譯爲MSIL(如this threadon GitHub中所述)會引起一些更改,從而在某些情況下引發運行時故障。由於Roslyn顯然是.NET的未來,我們希望切換到這種技術,但似乎所有在生產環境中運行的遺留代碼(以及我們對其工作正常的信心具有相當程度的信心)現在容易出現新的運行時間故障。這些數據庫也受到這個問題的影響(如Moq, for example)。Roslyn中斷更改列表

我們已經跳過升級到RyuJIT爲its issues,但我相信的Visual Studio 2015年是羅斯林重綜合,我不認爲我們可以簡單地手動替換csc.exe(但這是a different question)。

那麼,有沒有羅斯林的突破性變化的編譯列表,我們可以參考看看我們可以期待什麼?

+0

這可能會有所幫助:https://github.com/dotnet/roslyn/wiki/API-Changes – nawfal

+0

@nawfal:此頁面似乎表明羅斯林API的變化,我更感興趣的變化產生MSIL相對於之前VS版本的「csc.exe」。 – Groo

+0

我想,你現在在任何地方都找不到這些變化。您應該留意[this](https://github.com/dotnet/roslyn/issues/4793)GitHub問題,它與lambda表達式中的更改有關。 – Tamas

回答

3

(更新)

感謝@NealGafter提供的鏈接。的重大更改列表目前可以在這裏找到:


看來,一些文件被認爲是在這裏:Roslyn Compiler Specification (roslyn/docs/compilers on GitHub)。根據說明:

編譯器規範詳細說明了Roslyn VB和C#編譯器支持的(和半支持的)表面區域。這包括

  1. 命令行開關和它們的含義
  2. 從編譯器被(有意地)違背本說明書
  3. 編譯器功能不受所描述
  4. 編譯器行爲的先前版本斷變化語言規範
    • COM特定的和其他Microsoft特有的功能
    • 「知名」影響編譯器行爲屬性
    • 的「規則集」文件的語法和語義包括C#和VB之間的互操作性
  5. 功能,例如
    • 命名索引器在C#中使用當編譯器行爲從語言規範
    • 限制發散
  6. 地方(如標識符長度)
  7. 歷史的每個版本語言的變化

描述關於Lambda表達式(因爲這是我首次發行)更改的CodeGen該文件是在roslyn/docs/compilers/CSharp/CodeGen Differences

非解禁LAMBDA表達式現在作爲單例顯示類的實例方法實現。由於委託的入口點是實例「Invoke」方法,因此如果此方法也是一個與「Invoke」具有完全相同的形式簽名的實例方法,則在運行時將代表調用派發到基礎實現方法會更便宜。

+0

不幸的是,重大更改列表尚未完成。請參閱https://github.com/dotnet/roslyn/issues/7278。 –

+0

@Neal:謝謝(延遲),我在上面添加了你的鏈接。 – Groo