2006年9月5日 星期二

C++/CLI...What is it?

0

今天裝了VS2005,開了我第一個在其上的C++專案...
...
...
這是C++嗎?
看著不再熟悉的source code
馬上發動google大神來幫我釋疑

在微軟發展了.net之後,該架構被微軟拿去提交給ECMA委員會(其實微軟自己是委員之一啦)
變成了標準,通過了這一個中間層語言...
而未來幾年windows上得程式庫應該都會移植到.net平台上
上次忘了在哪邊看到的資料是2008以後binary code會在virtual machine上執行...
VS支援的語言中,VB那種直譯式的是比較沒差,不過譯完也不是機械碼
翻譯完是.net 中間層的程式碼,再由.net VM去執行
有趣的是,除了VB,其他語言全部都是如此
c#算是java的替代品,理所當然.net則是相對於java VM
然而C++編譯完的程式碼也不是機械碼,一樣是.net byte code
理論效率上應該會比直接編成機械碼來的慢,
不過慢多少倒是很難說啦,
http://www.vertigosoftware.com/Quake2.htm
這是上次在討論版上看到大陸一個寫遊戲程式的人在一篇文章上得佐證資料
他用這個來說明.net應該效率上不會造成太大的損失

在.net 1.1時的C++叫做manager c++
後來微軟找了herber suter跟stan lipperman進入VC team
前者是C++標準委員會的主席,後者是C++ primer的作者
這兩個大喀進微軟第一件事就是修改MC++~~他們覺得manager c++的語法太不自然了
所以現在的C++/CLI跟manager c++是不一樣的,也不相容
目前看來微軟的開發工具可說為了連結.net都做出了語法上得改變
而Visual Studio開出來的C++ windows form專案差點把我嚇死
專案一新建出來的東西有好幾個看不懂的關鍵字
首先就會在程式碼裡面看到這種東西 String ^argv
這算是.net新多出來的運算子符號,(^,%)==>(*,&) (呵,就是按照鍵盤上shift-8開始往下四個)
這是相對於原本的pointer跟reference,不過產生的物件是由.net管理記憶體垃圾回收和執行緒
此外也多出ref class A{} 跟value class A{}
不過在Bjanine的訪問上,他認為C++被擴充用來支援.net的特性其實可以用template的方式去完成,
雖然不知道那樣設計是不是可以漂亮點,不現在擴充關鍵詞的目的就是為了讓語法自然點
而我猜微軟不用template的方式是因為採用template的話,
程式在編譯的時候就會需要原始碼,如果是提供開發工具的話就得提供整個library的source
是否有人能提一下反方的看法呢?

現在C++/CLI也算是標準了,也是跟.net一樣有提交給ECMA
補充一下ECMA這組織是制定javascript標準的委員會,也是通過openoffice文件標準的
那java script的正式名稱是ECMA script,他其實真的跟java一點關係都沒有,只是語法用的是類java的
現階段C++ 0x (下一代的C++標準) 就真的不知道會怎樣了,不知道有沒有可能通過C++/CLI
VC++目前能開的專案還是很多,CLR系列是採用.net framework,而MFC跟ATL則看起來是跟.net無緣
我開了一下預設的MFC專案出來看了一下,他的整個東西還是跟以前一樣
MFC的視窗也一樣不能用物件拖拉,開windows form專案的話
整個設計就跟VB差不多了,視窗物件全部都可以從工具箱拉進去。

而mono呢?現在還是在.net 1.1而已,等到mono完全支援.net 2的話
在windows下寫的c++/CLI程式就可以直接拿去linux下了
mono還有支援arm平台喔~
所以呢,只要你能夠把mono放進去的話,程式應該是可以直接在mobile的東西上跑的
在我來說,.net頂多就是跨平台,類似java的技術平台,此外就是不同語言可以混合使用
可是部份重量級開發人員把他說成是最近軟體工程上最重要的事
他們都認為.net是未來軟體最具潛力的平台,是最近軟體業界最重要的發展...
如果只是剛才我說得那幾點,那java早就這樣啦
又沒什麼特別的,那是還有什麼事我沒看到的呢?
聽說.net 3.0(WINFX)將會是最輝煌的時代,我不太清楚哪些重要的技術細節會在3.0發表
3.0要在明年下半或後年上半才會發表,所以會有時間可以追一下
目前C++/CLI的書是一本都沒有,市面上VC++ 2005中文書全部都還在講MFC

0 意見:

 
Design by ThemeShift | Bloggerized by Lasantha - Free Blogger Templates | Best Web Hosting