.Net 新一代編譯器 Roslyn 會帶來怎樣的影響?
微軟在 Build 2014 大會上由 Anders 宣布跳票已久、新一代 .Net 編譯器開源編譯器 Roslyn 開源,這會對 .Net 及 C# 的未來帶來什麼影響?
【開源快訊】微軟將C#編譯器Roslyn開源-CSDN.NET
對.NET和C#有什麼影響我不知道,我做不來預測,我只知道它可以用來幹嘛。
Roslyn就是個編譯器,而且是開源的,想怎麼改想怎麼用隨你,你可以藉助它來開發VS這樣的編程工具,甚至自己為C#語言添加特性,而這樣的特性甚至可以是非侵入性的,因為Roslyn已經把編譯器的黑盒給拆開了,例如我們可以添加一些SyntaxRewriter來改變語法樹的結構。
此外,可以用DLR打個比方。DLR是一個統一的標準的動態語言運行時(當然嚴格說來還是一套輔助類庫)一樣,假如你要實現一個動態語言,首先它能幫你很多忙,其次不同的人圍繞DLR做出的不同的東西都可以交互。
跟DLR一樣,Roslyn是經過詳細設計的,目標之一是作為一個統一的標準的編譯器實現或是基礎。你想一下現在Resharper這樣的開發工具會怎麼做,它們基本都是自己重新寫了一套前端,自己對用戶代碼進行分析,然後提示你這裡有錯誤,那裡可以改進,然後幫助你重構等等。那麼假如有兩個類似的工具A和B,它們怎麼合作?基本沒法合作,它們唯一可以共享的「渠道」就是代碼文本。於是A對代碼做出的修改,至少先要變成內存里的字元串,然後再被B發現,再解析再分析,這種都是額外開銷。假如大家都通過Roslyn來搞,就可以配合地更好(當然我對VS的擴展性也不熟,但我推測這完全是可行的)。
這裡可以看個案例:.NET Framework Reference Source。微軟用Roslyn把整個.NET Framework的源代碼給索引了,加了個Web的皮,好用的不得了。原本我是把Reference Source壓縮包下載到本地解壓,然後grep著找代碼的,現在直接可以Go To Symbol了,每個方法還可以直接點擊跳轉到定義,或是Find Usages(當然這塊好像有bug,有些Reference找不出來)。這種分析都是要基於整個項目甚至解決方案進行分析的,不是什麼用個Lucene啊grep啊就能搞出來的。
LLVM只有個後端人家都高興成這樣了。在.net作為一個成熟了好多年的後端,和微軟即將到來的【免framework運行.net程序】的技術支持上,roslyn把前端也解決了,那大家就更高興了。
@趙劼已經把Roslyn的主攻方向說得很全面了,我來補充一點Roslyn給普通程序員能帶來的小甜頭:
Visual Studio裡帶有一個F# Interactive,可以互動式地輸入和執行F#代碼(REPL: read-eval-print loop)。很多時候,你想要臨時地做一些簡單的計算,或者想實驗一下某個靈光一閃的小點子,或者想要快速地確認一下某個自己不熟悉的函數之類的(比如Math.Sin究竟接受角度還是弧度?),又不想打斷手頭的工作重新開個VS實例新建一個工程去做,這個REPL控制台就顯得尤為有用——唯一的缺陷大概就是只支持F#。在Roslyn之前發布的社區預覽版(CTP)里,微軟就用Roslyn實現了一個類似的C# Interactive,非常實用,推薦大家試試。相信這個也會是下一代VS的標配。
這個問題的答案和另一個關於.net開源的問題的答案,一樣吧。微軟開源這些東西,可以說大部分都是Xamarin的功勞吧,沒有他,想正式開源的話阻力還是比較大的
其實協議仍然是比較嚴格的協議,只是這次終於成了被立項了(有專門的小組負責了),成立基金會了
會帶來什麼影響我在令一題解釋過了,無非是微軟的公關的一部分,試圖改變開源界對微軟的偏見。從來沒有希望有人貢獻,從來沒有希望被別的項目採用,只是為了方便開發者,調試一下,學習一下。.NET系列現在是全線開源了,Mono也被承認了。至少能表示.NET不再只是一個次要的開發工具,而是微軟最重要的開發者產品了 (不知道以後能不能用C#做桌面呢^_^)
DuoCode,Xamarin,各種依賴C#「奇葩」工具遍地開花。C#大法好。
希望帶來新的變革。
影響之一是我的GB2312的文件全部編譯錯誤最後寫了個工具批量轉成UTF8才搞定= =
以前C#/VB編譯器是由C++寫的,現在由C#/VB寫(Roslyn),且把編譯器的功能暴露成API。Roslyn的用處,對C#/VB的語言設計,新的語言特性可以快速原型化,因為寫C#/VB代碼比寫C++代碼輕鬆多了。其次,Roslyn API可以用來分析C#/VB的代碼,比如寫analyzer,另一個用處是C#/VB的元編程,但還處在萌芽期。Roslyn對一般程序員(應用程序程序員)幾乎沒啥用處,除了覺得VS 2015 editor好用酷炫一些。
好有危機感……
推薦閱讀:
※有哪些有趣的開源機器人項目?
※把程序做成開源的,對程序作者有什麼好處呢?
※你在使用Android開源項目的過程中都遇到過哪些坑?
※假如開源項目創始人去世了,項目怎麼辦?
※為什麼很多美國IT公司願意開源自己的某些代碼?
TAG:微軟Microsoft | 開源 | NET | C# | Roslyn編譯器 |