#Script 2 の構想
昨日 #Calc 1.2.21 を出した。そろそろ今の #Script の美しくない点が気になりだしたので、次の大改革に向けて構想を練り始めたい。もちろん当面はテンソル・行列・ベクトルの実装を仕上げることが目標だけどね。
- 多重ディスパッチ
- 多重ディスパッチ - Wikipedia
-
今の仕様では、
1 + {1, 2, 3}
は(1).$add[{1, 2, 3}]
に、{1, 2, 3} + 1
は{1, 2, 3}.$add[1]
に、展開するようになっている。やっていることはどちらも整数とベクトルの加算であり、単純に左辺と右辺が入れ替わっているだけなのだが、左辺の値を @this 値としてメソッドを呼ぶという仕組みになっている以上、左辺が整数のときは整数のメソッドが、左辺がベクトルのときはベクトルのメソッドが呼出される。これは美しくない。で、どうするかというと、ここで多重ディスパッチシステムの登場というわけだ。つまり、左辺だけではなくて両辺の型を考慮してどのメソッドを呼ぶかを決める、と。
- 型システム
-
では、多重ディスパッチをやるには今の型システムのままで良いのか、というと、それはまだよく解らない。ただ、これを機会に型システム全体を見直してみるのもいいと思う。初期の #Script はクラスベースのオブジェクト指向で、今はプロトタイプベースになったわけだが、果たしてこれは正解だったのか。そもそも言語レベルでオブジェクト指向をサポートする意義はあるのか。
- 実行環境
-
今 #Calc はいわゆるインタプリタパタンで実装しているが、そのせいであまり速くないというのが事実。そもそも #Script の仕様の中にインタプリタパタンでないと実装しにくい箇所があって、それが実装の自由度を制限している。どこぞの言語のように中間コードにコンパイルして仮想マシンで実行、という風にはできないか。おそらくその為には言語内の原始的データ構造を最小限にとどめて、ネイティブに実装する組込み関数の数も出来るだけ減らさないといけなかろう。
| 固定リンク
コメント