2012年7月10日火曜日

ulib - OCamlのための新しいUnicodeインフラストラクチャー

バカの一つ覚えというか、またUnicodeライブラリを作っている。


まだBatteriesのRopeと以前作っていたUnicodeライブラリCamomileの一部を集めた状態だけど、できれば今年中にIOの部分を加えてRopeをスクラッチから実装し直して最初のバージョンをリリースしたいと思っている。(と去年の今頃も言っていた気がするけど気にしない)

一応目指しているのは、Camomileの反省も踏まえてこんな感じ。

  • 純粋関数的。CamomileではOCamlのstdlibの文字列処理を真似たため、手続き的なインターフェースになっている。でも流石に21世紀に入って10年以上経ってそれはないだろうと思うので。文字列データ型はRopeかなあと思っている。
  • 軽量。CamomileはちょっとUTF-8文字列を処理するのに、GB18030の文字コード表をインストールしなくてはいけないとか富豪的すぎて、引く人が多い。今考えているのは、ライブラリを分割して、Coreな処理だけulibライブラリに、それ以外のいろいろな文字列処理や文字列照合、正規表現などは別のライブラリとして配布しようと思っている。
  • 設定不要。Camomileではデータをロードするのに必要なパスを初期設定しなくては行けなくていろいろな問題を起こした。ulibではulib本体は設定不要にするつもり。また、データはできるだけソースに組み込んで配布できないか考えている。(marshalしたデータを文字列でソースに入れておくとか)
  • ファンクターは使わない。Camomileではサポートする文字列を切り替えたり初期設定のパラメーターを与えたりする所でファンクターを使っていたけど、これがライブラリを必要以上にとっつきにくくしてしまったと思う。ulibでは文字列型は1つにしようと思うし、設定もできるだけ不要にしようと思うので、これでも問題ないはず。
次回からulibの各モジュールを紹介していく、かもしれない。