[中文翻譯] Visual Studio的 羅斯林專案(Roslyn Project) -- 顯露C#和VB編譯器的程式碼分析 #1

摘要:[中文翻譯] Visual Studio的 羅斯林專案(Roslyn Project) -- 顯露C#和VB編譯器的程式碼分析 #1

這篇文章源自微軟msdn -- http://msdn.microsoft.com/en-us/vstudio/hh500769.aspx

 

 

有些比較艱澀的詞彙,我也翻譯不出來。

所以先透過翻譯軟體,然後我再進行潤稿。

如果詞不達義,先說聲抱歉。建議以原文為主。

中文翻譯稿,歡迎使用。...... 希望您引用時能加上本文的URL(超連結)& 翻譯者:MIS2000 Lab.   謝謝。

 

================================================================================
 
羅斯林專案 -- 顯露C#和VB編譯器的程式碼分析
Roslyn Project -- Exposing the C# and VB compiler’s code analysis

2012年9月

Karen Ng, Principal Lead Program Manager, Microsoft Corporation
Matt Warren, Principal Architect, Microsoft Corporation
Peter Golde, Partner Architect, Microsoft Corporation
Anders Hejlsberg, Technical Fellow, Microsoft Corporation
 
這是一個初步的文件,在最終商業發布之前,可能會大幅改變所述軟體的內容。
 
本文檔中包含的信息代表Microsoft Corporation在公佈之日起,所討論的問題的當前觀點。 因為Microsoft必須順應不斷變化的市場條件,它不應該被解釋為是微軟承諾的一部分,Microsoft不能保證這些訊息在正式出版日期後的準確性。
 
本白皮書僅供參考。 MICROSOFT不做任何明示,默示或法定的,如在這個文件中的信息。
 
Complying with all applicable copyright laws is the responsibility of the user.  Without limiting the rights under copyright, no part of this document may be reproduced, stored in or introduced into a retrieval system, or transmitted in any form or by any means (electronic, mechanical, photocopying, recording, or otherwise), or for any purpose, without the express written permission of Microsoft Corporation.
 
Microsoft可能擁有專利,專利申請,商標,版權或其他知識產權覆蓋本文檔中的題材。 除從Microsoft的任何書面許可協議中明確規定,提供本文檔不給你這些專利,商標,版權或其他知識產權的任何許可。
 
除非另有說明,公司,組織,產品,域名,電子郵件地址,徽標,人員,地點,和事件的示例中所描述的均為虛構。 沒有與任何真實的公司,組織,產品,域名,電子郵件地址,徽標,人員,地點或事件的目的是,或應進行這方面的推斷。
 
c2011微軟公司。 保留所有權利。
微軟MS-DOS,Windows中,Windows服務器,Windows Vista中時,Visual Studio是Microsoft Corporation在美國和/或其他國家的註冊商標或商標。
所有其他商標均為其各自所有者的財產。
 
內容
1引言
 
2公布核心的API
  2.1關鍵概念
  2.2 API層
    2.2.1編譯器的API
    2.2.2腳本(Scripting)API
    2.2.3工作區(Workspace)的API
    2.2.4服務API
 
3使用語法
  3.1關鍵概念
    3.1.1語法樹
    3.1.2語法節點
    3.1.3語法令牌(Token)
    3.1.4語法(其他)花絮(Trivia)
    3.1.5跨(Spans)
    3.1.6種(Kinds)
    3.1.7錯誤
  3.2獲得語法樹
  3.3操作語法節點
    3.3.1創建一個節點
    3.3.2修改現有節點
    3.3.3替換(取代)節點
    3.3.4創建語法樹
4語義工作
  4.1關鍵概念
    4.1.1編譯
    4.1.2符號
    4.1.3語義模型
  4.2獲取編譯
  4.3獲取符號
  4.4詢問語義的問題
  4.5容錯
  4.6使用控制和資料流分析的API
 
5使用工作區
  5.1關鍵概念
    5.1.1工作區
    5.1.2解決方案,專案,文件
  5.2獲取工作區
  5.3使用一個解決方案
  5.4更新工作區
 
