Visual Studio、.NET、.NET Framework、Visual Studio Code辨析

Visual Studio、.NET、.NET Framework、Visual Studio Code辨析

微軟推出的軟件開發常見或易混淆的技術或工具,涉及的一些術語的簡要辨析。

 

Microsoft Visual Studio(簡稱VS)是美國微軟公司的開發工具包系列產品。VS是一個基本完整的開發工具集,它包括了整個軟件生命週期中所需要的大部分工具,如UML工具、代碼管控工具、集成開發環境(IDE)等等。1997年,微軟發佈了 Visual Studio 97。包含有面向 Windows 開發使用的Visual Basic 5.0、Visual C++ 5.0,面向Java開發的Visual J++和麪向數據庫開發的 Visual FoxPro。1998 年,微軟發佈了 Visual Studio 6.0,所有開發語言的開發環境版本均升至 6.0。之後,微軟開始推廣 .NET戰略,2002 年,隨着 .NET的大力推廣,微軟發佈了 Visual Studio.NET,成爲基於 NET Framework之上集成開發環境,從中剝離了 Visual FoxPro ,此同時,引入了建立在 .NET Framework上的託管代碼機制以及一門新的語言C#(讀作 C Sharp),Visual Basic、Visual C++ 都發生了變化,被擴展爲支持託管代碼機制的開發環境。至2019年4月2日,微軟發佈Visual Studio2019。Visual Studio是目前最流行的Windows平臺應用程序的集成開發環境。

 

 .NET 是一個通用開發平臺標準。 它具有幾項關鍵功能,例如支持多種編程語言、異步和併發編程模型以及本機互操作性,可以支持跨多個平臺的各種方案。 .NET 實現包括 .NET Framework、.NET Core 和 Mono。 .NET 的所有實現都遵守一個名爲 .NET Standard 的通用 API 規範。

 

.NET Core 是開放源代碼通用開發平臺,跨平臺,支持 Windows、macOS 和 Linux,並且可用於生成設備、雲和 IoT 應用程序。

 

Mono是一個由Xamarin公司所主持的自由開放源代碼項目。跨平臺,不僅可以運行於Windows系統上,還可以運行於Linux、macOS上。

 

.NET Framework 是用於爲 Web、Windows、Windows Server 和 Microsoft Azure 構建應用的開發平臺。 它包含公共語言運行時 (CLR) 和 .NET Framework 類庫,其中包括各種功能和對許多行業標準的支持。.NET Framework 提供許多服務,包括內存管理、類型和內存安全、安全性、網絡和應用程序部署。 它提供易於使用的數據結構和 API,將較低級別的 Windows 操作系統抽象化。 可在 .NET Framework 中使用不同編程語言,如 C#、F# 和 Visual Basic。

 

順便一提,微軟基礎類庫(Microsoft Foundation Classes,簡稱MFC)是微軟公司提供的一個類庫(class libraries),以C++類的形式封裝了Windows API,並且包含一個應用程序框架,以減少應用程序開發人員的難度和工作量。MFC已經基本上不再更新了。

 

SDK(Software Development Kit,軟件開發工具包)是爲特定軟件包、框架、硬件平臺、操作系統等建立引用軟件的開發工具的集合。SDK相當於很多API接口和其他支持文件的集合體。它是一個軟件工具包,一些功能性的SDK已經被當作一個產品來運營。

API (Application Programming Interface、應用程序編程接口),是一些預先定義的函數,目的是提供應用程序與開發人員基於某軟件或硬件得以訪問一組例程的能力,而又無需訪問源碼,或理解內部工作機制的細節。


Windows 的三大模塊就是以DLL( Dynamic Link Librar、動態鏈接庫)的形式提供的(Kernel32.dll,User32.dll,GDI32.dll),裏面就含有了 API函數的執行代碼。爲了使用 DLL 中的 API 函數, 必須要有 API 函數的聲明(.H)和其導入庫(.LIB),導入庫可以先這樣理解:導入庫是爲了在 DLL 中找到 API 的入口點而使用的。 
人們常把僅使用 API 來編寫應用程序的開發方式叫做“SDK編程”。爲減少應用程序開發人員的難度和工作量,一種方法是API進行了封裝處理,以編程框架和類庫的形式出現,比如MFC 。 

 

