[#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

まつもと ゆきひろです

[#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

まつもと ゆきひろです

[#441] How to report a bug — takagi@... (TAKAGI Hiromitsu)

Bus error が出ました。

15 messages 1997/09/09

[#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

わたなべです.

[#594] BUG?(marshal) — Masaki Suketa <suke@...>

以下のプログラムを実行した時に(3)と(4)で出力結果が違います。

17 messages 1997/09/30

[ruby-dev:592] Re: optimize (Re: Assigne to special variable)

From: "EGUCHI Osamu" <eguchi@...>
Date: 1997-09-30 06:41:39 UTC
List: ruby-dev #592
えぐち です。

----------
> 差出人 : Yukihiro Matsumoto <matz@netlab.co.jp>
> 件名 : [ruby-dev:588] Re: optimize (Re: Assigne to special variable)
> 
> まつもと ゆきひろです
> 
> In message "[ruby-dev:586] Re: optimize (Re: Assigne to special
variable)"
>     on 97/09/30, Yukihiro Matsumoto <matz@netlab.co.jp> writes:
> 
> |まつもと ゆきひろです
> 
> ||> それとキーワード判定ってそんなに重くないような気がするんです
> ||> けど.重くなければ複雑になるだけですよね.
> ||
> ||ところが、yylex の実行時間の殆どは2分探査が占めてました。
> ||で yylex は、全体のいくらかというと、、ベストテン圏内に登場することも
> ||まずらしくないようです。(みぢかいスクリプトではあれですが、)
> |
> |そうか,それは考えた方が良いかも.
> 
> うちにも gperf がインストールしてあったので,ちょっと使って
> 見ました,なかなか面白いですね.

gperf は、gcc 自身の生成に必要なので gcc の走るプラットホームには
よくインストールされています。
2分探査は高速なアルゴリズムですが、さすがに完全ハッシュの方が
速いですし、レイテンシーがフラットなのがいいです。

> でも,手元にある900行くらいのスクリプトでは有意な差は出なかっ
> たんですねえ.確かに速くなっているようなんですけど,せいぜい
> 数ミリ秒くらいでした.今後の使い勝手などを考えると変更する価
> 値があるのだろうか,という感じでしたね.もうちょっと検討して
> みましょう.

じつは、自分のパッチでは if/unless/while/until の例外を表駆動に
変更したのでそれも効いているです。一遍にやってので分離したデータを
持ってないです。^^;

> ところで,えぐちさんのお使いのプロファイラやカバレージツールっ
> てなんなんでしょう? すごく正確な値が出てるみたいですけど.

プロファイラは、FreeBSD の /usr/bin/gprof です。
  env CFLAGS='-pg -O2' ./configure
な ruby を走らすだけです。
sunos では GNU-gprof です。基本的に同じですけど。

カバレジテスタは、 gcov です、*次の* リリースの gcc に含まれます。
pgcc とか egcs という gccの改造をしているプロジェクトの
中間成果に含まれています。

  env CC=gcc-test CFLAGS='-fprofile-arcs -ftest-coverage' \
    ./configure
ってかんじです。

こんなもの取れます。
---
                static VALUE
                rb_eval(self, node)
                    VALUE self;
                    NODE * volatile node;
                {
      129541        NODE *state;
      129541        volatile VALUE result = Qnil;
                
                #define RETURN(v) { result = (v); goto finish; }
                
                  again:
      142971        if (!node) RETURN(Qnil);
                
                #if 0
                    sourceline = nd_line(node);
                    sourcefile = node->file;
                #endif
      142736        switch (nd_type(node)) {
         553          case NODE_BLOCK:
         553            while (node) {
        2118                result = rb_eval(self, node->nd_head);
        1922                node = node->nd_next;
        1922            }
         357            break;
                
                        /* begin .. end without clauses */
                      case NODE_BEGIN:
      ######            node = node->nd_body;
      ######            goto again;
---

あと SunOS の tcov でも同じように測れると思います。
ruby は幸い KnR1 でかかれているので古き良き SunCC でも
コンパイルできるので tcov もOKでしょう。
(SunOS4 自体が絶滅しなければいいんですが、because I love BSD!! )

#
ruby にスクリプトのプロファイルやカバレジテストの機能を
付けようと一瞬思ったのですが、 thread でめげました。

	えぐち

In This Thread

Prev Next