■吉里吉里/KAG/TJS雑談質問スレ■その15at GAMEDEV■吉里吉里/KAG/TJS雑談質問スレ■その15 - 暇つぶし2ch■コピペモード□スレを通常表示□オプションモード□このスレッドのURL■項目テキスト679:名前は開発中のものです。 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による解析が必要なのでダメ。 次ページ最新レス表示レスジャンプ類似スレ一覧スレッドの検索話題のニュースおまかせリストオプションしおりを挟むスレッドに書込スレッドの一覧暇つぶし2ch