.NET Framework

こっちも去年 11 月に書いたもの。読みにくいな…。

CLIMicrosoft Windows における実装らしい。他の実装としては Mono ( http://www.mono-project.com/Main_Page ) が有名らしい、って GNOME で有名な Ximian が主導してる project だよおい。ということでとりあえず使ってみた感想まとめ。

  • MSIL: Microsoft Intermediate Language
    • CLI でいう CIL に対応する。 assembly や manifest 、 metadata といった言葉は共通してる。
  • CLR: Common Language Runtime
    • CLI における VES にあたる部分。 managed code や CTS 、 CLS という言葉は MSDN の説明の中に出てくる感じ。
  • .NET Framework Class Library
    • CLI でいう Library にあたるもの。 Profile って言葉は見かけない。
    • ( Windows XP では ) 多分 Win32API の wrapper class なんだろうなと思いつつ VS の IntelliSense を駆使して適当な code をうってみたけど class 、 field 、 method すべてがかなり論理的に整備されてる感じ。ただまぁ別 Library で機能追加ができたり Profile 単位で特定 domain に特化した機能を追加できるという CLI 仕様に基づいているのか、分解能的にはそれほどでもない感じで少し凝ったことをしようとすると自分で拡張してやらないとダメだったりする。

一応 class library で足りない場合には P/Invoke: Platform Invoke を使えばその platform の機能に access することも可能、と。これは…、あー見てみたら Platform Invoke として CLI で定義されてるな。でもまぁなんというか不毛感ただようというか Win32API のような core な部分を使う場合は定数定義からしてやらないといけない ( 特に SendMessage だとかは Message 定義からしないといけない ) ので code うちながら何度も不安になってしまうというか。直に API を叩くってのはその platform の能力を 100% 引き出せるっていう利点はあるけどやっぱりその場限りの code ってのは精神的にツライ。

あとは言語ごとの機能になってくるけど他には Visual C++ では STL や Boost のような language level での library が使える。っていうのは当たり前っちゃ当たり前か。でも Visual C++C++/CLI を採用してて managed / unmanaged な code を同時に書けるとかそのおかげで legacy code を managed code として wrap することもできるとか別 platform と souce を共有することができる場合もあるとか unmanaged code = native code なので速度面での tuning がきくとか ( さらにいえば C++ は inline assembler が書けるわけなので ) かなりの別格扱い。最後以外は今まで C++ でがりがり書いてた人以外には利点ではないけど速度面で融通が利くというのはすごいかも。いやまぁその分 machine のこと知ってないとダメっていう側面はあるけどね。

あーそう Visual C# だと editor への入力から数秒経つと自動で compile が走って結果が出てくるんだけど慣れてしまうとこれは楽だということに気がついた。最初うぜーなぁと思ってたんだけどよくよく考えてみると syntax error が即時に出てくるってことはその機能に関する思考が一回で済むということを強制しやすくなっているので結果的に効率がいいというか。勢いに乗ってると code をだら書きしたはいいもののいざ compile してみて直す箇所があった場合また思考を反復しないといけないのでそれに比べたら cost が低くなっている感じ。まぁひとによってスキキライあると思うけどこういう押しつけがましさっていうのは IDE じゃないと出来ないし結果的に生産性が高まってるんならアリだと思う。

それにしても IntelliSense 使いやすくなってるね。元々 VC++ 6.0 とか使ってたんだけどそのころは自分で書いた class の補完をしてくれなかったり関数や method の引数説明がわけわからなかったりといまいち役に立たなかったんだけど今回普通にそこらへんができてる上に using directive を考慮してくれたりでかなり使いやすい。 class library の整理されっぷりも手伝って適当に field / method 名打ち始めて Ctrl+Space 押せば何とかなるというステキ具合。