libruby + (subset of C++) = c.succ
上の議論の中でのきたさんのコメント
Rubyにほんの少し型付けの要素をプラスすることで,ハイブリッドな心地よさが味わえるんではないかと漠然と思ってたりします
を見て考えたんですが、Rubyに静的な型を付加するのではなく、C + libruby に何かをプラスするような方向の方がいいのではないでしょうか。
私は、Rubyの本質はシンタックスではなくてセマンティクスだと思ってます。そして、そのセマンティクスはlibruby、実装レベルの基本的な関数群の中に90%くらいは表現されていると考えています。ですから、Rubyの拡張ライブラリを作成する場合に使うプログラミング環境は、もはやC言語ではないと言いたい。Objective-CがC言語でないのと同様に、C + libruby はC言語ではないんです。
printf等の標準関数を取っぱらって
void print(VALUE x) ;
のような、Rubyの標準ライブラリへのラッパー関数群を用意したプログラミング環境があったとしたら、それは、シンタックスだけがC互換の別の環境と見なすべきだと思うんです。
それで、この環境にC++のサブセットを使って、型付けの要素をプラスしていったら面白いのではないかと思います。例えば、上記の汎用 print の他に
void print(int i) ;
という関数も定義できて、これは静的に解決され場合によってはインライン展開されてしまうとか。
難しいのはクラスの処理です。VALUEをメンバー変数として持つルートクラスがあって、メンバーテンプレート等のC++の超絶テクニックを使って、見ためはC++のクラスで内部的にはRubyのクラスになるようなことができればよいのですが、これはさすがにシンタックスを拡張しないと無理かもしれません。あるいはC++のclassは完全に捨てるべきかもしれません。
C++ってC言語と100%互換ですが、思想的にはC言語のアバウトさを排除していて、正当なCの後継者とは言えないような気がします。このような言語がもしできたとしたらそれこそがc.succになるのではないでしょうか。
誰かやりませんか?