My friends, my life, my style - James S.F. Hsieh

10/28/2009

The Shadow of the .NET Framework

大家都知道現階段的軟體發展已經開始著重平行運算, 主要有兩個因素增加 throughput 跟 user experience, 所以 Asynchronous Call 或是相關的 Multi-threading patterns 也就越來越紅了, 不過這不是這篇文章的重點 :P, 今天呢我在 Survey 關於 ATL and COM Asynchronous Call 的時候, 意外發現到兩個有趣的 Libraries:


這兩個 Libraries 都有個相同的特質, 它們都嘗試著移植 .NET 一些不錯的 pattern 到 C++ 上 (不是 C++ CLI 喔), ACF 的作者意識到 C# 或 .NET 相關的語言將會是未來 Windows 平台上最佳的程式語言, 但是 GC 或是 JIT 的速度總是比 native code 來的慢 (其實現在已經不一定了) , 所以, C++ 在速度上有著較佳的優勢, 但不可否認的 .NET Framework Library 有著巨大的誘惑, 因為 .NET Framework 幾乎包裝了 OS Win32 SDK 大部分的功能使其成為好用的物件導向函式庫, 到了現在 WPF, WCF, WF 更是在 Application layer 錦上添花, 所以 .NET 最大的優勢就是龐大好用的函式庫, 而 ACF 的作者 Yingle Jia 就嘗試的去移植這一點, 移植了幾個重要的物件到 C++ 中: Collections, IO, Text and Threading, 尤其在 basic type 上 root Object, RefPtr 與 Delegate 更是下了不少工夫, 儘管這些移植已經沒有繼續進行, 不過這也凸顯了 C++ 需要一個好用的 Library 來做為基石 (Boost :D), 其實 ACF 跟我所做的 DOL 函式庫都有著相似的想法, 就是嘗試著做出個平台無關可移植的子系統 (函式庫), 在這個子系統上發展的軟體則可以輕鬆的使用這個抽象層來達到少部分平台無關與易用的好處, 其實 .NET Mono 也是有相似的企圖與想法.

.NET Asynchronous Design Pattern for Native C++ 則是移植了 Delegate, BeginInvoke, IAsyncResult 與 Threading Pool  (作者使用 ATL 的 CThreadPool) 相關的 Asynchronous Design Pattern 到 C++ 當中, 不過該實作的 Delegate 只能支援傳遞單一引數 ulParam 到對應的 function, 如果能夠整合 functor 就更棒了是吧 :)