08/10/19 14:59:28 Fd004zXJ
>>678
ちょっと解説しとくと、「パーサ」ってのは、テキストでかかれたTJS2 を内部形式に変換する部分。
パーサが変換したあと、TJS2の実行部分(VM) がそれを解釈して実際のデータやらファンクション
やらになるのが本来の流れ。
(const) をつけると、そのパーサが、その後ろは定数だってことで、あらかじめ配列やら辞書やらを
最終的な形まで組み上げてしまう。パーサはC++で組まれているのと、定数ってことで変数を参照したり
する処理がいらないのでその分軽いわけ。あと逐次処理なので、実質結果分のメモリだけあればいい。
VMで処理すると、VMが処理してる間、元のデータ構造も全部持っておく必要があるので、単純に倍の
メモリが必要になるし、実行時間も余分にかかる。だから、
良く使う定数データの配列/辞書はコードの中でも (const) つけておいたほうがちょびっと軽い。小さいと誤差の範囲だけど。
そこでかかれてるサンプルだと hensuu2 は変数であって定数じゃないからエラーになる。
var a = (const)[1,2,(const)[1,2,3]]; // 定数だけなのでOK
var b = (const)[1,2,a]; // 変数まざってるのでパーサで処理できないのでNG(文法エラー)
var c = (const)[1,2,[1,2,3]]; // これも内部の [1,2,3] が定数になってないのでダメ
マニュアル的には「トークン」の項目の、「数値即値」「文字列即値」「オクテット列即値」および、
それらだけで構成されて (const) をつけて定数化した辞書/配列がOK。
「@つき文字列即値」はVMによる解析が必要なのでダメ。