すめるまん Broken Diary RSSフィード Twitter

2009-09-07

Ruby標準化プロセスってどうよ?

はじめに、本記事が壮大な誤解の産物であった事をお詫びをいたします。

個人的に感じた以下の疑問点、不安点はまつもとさんのコメントでかなり解消されました。それを踏まえた上でお読みください。

2009年9月7日にRubyWorld Conference 2009に参加してきました。(明日も参加しますよ)

その中でRuby言語の標準化への動きについてのパネルディスカッションがありました。

Ruby言語の標準化については産学共同の元、ISO及びJIS規格への制定を目指しているという発表で、Sun Microsystems(JRubyの開発元)や、Microsoft(IronRubyの開発元)はもちろん、富士通楽天といったいわゆる使う側のベンダーも積極的に関わっているという内容で、一般のベンダーである我々にも有益なものと思われる内容でした。

しかしながら、いくつか疑問点、不安点も浮上しました。その点について少し言及してみようと思います。

Ruby1.8ベースってどうなの?

現在の標準化の動きはRuby 1.8をベースに行われていると明言されました。しかしながら、ISOもしくはJISの制定までは2年ほどかかるとはっきり(パネルディスカッション内で)言われてました。しかし、2年もの歳月があれば、Ruby 2.0がリリースされている可能性があります。仮にRuby 2.0がデファクトスタンダートとなっていたら、Ruby 1.8ベースである事にどれだけ意味があるのでしょうか?

標準ライブラリについて

今回、標準ライブラリについても取り入れるという明言していました。しかし、標準ライブラリというものがどの範囲なのかは明言されていません。さらに「誰誰のライブラリが入ってなくても文句は言わないでね」と釘をさされるような発言もありました。個人的にはそんな発言が出るんであれば、標準ライブラリは入れないで言語仕様に留めればよいのではないかと感じました。確かに標準ライブラリの充実という点ではRubyやその他のスクリプト言語の利点ではありますが、それを明示してしまうために言語仕様がライブラリを含むという点に縛られてしまうのではないかという危惧を感じました。

RubySpecについて

今回のパネルディスカッションでYuguiさんがRubySpecは参考になるのか(ここは僕がちゃんと理解してないので微妙ですが)と質問をしました。それに対してまつもとさんはちょっと否定的な印象の言葉を残してました(正確に覚えていません、ごめんなさい)。そのやりとりで感じたのは標準化に対するプロセスがあまりOpenではないというものでした。僕個人で感じたのはオープンソースであれば、その質問自体でてくるものではなく、それ自体も受けいれるのが普通じゃないかというものでした。回答自体も参考にはするかもという程度のものであったんですが、僕の私感では納得がいく回答ではありませんでした。

実装によって違いはないか

これはイベントの後にとある法人の職員の方に電話して聞いたのですが、例えばRubyの実装でWindowsに互換性のない実装があるという話しを聞きました。僕はWindowsはほとんど触ってないのでその現状はわかりませんが、同じOS上に異る実装系があると片方しか認められないという自体にならないでしょう?こういう自体をさけるために標準というのがあるというのはわかりますが、オープンソース的にどうなの?っていう所を疑問視してしまいます。

オープンソースプロセスであるのか

僕が全体的に感じたのはそのプロセス自体がオープンソース的であるか?という点です。オープンソースであれば普通にforkする事もあるでしょう(先程のWindowsの実装系の問題も最たる例です)。標準化プロセスがそれを認めるかどうかによって事情がかなり異なってしまうというのを危惧してならないです。

標準化はありなのか?

最後にまとめですが、上記のような危惧すべき問題はあると思います。しかし、個人的にはRubyを使っているベンダーにとっては良い事も多いと思います。しかし、どう標準化するのかによっては事情が変わります。例えば、我々にとってAvtiveSupportのようなものがOKかNGかによって現状が一変してしまうでしょう。今回のパネルディスカッションでは産業系の方が多く参加されていたのでその手の問題はあまり感じはしませんでしたが、冷静に考えると不安を感じる部分も多いというのが確かでした(今回書いた内容は、ほとんど一人で推敲または友達と意見を述べあって出た結論です)。

しかし、やはり標準化が進められ、提案がしやすくなるという事を考えると歓迎すべきであるという結論に導きます。願うのは今述べた不安をどう取り除き良い標準というものを作ってもらえるかです。今まで述べた不安が杞憂に終わる事を望むばかりです。

ちなみにこの内容はdoruby向けに書いたんだけど、ログインアカウント忘れて四苦八苦したのは内緒です。うう、自宅マシンにssh許可しておけばなんとでもなったのに...orz

ryuzi_kamberyuzi_kambe 2009/09/08 11:11 こういうの見ると、中央集権的なオープンソースってあり得るんだろうか、とか思ってしまいますね。

elfelf 2009/09/08 12:34 Linux Kernelとか?

まつもとまつもと 2009/09/10 09:05 みごとに伝わってなくて悲しいです。
私(たち)の表現が悪かったのかもしれませんが

* Ruby1.8ベースってどうなの?

