特徴


minilang のユーザ向けの機能について。

Rubyとの互換性

実装済み

この辺りは, だいたい互換にできたように思います。

不足している機能

Ruby にあって, minilang v0.7で不足している機能のうち主なものは,

v0.7は, まったく実用品のレベルには達していません。

開発に協力してくれる方が必要です! 開発に参加 を見てください。

ない機能

何から何まで Ruby と同じにするわけではありません。意図して実装していないものもあります。

大域 (グローバル) 変数, クラス変数

定数を使えば同じようなことができます。

継続 (continuation)

継続がない, というよりは, call-with-current-continuation (call/cc) がダメ。

実装Note - 継続の除去

セーフモード

内と外との境界線が, 昔のCGIスクリプトを書いていた頃ははよかったのですが, フレームワークやDBMSを駆使する現在の使い方にマッチしていないように思います。

証明書を要求する方式が妥当なように思います。

instance_eval/class_eval

selfを差し替える, というのは, 容易にプログラミングを誤らせやすいと思います。

国際化

ruby 1.9 は CSI (Character Set Independence) と主張していますが, とてもその水準ではありません。

2013年の今, たとえ本物の CSI であっても, あまりいい考えとはいえません。

文字列はUnicodeの並び

実装Note - 国際化

CSI (Character Set Independence) では, ボランティアベースで実用的な多言語の文字列を作ることはできません。CSI は理想に見えますが, それはただの青い鳥です。

ざっと考えただけでも,

などなどを, *すべての*文字集合に対して考えなければなりません。

不可能ではないでしょうが, それは商用プロダクトでしかできない / 商用プロダクトでも難しい領域です。

時刻とタイムゾーン

見掛けの時刻と真の時刻を区別する必要があります。例えば 2月1日9:00 JSTは 2月1日 0:00 GMTと同じ時刻です。

見掛けの時刻を扱うのか, 真の時刻を扱うのか, APIを整理する必要があります。

カレンダー

グレゴリオ歴ではない暦を扱えるように。

ネイティブスレッド

Giant lock はありません。開発者 (minilang のユーザ) がスレッドの同期をしなければなりません。

minilang v0.7 では, まだまだ実用には達していません。

その他

[] や {} も偽

細かいですが, Container のサブクラスで, empty? が真の場合は, 偽です。Common LispとSchemeのちょっとだけ細かい違い

ただし, "" と 0 は真のまま (今さら変えれない.)

変数に型がある

まだ計画段階.

実装Note - 契約プログラミング を見てください。

初期化していないインスタンス変数はエラー

初期化していないインスタンス変数は nil ではなくエラーになります。initialize内でインスタンス変数を初期化し, 原則として super を呼び出してください。

定数への再代入もエラーになります。