http://hotwired.goo.ne.jp/news/technology/story/20050303303.html
だってさ。PDF のサンプルを読んでみると、 カバーする範囲は『CPUの創りかた』と似ているようだ。 しかし成果物が Apple I というのがいいなあ。
(13:35)
少なくともぼくにとっては JavaScript が言語としてどうかは問題ではありません。 (HTML only) と (HTML + JavaScript/Java/ActiveX) の差を問題にしています。
ちなみにこの日記にも JavaScript がひっついてきますが、それはオフにできるし、 オフにしても読むうえで問題がない部分だからどうでもいいんです。 でもサービスを受けるために JavaScript オンを強制されるのは嫌。
付け加えれば、 新しい技術は嫌いつつ吸収するというのがぼくのスタイルでもあります。 たぶん一年くらいしたら何食わぬ顔して Ajax 使ってるんじゃないかな。
でもインクリメンタルサーチだけは実装しません。意地で。
(13:46)
出たらしい。objdir を分けると楽にコンパイルできそうである。
~/obj % mkdir ruby-yarv; cd ruby-yarv ~/obj/ruby-yarv % cp ../../src/ruby/eval.c . ~/obj/ruby-yarv % patch -p0 < ../../src/yarv-0.2.0/evalc.patch ~/obj/ruby-yarv % ../../src/ruby/configure --prefix=/usr/pkg/ruby-yarv --disable-install-doc && make && make test && sudo make install ~/obj/ruby-yarv % cd .. ~/obj % mkdir yarv-0.2.0; cd yarv-0.2.0 ~/obj/yarv-0.2.0 % /usr/pkg/ruby-yarv/bin/ruby extconf.rb && make && sudo make install gcc -fPIC -g -O2 -I. -I/usr/pkg/ruby-yarv/lib/ruby/1.9/i686-linux -I/usr/pkg/ruby-yarv/lib/ruby/1.9/i686-linux -I. -DDISPATCH_THREADED_CODE -DDISPATCH_DIRECT_THREADED_CODE -DOPT_BASIC_OPERATIONS -DOPT_REGEXP_MATCH -DOPT_INSNS_UNIFICATION -DOPT_STACK_CACHING -DINLINE_METHOD_CACHE -DHAVE_TYPE_ULONG -c compile.c In file included from compile.c:39: optunifs.inc:126: parse error before `struct' optunifs.inc:133: parse error before `for' optunifs.inc:134: conflicting types for `iv' optunifs.inc:130: previous declaration of `iv' optunifs.inc:134: `insns' undeclared here (not in a function) optunifs.inc:134: warning: data definition has no type or storage class optunifs.inc:134: parse error before `}' optunifs.inc:135: parse error before `->' optunifs.inc:135: conflicting types for `rb_ary_concat' /usr/pkg/ruby-yarv/lib/ruby/1.9/i686-linux/intern.h:58: previous declaration of `rb_ary_concat' optunifs.inc:135: warning: data definition has no type or storage class optunifs.inc: In function `insns_unification': optunifs.inc:150: stray '\' in program optunifs.inc:150: parse error before `;' optunifs.inc:161: stray '\' in program optunifs.inc:161: parse error before `!=' optunifs.inc:166: `unified' undeclared (first use in this function) optunifs.inc:166: (Each undeclared identifier is reported only once optunifs.inc:166: for each function it appears in.) optunifs.inc:173: `insn' undeclared (first use in this function) optunifs.inc: At top level: optunifs.inc:176: parse error before `return' make: *** [compile.o] Error 1
あれ? ……ああ、CR LF か。
~/obj/yarv-0.2.0 % for i (*.c *.h *.inc **/*.rb) { tounix $i > tmp; mv tmp $i }
で、make benchmark までは何事もなく行ってしまったので以下略。
次、AlphaServer DS20E で試す。
環境
tunami:~/src/yarv-0.2.0 % uname -srm OSF1 V5.1 alpha tunami:~/src/yarv-0.2.0 % gcc --version gcc (GCC) 3.4.3 Copyright (C) 2004 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. tunami:~/src/yarv-0.2.0 % /usr/local/pkg/ruby-yarv/bin/ruby --version ruby 1.9.0 (2005-03-03) [alphaev6-osf5.1b] tunami:~/src/yarv-0.2.0 % grep CFLAGS Makefile CFLAGS = -mieee -O2 -mcpu=ev6
あっさりと動いたのでベンチマークとアセンブリ出力だけはっとこ。
i686-linux だとベンチマークは平均 5.08 倍速になっているが、 Alpha EV6 だと 2.26 倍になってしまった。 個人的には 2 倍になってりゃ十分だと思うんだが、 so_object で YARV のほうが遅くなっているのが気になる。 これが遅くなるということは、一般的なプログラムも遅くなる可能性があるからだ。
(18:03)
Copyright (c) 2002-2007 青木峰郎 / Minero Aoki. All rights reserved.
ありがとうございます。so_object は GC の実行時間が支配的ですが、まだ GC のチューニング(mark する領域について)をしていません。