rubinius

Rubinius 1.0.0 が速すぎてびっくりした

(追記: Rubiniusとは、Ruby自身で書かれたRubyの処理系。Javaで書かれているJRubyとともに、期待を集めているRuby処理系のひとつ。) そもそもこのブログは Rubinius で遊んだ結果を紹介するために始めたようなものだったのに、せっかく Rubinius 1.0.0 がリ…

Rubinius と MagLev が協力するみたい

Finally, we're delighted to be working with Gemstone to refactor the Rubinius kernel (the part written in Ruby), to allow using it as a shared component between Rubinius and their MagLev runtime. http://blog.engineyard.com/2008/11/17/rubin…

Engine Yard が Rubinius の開発支援を縮小

たぶん、昨今の金融危機がオープンソースに影響を与えた例。それも目に見えて。 Rubinius の作者である Evan Phoenix は、自身のブログで、Engine Yard が Rubinius の開発支援を縮小することを発表した。 There have been some sad developments within the…

Ruby にとって JRuby や Rubinius が必要な理由

Ruby には、本家実装である MRI 以外に、JRuby や Rubinius といった alternative implementation が登場している。 でも、いちばんよく使われるのは本家 MRI だし、それはこれからも変わらないだろう。じゃあ MRI 以外の実装は必要ないじゃん、と言われるか…

呼び出し元のローカル変数を変更する

Evanから資料が上がってこないので、Rubiniusで遊んでみる。 次のコードは、あるメソッドの中から呼び出し元のローカル変数を変更するサンプル。 もちろんRubinius限定。 def f() var = 1 g(var) # var が 2 に変更される puts "f(): var=#{var}" #=> "f(): …

ついに Ruby の正式な仕様が登場するかも

第 1 回 Ruby 設計ミーティングのメモが公開された。 Unwinding the stack: First Ruby design meeting notes これによると、Rubinius が主導して作った RubySpec が、Ruby の正式な仕様およびテストスイートとなりそう。パチパチ。 RubySpec は、RSpec のサ…

Rubinius のリポジトリが GitHub 上に登場

Rubinius on GitHubRubinius のリポジトリをコピーしたものが GitHub 上に登場。 Rubinius の本家リポジトリが移動したわけではなくて、あくまでコピーなので注意。 なんでこんなことをするかというと、こうすることで GitHub を使って Rubinius を fork さ…

Rubinis が C から C++ ヘ移行するみたい

悲しいお知らせがあります。Rubinius が C から C++ へ移行しました。 $ cd rubinius.code $ git fetch $ git checkout -b cpp origin/cpp $ git pull $ ls vm/ # 'vm' は新しいディレクトリ Makefile ffi.hpp README float.cpp builtin_array.cpp gc.cpp bu…

InfoQ: Rubiniusの話のまとめ:SendSites、情報源、プロジェクトマネージメント

InfoQ: Rubiniusの話のまとめ:SendSites、情報源、プロジェクトマネージメントこのところ、InfoQはRubiniusの記事を継続的に提供してくれてる。ありがたやありがたや。

MountainWest Ruby Conference 2008: Strengthening the Ruby Ecosystem Part I: Rubinius

MountainWest Ruby Conference 2008: Strengthening the Ruby Ecosystem Part I: RubiniusEvan Phoenix のプレゼン。Rubinius についてではなく、コミュニティとかそのへんの話。それはそうと、34:46 あたりのキャプチャ。なんと Mac 利用率 100% ! 海外プロ…

Ruby1.9 や Rubinius は MRI と比べて本当に速いのか

Ruby1.9 や Rubinius は MRI と比べて本当に速いのかどうか、確かめてみた。結論からいうと、fibonacci sequence のような「ベンチマーク向き」のテストでは確かに速くなっている。しかし、文字列操作を多用するような実アプリケーションに近づくほど、速く…

EngineYardがmod_rubiniusとRubiniusに向けて開発者を雇用

