很少寫原創博,今天一篇,算是對自己以往學習的總結。
現代作業系統的起源,我想毫無疑問是從UNIX開始的。而UNIX的開始,又是從C語言開始。UNIX和C是天生的一對。C寫了UNIX,當然會有少量彙編。而UNIX的API匯出,當然是C的方式。也就是說要去使用UNIX的功能,第一理想編寫語言當然是C。C的特點無需要多說,介紹的書太多了。這一切看似自然而然,其中確有一個深刻的根基。C是程式語言友好語言,不知道是否有人明白。
C語言的友好性,在於,它是基於函數的。而其它任何語言,都是可以很方便匯入C語言的函數的。例如, C# P/Invoke, C++, Visual Basic. 而即使角本語言,如Ruby,雖然不能直接匯入C的庫,但確可以通過擴充,可以產生Ruby模組庫。而編寫模組庫的語言,當然也是C。
作業系統還在進化。C的缺點,寫代碼或多或少知道。系統越來越複雜,而物件導向是公認的複雜性的解決辦法。作業系統需要基於物件導向的組件化程式庫。AT&T的C++成為公認的物件導向語言。而離開的Apple的Steve Jobs, 創辦了一家叫Next的公司,這家公司當然,也生產作業系統,名叫NextStep。大約都到了1993年這個時候,業界開始了組件化平台嘗試。
Windows引入一個叫COM的組件化平台,它不是由特定電腦語言產生的庫,而是一種規範。C++被賦予了編寫COM組件的任務。而天生的基於COM思想的語言,就是Visual Basic。它既可以生產COM組件,也可以消費COM組件。COM規範不複雜,但確以難以理解而著稱。關於COM,有相當的多的書可以看。微軟也出了一系列工具去解決這個問題,但好像除了微軟,其它組織很難編寫出好的COM。他們都是從微軟挖人才能完成COM的編寫。
而在這個相當的時間,NextStep推出了自己的組件化平台Cocoa。熟悉的人知道它是蘋果的組件化平台,但它真實起源確實從NextStep開始的。與微軟的不同,它是基於一個程式設計語言的:Objective-C。這一切開始的自然而然,因為UNIX的平台也是從一個語言開始的。一個問題出現了,為什麼Windows沒有採用業界公認的物件導向語言C++去編寫這個組件平台,而是自訂這個叫COM的組件開台?
我查資料,沒有答案。或許就是沒有答案?曆史在這裡開了一個玩笑。作為C的物件導向的接班人C++,居然沒有被選擇去接物件導向作業系統的班。那麼那個叫Objective-C的呢?其實它也是C的物件導向的接班人,只是它出身不如,名氣不如,所以似乎走向小眾。而似乎NextStep也是小眾,因為當時Windows作業系統正在統治世界。
曆史沒有如果。電腦的世界也沒有如果。
我給出的答案是,Objective-C和C一樣,是一門程式設計語言友好語言。也就是其它語言可以使用其編寫的庫。即使這門語言不支援物件導向,例如C,也是可以使用Objective-C的庫。而C++編寫的庫,除了C++自身,其它語言很少能使用它編寫的庫。
我們能看到C++語言發明人,Objective-C語言發明人評價C的,但我確沒有找到C語言發明人評價C++,Objective-C的。畢竟在一個理性世界(電腦世界),還是要靠實力說話的。
微軟意識到了COM的問題,而這時出現了一個叫Java的東西。它給了微軟啟發,這東西 可以降低COM的複雜。於是出現了.Net,而且一直研究發展。而忘掉了自己是做作業系統的。直到它意識到,.Net雖然好玩,但確不能作為作業系統的API。這開…開什麼玩笑。時間不等人,而時間也確實不等人。
Apple收購了Next。Cocoa裝進了Mac OS。當然這時的世界,Windows依然大幅的領先。但技術的領先與否,仁者見仁,智者見智。Windows依然採用C的API的開發方式,而Mac OS,已經開始裝配先進物件導向組件化平台。這東西,微軟以前也裝配過,但被自己放棄了。開發的效率確實不可同日而語了。Mac OS還在慢慢發展。直到行動裝置的大量出現,iOS,這個被改裝的作業系統一下子統治了世界。當然能看到這個趨勢也有別人,Google也發展了Android。
微軟急了?!以作業系統起家的微軟,如今確拿不出對抗的系統了。.Net首先就被棄了。COM呢?再拿這個上個世紀的東西去嚇唬人,豈不是太丟人。還好,這些年他們發展了一個叫C++/CLI的東西。於是Windows8就是在這樣的背景下研發。Windows8還將裝配Win32 API,因為Win32下的案頭系統還是佔了大部分份額。對於觸摸世界,借用Windows Phone 7的Metro設計風格,設計叫WinRT的API。當然,還和以前一樣,這東西還不是基於語言的,基於類似於COM的一個規範。研究底層的人還是能發現COM的影子。
諸位,故事結束了嗎?
Android, WebOS, BlackBerry的故事呢? Android用的Java, WebOS用的JavaScipt, BlackBerry用的Adobe的AIR。Android留有後手,拋棄Java,換其它平台也就可能。
總結: UNIX真是偉大。能夠繼承UNIX旗幟也是偉大。