Visual Studio Code是一個輕量級但功能強大的源代碼編輯器,運行在桌面上,可用於Windows、MacOS和Linux。它帶有對JavaScript、TypeScript和Node.js的內置支持,併爲其他語言(如C++、Cype、Java、Python、PHP、GO)和運行時(如.NET和Unity)提供了豐富的擴展生態系統。

 

託管代碼(managed code)就是Visual Basic .NET和C#編譯器編譯出來的代碼。編譯器把代碼編譯成中間語言(IL、Intermediate Language),而不是能直接在你的電腦上運行的機器碼。中間語言被封裝在一個叫程序集(assembly)的文件中,程序集中包含了描述你所創建的類,方法和屬性(例如安全需求)的所有元數據。你可以拷貝這個程序集到另一臺服務器上部署它。通常來說,這個拷貝的動作就是部署流程中唯一的一個操作。
託管代碼在公共語言運行庫(CLR、Common Language Runtime)中運行。這個運行庫給你的運行代碼提供各種各樣的服務,通常來說,他會加載和驗證程序集,以此來保證中間語言的正確性。當某些方法被調用的時候,運行庫把具體的方法編譯成適合本地計算機運行的機器碼,然後會把編譯好的機器碼緩存起來,以備下次調用(這就是即時編譯)。隨着程序集的運行,運行庫會持續地提供各種服務,例如安全,內存管理,線程管理等等。這個程序被“託管”在運行庫中。Visual Basic .NET和C#只能產生託管代碼。如果你用這類語言寫程序,那麼所產生的代碼就是託管代碼。如果你願意,Visual C++ .NET可以生成託管代碼。當你創建一個項目的時候,選擇名字是以.Managed開頭的項目類型。例如.Managed C++ application。

非託管代碼(unmanaged code)就是在Visual Studio .NET 2002發佈之前所創建的代碼,例如Visual Basic 6, Visual C++ 6。 最糟糕的是,連那些依然殘存在你的硬盤中、陳舊C編譯器所產生的代碼都是非託管代碼。非託管代碼直接編譯成目標計算機的機器碼,這些代碼只能運行在編譯出它們的計算機上,或者是其它相同處理器或者幾乎一樣處理器的計算機上。非託管代碼不能享受一些運行庫所提供的服務,例如安全和內存管理等。如果非託管代碼需要進行內存管理等服務,就必須顯式地調用操作系統的接口,通常來說,它們會調用Windows SDK所提供的API來實現。就最近的情況來看,非託管程序會通過COM接口來獲取操作系統服務。跟Visual Studio平臺的其他編程語言不一樣,Visual C++可以創建非託管程序。當你創建一個項目,並且選擇名字以MFC,ATL或者Win32開頭的項目類型,那麼這個項目所產生的就是非託管程序。
總而言之,非託管代碼是運行在公共語言運行庫環境(CLR)的外部,由操作系統直接執行的代碼。非託管代碼必須提供自己的垃圾回收、類型檢查、安全支持等服務;它與託管代碼不同,後者從公共語言運行庫中獲得這些服務。

對於Visual Basic和C#來說,因爲你沒有其它選擇。當你在那些語言裏面聲明一個類,那麼這個類的實例會在託管堆中被創建,垃圾收集器(GC)會幫我們管理這些對象的回收。但是在Visual C++中,你有另一個選擇。即使你正創建一個託管程序,你可以決定哪些類是託管類型,哪些類是非託管類型的。
C++/CLI(Common Language Infrastructure、通用語言基礎架構)是.net下的規範,編譯器先編譯爲MSIL(Microsoft Intermediate Language 、微軟中間語言),也就是所謂的託管代碼了。C++/CLI可以被Visual C++2005和更高版本的編譯器支持。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章