パスワードを忘れた? アカウント作成
5089 story

Ruby 10周年 36

ストーリー by yourCat
ここまで育てたことに感謝 部門より

Silphire 曰く、 "まつもと ゆきひろ氏のMLへの投稿[ruby-list:37162] 『Rubyの10年』によると、1993年2月24日にRubyが誕生してから昨日で10年を迎えたとの事です。
『オブジェクト指向スクリプト言語Ruby』の「著者まえがき」に、Rubyの誕生から今日に至るまでの歴史が綴られています。いくつか要約して抜粋しますと、1993年の2月に石塚圭樹氏と雑談をしている時に、オブジェクト指向のスクリプト言語について話題になったのが最初のようです。それからPerlの機能を基にして使い物になったのが94年の夏頃。94年11月にNetNewsを通じて協力者を募集し、fj.sourcesにてRubyが日の目を見たのがその翌年の事だそうです。その後もRubyは発展を続け、現在はバージョン1.6.8まで進化を遂げました。また近い内に1.8がリリースされる予定です。"

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • 以前から触ったり、かじったりしてみたいのだが、勇気がわかず、どうもPerl止まりになっている。

    # Rubyをかじると歯が欠けるからではないので、あしからず
    # PerlとRubyが同意語でないのは知っているよ
    # せっかく無料で搭載されているのだから触ってみようかな
    --
    -- ラテール部参加者募集中
  • by kingkoba (8334) on 2003年02月25日 14時28分 (#267472)
    …ポリン?

    #ごめんなさいごめんなさいごめんなさい
  • by Anonymous Coward on 2003年02月25日 1時19分 (#267078)
    Sweet 10 Diamonds を贈るよ。
  • by Anonymous Coward on 2003年02月25日 1時37分 (#267087)
    速くなるといいなぁ……
    • Re:次の10年で (スコア:3, 興味深い)

      by Arege na Coward (12168) on 2003年02月25日 3時39分 (#267145)
      コンパイラが出来るといいなぁ・・・
      OSのスレッドと相性良くなるといいなぁ・・・
      本体じゃないけどApolloのKylix版が安定するといいなぁ・・・
      RubyがCGIに使えるプロバイダが増えるといいなぁ・・・
      # どれも10年もかからない・・・ですよね?

      Rubyには感謝してもしきれず。
      親コメント
      • Re:次の10年で (スコア:2, 興味深い)

        by myn (13770) on 2003年02月25日 5時11分 (#267183) 日記
        rb2c [kyoto-u.ac.jp] や rubyjit [kyoto-u.ac.jp] なるものが存在します。
        1.4 系で開発が止っているようですが、
        たしか 4倍程速くなる、とかいう話だったような。
        親コメント
      • by G7 (3009) on 2003年02月25日 5時01分 (#267179)
        >コンパイラが出来るといいなぁ・・・

        「全てがObject」でありかつ「動的」なrubyみたいな言語だと
        コンパイルしても速度とかはあんまり美味しくない、という話じゃありませんでしたっけ?

        #Smalltalk→Cコンバータ(とかいうものが有るんですって?)がどうやってるのかは全然知らないのでG7

        個人的には、速度について細かいこと言いたい欲求は無いし、コンパイル「せずに済む」なら
        そのほうが楽(別解として「コンパイルを意識しない」ってのも有るが、それはそれ)だから
        わざわざしたいと思わないし、ソースを秘匿したいという欲求も無いので、コンパイルは欲しがってません。

        #テキストなソースのままで、ただしClass/Method/変数名をぐちゃぐちゃにスクランブルしちゃう、というのはどうだろう?>ソース秘匿派諸兄
        ##あ。予約語が残っちゃうか…

        >Rubyには感謝してもしきれず。

        はげしく同意。文句は色々有る(笑)が感謝する点もまた滅茶苦茶多数有るのも確かなんで。

        #最近やっとyieldを呼ぶ関数/Methodを肩肘張らずに書けるようになったのでG7

        個人的には、require unix(藁)と、関数/Methodの引数を囲う括弧を必須にするのと、くらいが望みといえば望みかな。
        Palmにも乗るといいなぁ…
        親コメント
        • Re:次の10年で (スコア:3, 参考になる)

          by elmirage (6555) on 2003年02月25日 9時55分 (#267252) ホームページ
          コンパイルのメリットとしては、

          > 「全てがObject」でありかつ「動的」なrubyみたいな言語だと
          > コンパイルしても速度とかはあんまり美味しくない、という話じゃありませんでしたっけ?

          > ソースを秘匿したいという欲求も無いので、コンパイルは欲しがってません。

          の2つの他に、

              Rubyの実行環境がない場所でも動かせる (素人さん相手に配布しやすい)

          というのがあって、これができるとうれしいかも。

          # もしかして、ネイティブコンパイラの話じゃない?
          # はずしてる?
          --
          だが、いいこともあるぞ、外の天気は上々なんだ
          親コメント
          • Re:次の10年で (スコア:2, 参考になる)

            by moonwolf (7862) on 2003年02月25日 12時30分 (#267349) ホームページ
            Windows環境に限れば、スクリプト/拡張ライブラリをWindows実行形式にしてくれるExerb [osdn.jp]というのがあります。
            親コメント
            • by Arege na Coward (12168) on 2003年02月25日 18時47分 (#267659)
              結局、バイトコード化された後のexerbが一番「コンパイラ」に
              近いものになるんでしょうかね。
              Ruby2.0に期待!
              親コメント
              • by t (1631) on 2003年02月28日 23時47分 (#269988) 日記
                次々期安定版(1.9.1以降)の目玉は「世代別GC+新Regexp(鬼車)+M17N」
                のみになって、その分Rite ("real" [ruby-lang.org] implementation)は
                もうちょっと先…だったりするかも。
                (3日前の[ruby-dev:19657] [nagaokaut.ac.jp]より)

                # というか、今の(ナイスキャッシュな)Rubyとバイトコード化済みのPythonとの
                # 比較で、単純に軍配が後者に上がらない時点で、実装の完成度の高いのが
                # どちらかは目に見えているような…
                #
                # (言語処理系の知識はhoc [bell-labs.com]以前くらいなので突っ込み大歓迎)

                え、Riteのリリースを早める方法ですか?
                ええと…
                「あなた」が手伝うことです。手伝える範囲でね。
                (↑これ見てる人すべての事ね)

                (自戒を含めてID)
                親コメント
          • Re:次の10年で (スコア:1, 参考になる)

            by Anonymous Coward on 2003年02月25日 10時20分 (#267258)
            >Rubyの実行環境がない場所でも動かせる (素人さん相手に配布しやすい)
            コンパイラという話からはそれますが、
            windows限定で完全とはいえんけど、この用途ならexerbがありますね。
            親コメント
          • by Anonymous Coward
            Exerb [osdn.jp]。
        • Re:次の10年で (スコア:2, 興味深い)

          by Circlive (12651) on 2003年02月25日 6時48分 (#267194) 日記

          動的な言語で最適化をはかるには、動的分析が必要になりますよね。実行時にメソッドの呼ばれ方や引数の渡され方を蓄積して、実行回数とスクリプトのタイムスタンプを見て「安定している」とわかった時点で蓄積した情報をもとに暗黙のうちに最適化してくれるようなインタプリタ/コンパイラみたいなのがカッコイイと思います。

          --
          ...芸というものは一生勉強だと思っています...
          親コメント
        • Re:次の10年で (スコア:1, 興味深い)

          by Anonymous Coward on 2003年02月25日 11時12分 (#267292)
          #テキストなソースのままで、ただしClass/Method/変数名をぐちゃぐちゃにスクランブルしちゃう、というのはどうだろう?>ソース秘匿派諸兄

          ぐちゃぐちゃに?
          よく出てくるものほど短かくしてくれぇ! by ハフマン派
          親コメント
    • 昨年、日本ソフトウェア科学会の全国大会の併設チュートリアルで
      Ruby のメモリ管理に関するまつもと氏の講演を聞きました。
      その話では、Ruby の実装は移植性を重視。速度を求めていないようでした。

      例えば、オブジェクトは 5ワード固定で、そこからはみ出すクラスや
      文字列型の実体部分は malloc/free してオブジェクトにリンクするそうです。
      つまり、オブジェクトヘッダーとオブジェクトボディが別々に管理されている
      格好ですな。ヘッダーは固定長(5ワード)で、ボディは必要に合わせて
      「ヒープ」外に確保すると。

      スループット性能を本当に重視するのであれば、
      その方向に性能を伸ばすにはどうやればいいか分かっている人が、
      フルスクラッチで実装し直せば それだけで速くなると思います。
      後は JIT コンパイラ次第で Java と同じ速度は出ると思います。

      p.s.

      私は一時 Ruby のソースを Java のバイトコードに変換しようと沈思黙考しました。
      ただ動けばいいというレベルの変換をすることは可能なのですが、
      ちゃんとした速度を出すためには色々最適化が必要になります。

      a. オブジェクトのうち可能なものはスタック割り付けに
      b. メソッド呼び出しを高速化

      a. に関しては、数値型オブジェクトを対象にコード解析(つまり、エスケープ解析)を行えば、かなりの部分が Java の primitive 型にできると踏んでいます。
      問題は b. で、静的に VTBL が作れる C++ や、クラスロード時に VTBL が作れる Java と違って、Ruby のメソッド呼び出しは完全に late-binding で、その名前のメソッドがあるかどうかの名前解決も実行時にやりますよね。
      つまり、Ruby のメソッド呼び出しを ナイーブに Java のバイトコードで実現しようとすると、全部 reflection 経由のメソッド呼び出しにする必要があります。これは大変に重い処理ですので、ここから通常のメソッド呼び出しに変換したいのです。
      これ、.rb → .class コンパイラレベルで何かうまい最適かはありますかね?

      # って 書いてますけど、
      # JavaVM 側が reflection 経由のメソッド呼び出し → 通常のメソッド呼び出し →
      # de-virtualization と最適化するのが 1 番ですね。。
      --
      コンタミは発見の母
      親コメント
      • >Ruby のメソッド呼び出しをナイーブに Java のバイトコードで実現しようとすると、全部 reflection 経由の
        >メソッド呼び出しにする必要があります。これは大変に重い処理ですので、ここから通常のメソッド呼び出しに変換したいのです

        俺も全然判ってないんですが、
        以前CMPもどきを車輪再開発したとき(笑)にちょっと考えたんだけど、そのとき見つけたネタとして、
        照合にキャッシュを使用する限りリフレクションは非常に高速です。 [borland.co.jp]」
        なんてな話もあるようで、これってもしかして、反論(?)として意味有りでしょうか?あんまり関係ないかな…

        #これって、java.lang.reflect.FieldやMethodといったObjectを後生大事にメモリ上に保持しておく、という意味ですよねよね?
        親コメント

        • #これって、java.lang.reflect.FieldやMethodといったObjectを後生大事にメモリ上に保持しておく、という意味ですよねよね?

          そうです。
          例を#268334 [srad.jp]に挙げましたが、この例に沿って言うと Borland の言うキャッシュは m をどこかに保存しておいて再利用しようというものです。

          この方法の問題点は m をどこに引っかけるかで、
          ぱっと考えてメソッドコード中に埋め込むか、オブジェクトに埋め込むことになると思います。

          メソッドコードに埋め込む場合、aSong.to_s をキャッシュすると

          static Object cached_object ; // C 的な関数ローカルの static のイメージ
          static Method cached_method ;

          if( cached_object != aSong ){
              // cache misshit
              Method m = aSong.getClass().getMethod( "to_s", /* parameter types */ );
              cached_object = aSong ;
              cached_method = m;
          }

          cached_method.invoke( aSong, null ); // 呼び出し

          オブジェクト(ruby.lang.Object) に埋め込む場合、

          class ruby.lang.Object { // 根本のクラスに追加
              // ...
              int cached_line ;
              Method cached_method ;
          }

          if( aSong.cached_line != 987654321 ){ // ソース行に対応した unique な番号
              // cache misshit
              aSong.cached_line = 987654321;
              aSong.cached_method = aSong.getClass().getMethod( "to_s", /* parameter types */ );
          }

          aSong.cached_method.invoke( aSong.null ); // 呼び出し


          ここまで書いて何なんですけど、速くなりそうにない変換っすね (;_;
          --
          コンタミは発見の母
          親コメント
      • b. の部分を例を出して説明すると、

        // Ruby のソース
        class Song
            def to_s
                // ...
            end
        end

        aSong = Song.new
        aSong.to_s

        をナイーブに Java に変換すると以下のようになります。

        // Java のソース
        class Song extends ruby.lang.Object {
            ruby.lang.ReturnValue to_s(ruby.lang.Parameters parms){
                //
            }
        }

        aSong = new Song();
        Method m = aSong.getClass().getMethod( "to_s", /* parameter types */ );
        m.invoke( aSong, null );

        このメソッド呼び出しの部分を
          aSong.to_s( /* ? */ )
        の形にできるのであれば、Ruby → Java に変換することで
        パフォーマンスの向上が期待できると思います。
        --
        コンタミは発見の母
        親コメント
    • by Anonymous Coward
      計算機の性能が上がるので相対的に速くなります。
    • by Anonymous Coward
      切望。

      もっとも速さのために何かを犠牲にしてもらっても困るのですが。
      LightweightLanguage の考え方に共感を覚え使ってみようと思いましたが専ら web アプリケーションを作るのが主なのでどうしても PHP や Perl になってしまいます。
      walrus も注目していましたがまだまだ重いようで、、
      • by t (1631) on 2003年03月01日 0時06分 (#270001) 日記
        > 速さのために何かを犠牲

        これこそがRubyの、というかLLの本質ではないでしょうか。
        速さを重視するなら非LL指向品を使えば早くなるのは当然、
        「人間の頭脳労働の低減」がLLの究極の目的である、と。
        (自分の知識はあんまりありませんが、とりあえずここ [ruby-lang.org]とかどうぞ)

        ちょっと強い言い方かもしれませんが、
        「速さのために何かを犠牲にしてもらっても困る」とコメントされること自体、
        「LightweightLanguage の考え方に共感を覚え」ているという事と
        矛盾しているのでは、と感じてしまいました。

        # ところで、実際にPHPやPerlで構築されたWebアプリケーションと、
        # Rubyでのそれって、そんなにパフォーマンスに差がありましたか?
        # 「実感として」とかの主観的なものでも構わないので、実際に開発に
        # 携わる方としての意見をお聞きしたいです。
        親コメント
    • そういえば バイトコードインタープリタに変更する [ipa.go.jp]という話がありました。
typodupeerror

「毎々お世話になっております。仕様書を頂きたく。」「拝承」 -- ある会社の日常

読み込み中...