ライブラリのパターン

Rubyに限らず、なんらかの機能を提供するライブラリにはいくつかのパターンがある。
大きくわけると3つ。


(a)作るのが面倒なものを、簡単に使えるようにして提供する。
(b)その言語だけではできないものを、他の言語で実装して提供する。
(c)やろうと思えばできるが速度的に厳しいものを、高速な言語で実装して提供する。


DXRubyは原則として(b)のみ。Imageオブジェクトのlineやcircleあたりは(a)か(c)になるだろうか。
Miyakoみたいな高機能なライブラリは(a)が多く、Star Rubyは基本的に(b)だが透視座標変換は(c)になる。
大規模なフレームワークはほとんど(a)が目的だ。
(a)を目的としたものは、自分で書くよりそれの使い方を覚えるほうが楽になるようなバランスに調整される。
使い方を覚えるほうが大変ならそれに存在価値は無い。
Rubyのような高レベル言語にとって、(b)の存在はできないことができるようになるという意味でありがたい。
また、遅い言語なら用途によって(c)は必須だ。
SFCっぽいゲームを作るためには高速な透視座標変換が必要なのが、その一例。


DXRubyが(b)のみを原則とするのは、俺自身が、作るのが好きだからだが、それ以上に、Rubyを使う限り(a)の機能が必要になるバランスが非常に難しいと感じるからだ。
簡単に使える機能を提供してみたところで、自分が必要とする程度のものなら、使い方を覚えるより作ったほうが速かったりするかもしれない。
作る時間だけが問題ってわけでもない。
データ構造がその仕組みに依存してしまうのもその一つで、つまりは自分のほうが合わせてやる必要があって、それ以外の部分も全部それに合わせていくことになってしまう。
機能が足りなくて追加しようと思うと、とんでもなく大変な思いをすることになる。
提供されている仕組みの理解が不足していると、思いもよらない動作をして悩むことになる。
そういったことをすべてひっくるめると、Rubyなら、自分で作ったほうが総合的に速いしラク、という場面が、思ったより多かったりしないだろうか。


もちろん使う人の技術レベルにもよってくるのかもしれないが、俺が、DXRubyを原則(b)のみにしていること、それ以外の部分はRubyで書くことをユーザーに半ば強要するのは、Rubyの柔軟性、機能、使いやすさなど、安易な言葉で言えば、Rubyのパワーが最大の原因なのではなかろうか。
と思った。