InfoQ: EngineYardがmod_rubiniusとRubiniusに向けて開発者を雇用 Railsのホスティング会社であるEngine Yard(サイト・英語)は、最近、Rubiniusに取り組む開発チームを立ち上げたことで話題となった。今回、そこに新たな開発者としてEero Saynatkari(Rubiniu…

Rubinius を Tiger でコンパイルするためのパッチ

日本全国で 3 人くらいはいるんじゃないかと思っているんだけど、MacOS X 10.4 Tiger を使っていて、かつ Rubinius がコンパイルできなくで困っている人はいませんか。バグ登録して直してもらうようにお願いしたら、「みんな Leopard に移行したから直せない…

File#flock が実装された

いつのまにか File#flock が実装されていた。ticket #251で足りないと指摘されていた #flock, #truncate, #chown, #mtime, #lstat はどれも実装されたようだ。よかった。これで rbTenjin を Rubinius ready にできそうだできた。

スクリプト言語の起動時間を調べてみた

実行してみると分かるが、Rubinius の起動は実に遅い。どのくらい遅いかというと、間違って Java を起動したんじゃないかと思うほど遅い。あまりに遅いので、Ruby と Rubinius の起動時間を調べてみた。ついでに、他のスクリプト言語の起動時間も計測してみ…

Rubinius がコンパイルできない

おとといくらいから MacOS X で Rubinius がコンパイルできない。rake build するとこんなエラーが。 $ rake build (in /tmp/ruby/rubinius.code) make vm cd shotgun; make rubinius cd lib; make library; CC archive.o In file included from ../../shotg…

仕様が MRI と Rubinius で異なる場合の spec ファイルの書き方

SyntaxError のように仕様が MRI と Rubinius で異なる場合、spec ファイルの書き方には注意が必要である。一般的には、次のように書いてしまいがちだ。 if defined?(RBX_VERSION) # Rubinius のとき ... test code ... else # そうでないとき ... test code…

SyntaxError の仕様が Rubinis と MRI とで違う

Rubinis と MRI とでは、SyntaxError クラスの仕様が結構違う。 MRI では SyntaxError#message にファイル名と行番号が含まれるが、Rubinius では含まれない。 Rubinius には SyntaxError#file と SyntaxError#line が定義されており、これでファイル名と行…

spec ファイルを Rubinius 以外でテストする

Rubinius の spec ファイルは、なんと Rubinius 以外でも実行できるような仕掛けがすでに用意されていた。実行はいたって簡単で、bin/ci コマンドのオプションに -t ruby とか -t jruby とかをつけるだけ。 $ cd rubinius.code $ bin/ci -t ruby spec/ruby/1…

パッチの送り方

spec ファイルを作成したら、それを Rubinius 開発チームに届けるわけだけど、その手順は次の通り。 spec ファイルをリポジトリに登録する (git add, git commit) パッチを作成する (git-format-patch origin) BTS で ticket を発行し、パッチを添付する ま…

*.rbc の owner と permission

当然のように、Rubinius も調べてみる。 foo.rb: def hello(name) puts "Hello #{name}!" end main.rb: require 'foo' hello('World') result: $ ls -l main.rb* foo.rb* # 最初は *.rbc はない -rw-r--r-- 1 kwatch kwatch 44 Feb 13 18:35 foo.rb -rw-r--r…

alias を使っている場合の spec ファイルの書き方

ERB::Util::h() は、ERB::Util::html_escape() への alias となっている。 class ERB module Util module_function def html_escape(s) s.to_s.gsub(/&/,'&amp;').gsub(/</,'&lt;').gsub(/>/,'&gt;').gsub(/"/,'&quot;') end alias h html_escape end end このような場合は、sp…

Rubinis 用の spec ファイルを作成する

Rubinius では、Test::Unit ではなくて、RSpec でもなくて、独自に作った RSpec のサブセットを使ってテストをしている。しかも単なるサブセットではなく、Rubinius 用の拡張が入っている。また Rubinius には、spec ファイルを生成するためのテンプレートが…

Rubinius のおもしろ機能: 構文木とバイトコードを表示する

たとえば次のような Ruby スクリプト (hoge.rb) があったとする。 def hello(name) puts "Hello #{name}!" end hello('World') ここで「rubinius describe hoge.rb」を実行すると、hoge.rb の構文木とバイトコードが表示される。「rbx describe hoge.rb」だ…

トラブル:rake build が動かない

rake git:update して rake build すると、なんかエラーになってビルドできない。 $ cd rubinius.code $ rake git:update $ rake build (in /var/tmp/rubinius.code) make vm cd shotgun; make rubinius cd lib; make library; Makefile:59: Extraneous text…

Rubinius の yaml.rb は Syck ではなく rbYAML だった

Rubinius で require 'yaml' すると、Syck ではなく rbYAML が使われるみたい。たぶん Syck が拡張モジュールだからだろう。しかしなあ、rbYAML はバグだらけなんだよな。Syck もバグがあるんだけど、rbYAML はそれどころではないくらいバグが多い。たとえば…

Rubinius でまだ実装されてないもの

File#flock() がなかった。 ticket#251をみると、File#truncate, File#chown, File#mtime, File#lstat もないみたい。1.0 release はまだまだ先だな、こりゃ。追記(2008-02-24): 今見たら、全部実装されたみたい。よかった。

Rubinius は自動コンパイル

Rubinius でスクリプトを実行すると、自動的に *.rb をコンパイルして、バイトコードを *.rbc というファイルに書き込んでくれる。これで、次回からは *.rb ではなく *.rbc を直接読めば良くなるから、ライブラリの require が速くなる。 これも Python と同…

Rubinius の対話モード

Rubinius は、ファイル名を指定しないで起動すると、irb のような対話モードになる。 $ rbx irb(main):001:0> p %[a b c] "a b c" => nil irb(main):002:0> Python と同じ仕様だな。

起動スクリプト

Rubinius には、'rubinius.code/shotgun/rubinius' という起動スクリプトが用意されている。どうも /usr/local/bin/rbx を直接起動するよりも、このスクリプトを使った方がいいみたい。 でもこのスクリプト、rake install じゃインストールされないんだよな…