Visual Studio 2008推出后,我的一些感想
Posted on 2007-11-23 12:40 海邊沫沫 閱讀(7608) 評論(20) 編輯 收藏 引用 所屬分類: 高起點C++學習之路前一段時間我還寫道:“微軟的東西搞著搞著就會心煩,我關注的是更具一般性的東西。”然而,這次微軟一推出Visual Studio 2008,我還是屁顛屁顛地跑去下載,這是典型的自己扇自己耳光了。扇就扇吧,新東西還是要體驗一下的。不過這新東西一出,總是搞得人心里亂亂的。
首先是一個學習的問題,舊的東西還沒用好就又要學新的東西,前面有人領跑,我們就在后面追,跑得氣喘吁吁卻越落越遠,感覺腦袋越來越不夠用了。我常想,長期這樣下去,會不會把人折磨成神經病。其次就是一個陣營選擇的問題,每次一有新的東西出來,我們都要斟酌一次究竟哪個陣營的產品效率更高、使用更方便、學習更簡單。這次也一樣,又要去考慮是選擇Java還是.net,是選擇JavaFX還是WPF/E,是選擇MFC還是Qt、wxWidgets或者其它的?頭疼啊!
后來我又想了一下,要想不這么累,也不是完全沒有辦法。辦法就是認準目標、勇往直前,不要管外面吹的什么東南西北風。有些時候,我發現越是無知,活得越是輕松。比如說,我要解決桌面編程的問題,那還是選擇MFC好了,也不要管外面說什么MFC封裝得不好,也不要管外面說MFC不能夠跨平臺,也不要管MFC寫出來的程序外觀丑陋、是一個模子里面印出來的。同理,使用Qt、wxWidgets的高手們,也沒有必要轉到MFC這里來。還有一個Java陣營的SWT/JFace,我也稍微花時間學習了一下,在條件允許的時候,也不是不可以用它來開發桌面程序,而且它的界面更加能夠給長期見慣Windows默認界面的用戶帶來一定的新意。另外一個要解決的是Web開發的問題,我想我還是繼續選擇Java吧,也不要管外面說什么ASP.net怎么怎么好、C#怎么怎么優雅、ADO.net怎么怎么強大,總之,要想自己不把自己逼瘋,就一定不能夠見異思遷,Java你都搞通了嗎?MVC、IOC、AOP、SOA你都搞通了嗎?JSF、JavaFX都用好了嗎?還有那么多的中間件、應用服務器,你都弄通了嗎?當然,在ASP.net方面有深厚造詣的高手們,就繼續深造下去吧。
還有一個問題,那就是WPF和SilverLight,在它們剛出現的時候,我沒有動,是因為懶得在Visual Studio 2005中安這個擴展那個擴展,麻煩。現在Visual Studio 2008和.net Framework 3.5來了,只需要一次就可以一步安裝到位了,我應該激動嗎?我激動過,因為我早就明白AJAX是不足的,需要有SilverLight來改善瀏覽器應用程序的用戶體驗。但是很快,這股激情就被磨滅了,因為《程序員》上的一篇文章說使用XML定義界面,解析器實現起來簡單,但是讓程序員自己編寫XML就太不人道了,而JavaFX使用專用的界面定義語言,則要優雅得多。我也知道有些人將XAML翻譯成“折磨”。《程序員》上又有一篇文章說Visual Studio 2008對Vista外觀的支持并不是它的重點。那么,對WPF,我還有什么值得激動的呢?
因此,對于桌面應用,我選擇Visual C++ 2008 和 MFC,看中的是Native;對于Web應用,我選擇Java,看中的是Java社區豐富的開源軟件,雖然我從未對開源社區做任何貢獻,但是有好的開源軟件,我還是要用的,也懶得再在.net上再多花一倍的學習時間;對于瀏覽器中的富客戶端應用,那還是等JavaFX吧。
我下載了Visual Studio 2008,不過是Express版,因為不想下載90天試用版,免得90天后用不了了又要重新安裝。Express版還是給我帶來了一些失望:Visual C++ 2008 Express竟然不包含MFC,太過分了。雖然Visual C# 2008 Express對WPF支持非常好,但是剛才的分析已經說了,我對WPF已經不感冒了。
在Visual C++ Express 2008中,還有一個我關注的問題這里也提一下,那就是它沒有走在C++ 0x標準的前面,它沒有包含tr1標準庫,它的hash_map、hash_set依然沒有更名為unordered_map、unordered_set。與此對應的是,GCC 4.2版已經包含了大部分的tr1庫,看來,在C++ 0x標準推出之后,GCC在標準的方面可能要比VC++領先一步吧。
Visual C++ 2008提供了for each語法,那是要關注一下的,網上有人猜測VC++ 2008提供for each語法是為了能更好的和.net一起工作,MSDN中對for each的示例也是用的CLI。那么,在Native代碼中能使用for each嗎?結果是能的,下面是我的測試代碼:
#include?<vector>
#include?<string>
#include?<iostream>


int?main()


