Jewel-mmo開発日記

RubyでMMORPGを作る過程を記録する日記。 Yokohama.rb 発起人。
2005-02-04

[プログラミング]Ruby は本当に必要なのか

プログラミングカテゴリ新設。

これまでの経緯。ゲーム開発での話。 C(C++) 言語での開発しか知らないときに Ruby を知る。 Perl とかその手のスクリプト言語じゃ大規模なソフト開発はできない気がしてて、 Perl でアプリを作ろうとはそれまで考えなかった。 CGI ゲームの開発に Ruby を使用したのをきっかけに Ruby で本格的なゲームを作りたいと思い始める。 Ruby の生産性の高さに本当に感動した。で、実際大規模なゲームを作ろうとしたもののすぐに Ruby とは関係ないところの問題で失敗。ただ、市販のゲームまるまる一本分くらいの開発規模でも、規模の大きさゆえの懸念は幻想であることはわかった。その後も、やっぱり Ruby でゲームを作ってみたくて、いろいろ考えているのが今の状態。

ここでいう Ruby のゲーム開発は普通のパソコン上で動くゲームに限られている。もしくはネットワークゲームのバックエンドとか。コンシューマーゲーム機で Ruby を動かすのはまだまだ難しいらしい。

Ruby を使える環境だけゲームをリリースすればいいと思っていたのだが、本当に Ruby を使う必要があるのだろうか。とさっき風呂に入っていてふと思った。どういうことかというと自分で言語を作ればいいんじゃないかという話。実際に作れるかどうかは別としても、こういう方向から考えることも有意義なのではないかと。今までコンパイラとか処理系を自分で作るなんて事ははなから頭になかったから。しかし、後になって気づいたのだが、自分は既にコンパイラを作っている。 Z80 の仕事を自作した簡単なツールを使って行っているのだが、そのツールがとても強力で非常に重宝しているのだ。そのツールは次のようなソースをアセンブラソースに変換できる。

def foo(a, b)
  c = a
  c += b
  return c
end

t = 0
i = 0
while i < 10
  a = 1
  b = i
  val = foo(a, b)
  if val > 5
    t += 1
  else
    t += 3
  end
  i += 1
end

でこういうツールはどうもコンパイラというらしい。となると自分は既に言語デザイナー。

そんなこんなで思ったのが、プログラミング言語を作るのは必ずしも難しくないということ。上記のツールは 3 日でできた。もちろん Ruby を使って。だから例えば Ruby で便利だと思っているような機能が使える言語を設計して、それを C に変換するトランスレータを書くという発想があってもいいのではないだろうか。もちろんトランスレータは Ruby で書く。生成した断片を eRuby で C ソースに埋め込むだけでもいい。意外と現実性があるのではという気がする。

Ruby の便利な機能はなんだろうか。何がどれくらい優れているのだろう。不要なものだってあるはずだ。例えばアクションゲームに文字列処理の機能は必要ない。

こういうアプローチでプログラミングを考えたことがなかったので、いろいろ思いをめぐらせてみたい。