The Old Blog Archive (Traditional Chinese), 2004-2009

OV @ WWDC: Day 2 小記

聽起來,在最大的方向上,今年的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?

7 Responses to “OV @ WWDC: Day 2 小記”

  1. [...] It’s really taxing one’s strength to be able to keep one blog in two languages. I’ll try to come up with the English version of the WWDC Day 0-2 summary. For those of you who can read Chinese, here is the notes I’ve taken for the sessions on the Day 2 (within the terms a WWDC attendee is able to express). [...]

  2. on 09 Aug 2006 at 16:33mjhsieh

    辛苦了

  3. on 10 Aug 2006 at 04:07cooltony

    辛苦了

  4. on 10 Aug 2006 at 13:14jjgod

    Houseviews -> Housewives :)

  5. on 10 Aug 2006 at 18:16gugod

    Dirty laundry 就是要丟去洗淨漂白,而不能老是洗了之後還一直 dirty。對於從 32bit 轉到 64bit,不維護一部份的 backward compatibility,可以接受,可以接受。 :p

  6. on 15 Aug 2006 at 10:50Antony Shen

    I like watching Desperate Housewives :-)

  7. [...] 看看 Property ,傳統的 Obj-C 要寫好 setter/getter 一向不容易。現在配合了 OGC ,Apple 竟然搞了一招看起來像 KVC path ,又像 Ruby 的 Property ?!早就叫你學 Ruby 了,老師有講你都沒有在聽。看現在 Obj-C 2.0 語法和 Ruby 那麼像,別人都會就你不會嘛!怎麼辦?現在學呀!就這麼簡單!到時候你就知道老師叫你學不是叫好玩的。 [...]