From: matz@... (Yukihiro Matsumoto) Date: 1996-01-24T18:09:41+09:00 Subject: [ruby-list:88] Re: ruby vs. perl まつもと ゆきひろ@トヨタケーラムです. In message "[ruby-list:87] Re: ruby vs. perl" on 96/01/24, P nakawtse writes: | 中渡@NTTです. | |> まつもと ゆきひろ@トヨタケーラムです. |> |> 便利だなと思うんですけど,時々怒りを覚えるんですよね. |> # ど〜してなんだよ〜っつうか | | 私はあまりないのですが,どこで怒ってしまうのですか? それはperlになじんでしまっているんでしょう.悪いことではない ですが.私の場合,ちょっと思い付くだけでも * 変数のデフォルトがグローバル * `$_'の値がいつの間にか変わってしまう * ユーザ定義関数と(関数的)演算子とで文法が違う * コンテキストの違いで動作が変わる.「local($foo) = <>」と かよく間違える * データ型が無い(スカラ).あるいは根本的に違う(配列/連想配 列) * 参照型は良く分からない * Cで拡張する気にならない(ほど難しい) * 言語仕様が大きい * オブジェクト指向機能が変 などがあります.まあ,どれも避けようと思えば避けられないこと は無いし,慣れの問題でもあるんですけど.結局,以前のバックグ ラウンド(lispやsmalltalkよりの人間です)がperlを完全に受け入 れるのに邪魔になっているんでしょう. | 拡張機能でなくて,クラスでもスクリプトの範囲で |  @assoc{/xyz./}  | これくらい簡単に書けて,効率よくできるなら, | perlを超えてますね. これはCじゃなくてrubyでこういうのが書けるという意味ですか? もちろん書けるでしょうけど,効率はどうでしょうねえ. 連想配列なわけですから,結局,繰り返し比較するというアルゴリ ズム以外にはありえないわけで,本質的な高速化は難しいですねえ. 後はどれだけCのコードに任せちゃえるかで決まるような…. |> を連想させますが,効率は全然違います.perlは最初に配列を作っ |> ちゃいますから. | | これはいやなんです.#怒りそう あら? 伝わらなかったかな.perlの grep(/xyz./, values %assoc) 配列を最初に作っちゃうけど,rubyの assoc.find_all{|k,v| v =~ /xyz./} はそんな無駄なことはしません,whileで回す方のperlの例よりは 少し効率が良いでしょう,という意味だったんですけど. まつもと ゆきひろ /:|)