パスワードを忘れた? アカウント作成
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

Rubyを最大63%高速化した中学生」記事へのコメント

  • 古代の昔から、処理系が持つ標準の関数が遅いのでテーブル使うなり自分で関数を置き換えるなりする
    などして高速化するのは当たり前だったし、今回はたまたまオープンソースだったからそれを指摘
    しただけだよね?
    マクロを外に出すとかも古代からあるテクニックだし、所詮埋もれてた問題にたまたま気づいただけ
    としか思えない。というか、ver upの際に低速化したのなら、明らかにその部分を担当した人間の
    ミスでしょう。

    Rubyを63%高速化って言っても、特定の用途の処理を行う際に高速化されただけで、これによる恩恵を
    受けるユーザはそれほど多くないように思う。
    これくらいのことはOSS界では日常茶飯事だし、職場でも毎日のように遭遇することなんだけど、
    記事にするほど珍しいことなの?

    #そもそもフィボナッチ数列って業務的にはほとんど使わないよね

    • Re: (スコア:1, 参考になる)

      by Anonymous Coward
      Ruby関係のblogを読むと、なぜかフィボナッチ数列を出力するコードを書く人が多いように思います。
      Lispや関数型言語も多いですね。
      JavaやC++関係では、ほとんど見たことが無いのですけど。

      つまり、あなたや私が知らないだけで、この世の中にはフィボナッチ数列を日常的に必要としている人が結構いるということではないでしょうか?
      • >つまり、あなたや私が知らないだけで、この世の中にはフィボナッチ数列を日常的に
        >必要としている人が結構いるということではないでしょうか?
        世の中に出回っている、”fib.rb" とかのコードは再帰関数呼び出しの
        ベンチマーク・デモ用です。いわば、わざと非効率なことでコンピュータを
        いじめてるようなもんです。

        ホントにフィボナッチ数列が欲しけりゃ、人間がやっている手順そのままに
        やったほうが、一億倍マシです。
        ま、それが判るようになるのもアルゴリズムの勉強の一環なんですがね。
        • by Anonymous Coward on 2009年10月29日 18時53分 (#1662494)

          ホントにフィボナッチ数列が欲しけりゃ、人間がやっている手順そのままに
          やったほうが、一億倍マシです。

          つまり再帰で書けということか。

          (define (fib n)
                  (cond ((= n 1) 1)
                        ((= n 2) 1)
                        (else (let fib-iter ((k 3) (fk-1 1) (fk 2))
                                 (if (= n k)
                                     fk
                                     (fib-iter (+ k 1) fk (+ fk-1 fk)))))))
           
          (fib 10)

          フィボナッチ数列に関しては、教科書的にはこういう風に書かんけどな。泥臭いから。でも、Schemeなら、こういう感じのコードはよく書く。脳内末尾再帰最適化でループにしか見えないし、末尾再帰の最適化が当然のSchemeの処理系には優しいから。

          fib-iterのとる引数と手続き(関数)そのものも意味は一定だし、手続き自体は第1引数がnと等しいときに、第3引数を返す、そうでないときは第1引数を1つ増やしたときの条件で引数をとり直して、第1引数がnと等しいかを評価して、真であれば第3引数を返して、そうでないときは...、の繰り返し。人間のやっている手順そのまんま。

          末尾再帰の最適化なんかしたら、手続き型と一緒じゃん、と言われれば、その通りなんですけど、見た目は再帰。

          #引数のnは1以上の整数しか取らないことが前提。

          親コメント

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

処理中...