2008-07-17T07:13:59+09:00

MacRuby をためしてみた。MacRuby は Apple の Laurent Sansonetti (lrz) が中心となって開発している Ruby 実装で、くわしくは http://chopine.be/lrz/talks/RubyKaigi2008.pdf をどうぞ。

% svn co http://svn.macosforge.org/repository/ruby/MacRuby/trunk MacRuby-trunk
...
Checked out revision 380.
% cd MacRuby-trunk 
% rake
...
compiling socket
rake aborted!
Command failed with status (): [./miniruby -I./lib -I.ext/common -I./- -r....]
/Users/kzys/src/MacRuby-trunk/rakefile:519
(See full trace by running task with --trace)
%

こけた。rake してみる。

% rake
...
compiling socket
generating constants.h
...
making macruby
make: Nothing to be done for `macruby'.
%

あ、通った。自動生成するコードの依存関係が変なんでしょうか。

% ./macruby 
dyld: Library not loaded: /Library/Frameworks/MacRuby.framework/Versions/0.3/usr/lib/libmacruby.dylib
  Referenced from: /Users/kzys/src/MacRuby-trunk/./macruby
  Reason: image not found
zsh: trace trap  ./macruby
% otool -L macruby
macruby:
        /Library/Frameworks/MacRuby.framework/Versions/0.3/usr/lib/libmacruby.dylib (compatibility version 0.3.0, current version 0.3.0)
        /usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.1.1)
% 

/Library/Frameworks に置けばいいんだろうけど、開発中のものを sudo rake install するのもなー。

% rm macruby
% rake
...
/usr/bin/gcc -I. -I./include -I/usr/include/libxml2 -arch ppc -arch i386 -fno-common -pipe -O2 -g -Wall -Wno-parentheses -Wno-deprecated-declarations -Werror main.o gc-stub.o -L. 
-lmacruby -o macruby
...
%

macruby がフレームワークをリンクしているわけではない。

% rm *.dylib
% rake
...
/usr/bin/gcc -I. -I./include -I/usr/include/libxml2 -arch ppc -arch i386 -fno-common -pipe -O2 -g -Wall -Wno-parentheses -Wno-deprecated-declarations -Werror array.o bignum.o class.o compar.o complex.o dir.o enum.o enumerator.o error.o eval.o load.o proc.o file.o gc.o hash.o inits.o io.o marshal.o math.o numeric.o object.o pack.o parse.o process.o prec.o random.o range.o rational.o re.o regcomp.o regenc.o regerror.o regexec.o regparse.o regsyntax.o ruby.o signal.o sprintf.o st.o string.o struct.o time.o transcode.o util.o variable.o version.o blockinlining.o compile.o debug.o iseq.o vm.o vm_dump.o thread.o cont.o id.o objc.o bs.o encoding.o dln.o dmyext.o enc/ascii.o missing/lgamma_r.o prelude.o -lpthread -ldl -lxml2 -lobjc -lffi -lauto -framework Foundation -dynamiclib -undefined suppress -flat_namespace -install_name /Library/Frameworks/MacRuby.framework/Versions/0.3/usr/lib/libmacruby.dylib -current_version 0.3 -compatibility_version 0.3 -o libmacruby.1.9.0.dylib
...
%

ここか。install_name をはずしてみる。

% /usr/bin/gcc -I. -I./include -I/usr/include/libxml2 -arch ppc -arch i386 -fno-common -pipe -O2 -g -Wall -Wno-parentheses -Wno-deprecated-declarations -Werror array.o bignum.o class.o compar.o complex.o dir.o enum.o enumerator.o error.o eval.o load.o proc.o file.o gc.o hash.o inits.o io.o marshal.o math.o numeric.o object.o pack.o parse.o process.o prec.o random.o range.o rational.o re.o regcomp.o regenc.o regerror.o regexec.o regparse.o regsyntax.o ruby.o signal.o sprintf.o st.o string.o struct.o time.o transcode.o util.o variable.o version.o blockinlining.o compile.o debug.o iseq.o vm.o vm_dump.o thread.o cont.o id.o objc.o bs.o encoding.o dln.o dmyext.o enc/ascii.o missing/lgamma_r.o prelude.o -lpthread -ldl -lxml2 -lobjc -lffi -lauto -framework Foundation -dynamiclib -undefined suppress -flat_namespace -current_version 0.3 -compatibility_version 0.3 -o libmacruby.1.9.0.dylib
% rm macruby
% rake
...
% ./macruby

うごいた!

% ./macruby -e 'p "hello".class.ancestors'
[NSCFString, NSMutableString, NSString, Comparable, Object, NSObject, Kernel]

おおお。なんかはさまってる!