聽起來,在最大的方向上,今年的WWDC,其實是延續著先前的主題:Transition。或者說,軟體的改版,其實就是不停transit?
WWDC會場上,已經有不少人將Developer Preview的Leopard seed版本給裝了起來。固然也有一些議程是針對既有的技術做深化,但先前有許多WWDC「未排定」的議程,在星期一的Keynote以及OS X State of the Union演講完後,便一一貼上了新公告。這些議程的特色是:如果你手上沒有Leopard,還真的沒辦法先睹為快。
我在Day 1中略略提到了Objective-C終於有garbage collection的功能。事實證明這個主題並不是一個”minor issue”。星期二下午兩場與Objective-C相關的議程,場地都是爆滿的。從結束前的Q&A session,更可以發現有多少與會者在開發軟體時,會實際應用到那些「高階」的功能。
事實上,早在OS X 10.4的時候(也許更早,我記不清楚了),gcc編譯器就已經支援garbage collection,只要打開該選項,就會生成帶有gc能力的目的檔。現在問題在於:在當時,並沒有執行時期(run-time)的完整支援──例如沒有控制garbage collector的公開的API。這些終於在Leopard出現了。
在我所能提及的範圍內,簡單講一下我今天所聽到的東西,以及一些感想:
上午去聽了跟HIToolBox有關的session。HIToolBox全名是Human Interface ToolBox,事實上就是Carbon程式庫實作Aqua介面的工具箱。大家在iTunes裡看到的按鈕、列表,無一不是透過HIToolBox而來的。HIToolBox再往上溯,則是更早以前Apple OS的各種API,其中甚至還保留了少數還在使用Pascal字串的歷史痕跡。藉由這次Leopard要支援64-bit之便,這些舊的API都會消失了。事實上上午的session還澄清了一件事:Apple會繼續在Carbon API上面投注心力,尤其其實還有像ATSUI (Advanced Type Services for Unicode Imaging),目前仍是以 C 為主的 API。
也就是在上午的 session ,我得知 Leopard 的輸入法架構將有改變。實情研究中(前提是,我得先想辦法弄台機器把 Leopard 裝起來啊啊啊)。
下午連續參加了兩個跟Objective-C有關的session,感覺是目前為止最硬、最hard-core的議程。感覺,有如在上程式語言設計的課。事實上主場的Peter Graffagnino似乎很愛使用食物來比喻東西(他在前一天的OS X State of the Union就講了一堆食物)──他說,咖哩有千千萬萬種,garbage collector的實作及design choice也有千千種,他今天所帶給大家的,算是某種「特調蘋果咖哩」,裡面有一些和Java相似的地方,有一些和Java不同的地方(例如沒有resurrection)。
當然,在Objective-C這樣一個「傳統、且根基於C」上的語言增加gc,絕對是項大工程。現代程式設計已經不只是要考慮單一的功能完整度,還必須具備thread safety的質性,又不能犧牲效能(因此,把所有thread都停下來收集垃圾的作法不好)。在這一點上,其實gc增加了程式設計師初期的負擔:為了transit到fully gc’ed code,有一些預備知識,還同時得unlearn掉過去以來Objective-C的計憶體管理慣例。
另一個令我感到厲害的地方,是為了這樣一個功能,背後需要多少分析、測試、調整的工作。尤其,這一次增加此一功能,得配合Leopard的32位元與64位元版本。PPC與Intel。Objective-C的部份與C語言的部份(對於C語言使用了Objective-C指標的部份,就得提供針對C語言物件的gc)。還牽扯到先前用non-gc Objective-C寫成的bundle(可以想做Windows的DLL)能否允許被載入。甚至Apple自家的framework也因為這一個變化,而必須能在兩種mode下工作(non-gc’ed與gc’ed)。
所以事實上,我們看到的是許許多多的工程問題。這些問題有的發生在compiler layer,有的發生在runtime layer,有的發生在framework/API layer,有的發生在system library layer,有的發生在plug-in layer。其中還有許多的trade-off,許多的design choices。
很顯然,Peter Graffagnino採取了相當實用主義的路線。對於會大量破壞向下相容性及執行檔相同性的設計,只能用在64位元版本的Cocoa中(這也是此次Leopard的重點之一)。
附帶一提,Peter Graffagnino也留一把大鬍子。他在演說時會不停摩擦臉頰,還會在他已經瞭解提問人的問題時,比手勢打斷(讓人聯想到某幾個留著一把大鬍子的guru──難道做為guru真的要有某些相似性?)。他的手勢堅定,在講解garbage collection原理時不忘提及各種可能的優缺點和其他語言的作法(例如Ruby和Java在resurrection這個design choice上的異同)。
晚上參加了Apple Design Award晚會和Stump the Experts益智問答節目。這些或許要留後再述了。另外,還做了一場小訪談,我們訪問到了一位FreeBSD的重要人物、現在是Apple的UNIX group的大台柱。他為我們提到了他關於OpenDarwin shutdown始末的一些看法,以及他對於Apple自身的定位、桌面軟體 vs. web軟體、open source如何取得達成「更高遠的目標」等等,做了相當精要但熱心的說明(我們真的很謝謝他願意撥時間出來接受我們的訪談)。這些我也會在整理完後漸次刊登出來。
舊金山市中心的空氣中有一種氣味,是我在其他亞洲城市不曾聞過的。或許這氣味很美國,而我上次至此的距離已長,早已忘記那時的感受。城市確實是有味道的,建築物、室內、會議廳,也各有著不同的氣味。技術型的會議,資訊量相當、相當的大,會場本身倒卻是相當容易融入,會場服務、一些支持性結構(supporting structure)也相當完整──這還包括了把與會者的腸胃照顧好、飲料需求照顧好,還要有許多的電源、許多的無線網路。這樣的會議並不只是把大家找來宣佈一些事情,會眾不是被動的受眾,更多的是有備而來,會在會場上提出深刻的技術問題(所以才會發現諸如有多少人會使用Objective-C hack的事)。在台上的人,顯然也同樣地每天泡在他們的領域中,才有辦法應對如流吧──they really know what they’re doing.
今天最後的感想是,每一家作業系統看來都有一本難念的經──或許用Despearte Housewives裡的那句”Everyone has a little dirty launry”來翻這句中文成語還挺合適?──OS X有自己的legacy有自己要面對的問題。每一次的改版都需要做無數的transition工作。其實宏觀來看,或許軟體設計的本質和某些更大的東西一樣,永遠都在transit。You never step into the same river twice. 只不過偶爾我們會拍些快照(snapshot),然後希望那些快照把最好的一面給呈現出來。
Other than that, we’re always dealing with our own dirty laundry… bah?
lukhnos :: Aug.09.2006 ::
tekhnologia 技術或者藝術 ::
7 Comments »