ocamlnet で Nethttpd をあれこれやってみたのだが

This entry was posted by on Thursday, 11 August, 2005
>うーむ、面倒くさいなあ。 > >基本的な方針に対する疑問として、けっきょくソケットを開いて bind して listen する必要があるのはどうなんだろう……(Equeue も使えるけど)。それと、 HTTPD のオプションを与えてやる必要があるのだけど、デフォルト値のようなものを用意しておいてくれても良かったんじゃないのかな、という気がする。 > >けっきょく Netcgi 系の方が圧倒的に楽ですね。細かくチューンする必要があるちゃんとした規模のウェブアプリケーションならその方が有利かもしれないけどね、という感じですね。 > >Nethttpd とは関係ないけど、 cgi_activation を受け取る関数を宣言する場合、明示的に型宣言をしておかないといくつかのメソッドでハマるようだ。というかこれは OCaml の仕様の問題くさい。クラス定義にオプション引数つきのメソッドがあるとき、そのメソッドの型の一致がちゃんとチェックできていないようだ。普通の関数だとできるので、 OCaml がちゃんとクラスを扱えていない問題じゃないかという気が。 set_header の型が互換でないとかぬかすのでけっこう苦労した。 > >サンプルコードはこんな感じ。 > >class c = object
method v ?(x=10) () = x
end
let f1 o = o#v ()
let f2 o = o#v ~x:20 ()
let f3 o = o#v ?x:(Some 30) ()
> >ここで、 f1〜f3に (new c) を与えてみると、 f3 だけ通ることがわかる。残りは正しくチェックされない。というわけで f3 のように書けという意見は一面の真理ではあるが、そこには落とし穴があって、複数のオプション引数がある場合は、両方指定しないと正しくチェックされないのですね。とすると cgi_activation#set_header みたいなオプション引数がたくさんあるメソッドの場合には話にならんわけで、困ったなあという感じですね。いい解決方法はあるのかな? >

Comments are closed.