一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

開發(fā)人員為何應(yīng)該使用 Mac OS X 兼 OS X 小史

  一周前我和 Tinyfool 閑聊蘋果操作系統(tǒng),都認(rèn)為對(duì)于開發(fā)人員來說,蘋果操作系統(tǒng)(Mac OS)是上佳的選擇。 Tinyfool 筆頭很快,當(dāng)即就寫了一篇長(zhǎng)文章,我則筆頭很慢,今天才全部碼好。他的文章的主要切入點(diǎn)在于 Mac 平臺(tái)作為目標(biāo)開發(fā)平臺(tái)的優(yōu)勢(shì),而我這篇的切入點(diǎn)主要是 Mac OS 作為一種開發(fā)工具的優(yōu)勢(shì)。

  開發(fā)人員的趁手工具

  對(duì)于開發(fā)人員來說,所有的開發(fā)工具的最大的用途,就是最大限度的提高開發(fā)人員的生產(chǎn)率(productivity)和創(chuàng)造力(creativity)。在我們這個(gè)時(shí)代,使用 GUI (圖形界面)是一個(gè)提高生產(chǎn)率的好手段。

  雖然上一代的那些 UNIX 開發(fā)人員的確不需要 GUI。一個(gè)屏幕,一個(gè)鍵盤,一個(gè)編輯器,在陋巷,人不堪其憂,也不改其樂的黑客比比皆是,但二十多年過去了,現(xiàn)如今開發(fā)環(huán)境發(fā)生了巨大的變化。

  比如說,相比較于當(dāng)年程序員使用的基于文本的環(huán)境,在 GUI 下格式豐富的文檔顯得更直觀,閱讀體驗(yàn)更加好;就算工作中不需要開發(fā)任何 GUI 程序,現(xiàn)代開發(fā)人員也會(huì)使用 GUI 來完成網(wǎng)頁圖片和文檔閱覽等等。因此,即使是最傳統(tǒng)的用命令行的開發(fā)人員,其實(shí)也能沾 GUI 的光。比如說現(xiàn)在最好的終端程序,都是 X 下模擬的,因?yàn)檫@些模擬的終端的出現(xiàn),一些復(fù)雜的可視化功能可以在這些終端中實(shí)現(xiàn)了,比如 Unicode 的顯示(rxvt-unicode)等等。

  對(duì)于開發(fā)人員,擁有一組非常好用的,能夠最大程度的提高生產(chǎn)率的開發(fā)工具乃是一大人生夢(mèng)想。那么,這套開發(fā)工具從何而來呢?大體來說,這些工具來自于三個(gè)方面:1.通過系統(tǒng)和單一的應(yīng)用軟件提供的;2.通過搭配使用各種應(yīng)用軟件 3.通過定制和改變現(xiàn)有的應(yīng)用軟件。

  這三點(diǎn),對(duì)于 UNIX 開發(fā)人員是再熟悉不過的了,無非就是寫腳本,走管道而已。所以,在前 GUI 時(shí)代,這一套哲學(xué)非常盛行,開發(fā)人員都知道,需要通過安裝腳本解析器,寫一些的腳本,配置一些環(huán)境等等,才能把剛出廠的 UNIX 系統(tǒng),改造成自己使用起來得心應(yīng)手的系統(tǒng)。基本上任何一個(gè)使用 UNIX/Linux系統(tǒng)多年的人,機(jī)器里面都有各種各樣的“私藏”的腳本。離開了這些腳本,他的效率會(huì)大打折扣。

  GUI 時(shí)代傳統(tǒng)的喪失

  上世紀(jì) 80年代的時(shí)候,GUI 時(shí)代和個(gè)人計(jì)算機(jī)普及的時(shí)代降臨了。從此,計(jì)算機(jī)變成了個(gè)人電腦,歷史上第一次,計(jì)算機(jī)不是專為開發(fā)人員設(shè)計(jì),而是為了普通用戶設(shè)計(jì)。普通用戶的需求就是完成一個(gè)一個(gè)的現(xiàn)實(shí)問題,軟件產(chǎn)業(yè)提供的解決辦法就是為用戶提供一個(gè)一個(gè)的應(yīng)用軟件,而不是讓用戶自己一行一行的編程和寫腳本,巨大的軟件需求瞬間成就了一個(gè)巨大的軟件產(chǎn)業(yè)。這樣的一個(gè)間接后果就是,對(duì)于普通用戶來說,讓一臺(tái)計(jì)算機(jī)變成能夠幫助自己完成任務(wù)的“個(gè)人計(jì)算機(jī)”的唯一手段,就是疊床架屋的不斷的裝各種應(yīng)用軟件。

  我們可以用一個(gè)簡(jiǎn)單的例子說明這種使用模式。我們都知道,安裝 Windows 系統(tǒng)的一個(gè)經(jīng)驗(yàn)原則是把操作系統(tǒng)和應(yīng)用程序分成兩個(gè)邏輯盤,一個(gè)在 C 盤,一個(gè)在 D 盤。這個(gè)磁盤分區(qū)的經(jīng)驗(yàn)原則不光網(wǎng)吧老板知道,連我大學(xué)里面只會(huì)點(diǎn)鼠標(biāo)的那些女同學(xué)都知道。為什么有這個(gè)奇妙現(xiàn)象呢?其實(shí),這是由 Windows 系統(tǒng)的用戶的典型使用模式?jīng)Q定的。

  在 Windows 系統(tǒng)上,應(yīng)用程序和文檔是關(guān)鍵,操作系統(tǒng)只是一個(gè)隨時(shí)可以重裝的東西而已,所以干脆兩者分開,互不影響。在這樣的使用模式引導(dǎo)下,Windows 系統(tǒng)上格盤重裝是非常低成本的,只要文檔不丟,應(yīng)用程序不丟就行。這種使用習(xí)慣,浪費(fèi)了多少 geek 男美好的時(shí)光為人重裝系統(tǒng),又促成了多少美妙的姻緣 :)。

  總之,在 GUI 時(shí)代,要解決一個(gè)問題,就裝一個(gè)應(yīng)用程序。至于應(yīng)用程序之間的通信,和用非鍵盤鼠標(biāo)的方法控制應(yīng)用程序等等,都不再是要考慮的問題,有這樣的需求的人成了非主流,非主流到以致于主流的操作系統(tǒng)和應(yīng)用軟件都不讓你這么干了。操作系統(tǒng)把所有其他的路都封死,就是明擺著告訴你,要想某樣功能,請(qǐng)出門買軟件。

  Smalltalk 的啟示

   其實(shí) GUI 時(shí)代原本不應(yīng)該是這樣的。我們都知道,GUI 原本是施樂的 Alan Kay那一幫人做科研做出來的,Bill Gates 和 Steve Jobs 各自到施樂”抄襲”了一部分過來,于是窗口啊按鈕啊就到處都是了。他們都看到了圖形界面和面向?qū)ο蟮男危吹搅藞D形界面就是把按鈕圖標(biāo)等等對(duì)象放好,然后鼠標(biāo)點(diǎn)擊拖動(dòng)等等這些表面的東西。

  因?yàn)樗械?GUI 界面都是從文字界面起步的,所以所有的 GUI 程序,其實(shí)就是原來的可執(zhí)行程序的包裝。 C++這個(gè)語言的出現(xiàn)也很討巧,把 C 包裝成了一個(gè)面向?qū)ο蟮恼Z言,包裝對(duì)包裝, C++很討巧的適應(yīng)了把可執(zhí)行程序 GUI 化的趨勢(shì),成了 GUI 時(shí)代的主流開發(fā)語言。

  從表面上看,只要運(yùn)行這些可執(zhí)行的程序,就能夠看到圖形界面,就能夠用鼠標(biāo)點(diǎn)擊操作他們,可是這些東西的底層,都是一個(gè)編譯過了的可執(zhí)行程序,原先 Smalltalk 中的那些運(yùn)行時(shí)環(huán)境啊,對(duì)象容器啊,都統(tǒng)統(tǒng)不見了,所有的圖形界面程序,還是直接運(yùn)行在計(jì)算機(jī)的 CPU 上,而不是一個(gè)虛擬的面向?qū)ο蟮娜萜魃稀?/p>

  而這個(gè)面向?qū)ο蟮娜萜鳎ㄒ步凶?ldquo;運(yùn)行時(shí)”或者“運(yùn)行環(huán)境”),才是 Smalltalk 的神。簡(jiǎn)單的說,Smalltalk 本身具有一個(gè)面向?qū)ο蟮倪\(yùn)行時(shí),所以即使到了執(zhí)行的時(shí)候,里面所有的對(duì)象還是可以互聯(lián)互通的。

  而 C++寫出來的程序,除了編譯之前是面向?qū)ο笸猓灰痪幾g,就全部變成機(jī)器碼,和對(duì)象就再也沒有任何關(guān)系了,也就不存在運(yùn)行時(shí)去動(dòng)態(tài)的查看(inspect)和改變(modify)這些程序?qū)ο蟮恼f法。

  總之,因?yàn)闅v史的局限,這些 GUI 的平臺(tái),都是漸進(jìn)的照貓畫虎的演變的,所以沒有一個(gè)平臺(tái)像 Smalltalk 那樣細(xì)致地考量過對(duì)象的互相通信的問題,再加上我們上面說了,反正擴(kuò)展系統(tǒng)的方法就是引入新的應(yīng)用軟件而已,本身也沒有互聯(lián)互通的需求,所以這種拋棄運(yùn)行時(shí)的,不讓對(duì)象被外部程序控制的實(shí)現(xiàn)方法也無所謂不好。

  可是開發(fā)人員不是普通用戶啊,他們依然要改造計(jì)算機(jī)成為自己的工具的。在現(xiàn)有的現(xiàn)有工具不能解決問題的時(shí)候,要不然自己重新發(fā)明輪子,要不然就復(fù)用現(xiàn)有的一些工具,或者重新按自己的需求重新配置這些工具。所以,和一般用戶不一樣,開發(fā)人員需要這些 GUI 的可配置性,也需要這些 GUI 程序之間的互聯(lián)互通。用黑話來說,第一個(gè)問題關(guān)系到 GUI 應(yīng)用程序的腳本化,第二個(gè)問題關(guān)系到 GUI 程序之間的進(jìn)程間通信。這兩個(gè)問題,說起來簡(jiǎn)單,但都牽扯到 GUI 系統(tǒng)的根本設(shè)計(jì)問題。歷史在這里開了一個(gè)不大不小的玩笑,把這個(gè)唯一的機(jī)會(huì)給了 Mac OS X。其他操作系統(tǒng),都因?yàn)檫@樣那樣的原因,在這兩個(gè)問題上沒有很好的解決方案。

  進(jìn)程間通信,蘋果的方案

  花開兩朵,各表一只。我們先說 GUI 程序的進(jìn)程間通訊的問題。所謂的進(jìn)程間通信(IPC),就是兩個(gè)程序之間的信息共享。我們都知道,*nix的一個(gè)強(qiáng)大之處就在于管道,管道是最簡(jiǎn)單,最廉價(jià)也是最常用的*nix進(jìn)程間通信的方法。

  在 GUI 時(shí)代,最常用的 IPC 機(jī)制成了剪切板和鼠標(biāo)拖放操作。這兩個(gè)操作雖然都很直觀,但都要人操作,離開了人,程序根本無法自動(dòng)完成進(jìn)程間通信。而要工作效率的提高,就是要讓計(jì)算機(jī)離開了人的干涉,也能完成這些任務(wù)。為了自動(dòng)化這些任務(wù),操作系統(tǒng)就不能簡(jiǎn)單的繪制窗口然后萬事大吉了,它必須要知道哪些程序在運(yùn)行,哪個(gè)運(yùn)行的程序可以給哪個(gè)程序發(fā)消息通信等等,比如說,如果我們想自動(dòng)的在閱讀器里面選擇一個(gè)詞送給字典程序查釋義,計(jì)算機(jī)就需要知道字典程序在運(yùn)行的時(shí)候可以接受一個(gè)字符串,但是不可以接受圖片。

  如果我們把字典程序抽象成一個(gè)可以提供“查字典”服務(wù)的對(duì)象的話,毫無疑問,如果想要向字典程序發(fā)送字符,必須首先知道字典程序能夠接受什么,用什么方式把這個(gè)單詞發(fā)送給字典等等。所有的這些信息,都必須由操作系統(tǒng)托管才行(不可能每個(gè)應(yīng)用程序里面都要記著字典這個(gè)程序能接受字符串不能接受圖片,這樣每個(gè)應(yīng)用程序都要記下所有其他可能的應(yīng)用程序的信息,這是一個(gè)平方級(jí)別的關(guān)系,需要開發(fā)人員開發(fā)一個(gè)程序的時(shí)候還要兼顧其他所有程序,這顯然是不現(xiàn)實(shí)的)。

  用行話來說,必須要有一個(gè)統(tǒng)一管理的運(yùn)行環(huán)境,來管理這些程序之間的互相通信問題。我們上面說了,Smalltalk 的神在于一個(gè)統(tǒng)一的面向?qū)ο蟮倪\(yùn)行時(shí),使得所有的應(yīng)用程序能互聯(lián)互通。可是所有平臺(tái)上的 GUI 程序的演化進(jìn)程都沒有走這條路,而是只把外表給模仿走了;有的平臺(tái)即使想做互聯(lián)互通,也做得不徹底(比如微軟的 OLE,COM 等等)。

  是好東西,總會(huì)發(fā)光的。但是要想讓這個(gè)好東西被新的操作系統(tǒng)全盤采納,要想讓一個(gè)系統(tǒng)能夠從底層到上層全部采用統(tǒng)一的運(yùn)行環(huán)境,就要扔掉很多的歷史包袱。甩掉這種歷史包袱,對(duì)于任何操作系統(tǒng)都是不容易的。如果我們回到當(dāng)年,一定會(huì)幻想,要是有個(gè)神人,能夠不管市場(chǎng)也不管現(xiàn)有平臺(tái),從頭打造一個(gè)沒有任何歷史包袱的干凈整潔的 GUI 系統(tǒng)該多好。歷史就是這么戲劇,還真就安排了一個(gè)人,做成了這件事情,這個(gè)人,就是那個(gè)斯蒂夫喬布斯。

  1985 年,喬布斯被蘋果掃地出門,成立了 Next 公司,一心想要做出質(zhì)量上乘的 GUI 計(jì)算機(jī)系統(tǒng)。歷史給了喬布斯一個(gè)全部從頭做的機(jī)會(huì)。這一次,喬老師和 Next 的開發(fā)人員意識(shí)到,光照搬 Smalltalk 的形是不行的,要連它的神也拿過來,重頭設(shè)計(jì)進(jìn)程間通信和 GUI 系統(tǒng)。在內(nèi)核層面,他們用了 Mach 這個(gè)為 BSD 設(shè)計(jì)的微內(nèi)核。這個(gè)操作系統(tǒng)內(nèi)核就是為了替換已經(jīng)過時(shí)的 UNIX 內(nèi)核而設(shè)計(jì)的,其中的一個(gè)核心設(shè)計(jì)哲學(xué)就是重新設(shè)計(jì)進(jìn)程間通信;

  雖然現(xiàn)在基于微內(nèi)核的操作系統(tǒng)已經(jīng)不是什么潮流(為此 Linus 和 Tanenbaum 吵了一場(chǎng)著名的架),但在相比較于當(dāng)時(shí) UNIX 系統(tǒng)的內(nèi)核(此時(shí) Linux還沒出現(xiàn)的,UNIX 內(nèi)核只有 BSD, Bell, SUN 等幾套),Mach 算是一個(gè)高的起點(diǎn)。

  在這個(gè)內(nèi)核上,Next 公司的工程師開始構(gòu)建面向?qū)ο蟮幕A(chǔ)系統(tǒng)。這套系統(tǒng)在 Smalltalk 中已經(jīng)有了藍(lán)圖,因此這些工程師以 Smalltalk 為藍(lán)圖,先設(shè)計(jì)了一套基于 C 的語言,也就是 Objective C,照搬了 Smalltalk 的經(jīng)典的 [對(duì)象消息: 參數(shù)] 語法。

  (我個(gè)人不喜歡 Objective C 這個(gè)語言,Smalltalk 是一種純面向?qū)ο蟮膭?dòng)態(tài)類型的語言,Next 公司當(dāng)年完全有機(jī)會(huì)用 Smalltalk 語言的,如果用了 Smalltalk,現(xiàn)在的 Cocoa 框架還會(huì)更加漂亮,代碼更加干凈;用 Objective C 這個(gè)自創(chuàng)的語言,不知道是不是因?yàn)閷@目紤],反正 Objective C 這20年的所有創(chuàng)新,就是在慢慢的更像 Smalltalk 而已,Java 和 Ruby這幾年也是不斷的從 Smalltalk 拿東西)。

  有了內(nèi)核,有了語言,Next 構(gòu)建了一個(gè)純的面向?qū)ο蟮倪\(yùn)行環(huán)境和類庫(和 Java 和.NET 的統(tǒng)一類庫想法類似,只不過超前了十幾年),這套類庫,在當(dāng)時(shí)叫做 NextStep,所以所有的類名前面都帶有 NS 前綴,無比丑陋。可惜的是,當(dāng)年這個(gè)超越時(shí)代的類庫太陽春白雪了,話說 Smalltalk 超越了時(shí)代 20年,所以90 年代中期的時(shí)候,程序員才想起來當(dāng)年 Smalltalk 的好,出現(xiàn)了 Java Ruby等等受  Smalltalk 啟發(fā)的語言。

  喬老師雖然落后了 Smalltalk 5 年,卻領(lǐng)先也業(yè)界 5-10 年,所以在 1995 年的時(shí)候, Windows 95 賣瘋了,喬老師的 NextStep 卻沒動(dòng)靜,只能把這個(gè)類庫重新打包當(dāng)成 Web 類庫賣賣,即 WebObjects。這倒是無心插柳,生意不錯(cuò),因?yàn)楫?dāng)時(shí)的 Web 開發(fā)已經(jīng)吃盡了沒有一個(gè)統(tǒng)一的運(yùn)行環(huán)境的苦頭(這也是日后 Java 風(fēng)行的原因)。

  我們說,是金子總要發(fā)光的,但是前提是要(1) Next 再等幾年,等業(yè)界回過神來認(rèn)識(shí)到它的好處,(2)獲得一個(gè)主流的操作系統(tǒng)支持,把底層全換成喬老師的東西。喬老師也知道這兩個(gè)條件,所以加快了和 SUN 合作的步伐,想要把這套系統(tǒng)放到 SUN 的工作站上。

  但是 SUN 本身有很強(qiáng)的底層技術(shù),那段時(shí)間又狂推 Java,所以其實(shí)喬老師在 SUN 這條路上勝算不大,況且 SUN 自己內(nèi)核技術(shù)很強(qiáng),所以肯定要肢解 NextStep 把內(nèi)核重寫,如果不和 SUN 玩,一來Next 這家公司能夠多撐 5 年都是問題,二來幾乎每家做個(gè)人計(jì)算機(jī)的公司都倒戈微軟了,其他做工作站的公司又都有自己很強(qiáng)的底層技術(shù),不可能用喬老師的玩意兒的,所以看起來喬老師和他的陽春白雪好像前景不妙。可是天無絕人之路,放眼看當(dāng)年的市場(chǎng),只有一家公司沒有倒戈微軟,又沒有很強(qiáng)的底層技術(shù),又和喬老師有一些淵源,歷史就是這么戲劇,這家公司就是把喬老師掃地出門的蘋果。

  90年代中期蘋果的日子很不好過,個(gè)人電腦市場(chǎng)敗給了 Wintel 聯(lián)盟,新興的市場(chǎng)上成績(jī)也一塌糊涂,投資人也不糊涂,把當(dāng)年讓喬老師掃地出門的 Sculley也掃地出門了,隨后就把喬老師的公司給買了回來,讓喬老師復(fù)職負(fù)責(zé)復(fù)興蘋果。

  所以,上面我們說的兩個(gè)條件就這樣突然的滿足了:第一,他現(xiàn)在是老大了,所以可以徹底的把原來蘋果的系統(tǒng)推倒重來,用自己的新家伙;第二,原來 Next 公司的那幫工程師不要擔(dān)心失業(yè)了,現(xiàn)在由蘋果負(fù)責(zé)發(fā)工資了,所以,正好可以讓這些人著手改造蘋果系統(tǒng),主要的工作就是用自己帶過來的新系統(tǒng)取代蘋果的舊系統(tǒng),并且讓新系統(tǒng)的圖形界面和舊系統(tǒng)保持風(fēng)格的一致。這個(gè)工作,從1995年 Next 被收購(gòu),到 2001 左右的時(shí)候才做好,這6年的時(shí)間里,喬老師也順帶讓蘋果重新盈利了。

  2001 年發(fā)布的 Mac OS X,是蘋果操作系統(tǒng)的第十代,完全基于了喬老師在 Next 開發(fā)出來的那套類庫,所以自然的,具有了一個(gè)統(tǒng)一的面向?qū)ο蟮倪\(yùn)行時(shí)。這個(gè)運(yùn)行時(shí)和類庫系統(tǒng),Mac OS X 把它叫做 Cocoa。其實(shí) Mac OS X 剛出來的時(shí)候也不怎么好,不過依賴于這套設(shè)計(jì)精良的底層系統(tǒng),Mac OS X 的迭代開發(fā)周期要比其他操作系統(tǒng)短多了(僅慢于Linux,不過 Linux只有內(nèi)核部分).

  在短短的 8 年里,Mac OS X 就搞出了 7 次大的版本發(fā)布。雖然我們看 Mac OS 好像從 10.0 到 10.6 只是次版本號(hào)在進(jìn)步,其實(shí)每次都是一個(gè) major release,大致相當(dāng)于從 Window 95 到 Windows 98 或者 Windows 2000 到 Windows XP 這樣級(jí)別的升級(jí)。這樣的發(fā)布卻不改主版本號(hào),一方面是從市場(chǎng)上考慮,另一方面也的確說明 OS X 的底層已經(jīng)處于一個(gè)相對(duì)穩(wěn)定的狀態(tài)。

  有很多 Windows 程序員非常推崇.NET。是的,.NET 的確是一個(gè)非常好的框架,可是想像一下,蘋果在1995年的時(shí)候就有了一個(gè)統(tǒng)一的運(yùn)行時(shí),加上這么多年所有的程序都在這個(gè)統(tǒng)一的框架上開發(fā),如果論在 Mac OS X 這個(gè)平臺(tái)上的經(jīng)驗(yàn)積累,應(yīng)該說 Cocoa 社區(qū)是比.NET 社區(qū)更加成熟的。

  應(yīng)用程序腳本化

  光有進(jìn)程間通信的系統(tǒng)還不能算是一個(gè)完全成熟的 GUI 系統(tǒng),因?yàn)檫M(jìn)程間通信依然是相對(duì)底層,而 GUI 上的應(yīng)用軟件是層出不窮的,不可能任何問題都跑到底層用進(jìn)程間通信解決;所以,要想讓 GUI 系統(tǒng)進(jìn)化到易用和易于定制的水平,就需要開放對(duì) GUI 程序的腳本控制。

  只有 GUI 程序能被外部控制了,才能真正的達(dá)到搭配使用 GUI 系統(tǒng)的效果。其實(shí),一旦有了一個(gè)統(tǒng)一的運(yùn)行時(shí),只要開發(fā)應(yīng)用軟件的時(shí)候統(tǒng)一設(shè)計(jì)一下腳本接口,用腳本控制 GUI 程序應(yīng)該不難。

  比如說,微軟的 Office 系列套件,就完全可以用 VBScript 去控制。可惜的是,沒有一個(gè)系統(tǒng)能夠?qū)崿F(xiàn)全系統(tǒng)的控制。要實(shí)現(xiàn)全系統(tǒng)的控制,不僅僅要這個(gè)系統(tǒng)能夠提供底層的支持,更重要的是要能說服所有的開發(fā)人員,或者說讓所有的開發(fā)人員養(yǎng)成開放腳本接口的好習(xí)慣。

  從技術(shù)上來說,這不是太大的問題,只要開發(fā)人員按照統(tǒng)一的腳本通信協(xié)議,實(shí)現(xiàn)特定的接口就行了,可是,如果一個(gè)平臺(tái)上開發(fā) GUI 的方法太多,開發(fā)人員只選自己喜歡的來,這種標(biāo)準(zhǔn)就不可能統(tǒng)一。比如說 Linux上 KDE 和 Gnome 都有自己的腳本化系統(tǒng),可是開發(fā)人員有的用 KDE,有的用 Gnome,有的干脆兩者都不用,這就談不成有一致的接口。

  一個(gè)平臺(tái)要想有一致的腳本控制接口,除非(1).這個(gè)平臺(tái)上就一種 GUI 開發(fā)方法,自古華山路一條,要不不做,做出來的東西就只能是標(biāo)準(zhǔn)的接口;(2).這個(gè)平臺(tái)上大部分的,主流的應(yīng)用軟件,都實(shí)現(xiàn)了這個(gè)腳本接口,這樣因?yàn)檫@些程序的拉動(dòng),其他 GUI 程序想要融入這個(gè)平臺(tái)上現(xiàn)有的應(yīng)用軟件的圈子相互通信,那也就必須要實(shí)現(xiàn)這個(gè)接口。在 2000 年的時(shí)候,又只有一家公司能夠同時(shí)滿足這兩個(gè)要求,就是蘋果。微軟部分做到地了這兩條,基本上用 VBA 統(tǒng)一了 Office 的控制,但是跳出 Office,微軟的 OLE 對(duì)象模型幾乎沒有任何用武之地,與之捆綁密切的 VBA 自然無人問津。不過據(jù)一些在金融行業(yè)工作的朋友說, VBA 能夠大大提高 M$ Office 的生產(chǎn)率。

  GUI 腳本化不是一夜之功,特別是我們說要做出統(tǒng)一的腳本接口,能兼顧各種程序的需求,這就完全不是一兩年的時(shí)間能夠搞定的,總需要很多年的技術(shù)積累和設(shè)計(jì)取舍后才能收斂到一個(gè)相對(duì)穩(wěn)定成熟的系統(tǒng),而蘋果,居然很神奇在十幾年前就有這方面的經(jīng)驗(yàn),蘋果再次怎么這么幸運(yùn)呢?

  在 80 年代后期的時(shí)候,蘋果機(jī)上有一個(gè)非常超越時(shí)代的軟件,叫做 Hypercard。這個(gè)軟件我曾經(jīng)在上一代蘋果上玩過,具體的思想就是你可以存儲(chǔ)一張一張的“卡片”,這些卡片上面可以放置多媒體的聲音,圖像文字和其他對(duì)象,基本上就和現(xiàn)在網(wǎng)頁一回事,唯一的區(qū)別就是這些卡片都存在本機(jī)。

  在沒有 Powerpoint 這類軟件之前,這個(gè) Hypercard 的軟件可以用來做課件,做幻燈片演示等等,是個(gè)極其強(qiáng)大的工具。為了讓用戶可以定制這個(gè)卡片,這個(gè)程序提供了一套非常強(qiáng)大的編程系統(tǒng),叫做 Hypertalk。

  因?yàn)檫@種編程語言是給普通人而不是程序員用的,所以你會(huì)感覺根本不是編程,而是寫英語。這套東西,雖然本質(zhì)上也是從 Smalltalk 學(xué)來的,但是用英語語法的方法編程的確是一個(gè)全新的思路,蘋果把這個(gè)給普通人編程的語言發(fā)揚(yáng)光大了,用更加貼近自然語言的方法重寫了語言和文檔,模仿 Hypertalk 系統(tǒng),發(fā)布了一個(gè)跨系統(tǒng)的腳本控制語言,叫做 Applescript。這個(gè)語言就和自然語言沒什么區(qū)別,比方說,獲取窗口的大小不再是 window.getSize() 而是
