Unity 5.3.5p8 C#編譯器升級


Unity 5.3.5p8的C#編譯器升級

注意:該版本是單獨升級C#編譯器的測試版!請使用文中提供的下載鏈接!

基於Unity 5.3.5p8的C#編譯器升級!下載鏈接

試用該版本前請先備份項目,遇到任何問題請及時反饋到Unity官方中文社區(http://forum.china.unity3d.com/)。

新升級的Mono C#編譯器(對應Mono 4.4)將用於編譯所有的C#腳本。

重要注意事項

Unity編輯器及播放器所使用的Mono運行時還未升級。
新編譯器仍針對C# 4。是舊的編譯器也支持的版本。
新編譯器目標框架為.Net 3.5,也是之前支持的框架。

這只是升級Mono/.Net邁出的第一步。

FAQ

對現有項目有何影響?

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

有什么需要注意的?

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

大多數情況下都會在編譯時發現問題。目前為止我們遇到的情況有:
有些無效的C#代碼是舊的編譯器允許但新的編譯器會報錯的
涉及到編譯器特定屬性(安裝目錄、名稱等)的代碼或插件會出錯

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

有什么重大變化嗎?

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

var actions = new Action[3];
var j = 0;
foreach (var c in "bar")
   actions[j++] = () => Console.WriteLine(c);
         
foreach (var a in actions)       
    a();

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

https://msdn.microsoft.com/en-us/library/hh678682(v=vs.110).aspx

是否修復了“foreach”內存分配的問題?

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

http://stackoverflow.com/questions/18552669/memory-allocation-when-using-foreach-loops-in-c-sharp

對Array、List 、Dictionary 或HashSet 做“foreach”遍歷是不會分配內存的。

為何不面向C# 5或C# 6?

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

支持C#語言新特性面臨的幾個問題:
目前的生態系統不能完全把控新的C#(腳本更新器、調試器、特定的MonoDevelop/VisualStudio版本)
目前仍以舊的.Net 3.5為目標框架。在舊框架上支持新的C#或多或少會導致些迷惑。從頭開始編寫所有代碼也許可行,但對於已有代碼來說可能需要C#語言和框架都是最新才可以。

資料文獻

原文出處:http://forum.china.unity3d.com/thread-19893-1-1.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM