aiscript icon indicating copy to clipboard operation
aiscript copied to clipboard

意味解析時の型チェックと型推論

Open marihachi opened this issue 4 years ago • 12 comments

marihachi avatar Aug 10 '21 06:08 marihachi

お試しで実装してみる

marihachi avatar Aug 10 '21 07:08 marihachi

オッ

syuilo avatar Aug 10 '21 07:08 syuilo

主にWebAssemblyのコンパイル(#98 )で必要になりそう。 インタプリタで実行する場合でも、実行時ではなく事前の型チェック機能とかに応用できる。

marihachi avatar Aug 10 '21 08:08 marihachi

一部実装した。 https://github.com/syuilo/aiscript/tree/work/static-analysis-1

readlineの戻り値の型をどうするか考え中。 readlineはホスト側が標準入力に対応していなければnullを返すため、TypeScriptでいう戻り値の型はstring | nullになっている。今はUnion型に対応していないし、対応する方針にあるのかも決まってないと思う。 また、対応するにしてもユーザーに要求する型システムの知識は高度になる。

ちなみに、C#では操作が非対応の場合は例外を投げることで、非対応操作でnullなどを返さずに戻り値を1種類に保っている。

marihachi avatar Aug 15 '21 06:08 marihachi

配列の型を要素ごとに変えることができるかどうかも検討点だと思う。 スクリプト言語だと、要素ごとでも良い気がするけどWebAssemblyなど他の処理系コードにコンパイルするとなると話は変わってくる。(WebAssemblyでは配列の要素毎に別の型のデータを入れる方法があるのか?等。この辺の仕様も調べる必要があるかも)

  • インタプリタ実行時は要素ごとに型を変えられる & コンパイル時は型を一種類にしないとエラーにする
  • 配列には1種類の型の値しか含められないようにする

marihachi avatar Aug 15 '21 06:08 marihachi

オブジェクトの型ってどうなる?

syuilo avatar Aug 15 '21 06:08 syuilo

複数の型の要素を持つ配列を作成したいケースまずない気がするし配列には1種類の型の値しか含められないようにするで良いんじゃないかな

syuilo avatar Aug 15 '21 06:08 syuilo

オブジェクトの型ってどうなる?

どうだろう、まだ考え中 (一旦はany型として扱って意味解析処理をスキップしてる)

  • #142

marihachi avatar Aug 15 '21 06:08 marihachi

複数の型の要素を持つ配列を作成したいケースまずない気がするし配列には1種類の型の値しか含められないようにするで良いんじゃないかな

YOSASOU テストに、配列に別の型の値を入れているものがあったからそれは変更する必要があるかも(SKIってテスト)。

marihachi avatar Aug 15 '21 06:08 marihachi

インタプリタのScopeクラスみたいな、変数の一覧を保持するものを一般的にシンボルテーブルと呼ぶらしい

https://ja.wikipedia.org/wiki/%E3%82%B7%E3%83%B3%E3%83%9C%E3%83%AB%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB

marihachi avatar Aug 22 '21 09:08 marihachi