ぼくのかんがえたさいきょうのぷろぐらみんぐげんご

ちょっとプログラミング言語をさわっていると発病する病気のようなもん…だとおもう。

カジュアルにしかコードを書いていないので、言っていることはかなり適当くさいとおもう。

  • 理想は RubyIoLanguage
  • Python のようなブロック構造 (end はいらない)
  • JavaScript や Io のようなプロトタイプベース
  • JavaScript や Io のようなオブジェクト (辞書)
  • Scala のようなパターンマッチ
  • Io のようなメッセージ指向
  • Io のような柔軟な演算子定義
  • Ruby のようなドット連結によるメソッドチェーン
  • Ruby の書き心地に Io のメッセージ指向を注入したような文法
  • そこそこ使えるパッケージマネージャ
  • Python のようなセルフ・ドキュメンテーション

仮の名前として Sketchy とでもしておく。拡張子は .hdmr (意味なんてない)

def factorial(x)
  return x if x == 1
  x * factorial(x - 1)
end
# Sketchy
factorial = do
  exit x if x == 1
  x * factorial(x - 1)

よくある階乗のコード。再帰。Rubyの無名関数生成はダサい上にややこしい。けど、JavaScript の function はちょっと長い気がする。などなどの理由から、do でどうか。

あと Ruby で再帰っぽいことをしていておもうのは、普段は return を書かなくていいのに、再帰から抜けるときなどはどうしても return が必要になるけど、そうしたら常に return を書くか、常に return を書かないか、どちらかに統一したい、ということ。「再帰から抜ける」ことが本当にしたいことで、プログラムが式から構成されている (値を持つ) ことは自然なことだから、「再帰から抜ける」ことに重きを置いた制御構造的なメソッドがほしい。とりあえず exit で。現在のブロックから抜けるということで、トップレベルで exit すればプログラム終了、というのはそんなに不自然でもないとおもう。

うまいコード例がおもいつかないけど、Scala のパターンマッチはかなり強力なようなので、ぜひとも欲しい。

  • (Scala のような) 強力なパターンマッチ
  • プロトタイプベース
  • 整理された無名関数リテラル

これらを持つ Ruby があれば満足する話なので、そんなに積極的にオレオレ言語を作る気はないし、それだったら頑張ってパッチ書いて投げたほうがずっと生産的な気がする (し、ずっと達成に近いとおもう)。しかし、パーサなどを書いてみるのもおもしろそうだし、メモリ管理とかに踏み込むいい機会なのかもしれない。

とりあえず、非同期プログラミングと Scala を勉強して一段落 (進学なども含めて) したらかなー。