aiscript
aiscript copied to clipboard
🔋 A lightweight scripting language runing on JavaScript
コードをWASMなどのコンパイラに渡す場合は、静的な型付けやいくつかの制約が必要になることが考えられる。 そのため、以下の2つのモードを用意することを提案する。 ## インタプリタモード 柔軟なコードをインタプリタで実行できる。 今までのインタプリタで使用されているモード。 名前は仮。 ## Strictモード 厳格な型宣言や記述できるコードに制約を与えるモード。 コンパイルする場合は厳密な型宣言が必要になるため、こちらを使用する。 名前は仮。
## 概要 明示的に型を宣言できるようにする。 型が明示されておらず推論できない場合はデフォルトのany型が使用される。 **関連** - #138 - #145 ## 型の一覧 - str - num - bool - arr - obj - null - fn 特殊な型: - any : 何でも型。実行時に解釈される。...
子ノードをできるだけchildrenに持つようにして、統一的にスキャンできるように。 (if式など複数の子ノード配列を持つノード以外)
入力がコードフォーマットに一致しない時は、パースエラーではなくその旨を伝えるエラーを返せるのが理想ではあるのだけど、各構文の各部分で(FnDefでやったような)スペースの数を判定する方法だと、コードが増大して複雑になりそう。(技術的には可能) → コードフォーマットに一致しない場合も通常のパースエラーを返すようにする? 通常のパースエラーを返すようにすると、ユーザーにはエラーが起こった理由を伝えられない。 ユーザーが分かるのは最後に一致した構文の位置くらい。 コードフォーマットをどれくらい厳しくするかに寄って、判定の複雑度は変わってくるかも。 どうだろう
## 代入時にコピーが発生する (値渡し) 内部的には、Valueオブジェクトをコピーしてから対象の変数に渡される アノテーションなどにより参照渡しにも変更できる - bool - num - str ## 代入時にコピーが発生しない (参照渡し) 内部的には、Valueオブジェクトがそのまま対象の変数に渡される 値渡しには変更できない - obj - arr - fn - null