Rubyで遊んだ日々の記録。あくまで著者視点の私的な記録なので、正確さを求めないように。
Rubyと関係ない話題にはその旨注記しているはず。なので、一見関係無いように見える話題もどこかで関係あるのかもしれません。または、注記の書き忘れかもしれません...
_ ご多分に漏れずGoを眺めたみたわけだけど、最初の疑問はセミコロンの扱い。
言語仕様にはむちゃくちゃなことが書いてあるけど現実はどう見ても全然違うので、諦めてソースを見たら、トップレベルでは省略可能、それ以外ではセパレータとして機能、と書いてあった。
どうでもいいけどソース冒頭のコメントも大法螺吹いてます。なにこれこわい。
_ しかし、あらためてチュートリアルを眺めてみたら、ちゃんとin fact, semicolons are unnecessary after any top-level declaration, although they are needed as separators within a parenthesized list of declarations.
A Tutorial for the Go Programming Languageって書いてあるね。
_ ちょっと事情があって金曜日はスケジュールを空けてあったんだけど、結局お呼びがかからなかったので、同僚と一緒に会社を抜け出して関西オープンソース2009をちょっとだけ覗いてきた。
いちおう仕事中なので、ネクタイ締めてスーツで。ま、スーツデイらしいのでいいだろ。
_ 誰かRubyな人いないかなー、と思ってきょろきょろしてたら高尾さんに会ったので雑談など。
うちの同僚のiPhoneネタでなんか盛り上がった。
その後、仕事に関係あるような気がしないでもない発表を一つ聞いて(結局関係なさそうだったので、大場さんの方に行けばよかった...)、それから角谷さんの「Rubyでソフトウェアづくりをアジャイルにするということについて」を聞いた。
悪い意味じゃなくて、いろいろツッコみたくなる内容だった。いやー、ほんと、会社の暇そうな若い連中を引きずって来ればよかったよ。
帰る前に角谷さんに挨拶したついでにそのことを伝えたら、なぜか角谷さんに「光栄」とか言われてしまってるわけですが、なんかむしろ恐縮しちゃうな。いやほんと、若い人こそ、ああいうお話を聞くべきです。
_ 昨日の話は、WDKに含まれるmsvcrt_win2000.obj(とかmsvcrt_winxp.objとかmsvcrt_win2003.objとかとか)をリンクすれば解決するという話をIRCで教えてもらった。
というか、教えてもらってることに気づかないで自力で辿りつきかけてて時間の無駄をしたわけだが。
_ 次の課題は、VC9でコンパイルすると(というかVC9のlink.exeでリンクすると)サブシステムが5.0になってしまうということ。
ちなみに5.0未満のバージョンを指定すると警告が出て無視されるという凶悪さ。
現在最も簡易に入手可能なWDK(つまりWindows 7用)のlink.exeも同様らしい。
なにそれこわい。
_ IRCで、VC9とWDKの組み合わせではXP以前のWindowsに同梱されているmsvcrt.dllではエクスポートされていない関数を動的リンクすると動作しない、という報告があった(らしい)。
_ 調べてみると、_ftol2()、_ftol2_sse()、_except_handler4_common()の3つが問題になるようだ。
前2者はfloatからlongへの型変換に使用されるもので、_ftol()を呼ぶ関数を忍び込ませれば問題ないらしい。
しかし_except_handler4_common()は難問。
なにしろソースが公開されていない。リバースエンジニアリングすりゃいいのだが、そういう危ない橋を渡るのはちょっと……。
関数名及び参照しているシンボルから見ると、SEH絡みらしいのだが。
_ 問題なんて特になくて(ぉ、VC9で使える、msvcrt.dll用のヘッダとインポートライブラリをいかに入手するかだけですね。
で、WDKにそれがあった、と。
単にそれだけ。それを見つけることさえできていれば誰でも同じことができたはず。
_ いやまあ、rubyのソースコード中にはVCのバージョンによって処理を変えているところがあるわけですが、実際にはコンパイラのバージョンによって変えるべきところとランタイムのバージョンによって変えるべきところがあるので、その辺を整理する必要はありました。
あと、WDKのインポートライブラリにはなぜか含まれていない微妙な関数・変数があるので、その辺の利用を避けたりする必要もあったわけですが、そもそも使う必要がなかったじゃんこいつらみたいな感じだったので問題のうちに入らんわ、みたいな。
_ しかし、stat系の関数がないのはなんでだろう?
1.9はいいけど1.8が...
_ 最後までrubyが作れるようになったので、やり方を説明。
bin\vcvarsall.batを実行するなりして必要な環境変数を設定する。INCLUDEの先頭にWDKのinc\crtのフルパスを、LIBの先頭にWDKのlib\crt\i386のフルパスを、それぞれ挿入する。当然だが、もしx64版がターゲットであればLIBの方はlib\crt\amd64。environを使っているところがあれば全部消す。※今のtrunkにはどうも問題があるらしく、度々minirubyが落ちると思うけど(これは普通にrubyを作ろうとしても同じ)、makeを繰り返してなんとかしてください。
_ というわけで、なんとかなっちゃったんだけど、今後どうしたものかなあ。
config.hとrbconfig.rbの問題を除けば、これに移行しちゃってもいいんだが...
被捕捉アンテナ類
[Ant]
[Antenna-Julia]
[Rabbit's Antenna]
[Ruby hotlinks]