Ruby会議2008において、Rubyの創案者Matzこと、まつもとゆきひろ氏が発表した計画は"異なるRuby実装の間の互換性を改善し(…中略…)Rubyのやり方を日本政府に次第に浸透させる"ためのRuby標準化の計画だった。標準化の最初の提案が日本工業標準調査会に対して行われ、さらなるステップとして国際標準にするためにISOに対しても行われる予定である。今のところ最初のドラフト(300ページ以上もある)と公式発表がリリースされている。また、HTML形式で標準を利用できるようにするためのwikiも作られようとしている。
Ruby実装を統一しようとするまったく異なるアプローチがRubySpecプロジェクトであり(他のInfoQに掲載されたRubySpec関連のニュース)、コミュニティ主導で実行可能な仕様を構築しようとするものである。RubySpecはRubiniusプロジェクトから生まれたものだ。
RubySpecプロジェクトはプログラミング言語Rubyの仕様を、RSpecに互換性のある文法を持った完全に実行可能な仕様として記述することを目的としている。(…中略…)仕様は一般に2つの目的を持つ。それは、1) 開発を促進すること、2) 検証メカニズムとして機能すること、だ。
InfoQはRubySpecの父Brian Ford氏と話し、彼が標準化についてどのように考えているか、そしてそのことがRubySpecにとって何を意味しているかを見いだした。
私は、RubyにとってのISO標準化の努力が言語とコミュニティの両方にとって非常に重要なことであると考えています。ここでコミュニティとは、Rubyプログラマ、Rubyで書かれたソフトウェアを使う人々、そして、ますます増え続けているRubyで記述したソフトウェアをベースとしたり利用したりしているビジネスのことを念頭においています。
標準化文書とRubySpecは補完関係にある、というのが私の見方です。文書は、Rubyを適切に整えられた形式を持った通常の文章で記述することにもっとも重点を置いています。文書はRubyの一つの定義を本質的に記述するのです。
対照的に、RubySpecがもっとも重要視しているのは、Rubyの挙動を実証するコードです。しかし、RubySpecもRubyを実行可能な仕様の主要な要素として、通常の文章で記述することにも重点を置いています。それが私たちがRSpec互換の文法を利用している理由です。
RubySpecはすべてのRuby実装の統合体としての挙動を表現しようともしています。RubySpecが実装間の差異に対する実行ガードをspecファイルに文書化して提供しているのです。例えば、かつてはすべてのプラットフォームにおいてRubyのプロセスをフォークする機能を実装しているわけではありませんでした。そこで、実装がこの機能を提供するためのガードにspecがなっているのです。
このことはISO標準文書とRubySpecとの重要な違いを表しています。ISO文書は、Rubyのある側面が"実装によって定められる"であると単に記載しているだけであり、それ以上のガイダンスを提供しません。残念なことに、このような標準を実装することは難しいことがあり、そのような状況を私たちは様々なブラウザベンダーがCSSを実装しようとしたときに起きた混乱で見てきました。RubySpecは特定されていないRubyの挙動の総数を可能な限り最小にまで絞り込もうと努力しています。
ISO標準文書が十分にこなれてきたら、私たちはRubySpecにある種のタグを加えて、ある実装が"ISO標準"としてタグづけられたすべてのspecを実行することができるようにするでしょう。これによって、その実装がISO文書で定められた挙動を確実に保証すると主張できるでしょう。私はこのようなある実装が標準への準拠を検証するためにspecを実行するというようなことが機関(もしかすると政府関係の)に受けいられるのかはまだ知りませんが…。
InfoQ: Rubiniusは標準に準拠するのか?
はい、必ず。当初からRubySpecに関しては、Rubiniusが可能な限り"標準実装"、すなわちMRI(Matz's Ruby Interpreter)に忠実であることを保証できるようにしてきました。このことには非常に熱心に取り組んでいて、RubySpecには"not_compliant_on :rubinius"(Rubinusでは準拠していない)ガードを加えた場所はほとんどありません。ISO標準はRubySpecよりもずっと寛大なので、私は"ISO標準"準拠であることに何の問題もないだろうと期待しています。
標準のドラフトはRuby 1.8.7 をベースにしているが、Ruby 1.9.2 がすでにリリース間近である。私たちはRuby 1.9 のリリースマネージャ園田裕貴氏に標準化に関するRuby 1.9の計画について尋ねた。
JIS/ISO標準のドラフトはRuby 1.9がそれに従うように設計されています。その結果、ドラフトは意図的に緩やかなものなのです。ドラフトはRubyプロセッサに対して"Ruby"であるための最小限の制約を提供します。それで、1.8.7でさえ実装間の互換性を保つためにRubySpecのようなより厳密な仕様を必要とします。
他のRuby実装からはMagLevを開発している企業GemstoneのMonty Williams氏が私たちに標準化活動についての彼の考えを話してくれている。
私たちはRuby標準をつくり出す努力を確実に称賛しています。高いレベルにおいては、承認された標準によってある特定の領域でのRubyの採用が増えることになるでしょう。標準が定まった時には、MagLevが標準準拠であると断言できるようにしようと考えています。
InfoQ:標準はMagLevの開発において有用なものか?
たくさんのMagLevの実装作業がドラフト標準に先行しています。現時点では、もっとも私たちが助かるであろうと考えるものは、標準に従っていることを保証するような互換性テストキットでしょう。JCKと同様のものです。この点でRubySpecプロジェクトは正しい方向に向かう重要なステップです。
しかしながら、標準は未来の実装者がRubyを詳細に理解するときには大きな助けになるでしょう。
読者はどう考えるだろうか:ISO標準があれば、皆さんの組織にRubyを導入しやすくなるだろうか?