天天看點

Unity 5.3.5p8 C#編譯器更新

注意:該版本是單獨更新C#編譯器的測試版!請使用文中提供的下載下傳連結!

新更新的Mono C#編譯器(對應Mono 4.4)将用于編譯所有的C#腳本。

Unity編輯器及播放器所使用的Mono運作時還未更新。

新編譯器仍針對C# 4。是舊的編譯器也支援的版本。

新編譯器目标架構為.Net 3.5,也是之前支援的架構。

這隻是更新Mono/.Net邁出的第一步。

該更新應該能夠“正常工作”,它并未添加任何新功能。不會對現有項目帶來任何影響,還有些小益處。新的Mono和C#編譯器與之前相比運作速度普遍更快,而且修複了多年以來的Bug。

理論上有可能在運作時産生奇怪的問題。但我們自己測試的過程中并未發現。

大多數情況下都會在編譯時發現問題。目前為止我們遇到的情況有:

有些無效的C#代碼是舊的編譯器允許但新的編譯器會報錯的

涉及到編譯器特定屬性(安裝目錄、名稱等)的代碼或插件會出錯

另外,如果你經常使用MonoDevelop或VSTU(Visual Studio Tools for Unity)調試C#代碼,那歡迎向我們回報你遇到的任何問題。編譯器輸出結果應該是一緻的,但調試器可能對于某些生成的代碼模式會很敏感。

新編譯器有一處已知的重大變化,就是閉包擷取foreach變量的方式,這是由C#語言團隊做出的改變。也就是說,如下代碼将輸出“b a r”而非目前的“r r r”:

使用較新的VS或Mono均會得到這樣的結果,這也是目前WSA平台所表現的行為,具體細節請看:

<a href="https://msdn.microsoft.com/en-us/library/hh678682(v=vs.110).aspx">https://msdn.microsoft.com/en-us/library/hh678682(v=vs.110).aspx</a>

某些情況下是的,問題描述請看:

<a href="http://stackoverflow.com/questions/18552669/memory-allocation-when-using-foreach-loops-in-c-sharp">http://stackoverflow.com/questions/18552669/memory-allocation-when-using-foreach-loops-in-c-sharp</a>

對Array、List、Dictionary或HashSet做“foreach”周遊是不會配置設定記憶體的。

第一步我們希望先推出新的編譯器。未來再啟用新的C#特性。

支援C#語言新特性面臨的幾個問題:

目前的生态系統不能完全把控新的C#(腳本更新器、調試器、特定的MonoDevelop/VisualStudio版本)

目前仍以舊的.Net 3.5為目标架構。在舊架構上支援新的C#或多或少會導緻些迷惑。從頭開始編寫所有代碼也許可行,但對于已有代碼來說可能需要C#語言和架構都是最新才可以。

本文轉自趙青青部落格園部落格,原文連結:http://www.cnblogs.com/zhaoqingqing/p/5745881.html,如需轉載請自行聯系原作者

<a></a>