這篇是我因為時差的關係,凌晨三點爬起來寫的東西:

第一天的巴士居然只有 6:45 - 7:15 的班次,不過這對還有時差的我是沒有任何問題。一大早坐巴士趕到會場完成報到手續後,我擺了烏龍掉了一些東西,幸虧有現場的 Microsoft 工作人員幫忙,事情雖然順利解決了,但是我的免費早餐也就來不及吃了。匆忙進入研討間時課程正好要開始,幾乎全部的座位都有人坐了,有些人覺得要穿越人群擠到中間去做太麻煩乾脆就坐在兩旁的走道上。雖然如此,我還是找到了一個座位,擠在兩個看起來有上百公斤的老外中間。

Jeffrey 首先自我介紹並談到了他是數本技術書籍的作者時:『我最新的 Applied .NET Framework Programming 有分成 C# 及 VB.NET 版本,但是 VB.NET 這一版總共只賣出了四本 (引起哄堂大笑)。』接下來他表示正在跟 Stanley Lippman 合作 C++/CLI 的版本,但這有可能是他最後的作品,因為要兼顧家庭及小孩的關係沒辦法花太多時間寫書 (我可以體會)。

接下來就進入主題 “What’s New in C# and the .NET Framework 2.0”,Jeffrey 的上課方式跟他寫書的風格一樣,非常善於用範例程式碼來輔助說明他要表達的東西,所以你可以看到他講了幾張投影片之後,就會切換到 Visual Studio 2005 來示範他剛講的東西,就算你之前不知道 C# 2.0 增加的新功能,應該也能很快地跟上他的節奏。C# 2.0 的這個部份沒有太多讓人驚訝的地方,因為新增的東西在之前就已經公開了並且有 beta 版可以測試,不過我自己很喜歡這些 2.0 新增的功能例如 Generics, Anonymous Method, Iterator, Nullable Types, Partial Types,因為他們補足了原來 C# 1.0 為人詬病的一些地方。當然這些新東西不只影響 C# 的編譯器,例如 Generics 及 Nullable Types 就需要底層的 CLR 做相對應的修改。這些改變的受惠者除了 C# programmer 外,FCL 也善用這些特性增加了不少的 Generics class 及 interface (這世界似乎越來越美好了)。

下一個主題主要是 “CLR Hosting” 及 “Writing Reliable Code”,Jeffrey 花了一點時間解釋什麼是 AppDomain 及其存在的目的,因為 SQL Server 及 ASP.NET 都需要 host CLR 並且有極高的穩定性要求,CLR 的 hosting API 做了一些不算小的改變讓 host application 可以控制更多的細節。而 “Writing Reliable Code” 就是比較有趣的課題了,比較技術性的解釋是『如何在有 Asynchronous Exception 的狀況下讓 CLR 可以卸載你的程式而不產生任何的 memory/resource leak?』,基本上這是頗難的一個問題,看得出來 CLR team 花了不少工夫在這件事上,但是目前提出來的解決方法我覺得不是很漂亮 (你需要知道太多細節才能做對),應該在下個版本會有更多的改進吧。

之後 Jim Johnson 上台代班講了 “Transactions” 這個課題,不過感覺他準備的不是很好,有點呼嚨帶過。Jeffrey 最後談 Security, Performance, Debugging, Usability 方面的一些改進,內容零碎了一點,我整理了一下重點:

  • PermCalc can estimate permissions required by whole app.
  • Debug-in-Zone allows you to debug app as though it ran from a specific zone’s permissions.
  • AppDomain.Create can accept Permissions param.
  • Classes that wrap Windows ACLs are provided.
  • Assembly will always check GAC first.
  • Assembly.ReflectionOnLoad can improve performance.
  • Dynamic methods (Light-weight code gen) can define static method at runtime & execute it. The JITted code will be GC’d.
  • You can examine IL code in a method body now.
  • Reflection Object Caching Performance.
  • New String methods and SecureString.
  • Prevent expensive exception handling with new TryXxx methods.
  • CLR v2 wraps a non-CLS exception into a CLS exception (RuntimeWrappedException).
  • Edit and Continue Debugging.
  • Managed Debugging Assistants enable additional checks in the CLR.
  • 64-bit CLR
  • Many performance improvements.
  • Miscellaneous improvements.
  • You can disable ExecutionContext flow.

整體來說,課程的節奏掌握的非常好、講話的速度雖快但不含糊 (我最怕碰到那些會含糊地自言自語的老師)、demo 一點也不拖泥帶水、許多技術細節也講解地很清楚,再加上 Jeffrey 三不五時就開 Microsoft 的玩笑,六個小時下來毫無冷場。這麼多的東西要在這麼短的時間講完又能讓大家吸收實在是不容易,不過 Jeffrey 他辦到了,結束時大家給了他非常熱烈的掌聲。我有點那麼衝動想要上前去跟他合照,無奈又有許多人圍上去跟他討論,只好作罷,還是回旅館補眠好了。

晚餐到旅館後面的咖喱屋吃飯,還是一堆的日本人,不過比昨天感覺好多了,因為 PDC 現場的東方臉孔還是很少啊,沒有人可以聊天真的是有點悶。