[C++/CLI編程寶典][2]什麼是C++/CLI語言

來源:互聯網
上載者:User

對於什麼是C++/CLI,我們首先可以簡單的將其名字劃分為兩部分來理解,第一,C++,我們熟悉的目前被廣泛使用的物件導向的ISO國際標準的進階語言,也稱為ISOC++,我們這裡以後均稱其為ISOC++;第二,CLI,我們可以認為是對ISOC++在CLI上擴充。CLI是通用語言架構的縮寫,微軟的.NET就是架構在CLI其上,雖然CLI現在也是ISO標準,但是C++/CLI並不是ISOC++委員會對其進行的擴充,所以C++/CLI並不是新版的ISOC++標準,它只是微軟針他的CLI實現.NET的擴充。雖然C++/CLI目前並不是ISO標準,但是C++/CLI結合了ISOC++和.NET具有超強的能力,這也就註定了它不可能被我們忽視。

其實C++/CLI除了包含ISOC++和CLI擴充,還有它之所以強大的更重要的原因就是它實現了ISOC++和.NET的無縫串連。下面就詳細看這三方面:

1)ISOC++語言

我們知道C++是一門ISO的物件導向的語言,對於這門語言我們也從以下三個方面來看,也正是這三個主要方面決定了他被廣泛的使用。第一,C++是一個功能強大的語言。比如C++語言本身提供的基於C語言的內嵌類型,數組,結構體和指標等,C++比C新加入的物件導向的Class,繼承,多態和模板等,還有C++標準模板庫(STL)提供的實際開發當中常用的資料結構和演算法的實現;第二,大量的開源和第三方庫,如果在windows上使用C++開發,首先我們可以藉助microsoft對C++提供的強有力的支援,比如說VS編譯器,還有UI庫MFC,還有ATL等;除此之外我們還可以看到其他的許多非microsoft的開源的和第三方的支援,比如說Boost很大程度的擴充了STL,提供了更多更進階的功能,還有Loki把C++與設計模式結合起來,還有很多的第三方的UI庫,比如QT,WxWindows,WTL,GTK等,第三方的網路通訊庫,比如ACE,StreamModule等,第三方的XML庫,比如Xerces,CMarkup,tinyxml等,第三方的科學計算庫,比如Blitz++,MTL等,第三方的遊戲開發庫,比如OGRE,KlayGE等,第三方的線程庫,比如C++ Threads,ZThreads等,還有其他的很多;第三,C++的高效能。C++的這一特性也是毋庸質疑的,我們知道的大部分的作業系統,嵌入式開發,遊戲,映像軟體離不開C++,這都是跟C++的高效能有很大的關係,單從這一點來看,這就是很多現代的其他的進階語言所欠缺的,也正是這點註定了C++以後仍然有很長的路要走。

2)CLI

CLI(Common Language Infrastructure,通用語言架構)提供了一套可執行代碼和它所運行需要的虛擬執行環境的規範。更通俗的我們可以說它是一個虛擬平台,是作業系統和應用程式間的一層抽象。微軟的.NET的基礎CLR(Common Language Runtime,通用語言運行時)就是CLI的一個執行個體。CLI主要的組成部分有:CTS,Metadata,CLS和VES。

CTS(Common Type System,一般型別系統)是CLI的基礎,它是一個類型規範,定義了所有CLI平台上可以定義的類型的集合,所有基於CLI的語言類型都是CTS的一個子集,目前C++/CLI是對CTS描述支援最好的進階語言。

Metadata(中繼資料):用來描述和引用CTS定義的類型,中繼資料以一種獨立於任何語言的形式儲存,正是中繼資料賦予了組建自描述的能力。

CLS(Common Language Specification,通用語言規範),是用以確保所有CLI語言能夠互操作的一組規則,它定義了所有CLI語言都必須支援的一個最小功能集(一個CTS的子集)。各CLI語言可以選擇自己對CTS的一部分的映射,但是為了確保不同語言的互動,至少應該支援CLS所定義的最小功能集。

VES(Virtual Execution System,虛擬執行系統),為CLI程式提供了一個在各種可能的平台上載入和執行Managed 程式碼的虛擬機器環境,只是一個規範,比如微軟和momo就各有自己的實現。.NET的CLR的JIT和GC應該屬於此範圍。

.NET Framework是微軟對CLI的一個實現,當然也是目前最好的實現,.NET Framework主要包含CLR和BCL,CLR是核心也即CLI的實現,BCL是一套通用的程式碼程式庫,可以被所有的.NET語言(C#, VB.NET, C++/CLI)程式所使用。

3)ISOC++和CLI的無縫串連

C++/CLI支援對本地ISOC++編程和.NET託管編程的無縫整合,不是簡單的混合,不僅能夠像.NET調用windows APIs一樣通過P/Invoke來實現函數互調,而且可以實作類別型class級和ISOC++和.NET類庫的相互使用,更強的是能夠實作類別型的混合。為了實現無縫串連,絕大多數的以前的ISO C++代碼編譯後將得到Managed 程式碼,部分不能編譯為託管IL的採用P/Invoke調用實現。代碼託管,但是資料並不託管,原來ISOC++中本地堆內的資料仍位於本地堆中。

綜上,我們可以總結C++/CLI是ISOC++在.NET的擴充,是ISOC++和.NET的無縫結合。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.