{
????std::vector<std::string>?v_s;
????v_s.push_back("abc");
????v_s.push_back("def");
????v_s.push_back("bcdefg");

????for?each(std::string?s?in?v_s)
{
????????std::cout?<<?s?<<?std::endl;
????}
????return?0;
}
它可以正常工作。只是我把for each(std::string s in v_s)修改為for each(std::string & s in v_s)之后,編譯通不過了。我有點想不明白,為什么不能用引用呢?把對象放到容器中要發生一次復制操作,難道遍歷容器中的元素也要發生一次復制操作嗎?這很顯然不爽。
好了,就寫到這了。Visual Studio2008 Express我下載后時間還短,再加上看問題的水平也很有限。錯誤的地方,歡迎大家指正。
首先是一個學習的問題,舊的東西還沒用好就又要學新的東西,前面有人領跑,我們就在后面追,跑得氣喘吁吁卻越落越遠,感覺腦袋越來越不夠用了。我常想,長期這樣下去,會不會把人折磨成神經病。其次就是一個陣營選擇的問題,每次一有新的東西出來,我們都要斟酌一次究竟哪個陣營的產品效率更高、使用更方便、學習更簡單。這次也一樣,又要去考慮是選擇Java還是.net,是選擇JavaFX還是WPF/E,是選擇MFC還是Qt、wxWidgets或者其它的?頭疼啊!
后來我又想了一下,要想不這么累,也不是完全沒有辦法。辦法就是認準目標、勇往直前,不要管外面吹的什么東南西北風。有些時候,我發現越是無知,活得越是輕松。比如說,我要解決桌面編程的問題,那還是選擇MFC好了,也不要管外面說什么MFC封裝得不好,也不要管外面說MFC不能夠跨平臺,也不要管MFC寫出來的程序外觀丑陋、是一個模子里面印出來的。同理,使用Qt、wxWidgets的高手們,也沒有必要轉到MFC這里來。還有一個Java陣營的SWT/JFace,我也稍微花時間學習了一下,在條件允許的時候,也不是不可以用它來開發桌面程序,而且它的界面更加能夠給長期見慣Windows默認界面的用戶帶來一定的新意。另外一個要解決的是Web開發的問題,我想我還是繼續選擇Java吧,也不要管外面說什么ASP.net怎么怎么好、C#怎么怎么優雅、ADO.net怎么怎么強大,總之,要想自己不把自己逼瘋,就一定不能夠見異思遷,Java你都搞通了嗎?MVC、IOC、AOP、SOA你都搞通了嗎?JSF、JavaFX都用好了嗎?還有那么多的中間件、應用服務器,你都弄通了嗎?當然,在ASP.net方面有深厚造詣的高手們,就繼續深造下去吧。
還有一個問題,那就是WPF和SilverLight,在它們剛出現的時候,我沒有動,是因為懶得在Visual Studio 2005中安這個擴展那個擴展,麻煩。現在Visual Studio 2008和.net Framework 3.5來了,只需要一次就可以一步安裝到位了,我應該激動嗎?我激動過,因為我早就明白AJAX是不足的,需要有SilverLight來改善瀏覽器應用程序的用戶體驗。但是很快,這股激情就被磨滅了,因為《程序員》上的一篇文章說使用XML定義界面,解析器實現起來簡單,但是讓程序員自己編寫XML就太不人道了,而JavaFX使用專用的界面定義語言,則要優雅得多。我也知道有些人將XAML翻譯成“折磨”。《程序員》上又有一篇文章說Visual Studio 2008對Vista外觀的支持并不是它的重點。那么,對WPF,我還有什么值得激動的呢?
因此,對于桌面應用,我選擇Visual C++ 2008 和 MFC,看中的是Native;對于Web應用,我選擇Java,看中的是Java社區豐富的開源軟件,雖然我從未對開源社區做任何貢獻,但是有好的開源軟件,我還是要用的,也懶得再在.net上再多花一倍的學習時間;對于瀏覽器中的富客戶端應用,那還是等JavaFX吧。
我下載了Visual Studio 2008,不過是Express版,因為不想下載90天試用版,免得90天后用不了了又要重新安裝。Express版還是給我帶來了一些失望:Visual C++ 2008 Express竟然不包含MFC,太過分了。雖然Visual C# 2008 Express對WPF支持非常好,但是剛才的分析已經說了,我對WPF已經不感冒了。
在Visual C++ Express 2008中,還有一個我關注的問題這里也提一下,那就是它沒有走在C++ 0x標準的前面,它沒有包含tr1標準庫,它的hash_map、hash_set依然沒有更名為unordered_map、unordered_set。與此對應的是,GCC 4.2版已經包含了大部分的tr1庫,看來,在C++ 0x標準推出之后,GCC在標準的方面可能要比VC++領先一步吧。
Visual C++ 2008提供了for each語法,那是要關注一下的,網上有人猜測VC++ 2008提供for each語法是為了能更好的和.net一起工作,MSDN中對for each的示例也是用的CLI。那么,在Native代碼中能使用for each嗎?結果是能的,下面是我的測試代碼:




















它可以正常工作。只是我把for each(std::string s in v_s)修改為for each(std::string & s in v_s)之后,編譯通不過了。我有點想不明白,為什么不能用引用呢?把對象放到容器中要發生一次復制操作,難道遍歷容器中的元素也要發生一次復制操作嗎?這很顯然不爽。
好了,就寫到這了。Visual Studio2008 Express我下載后時間還短,再加上看問題的水平也很有限。錯誤的地方,歡迎大家指正。