get size of window 顯示第 22 段的第一個(gè)單詞不再是 print(paragraph[22].getWordByIndex[0]) 而是 print the first word of paragraph 22 更狠的是,你還能用法語和日語寫。

  80年代后期的時(shí)候和整個(gè) 90年代初期,蘋果基本上已經(jīng)被 PC 機(jī)逼到墻角了,只剩下出版行業(yè),設(shè)計(jì)行業(yè)等等專業(yè)的行業(yè)因?yàn)?a href=/pingce/yingyong/ target=_blank class=infotextkey>應(yīng)用軟件和圖形處理能力的關(guān)系,依舊在守著蘋果機(jī)。兩個(gè)行業(yè)的用戶都需要自動(dòng)化的 GUI 控制,但是編程都不怎么樣,于是,這些應(yīng)用軟件的開發(fā)商也主動(dòng)摻合加入 Applescript 旗下。

  在90年代喬老師沒有加入前,蘋果自己把 Finder 全部腳本化,出版業(yè)的 QuarkXPress 和 Filemaker 也都完全腳本化,等喬老師入主蘋果后,基于 Cocoa 的新技術(shù),蘋果一口氣在 Mac OS X 上推出了 Safari, iTunes, iPhotos 等等軟件,一股腦兒的全部腳本化了。

  在別的公司都可望而不可求的歷史機(jī)遇,又是被蘋果給抓住了,一股腦兒全部塞進(jìn)了 Mac OS X。這下,所有的第三方開發(fā)的工具,如 Firefox, Adium 這些,其實(shí)本來都不是蘋果開發(fā)的,也沒有太強(qiáng)的蘋果淵源,但是 Firefox要讀 Safari 書簽吧,哈,那就用 Applescript 吧,所以, Firefox也逼著腳本化了(這個(gè)在其他平臺(tái)上都不存在的事情)。 Adium 也是,這個(gè)聊天軟件想要把 iTunes 正在播放的歌曲當(dāng)成狀態(tài)信息,好呀, Applescript,所以,也被帶著腳本化了,而在 Linux上的對(duì)應(yīng)產(chǎn)品 pidgin 就沒有這么腳本化。所以,蘋果平臺(tái)已經(jīng)成了一個(gè)慣性,你不想腳本化,就不帶你玩,看你還腳本化不?

  結(jié)語

  我們都知道, UNIX 時(shí)代的主要哲學(xué)是提供給開發(fā)人員一組小巧精美且可以任意搭配使用的小工具,也就是所謂的 Software Tools,然后任由開發(fā)人員由此出發(fā),自己搭建自己的工具,打造自己的瑞士軍刀。

  而開發(fā)人員所用的操作系統(tǒng)的目的,要不就是提供這樣的一組開發(fā)工具,要不就是為這樣的開發(fā)工具提供一個(gè)便利的平臺(tái),使得這樣的工具變?yōu)榭赡堋H绻f UNIX 是命令行時(shí)代的一個(gè)易于改造成“自己的操作系統(tǒng)”的操作系統(tǒng)的話, Mac OS X 就是 GUI 時(shí)代的這樣的一個(gè)操作系統(tǒng)。即使是從應(yīng)用軟件的層面看, Mac OS X 的底子好,更加容易出精品軟件,所以即使僅使用應(yīng)用軟件,開發(fā)人員也應(yīng)當(dāng)優(yōu)先考慮 Mac OS X。

  附A: 相對(duì)正確的 Mac OS X 使用習(xí)慣

  • 一定要裝 Quicksilver 或者用“服務(wù)”,否則就是把蘋果當(dāng) Windows 用。
  • 在蘋果計(jì)算機(jī)上,因?yàn)橛蟹?wù)和 Quicksilver 這樣的工具,90%的程序間的拷貝粘帖都是可以避免的。
  • 剩下的 10%的程序內(nèi)的拷貝粘帖,如果用一個(gè)好的編輯器的話,又可以省略掉 90%。

  附B:為什么 Linux系統(tǒng)在這個(gè)方面還不夠好

  第一, Linux上的 GUI 子系統(tǒng),其實(shí)不是 Linux的一部分,而是 X 和上面的 KDE 以及 Gnome 等等。這幾年,這些系統(tǒng)終于開始統(tǒng)一管理一個(gè)面向?qū)ο蟮倪\(yùn)行環(huán)境了。

  可是這兩個(gè)系統(tǒng)都是用C++所寫,所以免不了費(fèi)很大的力氣才有了運(yùn)行時(shí)信息,繞了一個(gè)大彎路,如果一開始這兩個(gè)系統(tǒng)就用 Smalltalk 之類的有運(yùn)行時(shí)的語言編寫,至少現(xiàn)在應(yīng)該有能和 Cocoa 抗衡的框架。

  第二,這幾年 X 也認(rèn)識(shí)到了在腳本化控制上面的不足,所以幾年前做桌面的 Redhat 提出了 DBus 標(biāo)準(zhǔn)。可惜的是不是每個(gè)程序都開放了 Dbus 接口,所以和蘋果比起來,還有比較長(zhǎng)的路要走。

