Hatena::Grouprubyist

まいにち Ruby

2009-08-13

ruby-stm

| 15:38 | はてなブックマーク - ruby-stm - まいにち Ruby

すっかり夏休み風にとんでしまってるまいにち Ruby だけどめげない。

Ruby で Software Transactional Memory を実装してみる。

mootoh’s ruby-stm at master - GitHub

まだつくっている途中。雰囲気が伝わるかな。

こんなコードで、

Beautiful Code の例を書けるようになるだろう。


あわせてよみたい:

steps to phantasien 2007-06-23 つくってわか(った気にな)る STM

ビューティフルコード

ビューティフルコード

2009-07-29

Pascal の三角形 (2)

| 12:17 | はてなブックマーク - Pascal の三角形 (2) - まいにち Ruby

CTMCP 1.7 章にあるメモ化というか計算結果のキャッシュをつかうと、 Ruby で書いたものも実用的に速くなる。

Scheme 版:

pascal(100) の実行時間:

ruby 1.8.6ruby 1.9.2devMacRuby 0.5macrubyc 0.5 compiled a.outgosh 0.8.13
0.059s0.035s0.968sコンパイルできず ><0.009s

Gauche つよい。

Pascal の三角形

| 11:36 | はてなブックマーク -  Pascal の三角形 - まいにち Ruby

ネタに困るので、CTMCP の Oz コードをむりやり Ruby で書きながら学習してみるの図。

リスト処理、パターンマッチングを Array でやるあたりに無理がある。car, cdr, cons を pop, flatten でやってるのでオブジェクト生成が過剰。

性能を見る。Pascal(20) を time で測定 @ Mac OS X 10.5.7 on C2D 2.93GHz:

ruby 1.8.6ruby 1.9.2devmacruby 0.5macrubyc 0.5 でコンパイルした a.out
6.66s4.5s58.38s57.024s


リスト処理なら Lisp 系ですわなー、ということで Scheme で書いたものが以下。

性能:

gosh 0.8.13 → 0.577s


参考までにオリジナルの Oz コード:

これもまた、{Browse {Pascal 20}} に要する時間はほとんどなし。(Mozart 環境で実行時間を計測する方法をまだ知らない)

まいにち

11:35 | はてなブックマーク - まいにち - まいにち Ruby

気を抜くと落ちこぼれていってしまうのでがんばる!

2009-07-25

CRuby と MacRuby のちがい

| 23:16 | はてなブックマーク - CRuby と MacRuby のちがい - まいにち Ruby

diff -r  ruby-trunk macruby-experimantal -x .ext -x .git | less

などすると、えらいちがうことがわかる。

2009-07-24

ファイルをさいしょから順によんでなにがしかをする処理

23:01 | はてなブックマーク - ファイルをさいしょから順によんでなにがしかをする処理 - まいにち Ruby

いつも


hoge = []
fuga = {}
ARGF.each do |line|
  # line を parse して
  # hoge とか fuga につっこんだり
end

# hoge とか fuga を解析

みたいにしてしまうんだよな。

ループのなかで hoge fuga 解析までやってしまいたいんだけどすっきりと書けない。

FizzBuzz

23:01 | はてなブックマーク - FizzBuzz - まいにち Ruby

ガッツがたりないので、 FizzBuzz 書いてお茶をにごす。

# fizzbuzz.rb
def fizzbuzz(n)
   def fizzbuzz_str(m)
      if m % 15 == 0
         "fizzbuzz\n"
      elsif m % 3 == 0
         'fizz '
      elsif m % 5 == 0
         'buzz '
      else
         m.to_s + ' '
      end
   end

   (1..n).each do |i|
      print fizzbuzz_str(i)
   end
   puts
end

fizzbuzz(100)

実行

% ruby fizzbuzz.rb
1 2 fizz 4 buzz fizz 7 8 fizz buzz 11 fizz 13 14 fizzbuzz
16 17 fizz 19 buzz fizz 22 23 fizz buzz 26 fizz 28 29 fizzbuzz
31 32 fizz 34 buzz fizz 37 38 fizz buzz 41 fizz 43 44 fizzbuzz
46 47 fizz 49 buzz fizz 52 53 fizz buzz 56 fizz 58 59 fizzbuzz
61 62 fizz 64 buzz fizz 67 68 fizz buzz 71 fizz 73 74 fizzbuzz
76 77 fizz 79 buzz fizz 82 83 fizz buzz 86 fizz 88 89 fizzbuzz
91 92 fizz 94 buzz fizz 97 98 fizz buzz 


% time "writing fizzbuzz.rb"
10m

2009-07-23

macrubyc

| 01:45 | はてなブックマーク -  macrubyc - まいにち Ruby

a.rb:

% cat a.rb
p 1 + 1

コンパイルする @ iMac C2D 2.93GHz:

time macrubyc a.rb
macrubyc a.rb  2.05s user 0.27s system 85% cpu 2.714 total

ちょっと時間かかるかんじ。

ls -l a.out
-rwxr-xr-x  1 mootoh  staff  14311192 Jul 23 01:39 a.out

14MB。でか。

otool -L しても LLVM 関係のが出てこないので、 LLVM のライブラリが static link されてる雰囲気をうけた。

file a.out
a.out: Mach-O 64-bit executable x86_64

64bit バイナリ ktkr

あとは

otool -tv a.out | grep ':$' | c++filt

とかするとたのしい。

takuma104takuma1042009/07/23 02:38macrubyc -o hoge.rb すると出る hoge.o が、LLVMで生成されたものっぽいのですが、そのサイズは普通で、それ以外の巨大な領域は libmacruby-static.a とかっぽいですな。

moiramoira2009/07/23 07:03ほうほう。そうか、 macruby のランタイムシステムそのものが静的リンクされるわけですね。