K.Sasada's Home Page

Diary - 2016 July

研究日記

文月

_31(Sun)

ルビィのぼうけんのワークショップ。

パソコンの中身を見よう、って課題で、現物がなかったので、ドライバー借りて Let's note ばらしてみた。

_30(Sat)

鳥井さんにくっついて博多へ。

_29(Fri)

恵比寿いってから相模原の方へ相談しに。

_28(Thu)

多分、大きな変更を入れたんじゃ無いかな、と。

これで、懸念だったところが色々改善できた、ような気がする。 自己満足というか、大局的にはあまり関係ないところではあるのだが。

_27(Wed)

大学でお話を伺ったり。

_26(Tue)

何も覚えていない。 多分、仕事してた(いや、いつもしてると思うけど...)

_25(Mon)

何も覚えていない。

_24(Sun)

新宿へ。

Elixir 校了記念に焼き肉。 むっちゃ高かった。

_23(Sat)

何も覚えていない。

_22(Fri)

この頃 Pokemon Go だっけ?

_21(Thu)

GSoC と書いてある。

_20(Wed)

ビデオ会議とか。

_19(Tue)

Ruby開発会議。 久々の六本木。

_18(Mon)

東茶屋街とか、金沢市立安江金箔工芸館とか行って、東京へ。 金沢駅の加賀屋でご飯食べられた。

_17(Sun)

鳥井さんとわかれて、一人で。

二人だと行けないところに行こう、と思って、1時間並んで昼食。美味しかった。 http://tabelog.com/ishikawa/A1701/A170101/17006172/ ここ。

兼六園も、お城も良かった。

夜もたくさん食べてしまった。

_16(Sat)

鳥井さんにくっついて金沢へ。

新幹線、指定席がとれず、自由席に挑戦したが、連休初日だからか、むっちゃこんでいて、10分前だと、全然だめ。すし詰め状態だった。ので、1時間待って、次の便で座れた。

美術館に行くなど。夕飯も美味しい。

_15(Fri)

GSoC ってカレンダーに書いてある。

_14(Thu)

Ori and the Blind Forest: Definitive Edition をはじめたらしい。Windows 10 のストアで購入。

凄い面白かった。ただし、Xbox コントローラー必須(キーボードつらすぎた)。 これが2000円とか、ありえん。

_13(Wed)

Elixir 本が、ここでやっと終わった、のかな?

_12(Tue)

RA のグラントについての相談。

_11(Mon)

青木さんが家に来てくれる。

_10(Sun)

出雲日御碕灯台へ。出雲からバス。結構シビアな時間だった。ちょっと回っただけ。 レンタカーが欲しいよね、ほんと。

_9(Sat)

いったことがなかった石見銀山へ。

松江で、車ない、と言ったら「どうやって行くの?」と言われたけど、ちゃんと電車とバスで行けました。宿は、その近く。いいところでした。

炭鉱跡は、凄い涼しいというか寒かった。

_8(Fri)

鳥井さんにくっついて島根へ。 挨拶とか、Ruby 3 の相談とか。

_7(Thu)

期日前投票。

GSoC の話、をしたんだっけ。

_6(Wed)

ビデオ会議とか。

_5(Tue)

http://www.ruby.or.jp/ja/news/20160520.html で初めて移転先の IIJ のビルへ。大変綺麗。

_4(Mon)

何も覚えていないがデバッグしてたらしい。 いや、いつものことか。 MRI は、ほんとテストが沢山あって凄い。

_3(Sun)

実家へ報告に。

_2(Sat)

何も覚えていない。

_1(Fri)

絶対どっかにありそうだけど、ベンチマーク用関数 fib_m() を考えてみた。

  • fib_m(0 or 1) = 1
  • fib_m(n) = fib_m(n-1) * fib_m(n-2)

Sak 関数と呼んで下さい。 (いや、絶対誰か考えてるだろうけど...)

つまり、結果は 1 にしかならないので、Bignum の計算が不要になる。

ちょっと試してみた。

# Ruby
def fib_m n
  case n
  when 0, 1
    1
  else
    fib_m(n-1) * fib_m(n-2)
  end
end

fib_m(40)

=begin
2.4 trunk
real    0m18.688s
user    0m18.647s
sys     0m0.016s

手元の trunk

real    0m17.245s
user    0m17.192s
sys     0m0.028s
=end

手元のビルド、ちょっとだけ改善が見られる。

# JRuby

$ jruby -v
jruby 9.0.3.0 (2.2.2) 2015-10-21 633c9aa OpenJDK 64-Bit Server VM 24.95-b01 on 1.7.0_101-b00 +jit [linux-amd64]

$ time jruby ~/src/rb/t.rb

real    0m19.053s
user    0m18.294s
sys     0m2.732s

ちょっと古いので、新しい奴はもっと速いと思う。

# Elixir

defmodule FibM do
  def fib_m 0 do
    1
  end
  def fib_m 1 do
    1
  end
  def fib_m n do
    fib_m(n-1) * fib_m(n-2)
  end
end

FibM.fib_m(40)

'''
$ time elixir lib/fib_m.ex

real    0m7.797s
user    0m0.270s
sys     0m7.555s
'''

BEAM VM 速いね...。

# C

int fib_m(n)
{
    if (n == 0 || n == 1) {
	return 1;
    }
    else {
	return fib_m(n-1) * fib_m(n-2);
    }
}

main(){
    fib_m(40);
}

/*
$ gcc fib_m.c
$ time ./a.out

real    0m0.912s
user    0m0.905s
sys     0m0.004s

$ gcc -O3 fib_m.c
$ time ./a.out

real    0m0.262s
user    0m0.252s
sys     0m0.008s
*/

なんというか、起動時間が大勢を占めているっぽい。-O3 で残ってるんか? 見てみたら一応、残っていた。というか、凄い展開されてる。

# Python

def fib_m(n):
    if n == 0:
        return 1
    elif n == 1:
        return 1
    else:
        return fib_m(n-1) * fib_m(n-2)

fib_m(40)

$ python --version ~/src/py/fib_m.py
Python 2.7.6

$ time python ~/src/py/fib_m.py

real    0m38.784s
user    0m38.733s
sys     0m0.028s

$ python3 --version
Python 3.4.3

$ time python3  ~/src/py/fib_m.py

real    0m42.571s
user    0m42.540s
sys     0m0.012s

意外と遅い。

# Crystal 0.18.6 [204bfd0] (2016-06-28)

def fib_m(n)
  case n
  when 0, 1
    1
  else
    fib_m(n-1) * fib_m(n-2)
  end
end

fib_m(40)

$ crystal -v
Crystal 0.18.6 [204bfd0] (2016-06-28)

$ time crystal fib_m.cr

real    0m3.231s
user    0m2.251s
sys     0m1.053s

はえー。

# scheme (Gauche)

(define (fib_m n)
        (cond ((= n 0) 1)
              ((= n 1) 1)
              (else (* (fib_m (- n 1))
                       (fib_m (- n 2))))))
(fib_m 40)

$ gosh -V
Gauche scheme shell, version 0.9.3.3 [utf-8,pthreads], x86_64-unknown-linux-gnu

$ time gosh ~/src/scheme/fib_m.scm

real    0m15.085s
user    0m14.982s
sys     0m0.080s

計ってるのは関数呼び出しのコストだから、アルゴリズム替えろよ、とかは無しで。


というわけで、主要 n 言語でした(嘘)。

_よしき(Sat Jul 02 01:35:39 +0900 2016)

 これはSqueak圧勝の予感..

Sasada Koichi / ko1 at atdot dot net
$Date: 2003/04/28 10:27:51 $