//=====================================================================
//TITLE:
// 為什麼Windows Phone 7不支援C++?
//AUTHOR:
// norains
//DATE:
// Thursday 5-August-2011
//Environment:
// Windows Phone 7
//=====================================================================
當我第一次知道Windows Phone 7不支援C++開發時,感覺是非常地震驚,同時也非常迷惑不解。但隨著時間的慢慢推移,也終於理解微軟如此的初衷:如果讓Windows Phone 7支援C++開發的話,很可能會是推廣的一大障礙!
聽起來是不是很悚然聽聞?但在說這個問題之前,先問幾個問題:
你知道CPU有多少種架構嗎?你聽說過ARM,X86,MIPS,SH3這些名詞嗎?你知道ARM的指令集分為多少種嗎?你知道你手機用的是哪種ARM指令集嗎?
我想,即使是程式員,如果不是做嵌入式的,可能對於這些問題也不一定回答地完全正確。那麼,又如何苛求作為最普通的使用者去明白這些呢?
也許到這裡,還有不少朋友疑惑,這個和普通的使用者又有什麼關係。其實,關係大著呢。舉個例子,假設有個用C++編寫的Windows Phone 7的最簡單的僅僅是輸出“Hello World!”的程式,放到一台運行Windows Phone 7的手機上,你說能不能一定正常運行?
答案是:不一定。我們知道,C++編譯後的程式是二進位代碼,而這二進位代碼是和CPU的架構有關的。即使你編譯的是Windows Phone 7的程式,但指令集選擇的是ARM,那你這程式絕對是無法在MIPS架構的CPU上啟動並執行!
聽起來似乎也沒那麼嚴重,我們只要選擇對應的CPU架構不就好了嗎?似乎如此。但我們從另一個角度來看問題。現在Apple的那個網上程式商店不是很火嗎?很顯然,微軟肯定也很眼饞這一塊。那麼,假設微軟也要做類似的網上程式商店,那麼放在商店的程式有什麼要求呢?是不是同樣的一個程式,必須要分為ARM,MIPS,X86版本?因為這樣用C++編譯好的程式,才能放在對應的CPU上進行啊!
這問題難道還不夠嚴重嗎?嘗試回答一個問題:自己所使用的手機用的是那種架構,哪種指令集?估計如果不拆機器,不是內部人員,估計還真沒幾個人能夠精確回答。程式員都如此了,何況普通使用者?如果普通使用者下載了個用C++編譯的程式,發現無法運行,你覺得他們會花時間去瞭解什麼是CPU架構,然後去下載相對應的版本嗎?估計他會說:NND,這程式不能用,這Windows Phone 7真爛!
回過頭來,為什麼IPhone可以用Object-C?理由非常簡單:因為IPhone的硬體是APPLE設計的,他們就只用一種CPU架構,絕無分店。所以對於IPhone來說,根本就不存在於架構的差別。但對於微軟來說,就不是如此了。微軟只是提供了作業系統,也就是軟體層面;對於硬體來說,微軟是不可控的,為了Windows Phone 7的銷量,也絕對不可能說是局限於某個特定的架構,所以硬體是百花齊放的。
但微軟如果真想搞網上程式商店的話,那麼他必須要嚮應用程式員以及使用者來屏蔽這種差異。C++是和CPU架構相關的,所以不能勝任;唯一能擔當此責任的,唯有.NET。而C#作為.NET的先鋒,自然義無反顧。
類似的情況在Google的Android也是如此。Google無法控制所使用的硬體,也不打算局限於某個架構,所以它也必須使用一種能夠屏蔽此差異的語言。選擇微軟的.NET?要是真是如此,估計真的被驢踢了。那麼,剩下的選擇便只有JAVA了。
簡單點來說,如果一個公司,能夠控制作業系統和產品的硬體,那麼首選就是C/C++(或Object-C等等),因為運行效率擺在那裡,比如APPLE;如果一個公司,只是提供作業系統,無法控制硬體,那為了屏蔽硬體的差異,只能捨棄效率,使用基於虛擬機器的語言,比如微軟,GOOGLE。
作為本文的最後,再來討論一下Windows的問題。因為已經有放出訊息,說Windows 8將不局限於X86架構,也要在ARM上能夠運行。如果屆時微軟成功的話,那麼是不是意味著,Windows 8的應用程式層面的開發將是C#的天下?