butterfly dream

FX自動取引のための時系列分析・信号処理・戦略ブログ

科学技術計算用プログラミング言語:Sci-Lispの自作(6日目):型(1)

chaploud-blog.hatenablog.com

Sci-Lisp自作の6日目です。型について考えます。

手軽さで人気のPythonJavaScriptなどのスクリプト言語も、型アノテーションを導入したりTypeScriptが現れたりと、型のありがたみが再評価されているところです。特にデータベースやAPI経由でのデータがどのような情報を持っているのかを事前に定義しておけば、開発の際に大きな手掛かりとなります。また、コンパイルして実行する際に実行時型検査のコードが不要となり、より高速な実行が見込めます。

変数の型の指定

あくまで草案に過ぎないのですが、Sci-Lispでは以下のように型指定します。

Sci-Lispの型指定

上記の例では、リテラルによって型推論が可能なため、型指定の :hoge はつけなくても構いません。 (※シンボルの場合どう解析するのか、考えないといけませんが...)

リスト型については、どのような型も受け入れるLinked Listを想定しています。(C++list<std::any>)。

コレクション型(vector, map, set)については、型をv[i32] などのようにジェネリクスで指定します。vectorについては特別に確保領域を追加で指定できます。(v[i32][3]

関数型も指定できます。引数の型と ->によって返り値を指定します。デフォルト引数などを考え出すと、どういうシンタックスにしたらいいのか悩みます。

関数型

終わりに

Sci-Lispスクリプト言語的な手軽さをもちつつも、静的に型を持たせたいと考えています。このためにはRustのような強力な型推論機構をコンパイラに備える必要があります。また、型システムについて整合性を担保しなければなりません。かなりハードルが高いです。また、書きながら思いましたが、コレクション型などのヒープ領域確保系は参照型が必要になってきますね...。とにかく、作りながらブラッシュアップしていきたいと思います。