本日2011年8月27日に TechParty2011 参加型で開催された CLR/H の第61回勉強会。
またしても今回も、懲りずにライトニングトークに登壇させて頂いた。
今回のライトニングトークでは、以前
このブログにて報告させて頂いた、国内の DNS サービス Dozens の API クライアントを .NET で作ってみたことを披露した。
以下はそのスライド資料。
実はライトニングトーク当時は、上記のとおり用意したスライドのうち、前半部分しか披露していない。
上記スライドのうち後半、「メイキング・オブ・Dozens API Client for .NET」以降は時間が足りず、ライトニングトーク中には触れることができなかったのだ。
ということで、今回の投稿では、上記LT用スライドの後半について触れておく。
「メイキング・オブ・Dozens API Client for .NET」と題してあるが、これは、実際に Dozens API Client for .NET を作った上で、さらにいろんなプラットフォームに対応させたときに得た、下記の経験・知見を披露するものだ。
広く様々なプラットフォーム・処理系で使われる.NETライブラリを作るには?
詳しくは上記スライドで確認頂きたいのだが、いくつか要点を再録すると以下のとおり。
- PowerShell 2.0 は既定の設定では .NET3.5 の上で動作している。
.NET4用にビルドされたアセンブリは PowerShell 上にロードできない。
よって、.NET3.5用としてビルドすること。 - int? など、メソッドの引数に Nullable を使うと、F# からそれを呼び出すときに、ただの "123" とは記述できず、いちいち "Nullable 123" とか書かねばならないので注意。
これを是とするか非とするか意見は分かれると思う。
せっかくの F# のシンプルさを損なっている感じがするので、Nullable の使用を避けられるものなら避けたほうがいいかも。
なお、上記スライドでは触れなかったが、C# 4.0 以降で使われているデフォルト引数の機能も、F# では使えない(機能しない)ので留意しておいたほうがいいかも。
場合によっては、デフォルト引数ではなく、複数のオーバーロードバージョンを用意したほうがいいことがあるかもしれない(しかしその場合、後述のとおり COM からの利用で難ありだが)。
さらに、VBScript などなど、COM 経由からの利用も想定に入れるなら、以下の点に注意するとよさげ。
- COM 経由では、引数無しのコンストラクタでしかオブジェクト生成できない。
必ず引数無しコンストラクタも用意すること。 - COM 経由では、メソッドのオーバーロードとあまり相性良くない。
呼び出せないわけではないが、 "MyMethod"、"MyMethod_2"、"MyMethod_3"... というように、連番のサフィックスがランタイムによって自動で付加される。
以上、どうぞご参考まで。