[#352] ruby 1.1a5 released — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
38 messages
1997/09/01
[#353] Re: ruby 1.1a5 released
— keiju@... (石塚圭樹 )
1997/09/01
[#354] Re: ruby 1.1a5 released
— matz@... (Yukihiro Matsumoto)
1997/09/01
まつもと ゆきひろです
[#355] methods [Re: ruby 1.1a5 released]
— keiju@... (石塚圭樹 )
1997/09/01
けいじゅ@日本ラショナルソフトウェアです.
[#356] Re: methods [Re: ruby 1.1a5 released]
— matz@... (Yukihiro Matsumoto)
1997/09/01
まつもと ゆきひろです
[#357] Re: methods [Re: ruby 1.1a5 released]
— keiju@... (Keiju ISHITSUKA)
1997/09/01
けいじゅ@日本ラショナルソフトウェアです.
[#359] Re: methods [Re: ruby 1.1a5 released]
— matz@... (Yukihiro Matsumoto)
1997/09/02
まつもと ゆきひろです
[#363] Re: methods [Re: ruby 1.1a5 released]
— matz@... (Yukihiro Matsumoto)
1997/09/02
まつもと ゆきひろです
[#374] Re: methods [Re: ruby 1.1a5 released]
— matz@... (Yukihiro Matsumoto)
1997/09/02
まつもと ゆきひろです
[#376] Re: methods [Re: ruby 1.1a5 released]
— keiju@... (Keiju ISHITSUKA)
1997/09/02
けいじゅ@日本ラショナルソフトウェアです.
[#382] Re: methods [Re: ruby 1.1a5 released]
— matz@... (Yukihiro Matsumoto)
1997/09/02
まつもと ゆきひろです
[#390] Re: methods [Re: ruby 1.1a5 released]
— keiju@... (Keiju ISHITSUKA)
1997/09/03
けいじゅ@日本ラショナルソフトウェアです.
[#391] Re: methods [Re: ruby 1.1a5 released]
— matz@... (Yukihiro Matsumoto)
1997/09/03
まつもと ゆきひろです
[#405] nesting [methods [Re: ruby 1.1a5 released]]
— keiju@... (石塚圭樹 )
1997/09/04
けいじゅ@日本ラショナルソフトウェアです.
[#406] Re: nesting [methods [Re: ruby 1.1a5 released]]
— matz@... (Yukihiro Matsumoto)
1997/09/04
まつもと ゆきひろです
[#411] Re: nesting [methods [Re: ruby 1.1a5 released]]
— keiju@... (石塚圭樹 )
1997/09/04
けいじゅ@日本ラショナルソフトウェアです.
[#358] defined? — keiju@...
けいじゅ@日本ラショナルソフトウェアです.
7 messages
1997/09/01
[#389] ruby 1.1a6 released — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
6 messages
1997/09/03
[#417] [BUG] *methods — keiju@... (Keiju ISHITSUKA)
けいじゅ@日本ラショナルソフトウェアです.
6 messages
1997/09/04
[#418] building ext modules — Eiji-usagi-MATSUmoto <ematsu@...>
うさぎです。
7 messages
1997/09/05
[#431] [Q] socket on ruby(mswin32) — Masaki Suketa <suke@...>
助田です。
9 messages
1997/09/09
[#441] How to report a bug — takagi@... (TAKAGI Hiromitsu)
Bus error が出ました。
15 messages
1997/09/09
[#447] Re: How to report a bug
— matz@... (Yukihiro Matsumoto)
1997/09/10
まつもと ゆきひろです
[#461] [Q] ruby-socket(mswin32) — Masaki Suketa <suke@...>
助田です
27 messages
1997/09/11
[#462] Re: [Q] ruby-socket(mswin32)
— matz@... (Yukihiro Matsumoto)
1997/09/11
まつもと ゆきひろです
[#463] Re: [Q] ruby-socket(mswin32)
— Masaki Suketa <suke@...>
1997/09/11
助田です
[#464] Re: [Q] ruby-socket(mswin32)
— matz@... (Yukihiro Matsumoto)
1997/09/11
まつもと ゆきひろです
[#467] Re: [Q] ruby-socket(mswin32)
— WATANABE Hirofumi <watanabe@...>
1997/09/11
わたなべです.
[#468] Re: [Q] ruby-socket(mswin32)
— matz@... (Yukihiro Matsumoto)
1997/09/11
まつもと ゆきひろです
[#469] Re: [Q] ruby-socket(mswin32)
— WATANABE Hirofumi <watanabe@...>
1997/09/11
わたなべです.
[#475] Re: [Q] ruby-socket(mswin32)
— WATANABE Hirofumi <watanabe@...>
1997/09/11
わたなべです.
[#476] Re: [Q] ruby-socket(mswin32)
— Masaki Suketa <suke@...>
1997/09/12
助田です。まとめてレスします。(ちょっと長いです)
[#477] Re: [Q] ruby-socket(mswin32)
— WATANABE Hirofumi <watanabe@...>
1997/09/12
わたなべです.
[#489] [BUG] thread? — keiju@... (Keiju ISHITSUKA)
けいじゅ@日本ラショナルソフトウェアです.
5 messages
1997/09/16
[#499] parser bug — keiju@... (Keiju ISHITSUKA)
けいじゅ@日本ラショナルソフトウェアです.
8 messages
1997/09/18
[#501] MethodIndex — keiju@... (Keiju ISHITSUKA)
けいじゅ@日本ラショナルソフトウェアです.
5 messages
1997/09/18
[#522] Re: Assigne to special variable — "EGUCHI Osamu" <eguchi@...>
えぐち です。
12 messages
1997/09/24
[#571] dbmtest.rb — Masaki Suketa <suke@...>
いまだ ruby(Perl?) のソースコード追っかけてる時間の方が長い
11 messages
1997/09/30
[#572] Re: dbmtest.rb
— WATANABE Hirofumi <watanabe@...>
1997/09/30
わたなべです.
[#573] Re: dbmtest.rb
— matz@... (Yukihiro Matsumoto)
1997/09/30
まつもと ゆきひろです
[#585] Re: optimize (Re: Assigne to special variable) — "EGUCHI Osamu" <eguchi@...>
えぐち です
4 messages
1997/09/30
[#594] BUG?(marshal) — Masaki Suketa <suke@...>
以下のプログラムを実行した時に(3)と(4)で出力結果が違います。
17 messages
1997/09/30
[#595] Re: BUG?(marshal)
— matz@... (Yukihiro Matsumoto)
1997/09/30
まつもと ゆきひろです
[#596] Re: BUG?(marshal)
— WATANABE Hirofumi <watanabe@...>
1997/09/30
わたなべです.
[#601] Re: BUG?(marshal)
— Masaki Suketa <suke@...>
1997/10/01
助田です。
[#602] Re: BUG?(marshal)
— matz@... (Yukihiro Matsumoto)
1997/10/01
まつもと ゆきひろです
[ruby-dev:545] Re: optimize (Re: Assigne to special variable)
From:
"EGUCHI Osamu" <eguchi@...>
Date:
1997-09-26 08:40:36 UTC
List:
ruby-dev #545
えぐち です。 ---------- > 件名 : [ruby-dev:537] Re: optimize (Re: Assigne to special variable) > > まつもと ゆきひろです > > In message "[ruby-dev:536] optimize (Re: Assigne to special variable)" > on 97/09/26, "EGUCHI Osamu" <eguchi@shizuokanet.or.jp> writes: > > |えぐち です。 > > うーん,えぐちさんってすごい人かも. とーりすがりのものです。 > |elisp のバイトコードコンパイラなんか、結構すごい最適化を > |かけますよね、elisp に限らず common-lisp 以降の lisp の > |実装は特にチューニングに関しては激しいものがあります。 > > elispの最適化は調べてません.そんな最適化してました? > Lispに関しては古典的な知識しか無いんです. 私も Lisp でがしがし書ける人でないのであれですが、 COMMON LISP THE LANGAGE (2nd Ed.)なんかを読むと 言語設計の段階で強烈に最適化を意識して舞うよね。 まつもとさんって、 hogehoge_p() とかするから lisper かと 思ってました 。で ruby は CLOS の影響かと、、 > |と言うことで、いわゆるピープホールオプティマイズと > |ランタイムエンジン部分のチューニングが ruby では効果的では? > > 全てがメソッドで組込みの演算がほとんどないことと,メソッドが > 自由に再定義されうる(副作用を持つものに差し替えられているか > も)ので,ピープホールオプティマイズは望み薄です.評価順序の > 差し替えや部分式の括り出しすらできないので. > > やっぱり高速化には実行系に手を入れるしかないでしょうね. obj = obj + m --> obj += m もピープホールの一種じゃないかな、これだけでもエバるときに 若干手数が減ると思うです? ただ、 obj = m + obj --> obj += m の様な「交換則」はレシーバの変更なのでヤバヤバですネ。 また、メソッドのテールリカージョンは可能だとおもいます。 > |> * メソッドキャッシュの改善(eval.c) > | > |中規模なアプリケーションでなら、0x200 エントリのメソッドキャッシュ > |でも(gcov で見ると)かなりヒットしているように思えます。 > |むしろエントリーを増やすより、再定義などでクリアされるない様に > |したいところですが、メソッドとオブジェクトの結合が動的なので > |ほとんど不可能に近いですね。 > > 同じ場所で呼ばれるメソッドは大抵同じなので,構文木そのものに > キャッシュとして埋め込むという手法が昔の Smalltalk の実装に > ありました.ただ,これも結局はキャッシュの有効判定のコストな > どがあるので,どれだけ効果が上がるかは自信がないです.昔, > rubyがまだ小さかったころ似たようなことを試した時にはそれほど > 劇的には改善しませんでしたが. もともとキャッシュしなくても hash(Hashにあらず) を クラスのメソッドの探索に使っているので、以上にクラス階層が 深くならない限りミスキャッシュのランタイムコストは、これ以上 気にしないでいいと思います。 キャッシュエントリの衝突も十分押さえられ手いる様です。 典型的な ruby のアプリがわからないんで、あれなんですけど、、 > |> * 構文木の再設計(parse.y,node.h,eval.c) > | > |これはたとえば、 > | obj += INTEGER > |を現在は > | OP_ASGN と INTEGER > |に分解してるのを > | OP_ASIGN_INTEGER > |と新しく定義した複合的な単一ノードにして、eval() のトラバースを > |少なくするといった NODE 定義の拡張でしょうか? > > いや,もっと大胆なことを考えています.今のrubyは部分式の評価 > をrb_eval()の再帰呼出で行っていますが,これを非再帰化すると > 言うものです.ただ,そのためにソフトウェアスタックを使う必要 > が出たりするとかえって遅くなるかも.まだ実装にかかれる程考え > がまとまっていません. #JavaVM に食べさせようとしてませんか? (^^) 例外からの復帰がスタックと整合するか問題ですね。 ソフトスタックもThread毎に必要でしょうし、 イテレータもスタックに絡まってきそうですね。 この辺の問題が、 setjmp() で一挙に解決してるんで 「絶妙」だと思ったわけです。(あの volatile は尋常ぢゃない) > |魅力的ですが、 gc.c も NODE の解釈をしているのが大変そうですね。 > > gc.cのNODEの解釈は高速化のためだけですし,知らないノードに対 > してもなんとか動くようになっていますので,心配はいりません, > 多分. GC が全部の NODE を知ってる(様にみえた)のでてっきり 新しい NODE タイプをつくるとそのままではこけると思ってました。 なるほど、 default: でサルベージュしてますね。 結局 looks_pointerp() してメンバのマークを力ずくでやってるんですね。 逆に言うと、ここの default: に来る NODE をなくすとよいと、、 (多分今は殆ど来ないと思う) > |> などが考えられます.rubyでは大量にsetjmpを呼んでいるのが明ら > |> かですから,とくに最後のものをいつか実現しようと考えています. > | > |setjmp を使っているところを、他の仕組みで実装すると > |余計遅くなりそうな気がしませんか? > > たとえば現在のrubyではwhileなどの単純ループやclass/module定 > 義などでもsetjmpを使っています.この辺はパーザとの連係で減ら > せるのではないかと考えています.そのためにはrb_evalの非再帰 > 化が必要そうですけど. ですね、このあいだの _setjmp() への変更で、なぜにあんなに スピードが変わるかわかったような気がします。 x86 や sparc は setjmp() で数十バイトしか退去しませんが mips や amd29000 のようなレジスタマシンだと1Kバイト 前後の退去が起こるので、setjmp() の多様はつらいかもしれません。 時流としては、シリコンでのレジスタは増やしてもインストラクションは 比較的少ない(と行っても32本ぐらい)のレジスタにしてそれを レジスタリネーミングで投機実行の先行実行にあてがうのがメインストリートに なってきたので setjmp() のコストが爆発することはないでしょう。 (でも VLIW が流行ったらまずいかも) > |私が Thread 関係のコードに恐れをなしている事が一番の理由なんですが、 > |(GC と Thread は私の理解を超えてます :-p) > > いやあ,実は私もです.スレッドなんか良く動いてるなあと自分で > も思うんですけど. ruby のスレッドって10msでスケジューラ呼んでますよネ これにプライオリティエンコード付けるとメモリ保護無しですが、 いっぱしのマルチタスク環境になりますね。 #その前に非同期IOを実装しないと、、 > |それから、/RE/ のコンパイルの部分を新しい librx に差し替えると > |速くなるかもしれないです。 > |、、今の GPL な regex をスクラッチから書き直すって ToDo にあったやうな、、 > > rubyの正規表現は遅いですからねえ.librxってperl(4|5)相当の機 > 能を持たせられましたっけ? \W とか \b とかですね、当然...ないです。 やっぱスクラッチから書くしかないかなぁぁ、、 flex で書いても人手より速くないですよね、、 正規表現ってあれで独立した言語みたいなものだから手強いです。 えぐち