6使用服務
  6.1關鍵概念
    6.1.1受管理的可延展框架
    6.2創建一個IDE延展工具
 
7概要
 
 
 
 
1引言
 
傳統上,編譯器像是一個的黑盒子 – 原始碼(源碼)在盒子的一端,奇妙的事情發生在中間,物件文件或組合常式(assembly)則位於的另一端。 編譯器執行他們的魔法,他們對於正在處理的程式碼必須深入了解,但這些處理的資訊不需要每個人都懂,頂多編譯器與相關的精靈瞭解即可。因此 翻譯後的輸出產生的資訊迅速被遺忘。
 
對編譯器來說,幾十年來一直妥善地為我們所用,但只是會用編譯器已經不夠。 我們越來越依賴於整合開發環境(IDE)的功能,如IntelliSense(程式碼的智慧選字)、intelligent rename(智慧重新命名)、重構(refactoring),“尋找所有參考”和“定義”以提高我們的生產力。我們依靠程式碼分析工具以改善我們的程式碼品質,程式碼產生器幫助我們加速建立應用程式。 由於這些工具變得更聰明,它們需要深入越來越深的程式碼知識,偏偏這些知識都藏在編譯器裡面。 這就是Roslyn Project要作的核心任務:開啟這個神秘的黑盒子,並允許工具和用戶(程式設計師)共享編譯器處理我們的程式碼時的豐富資訊。 取代原本不透明的原始碼和翻譯的物件碼,編譯器通過Roslyn Project成為一種”服務”—也就是APIs,你可以用你的工具、以及應用程式裡面的程式碼任務。
 
讓編譯器作為”服務”的過渡,為集中創建程式碼工具和應用程序大大降低了進入門檻。 它創造了許多革新,如:meta-Programming、產生程式碼和轉化,交互使用C#和VB語言,和某些特殊領域的嵌入式C#和VB語言。
 
