去年はD言語の機能解説とかやったのですが、今年はいろいろ思うことがあり、D言語開発における所感について書きたいと思います。
まずは今年出たリリースを要約してみます。
2.061 (2013-1-1)
年明けすぐに出たリリースです。2012年の夏ごろから開発していました。
2.062 (2013-2-18)
2.061のバグフィックス的なリリースです。とはいえ、代入スタイルのalias構文はここでtrivialな新機能として導入されました。
2.063 (2013-5-28)
ここにあるとおり、新機能と言語仕様の調整が色々入りました。その分Regressionも多く生じ、それらがFixされるまでbeta期間が延びるという弊害も生じました。
2.064 (2013-11-5)
いくつかの本質的な新機能(package moduleやテンプレートオーバーロードセットなど)とtrivialなsyntaxの改良(alias宣言とenum宣言にテンプレートパラメータを付ける構文など)。リリースノートではPhobosの改善点が多く書かれていますね。
2.065
2013年内に出る予定。バグフィックスリリースという位置づけで特筆すべき新機能はない。
開発期間の長期化
こう見ると2.061, 2.063, 2.064とどれも半年近く掛かった長期開発になってしまっています。いちコミッタとしての視点では理由はいろいろあるのですが、一番の理由はRegression問題でしょう。
新機能がいろいろ入ることによって処理系にRegressionが入るのですが、これについて
- Regressionを直す人が少ない
- 複数の新機能が相互作用した場合、直しにくいRegressionになる
- そもそもRegressionを直すことが新機能ととぶつかる
1.は本質的なリソース不足ですね。実のところ、高頻度でD言語の処理系を触っている人は両手で数える程度しか居ません。日常的にバグ修正に注力している人はWalter、私、そしてDaniel Murphyの3人ぐらいでしょうか。というか私自身が日常的にフロントエンド周りのバグフィックスを投げているのですが、その結果としてRegressionの発生確率を上げているという点で、私自身が主犯になっている状態でもあります。そういったことから、迅速なバグ修正は実はなかなか難しい問題だったりします。
2.は3つのリリースで特に表面化した現象です。新機能とはそもそも「それまでにはなかった機能」なので、元々ある機能と組み合わせた場合の挙動はたいていの場合未定義となります。こうして生じた問題の修正とはすなわち言語のコーナーケースを定義する、という仕事に他ならず、単なる実装の修正には留まらないものになります。現在、Dコミュニティで言語の(実装ではなく)仕様についてcontributeしている人は皆無です。私自身は細部について語ることは出来るのですが、文章にする能力が不足しているため、websiteへの貢献は必要最小限になってしまっているという現状もあります。
3.はまれな例ですが、2.064でかなり大きな問題になったので書いておきます。実はこのリリースではテンプレートの実体化周りで、不要なコード生成を可能な限り省くことでコンパイル時間と実行ファイルサイズの削減を行うための変更が入りました。これは実行ファイルのサイズが大きいという問題がRegressionとして報告されており、その修正のために入った変更だったのですが、実は分割コンパイルと組み合わせると、大規模かつ複雑なテンプレート生成を行っているプロジェクトで、一部のコードがリンクされないという問題を起こすことがRegressionとして報告されました。しかしもちろん新機能をrevertするとファイルサイズ問題が復活してしまいます。結果的に、従来のテンプレート実体化方式でコンパイルするためのコンパイルスイッチ-allinstを追加し、問題が起きたときはこれを使ってね、という方向で落ち着きました (今見たら-allinstの説明がchangelogに載ってませんね…)。 本質的には実装の不完全さの問題なのですが、そもそも期待される実装を行うことがなかなか難しい事であることは既に見えているため、自分としては別の側面、問題に対する調停力の不足が感じられた一件でした。
貢献者求む
結局のところはこれに尽きます。D言語の開発は非常にオープンに進められていますが、言語仕様や処理系自体に注力してくれる人はやはり少ないのです。昨今、D言語に対する実用的な需要が増加していますが、だからこそ言語そのものの土台をさらに固められる人が今求められています。
日本人で貢献してくれる方がいれば、Twitterでmentionをいただければ確実にReplyします。
ぶっちゃけ言語仕様について語れる同士が欲しいです…