日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

從Windows的角度看Mac OS X上的軟件開發(fā)

Windows及Mac OS X在操作系統(tǒng)架構(gòu)、開發(fā)環(huán)境、API、圖形環(huán)境等環(huán)節(jié)上的相近處與不同的地方,也簡(jiǎn)單提出了跨平臺(tái)應(yīng)用程序開發(fā)的兩種策略 。事實(shí)上在兩種平臺(tái)上開發(fā)所需要了解的概念跟技能沒有太大的不同,兩種平臺(tái)在性能上的差異也不大 。大體說(shuō)來(lái),Windows和Mac OS X都是為桌面應(yīng)用環(huán)境、圖形用戶接口(GUI)而設(shè)計(jì)的操作系統(tǒng) 。雖然不同平臺(tái)細(xì)節(jié)各有特色,但兩者相近的抽象概念,其實(shí)遠(yuǎn)遠(yuǎn)多于相左之處 。本文試圖指出方向上明顯的異同所在,而非詳細(xì)列舉各種細(xì)項(xiàng)差別 。最后,我也將簡(jiǎn)短分享自己在開發(fā)跨平臺(tái)軟件時(shí)的一些技巧和心得 。
系統(tǒng)架構(gòu)與開發(fā)環(huán)境的差異用最簡(jiǎn)單的話來(lái)說(shuō),Mac OS X與Windows在架構(gòu)與開發(fā)環(huán)境上最大的不同點(diǎn)在于:OS X是UNIX也不是UNIX;OS X主要開發(fā)工具Xcode使用GCC作為編譯程序,與其他種類的UNIX相同;不過(guò)OS X也有獨(dú)樹一格的"bundle"軟件包裝格式這樣的東西,成為它與其他操作系統(tǒng)不同之處 。
Windows和OS X都屬于現(xiàn)代的操作系統(tǒng),所以Windows在操作系統(tǒng)層級(jí)所提供的功能──執(zhí)行文件與鏈接庫(kù)加載、多任務(wù)與多線程、內(nèi)存管理──在OS X上都找得到對(duì)等的API和作法 。不過(guò),相較于Windows在微軟獨(dú)力開發(fā)下,架構(gòu)和API都維持著相對(duì)的一貫性(另一方面,也背負(fù)著各種歷史遺跡和向下相容的包袱),Mac OS X則是底層源自NeXTSTEP的Mach微核心(現(xiàn)在稱為XNU),而應(yīng)用層(用準(zhǔn)確的UNIX術(shù)語(yǔ)來(lái)說(shuō)叫userland)來(lái)自FreeBSD 4 。這件事情相當(dāng)重要:OS X透過(guò)這樣的架構(gòu),才擁有和一般Linux/FreeBSD相似的UNIX應(yīng)用環(huán)境 。有相當(dāng)多Mac軟件開發(fā)者喜歡在UNIX shell下工作,使用各種UNIX工具 。在Windows上,必須加裝Cygwin之類的環(huán)境才能辦到 。
Apple幾年前有則廣告是「把其他牌子的UNIX送進(jìn)/dev/null里」(用過(guò)UNIX的朋友應(yīng)該不難體會(huì)其中的吹噓意涵) 。平心而論,OS X受益自UNIX環(huán)境之處不少 。尤其,Apple使用了大量的open source工具 。舉例來(lái)說(shuō),Apple不像微軟,沒有自己的C語(yǔ)言編譯工具,Apple用的是UNIX業(yè)界的標(biāo)準(zhǔn)──open source的GCC(其中當(dāng)然有不少OS X的擴(kuò)展功能就是) 。雖然Apple有自己的開發(fā)環(huán)境Xcode,但是底層采用GCC這件事對(duì)開發(fā)者來(lái)說(shuō)是相當(dāng)重要的 。同時(shí),Apple的C/C鏈接庫(kù)用的也是GCC標(biāo)準(zhǔn)的stdc/stdc。了解這個(gè)差異,在遇到與Microsoft C/Ccompiler不同的地方時(shí),就更容易能找到解答的資源(這類型問題往往不限于OS X,其他UNIX平臺(tái)也會(huì)發(fā)現(xiàn)) 。
但是Mac OS X并不完全是UNIX 。它的GUI環(huán)境(Aqua)就完全不是一般Linux/FreeBSD所使用的X11 。而在UNIX層之下的微核心也和其他UNIX不同 。接下來(lái)這一點(diǎn)很重要:OS X雖然有和Windows .EXE和.DLL相對(duì)應(yīng)的文件(OS X跟其他UNIX一樣,可執(zhí)行文件一般不加擴(kuò)展名,UNIX系的動(dòng)態(tài)加載鏈接庫(kù)則冠以.dylib),但更重要的架構(gòu)差異是bundle 。
Bundle概念承襲自NeXTSTEP 。簡(jiǎn)單來(lái)說(shuō),就是由操作系統(tǒng)提供一種類似對(duì)象封裝的文件包裹 。OS X上最常見的bundle要屬.app結(jié)尾的應(yīng)用程序了 。雖然.app外觀上是個(gè)文件,在UNIX shell下看就能發(fā)現(xiàn)它其實(shí)是個(gè)目錄,內(nèi)含各種metadata(通常至少會(huì)有一個(gè)名為Info.plist的數(shù)據(jù)文件)、可執(zhí)行文件、動(dòng)態(tài)鏈接模塊、各種資源等 。除了.app外,OS X的各種框架檔(以.framework結(jié)尾,是一種同時(shí)包含頭文件及鏈接庫(kù)的包裝)、應(yīng)用程序的外掛模塊(通常以.bundle結(jié)尾)等等,都是以bundle形式呈現(xiàn)的 。了解這個(gè)差異,才能了解為什么OS X上很少有程序需要額外的安裝程序,也鮮少聽說(shuō)有所謂的"DLL hell"(因共享鏈接庫(kù)版本不兼容造成的困擾) 。
項(xiàng)目 Windows Mac OS X操作系統(tǒng)最近桌面版本 Windows Vista Mac OS X 10.5 Leopard
操作系統(tǒng)核心 NT Kernel XNU

推薦閱讀