托管擴(kuò)展 C++ 遷移到 C++/CLI
對于C++/CLI代表 ISO-C++標(biāo)準(zhǔn)語言的一個動態(tài)編程泛型擴(kuò)展在原版語言設(shè)計中有許多,我們覺得在修訂版語言設(shè)計 (V2) 中已經(jīng)修正了這些弱點(diǎn),下面進(jìn)行說明學(xué)習(xí)研究。。。
本文列舉了 V1 版本語言的功能和它們在 V2 版本中的對應(yīng)功能(如果存在);并指出了其對應(yīng)功能不存在的構(gòu)造。對于有興趣的讀者,可以查看附錄中提供新語言設(shè)計的擴(kuò)展原理。另外,一個源代碼級別的轉(zhuǎn)換工具 (mscfront) 正在開發(fā)中,而且可能在 C++/CLI的發(fā)布版中提供給希望將 V1 代碼自動移植到新語言設(shè)計的人。
本文分為五個章節(jié)加一個附錄。***節(jié)討論語言關(guān)鍵字的主要問題,特別是雙下劃線的移除以及與上下文相關(guān)和由空格分隔的關(guān)鍵字。第二節(jié)著眼于托管類型的變化 — 特別是托管引用類型和數(shù)組。還可以在這里找到有關(guān)確定性終結(jié)語義 (deterministic finalization) 的詳細(xì)討論。關(guān)于類成員的變化,例如屬性、索引屬性和操作符,是第三節(jié)的重點(diǎn)。第四節(jié)著眼于 CLI 枚舉、內(nèi)部和釘住指針的語法變化。它也討論了許多可觀的語義變化,例如隱式裝箱的引入、CLI枚舉的變化,和對值類中默認(rèn)構(gòu)造函數(shù)的支持的移除。第五節(jié)有點(diǎn)像大雜燴 — 亂七八糟的雜項(xiàng)。討論了類型轉(zhuǎn)換符號、字符串字符的行為和參數(shù)數(shù)組。
1. 語言關(guān)鍵字
原版到修訂版語言設(shè)計的一個重要轉(zhuǎn)換是在所有關(guān)鍵字中去掉雙下劃線。舉例來說,一個屬性現(xiàn)在被聲明為 property而不是 __property。在原版語言設(shè)計中使用雙下劃線前綴的兩個主要原因是:
1. |
這是提供符合 ISO-C++標(biāo)準(zhǔn)的本地擴(kuò)展的一致性方法。原版語言設(shè)計的一個主要目標(biāo)就是不引入與標(biāo)準(zhǔn)語言的不兼容性,例如新的關(guān)鍵字和標(biāo)記。這個原因很大程度上也推動了對聲明托管引用類型的對象的指針語法的選擇。 |
2. |
雙下劃線的使用,除了兼容性方面的原因之外,也是一個不會對有舊代碼基礎(chǔ)的用戶造成影響的合理保證。這是原版語言設(shè)計的第二主要目標(biāo)。 |
這樣的話,為什么我們移除雙下劃線(并且引入了一些新的標(biāo)記)?不是的,這并不代表我們不再考慮和標(biāo)準(zhǔn)保持一致!
我們繼續(xù)致力于和標(biāo)準(zhǔn)一致。盡管如此,我們意識到對 CLI動態(tài)對象模型的支持表現(xiàn)出了一種全新的強(qiáng)大的編程范型。我們在原版語言設(shè)計上的經(jīng)驗(yàn)以及設(shè)計與發(fā)展 C++ 語言本身的經(jīng)驗(yàn)使我們確信,對這個新范型的支持需要它自己的高級關(guān)鍵字和標(biāo)記。我們想提供一個該新范型的***表達(dá)方式,整合它并且支持標(biāo)準(zhǔn)語言。我們希望您會感受到修訂版語言設(shè)計提供了對這兩種截然不同的對象模型的***的編程體驗(yàn)。
類似的,我們很關(guān)心最小化這些新的關(guān)鍵字的對現(xiàn)有代碼可能造成的沖擊。這是用與上下文相關(guān)和由空格分隔的關(guān)鍵字來解決的。在我們著眼于實(shí)際語言語法的修訂之前,讓我們試試搞清楚這兩個特別關(guān)鍵字的特點(diǎn)。
一個與上下文相關(guān)的關(guān)鍵字在特定的程序上下文中有特殊的含義。例如,在通常的程序中,sealed 是一個普通標(biāo)識符。但是,在一個托管引用類類型的聲明部分,它就是類聲明上下文中的一個關(guān)鍵字。這使得在語言中引入一個新的關(guān)鍵字的潛在影響降到***程度,我們認(rèn)為,C++/CLI這對已經(jīng)擁有代碼基的用戶非常重要。同時,它允許新功能的使用者獲得***的新增語言功能的體驗(yàn) — 我們認(rèn)為在原版語言設(shè)計中缺少這些因素。我們將在
【編輯推薦】