it知識(shí)庫開發(fā)人員為何應(yīng)該使用 Mac OS X 兼 OS X 小史,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 94欧美setu| 看全色黄大色黄大片色责看的 | 午夜视频www| 欧美一级www | 色哟哟网站在线观看 | 伊人久久精品 | 国产做受视频激情播放 | 国产精品久久久久无码av | 亚洲综人网 | 精品国产日韩久久亚洲 | 91精品国产免费久久国语麻豆 | 亚洲一二三区久久五月天婷婷 | 日本成人在线网址 | 一区精品在线 | 色老板免费观看 | 真实国产伦在线视频免费播放 | 美女视频黄视大全视频免费的 | 色狠狠一区二区三区香蕉蜜桃 | 久国产精品久久精品国产四虎 | 亚洲一区二区三区网站 | 丁香六月激情综合 | 中文激情 | 国产精品自在线天天看片 | 婷婷色婷婷 | 国产拍拍拍| 五月激情六月丁香 | 色婷婷色综合激情国产日韩 | 亚洲日本1区2区3区二区 | 天堂网站天堂小说 | 男女免费爽爽爽在线视频 | 国产精品福利一区二区亚瑟 | 国产精品资源手机在线播放 | 一色屋成人免费精品网 | 色在线看| 激情五月婷婷久久 | 麻豆专区 | 成人一级免费视频 | 色综合色狠狠天天久久婷婷基地 | 超级97人人公开视频 | 91久久九九精品国产综合 | 91精品视频免费在线观看 |