パネル中でもはっきり発言しましたが、これは標準化というペースの遅いものとのズレによる問題です。
確かに標準が決まる頃には、その時の最新のRubyはもっとずっと先(2.0?)を行っているでしょうが、現在存在しないものについての仕様は書けません。

標準仕様は1.8をカバーしますが、1.9についても疎外しないように共通部分を仕様化しています。

* 標準ライブラリについて

Rubyの場合、文字列も配列もなにもかもがクラスライブラリによって提供されますので、それらライブラリが仕様に含まれなければ、Hello Worldも書けません。
そういう意味での「ライブラリを含む」です。

「誰誰のライブラリが入ってなくても文句は言わないでね」という発言はした覚えはありません。記憶違いではありませんか。「今ここでどのクラスが標準仕様に含まれるかどうか明言できない」という旨の発言はしましたが。

なお、requireによって呼び出される組み込みでないライブラリは標準仕様には含まれません。

* RubySpecについて

これも記憶違いだと思います。

RubySpecは実行できる仕様、標準仕様は自然言語による仕様で性質が違います。
また、RubySpecは実装からのボトムアップで、現状、必要以上に実装に依存した仕様になっています

また、標準仕様が策定されたら、その内容をRubySpecに反映する予定はありますし、すでに実際に反映されたものもあります。

* 実装によって違いはないか

実装による違いが影響を与えないように仕様を策定しています。

また、主要なRuby処理系実装者にはすでに標準規格ドラフトを見ていただいています。

* オープンソースのプロセスであるのか

おっしゃることがよくわかりません。

私の作っているRuby処理系はオープンソースソフトウェアですが、Rubyという言語そのものはそもそもソフトウェアではないので、オープンソースソフトウェアでありません。また、すべてのRuby処理系がオープンソースというわけでもありません(MagLevとか)。

「誰でも参加できる」ということを意識していらっしゃるのかもしれませんが、多くのオープンソースソフトウェアは「優しい独裁者体制」をとっており、必ずしもすべてがオープンで平等というわけでもないような。

* 標準化はありなのか?

これはメリット・デメリットがありますので、賛否の別れる点ではあると思います。
ただ、「ActiveSupportがOKかNG」のような、誰も否定もしていないことについて心配されても「杞憂である」としか申し上げられません。

Ruby標準規格は現状1.8で動くプログラムが規格違反にならないように策定中です。
ということは、1.8で動作するActiveSupportは、標準規格の範囲内で動作することを保証はできませんが、少なくとも規格違反にはならないわけですね。

以上、かなり誤解しておられるようなので、補足を。
誤解の拡大再生産にならないことを希望します。

tree3yamatree3yama 2009/09/12 11:05 ruby -e 'printf("%.1f\n%.1f\n", 0.25, 0.75)' の実行結果は libc の実装に依存しているようなので、他のライブラリに依存していて非互換になる部分は切り離すとかした方がいいんじゃないかな。

smellmansmellman 2009/09/16 03:24 >まつもとさん
コメントありがとうございます。かなりの疑問は晴れました。
その上でいくつかコメントを。
* Ruby1.8ベースってどうなの?
標準化のプロセスが非常に遅いという事は理解をしています。しかし、標準に足をとられてしまわないかという単純な不安は残るかと思いました。1.9ベースでプログラムを書きたいけど、「標準で」の一言で1.8ベースに合わせないといけないという事です。
しかしながら、requireで呼びだすものは対象外という基準がある事で、かなり不安は取り除けました。
* 標準ライブラリについて
こちらの発言はまつもとさんの発言の後にどなたかが「こういう事」という感じで言ったものです。誰が言ったか忘れてしまいましたが、すごく悪い印象が残り、なんかまつもとさんとスタンス違わないかなぁと不安に思いました。それがたぶん悪循環したのだと思いました。
ライブラリの件については納得しました。線引きができたので、ほっとしました。
* RubySpecについて
「必要以上に実装に依存」という事で、納得、そして「RubySpecに反映する予定」という事で、ほっとしました。ここは聞き逃したかもしれないですね。すいませんでした。
* オープンソースのプロセスであるのか
ここも標準ライブラリの線引きができていないところから来たものです。forkするとどうしても実装の差異がでてしまうので、そこをどう吸収するんだろうという疑問からでした。標準ライブラリの線引きができた事でかなり疑問が解消できました。
また、tree3yamaさんが指摘しているlibcの実装に依存している部分はどうなるんでしょう?と思いましたが、すでにRuby処理系実装者にドラフトを見ていただいてるという事で、これはフィードバックがあるのかなぁとも思います。
僕はどちらかというと「誰でも参加できる」というよりも「多くの目がある」という点を重視しています。今回問題視したのは前者の観点ですからですが、どちらかというと後者が満されていればあまり気にしません。Ruby処理系実装者にドラフトを見ていただいてるという事で、杞憂に終わりました。
* 標準化はありなのか?
ActiveSupportの件は完全に勘違いです。すいません。

というわけで、個人的には壮大な誤解をしていた部分がほとんどクリアしました。コメントありがとうございました。
記事の方は疑問をクリアした旨を追記しておきます。

あと、Ruby 2.0と表現したのは「もしかすると」であって、Ruby 1.9が安定版であるというのは重々承知しております。>はてブでコメントしてくれた方

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証