微軟的“Roslyn” CTP(社群預覽版 http://msdn.microsoft.com/en-us/vstudio/roslyn.aspx讓大家預覽了程式碼產生、分析和重構的全新語言物件模型,以及即將推出的支持腳本(Script)和可交互使用的C#和Visual Basic語言。 本文提供Roslyn Project的概念性概述。 進一步的細節,可以發現在“Roslyn” CTP中包含的演練和樣品。
 
 
2公開核心的APIs
 
Roslyn Project透過API層為您顯露出C#和Visual Basic編譯器的程式碼分析,讓一般消費者(用戶)可用來對應傳統的編譯器管道。
這條管線的每一個階段,現在都是一個單獨的組件。 首先,在解析階段,其中原始碼(source)記號化(tokenized)和被解析成不同語言的語法。第二,聲明階段,即從原始碼和輸入的metadata進行分析,以形成命名符號(form named symbols)。 接下來,綁定(繫結、Bind)的階段,在原始碼中的識別符號(identifier)逐一匹配成符號(symbol)。最後的發行階段,所有的訊息被編譯器建立並發行為組合常式(assembly)。
 
對應每一個階段都會浮現出一個物件模型,它允許在該階段的資訊的存取。 解析階段呈現出語法樹(syntax tree),聲明階段則是分層語法表(hierarchical symbol table),綁定(繫結、Bind)的階段是將一個模型,用以展現編譯器進行語義分析後的結果,而最後的發行階段則為API產生IL byte code。
 
 
每個編譯器將這些組件組合在一起,作為一個單一的點對點(end-to-end)整體。
 
Roslyn語言服務就是為了讓公開編譯器APIs足以為建設世界一流的IDE特色。 例如,程式碼概述和格式化功能使用的語法樹,物件瀏覽器和導航功能會使用到的符號表,重構和定義使用語義模型(semantic model),編輯(Edit)與繼續(Continue)使用所有這些,包括發行的APIs。
 
2.1關鍵概念
本節討論的主要概念,關於Roslyn Project架構層。
 
2.2 API層
Roslyn Project公開三種的API集合(如下圖) - 編譯器的APIs,服務的APIs,和編輯器服務APIs。
 
2.2.1編譯器的API
編譯器層含有展現在編譯器管道的每個階段的資訊(包含:語法和語義)與對應的物件模型。 編譯器層還包含一個編譯器的單一調用之表示法,包括組合常式的參考,編譯器選項和原始碼文件。 有兩種不同的APIs代表了C#語言和Visual Basic語言。 這兩個APIs形狀相似。 這一層並不依賴於Visual Studio組件。
 
2.2.2腳本(Scripting)API
作為編譯器層的一部分,一組腳本API暴露,代表了在執行期間運作context的C#或Visual Basic的程式碼片段。 它包含一個腳本引擎,允許評價表達式(運算式)和語句作為程式的頂層構造。 這一層並不依賴於Visual Studio組件。
註解:本文的討論並不包含的腳本API。 要了解更多,請參閱這兩份文件 -- Interactive - Scripting Introduction to Implementing Host Commands in Script Code.docx與Interactive - Paint-like Application Scripting.docx。
 
2.2.3服務API
服務層包含工作區(Workspace)APIs,這是在整個解決方案之中,做程式碼分析和重構的起點。 它可幫助您在一個解決方案中的所有專案的資訊組織成為單一的物件模型,為您提供直接存取編譯器層的物件模型,無需解析文件,設定選項或管理專案之間的依存關係。
此外,在服務層外圍會使用一組常用的APIs,當您整合程式碼分析和重構工具,如主機中Visual Studio IDE環境中的”尋找所有參考”,”格式化”和”程式碼建構APIs”。
這一層並不依賴於Visual Studio組件。
 
2.2.4編輯器服務API
編輯服務層包含了所有Visual Studio IDE的功能,如IntelliSense,重構,程式碼的格式化功能。 它還包含編輯器服務API,它允許用戶很容易地擴展到Visual Studio之中。
這層有一個依賴於Visual Studio的文本編輯器和Visual Studio軟件開發套件(SDK)。
 
 
 
 
 
 
 
 
未完,待續......
 
 
 
 
 

2014/5/15 補充:大陸的熱心網友 Ray Linn已經完成翻譯,請看

http://blogs.ejb.cc/archives/7604/dotnet-compile-platform-roslyn-overview

 
 
 
 
 

我將思想傳授他人, 他人之所得,亦無損於我之所有;

猶如一人以我的燭火點燭,光亮與他同在,我卻不因此身處黑暗。----Thomas Jefferson

線上課程,遠距教學 (Web Form 49hr)  https://dotblogs.com.tw/mis2000lab/2016/02/01/aspnet_online_learning_distance_education_VS2015

線上課程,遠距教學 (ASP.NET MVC 75hr)  https://dotblogs.com.tw/mis2000lab/2018/08/14/ASPnet_MVC_Online_Learning_MIS2000Lab

ASP.NET MVC線上課程 第一天 免費看 (5.5小時) 

寫信給我,不要私訊 --  mis2000lab (at) yahoo.com.台灣  或  school (at) mis2000lab.net


ASP.NET遠距教學、線上課程(Web Form + MVC)。 第一天課程, "完整" 試聽。 

................   facebook社團   https://www.facebook.com/mis2000lab   ......................

................  YouTube (ASP.NET) 線上教學影片  https://www.youtube.com/channel/UC6IPPf6tvsNG8zX3u1LddvA/

 

Blog文章 "附的範例" 無法下載,請看 這裡 ...... https://dotblogs.com.tw/mis2000lab/2016/03/14/2008_2015_mis2000lab_sample_download

請看我們的「售後服務」範圍(嚴格認定)

......................................................................................................................................................

...................................................................................................................................................... 

[遠距教學、教學影片] ASP.NET (Web Form) 課程 上線了!MIS2000Lab.主講

事先錄製好的影片,並非上課時側錄!   觀看影片時,有如我「一對一」跟您面對面講課

 

ASP.NET MVC 5 線上教學

累積時數約 75小時...... 第一天(5.5小時)完整內容,"免費"讓您評估