なかだです。

At Tue, 6 Jan 2004 09:59:25 +0900,
Yukihiro Matsumoto wrote:
> | お正月に次の拡張ライブラリを作ったので投稿させていただきます。
> |
> |YARV: Yet another RubyVM 0.0.0-
> |http://www.atdot.net/yarv/yarv000minus.lzh
> 
> 面白いですね。extに下に置くとcompiler.cがコンパイルできない
> のはなぜだろう。

私のとこでは、vm.cでエラーになりました。

* できればsrcdirはいじりたくない
* dependをコピーするときに置換するので、extconf.rbのoext回りは
  不要
* ctest.rbでSEGV
* linuxだとulongは定義済み

> | しかも、遅いです。たくさんサボってるのに遅いです。
> 
> 私の作ったプロトタイプも速いないんですよね。その一方でgForth
> やQSchemeはめちゃめちゃ速い。その違いは一体なんなのかと。

ほとんどがメソッド呼び出しなので、最適化しづらい仕様ではあるん
ですよねぇ。


diff -ru2pN --exclude '*~' --exclude '.*' ../yarv/MANIFEST ext/yarv/MANIFEST --- ../yarv/MANIFEST 1970-01-01 09:00:00.000000000 +0900 +++ ext/yarv/MANIFEST 2004-01-06 10:55:27.000000000 +0900 @@ -0,0 +1,19 @@ +MANIFEST +compiler.c +compiler.h +ctest.rb +depend +disasm.c +extconf.rb +insnhelper.base.h +insnhelper.h +insns.def +insns2vm.rb +readme +test.rb +vm.c +vm.h +yarv.rb +yarv.txt +yarvcore.c +yarvcore.h diff -ru2pN --exclude '*~' --exclude '.*' ../yarv/depend ext/yarv/depend --- ../yarv/depend 2004-01-06 10:54:23.000000000 +0900 +++ ext/yarv/depend 2004-01-06 11:07:41.000000000 +0900 @@ -2,18 +2,13 @@ ######################################## -compiler.obj : $(srcdir)/compiler.c $(srcdir)/compiler.h $(srcdir)/insns.h -disasm.obj : $(srcdir)/disasm.c $(srcdir)/yarvcore.h $(srcdir)/compiler.h $(srcdir)/insns.h -yarvcore.obj : $(srcdir)/yarvcore.c $(srcdir)/yarvcore.h -vm.obj : $(srcdir)/vm.c $(srcdir)/vm.h $(srcdir)/insnhelper.h $(srcdir)/vm.inc +compiler.o : $(srcdir)/compiler.c $(srcdir)/compiler.h insns.h +disasm.o : $(srcdir)/disasm.c $(srcdir)/yarvcore.h $(srcdir)/compiler.h \ + insns.h +yarvcore.o : $(srcdir)/yarvcore.c $(srcdir)/yarvcore.h +vm.o : $(srcdir)/vm.c $(srcdir)/vm.h $(srcdir)/insnhelper.h vm.inc -vm.inc : $(srcdir)/insns2vm.rb $(srcdir)/insns.def - $(RUBY) $(srcdir)/insns2vm.rb - -insns.h : $(srcdir)/insns2vm.rb $(srcdir)/insns.def - $(RUBY) $(srcdir)/insns2vm.rb - -insns_info.c : $(srcdir)/insns2vm.rb $(srcdir)/insns.def +vm.inc vmtc.inc insns.h insns_info.c : $(srcdir)/insns2vm.rb $(srcdir)/insns.def $(RUBY) $(srcdir)/insns2vm.rb diff -ru2pN --exclude '*~' --exclude '.*' ../yarv/extconf.rb ext/yarv/extconf.rb --- ../yarv/extconf.rb 2004-01-06 10:54:23.000000000 +0900 +++ ext/yarv/extconf.rb 2004-01-06 11:28:37.000000000 +0900 @@ -1,40 +1,7 @@ require 'mkmf.rb' -dir = File.dirname($0) + '/' -load(dir + 'insns2vm.rb') - -oext = '.'+Config::CONFIG['OBJEXT'] - -open(dir + 'depend', 'w'){|f| -f.puts(<<EOS) - -######################################## - -compiler#{oext} : $(srcdir)/compiler.c $(srcdir)/compiler.h $(srcdir)/insns.h -disasm#{oext} : $(srcdir)/disasm.c $(srcdir)/yarvcore.h $(srcdir)/compiler.h \ - $(srcdir)/insns.h -yarvcore#{oext} : $(srcdir)/yarvcore.c $(srcdir)/yarvcore.h -vm#{oext} : $(srcdir)/vm.c $(srcdir)/vm.h $(srcdir)/insnhelper.h $(srcdir)/vm.inc - - - -vm.inc : $(srcdir)/insns2vm.rb $(srcdir)/insns.def - $(RUBY) $(srcdir)/insns2vm.rb - -insns.h : $(srcdir)/insns2vm.rb $(srcdir)/insns.def - $(RUBY) $(srcdir)/insns2vm.rb - -insns_info.c : $(srcdir)/insns2vm.rb $(srcdir)/insns.def - $(RUBY) $(srcdir)/insns2vm.rb - -test: all - $(RUBY) $(srcdir)/test.rb - -check: all - $(RUBY) $(srcdir)/ctest.rb -EOS -######################################## -} +have_type("ulong", "sys/types.h") +$objs = %w[compiler.o disasm.o insns_info.o yarvcore.o vm.o] create_makefile('yarvcore') diff -ru2pN --exclude '*~' --exclude '.*' ../yarv/insns2vm.rb ext/yarv/insns2vm.rb --- ../yarv/insns2vm.rb 2004-01-06 10:54:23.000000000 +0900 +++ ext/yarv/insns2vm.rb 2004-01-06 10:55:27.000000000 +0900 @@ -27,5 +27,5 @@ VARS = { INSNS = [] -$stdout = open(dir + 'vm.inc', 'w') +$stdout = open('vm.inc', 'w') ############################### @@ -45,5 +45,7 @@ print <<EOS */ +#ifndef HAVE_TYPE_ULONG typedef unsigned long ulong; +#endif int vm_exec(VALUE self, VALUE bsobj){ @@ -221,5 +223,5 @@ EOS ## make file for threaded code -$stdout = open(dir + 'vmtc.inc', 'w') +$stdout = open('vmtc.inc', 'w') print(<<EOS) @@ -250,5 +252,5 @@ EOS ## make disasm -$stdout = open(dir + 'insns_info.c', 'w') +$stdout = open('insns_info.c', 'w') print <<EOS /** @@ -348,5 +350,5 @@ EOS ## make insns enum -$stdout = open(dir + 'insns.h','w') +$stdout = open('insns.h','w') print <<EOS /**
-- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