科学技術計算用プログラミング言語:Sci-Lispの自作(6日目):型(1)
Sci-Lisp自作の6日目です。型について考えます。
手軽さで人気のPythonやJavaScriptなどのスクリプト言語も、型アノテーションを導入したりTypeScriptが現れたりと、型のありがたみが再評価されているところです。特にデータベースやAPI経由でのデータがどのような情報を持っているのかを事前に定義しておけば、開発の際に大きな手掛かりとなります。また、コンパイルして実行する際に実行時型検査のコードが不要となり、より高速な実行が見込めます。
変数の型の指定
あくまで草案に過ぎないのですが、Sci-Lispでは以下のように型指定します。
上記の例では、リテラルによって型推論が可能なため、型指定の :hoge
はつけなくても構いません。
(※シンボルの場合どう解析するのか、考えないといけませんが...)
リスト型については、どのような型も受け入れるLinked Listを想定しています。(C++の list<std::any>
)。
コレクション型(vector, map, set)については、型をv[i32]
などのようにジェネリクスで指定します。vectorについては特別に確保領域を追加で指定できます。(v[i32][3]
)
関数型も指定できます。引数の型と ->
によって返り値を指定します。デフォルト引数などを考え出すと、どういうシンタックスにしたらいいのか悩みます。
終わりに
Sci-Lispはスクリプト言語的な手軽さをもちつつも、静的に型を持たせたいと考えています。このためにはRustのような強力な型推論機構をコンパイラに備える必要があります。また、型システムについて整合性を担保しなければなりません。かなりハードルが高いです。また、書きながら思いましたが、コレクション型などのヒープ領域確保系は参照型が必要になってきますね...。とにかく、作りながらブラッシュアップしていきたいと思います。