著作一覧 |
能楽堂というのは、Http.sysを利用してマルチプロセスでサービスするRails用Webサーバのパッケージだ(Windows専用)。
演能(これがWebサーバ部に当たるRack用サーバ)がとりあえず動くようになったのは良いのだが、意外なほど起動プログラムの作成に手間取った。
何が手間取ったかというと、いろいろある。
最初は32/64共存で行こうと思った。だが、gemがアーキテクチャ無視してsoをインストールすることがわかった。あんな気持ちの悪いプログラムを見る気はしないので、あきらめた。もしかしたらバグ報告するかも知れないが、多分、しないだろうな。
元々は32ビットでいくつもりだったが、JMeterで負荷をかけたらhttp.sysがばかみたいに効率が良いのであっというまにスレッドが作られてNoMemoryErrorになりまくる。というわけで64ビットも使うことに決めたからだ。
で、共存ができないとなれば、上記の理由から64ビットで一本化。
64ビットで行くと決めたら、次はRscriptの64ビット化だ。これが死ぬほど難航した。Win32OLEも苦しんでいる後が見えるが、HRESULTとVALUEのマッピングとかだ。
・VS2010のコンパイルエラーにまぎれこむIntelisense Errorというのは非常に始末が悪い。どうもIntelisense用コンパイルはx86もx64も共通なようで、SIZEOF_VOIDPTR == sizeof(void*)が偽になる。それは異常なのでRubyはコンパイルエラーとするように仕掛けてある。それに引っ掛かるのだ。
SIZEOF_VOIDPTRは8(いや、インテリセンスはすばらしく、この機能があれば、#definで定数を決めてもソースを読むのが楽だが、良いことばかりではない)なのに、なぜだ? と言えば、x86でインテリセンス側はコンパイルしているからだろう。
このエラーにだまされてさんざん設定を調べたりテストコードを書いたりしたが、どうやっても、x64としてコンパイルできている。だが、コンパイル時にエラーとなる。実に悩んだ。
最終的に、Intelisense errorって何だ? と気付いて、それが何の意味もないということがわかった。あー、くだらん。こんなバカなもの(パラレルコンパイルのデモ的な意味があるのかな・)はデフォルトでオフにしておいてほしい(実際、選択してエラーを非表示にできる)。
・とは言うものの、VS2010の#ifdefの無効コードのグレイアウトはすばらしい。これはどんなエディターも実装すべきだが、少なくともcppかその代替となるものでプリプロセッシングしなければならないから、VS2010のようなコンパイラ一体型IDEでないと難しいだろうな。
で、それができるとHTAが記述できるのだが、意外なことにCScriptのデフォルトが64ビットなのに、mshtaのデフォルトは32ビットなのだな。最初エラーになる(というより何も起きない)のでこれも時間を取られた。
でも、まあ、とりあえずパッケージ化した。
(もちろん、元々は肉の日リリース祭りってのに参加したかったのだが、ゴミの日リリースになってしまったのが残念だ)
(Rails3ならこれ)
プログラミングRuby 1.9 −言語編−(Dave Thomas)
(Ruby 1.9ならこれ)
ジェズイットを見習え |