MacRuby-devel ML: roadmap for 0.5(2)

昨日の続きです。それでは、第2回目をどうぞ。

    • -

以下は、リリースするまでに対応する必要があると考えている作業の一覧です。

  • 新しいランタイムAPIを使ってMarshal、Enumerable::Enumerator、Rational、Complexの実装(または移植)
  • 32ビットCPUアーキテクチャに対応すること。C言語のスタブの修正と、32ビットの浮動小数点数に対する浮動小数点の最適化(floating point optimization)のバックポートなど。
  • 即値(Fixnumクラスで扱える範囲の数値、浮動小数点数、true、false、nil)を格納するためのArray/Hashのサブクラス。パフォーマンスを向上させるために、即値を直接格納するための新しいサブクラスが必要です。(訳注:MacRubyで数値の1を大量に生成するとNSObjectのサブクラスのインスタンスの生成をともなうため、とても遅い。関連するメール:http://lists.macosforge.org/pipermail/macruby-devel/2009-July/001989.html この作業は、これを改善するための一環だろう。)
  • バックトレース/symbolication。ご存じのように、多くの場合、MacRubyにおけるバックトレースを取得できません。実は、まだバックトレースを実装していません!
  • setjmp/longjmpシステムコールの代わりに、C++の例外処理の機構を使ってtry/catchを実現する。
  • load.cの再実装。現在のload.cはとても複雑(just too evil)ですし、難しいバグ(silly bugs)を含んでいます。
  • FFI APIを全て実装すること。現状は、最低限の実装(#attach_functionのみ)しかありません。レポジトリの中には全てのスペック(訳注:specsとはmspecに従って書かれたテストのことでしょうか?)があります。作業を始める準備は整っています。
  • rubyspec: ほんの少しの例外的な調整をするだけで、language+core+libraryのスペック(specs)の大部分を通す。
  • コンパイラが正しいコードを生成できること。このために、モジュールの検査機能を有効にして、spec:ciが成功するようにします。なお、モジュールの検査機能は、とても遅いのでデフォルトでは無効になっています。
  • bigdecimal、stringio、json、zlibの拡張ライブラリをピュアRuby(必要であればFFIを使う)で実装すること。
  • パフォーマンス向上のために、できればCFStreamsを使ってソケットAPIを実装すること。
  • Cの拡張ライブラリを除いて、rubygemsが完璧に動作すること。ソケットAPIに関するいくつかのバグを修正します。あと、rubygems単体テストが通るようにします。
  • MRI 1.9.2の標準ライブラリ(stdlib)をマージすること。

以下、原文です。http://lists.macosforge.org/pipermail/macruby-devel/2009-July/002091.html

Here is the list of things I think we must support for the release:

* implement/port Marshal, Enumerable::Enumerator, Rational, Complex to the new runtime APIs.

* 32-bit support should be back. This implies fixing the compilation of C stubs and backporting the floating point optimization to 32-bit floats.

* Array/Hash subclasses for immediates. We need a new subclass that can hold immediates (fixnums, floats, true, false, nil) directly, for performance reasons.

* Backtracing/symbolication. As you could surely experience, backtraces from MacRuby are mostly empty, because this part has not been implemented yet!

* try/catch should use a C++ exception instead of SjLj.

* rewrite of load.c. The current file is just too evil and it contains silly bugs.

* FFI API should be fully implemented. The current implementation is super minimal (we only have #attach_function) and all the specs are in the repository, so we can start.

* rubyspec: pass almost all language+core+library specs only with a very few and well controlled exceptions.

* compiler should always generate valid code. To achieve this, we need to enable the module verifier (disabled by default because it's super slow) and try to run spec:ci.

* the bigdecimal, stringio, json, zlib extensions should be implemented in pure Ruby (with FFI calls when needed).

* socket APIs should be implemented, preferably using CFStreams, for performance reasons.

* rubygems should fully work (except for C extensions gems).  This means we need the socket APIs and most likely a few bug fixes. We will run the rubygems test suite.

* merge stdlib with ruby 1.9.2 upstream.
    • -

ここまでの私の感想。
MacRuby 0.5では、なかなかチャレンジな部分もありますね。いくつのクラスを再実装しようとしているのやら。ソケットとか大変そう。
少し気になったのが、即値を格納するためのArray/Hashですね。即値ではないものを格納するとどうなるのでしょうかね。あと、即値を格納するかどうかをプログラマが考えないといけないのですかね。なんか、Rubyっぽないなー。
YAMLについては、libyamlを使った方がよいようならば、MRIにも取り込まれるのではないだろうか。私の認識では、syckはあまり評判が良くないし、メンテナンスもされていない。

    • -

次回が最後になります。お楽しみに。