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

7/04/2010

2010 07 04 桶後溪 22km 健行


今天走了 22 公里的林道, 雖然並不陡峭但是在那艷陽下真的叫人吃不消, 爬一半的過程中我們家楊大還拿出溫度計來看山上的氣溫, 結果, 太陽下竟然有 37度.... 畢竟高度只有 400~500 公尺高

黃色是今天走的, 紫色是 2008 年的紀錄喔 下次希望能到礁溪

在較大的地圖上查看桶後溪 旅行紀錄

VM-based 的程式語言總是讓人又愛又恨

我想大家寫過 .NET Framework, Java 甚至是 Python 之後再回去開發 C/C++ 的程式碼應該多少都有一點 "卡卡" 的吧, 原因是因為, 對於 programmer 來說上述的三種語言都有著豐富且 "統一" 的 library 可以供大家使用, 所以寫起來也比較順手. 這些 VM-based 的程式語言還個重要的好處, 就是它與硬體平台並不相依, 所以基本上如果兩個平台有著相同的 "軟體抽象層" (包含 Programming model 跟 library), 用這些語言寫的程式是可以直接在上面跑的,  另一個共通的特點就是這些語言都提供 Garbage collection 的機制, 所以寫程式 "比較" 不用在意記憶體釋放的細節. 這些好處都可以快速的增加 programmer 的生產力, 但是, 付出的代價也是非常的多...

首先 VM-based 的程式語言都需要 VM (廢話), 在沒有支援 JIT 的情況下, 程式碼必須以 Byte-code 的形式在 VM 中執行 (Java 在 ARM CPU上有 Jazelle 可以直接執行) 速度與 Native-code 相比還是差了一點點, 如果是 JIT 的話那應該就差不了太多了, 不過, 就我的經驗 JIT 還是挺花時間與記憶體, 在 Mobile 或是 Embedded system 的世界中對於記憶體的要求可能就更嚴格了.

Garbage collection 是個很方便的技術真的大幅提升了開發的速度, 但是付出的代價就是 programmer 對於記憶體使用量的控制性降低了, 畢竟 GC 不可能隨時隨地都在做, 通常只有在記憶體比較不足或是系統比較有空的時候才會發生, 這對於程式來說有兩種影響 1. 記憶體的使用量比 Native-code 大而如果 programmer 需要精細的配置記憶體的使用量可能不大容易 2. GC 可能會影響系統執行的流暢度.

觀察現行的 Mobile platform 各式各樣的硬體 CPU 規格, 要使用非 VM-based 的語言來開發軟體在佈署與相容性上將會非常麻煩, 以下是各個平台的概況:
  • Windows CE 提供了 C/C++ SDK 與 .NET Framework Compact 供 programmer 發展, 但是似乎是比較傾向 Native code, 以 Windows CE 7 來說, 微軟提供了 Microsoft Silverlight for Windows Embedded 給 C++ (沒錯不是 C# 喔) 做為 UI Framework, 
  • Windows Phone 7 上則是主推 Silverlight,  XNA 與 .NET Framework Compact (我猜是想把 Windows Phone 7 變成遊戲平台吧 :P) 這兩個平台的發展方向目前有點不同!  這有篇相關的文章可以看看 "Microsoft's new pitch: 'Every .Net developer just became a Windows Phone developer"
  • Android 則是 Java 配上 Application Framework 與 NDK, NDK 相關的資訊還真的少得可憐, Google 則強烈建議大家用 Java 開發應用程式. 
  • iOS 提供的原生程式語言是 Objective-C, 基本上是 C-based 的程式語言, 所以速度上應該不是問題, 在加上 Apple 的硬體 model 單純所以沒有太多相容與移植的問題, 所以狀況比較單純, 但是還是有人對於  Objective-C 的速度有些意見:P "Android Dalvik VM performance is a threat to the iPhone" 另外 .NET CLI 也可以在 iPhone 跑ㄟ MonoTouch
  • MeeGo API 部分是使用 Qt Framework 做為 UI Framework, 主要是使用 C/C++, 感覺 MeeGo 比較像一般的 OS, 現行的 Mobile OS 都在 Application framework 還有跨硬體平台的部分有著特殊的設計, 但是 MeeGo 在這方面著墨比較少.
可以見得每個平台的選擇都還不少, 除了 Apple iOS 獨樹一格之外, 其它開放性的系統都會有硬體相容性與移植的問題, 要用 VM-based 的程式語言還是 Native 的程式語言好呢? 我想混用最好, 但是佈署可就要花點心思了.