From: "U.Nakamura" Date: 2008-02-12T21:59:24+09:00 Subject: [ruby-dev:33720] Re: win32utilsの統合案 こんにちは、なかむら(う)です。 In message "[ruby-dev:33715] win32utilsの統合案" on Feb.12,2008 21:09:23, wrote: | たとえば標準ライブラリのopen3はforkを使っているためmswin32では動きません。(ですよね?) | その問題を解決するためにwin32utilsでwin32-open3というライブラリが公開されています。 | アプリケーション開発者の立場からすれば、プラットフォームを気にせずに | 同じライブラリが使えると嬉しいです。 | 実装を切り換えるのはあくまでライブラリの役割だと思います。 それはまったくその通りなのですが、open3のインターフェースが使 えることが本当に嬉しいですか? あれに相当する機能が、もうちょっと使いやすいインターフェース で本体のProcessモジュールあたりに取り込まれるほうがずっと嬉し いと思います。 というわけで、native Win32 portでは、open3を実現するための内 部APIは用意して、ruby本体側が適切なインターフェースをスクリプ トレベルで提供するのを期待して待っています。 # Process.spawnがそういう方向になるのかと思っていたら結局なっ # てないなー ま、待つのは私の勝手なので置いておいて、現実にopen3をWindows で今使いたいんだという話に目を向けると(それだけ必要なんだった ら入れればいいじゃん(gemで入れられるし...)とか思わなくもない ですが)、win32-open3を取り込むとしたらいろいろ書き直すことに なると思うので(例えば前述の内部APIを使えよ、とか)、メンテする ことになる人のやる気次第なんじゃないでしょうか。 | ちなみにPerlには標準でforkのエミュレーションコードが含まれているようです。 ActivePerlだとスレッドを使って疑似的な子プロセスをエミュレー トしているそうですね。 forkを実装してるというよりはforkを使ったスクリプトが動くよう になんとかごまかしてる感じなのかなあ、と想像します。 しかし、現在動いているプロセスのコピーがほしくてforkしてる人 なんて事実上存在しなくて、実際は全然別の子プロセスを起動する ためにforkしてる例がほとんど全部なんでしょうから、Windowsで forkを実装するコストを払うより、forkなんか明示的に使わないで スクリプトを書く方法を啓蒙した方がずっといいんじゃないかと思 っています。 もちろん、誰かがそれを実装することに反対してるわけじゃないで すし、ちゃんと動くパッチは大歓迎です :) それでは。 -- U.Nakamura