デジタル人材の育成
最終更新日:2022年6月20日
静的型付けプログラミング言語は、動的型付けプログラミング言語と比較して安全性やパフォーマンスの面で優れている。また、関数型プログラミング言語の機能や考え方は、プログラムの書きやすさを向上させ、安全なプログラムを書く上で役立つことが多い。
動的型付けプログラミング言語に型注釈を付ける際の型システムなどで広く用いられているユニオン型は、静的型付け関数型プログラミング言語の世界でも便利な機能となると考えられるが、静的型付け関数型プログラミング言語の中でユニオン型をもつものは少ない。また、Scala 3などのユニオン型をもつ数少ない静的型付け関数型プログラミング言語でも、ユニオン型は直和型やシールドクラスなどの他の機能の補助的な役割を担うのみに留まっている。
そこで本プロジェクトでは、代数的データ型や網羅性検査機能を備えたパターンマッチ、bind(flat_map)に対するシンタックスシュガー(Haskellのdo記法や、Scalaのforのような機能)などの、関数型言語によくある機能を取り入れつつも、直和型(ここでは、Haskellのデータ型やRustのenumのような、複数のバリアントを持っていて、それぞれのバリアントの型は独立した型ではなくそれを束ねている直和型になっているような型のことを指すものとする)やシールドクラスなどではなくユニオン型を採用した型システムを持つ、シンプルな静的型付けプログラミング言語を開発する。それにより、静的型付け関数型プログラミング言語にユニオン型を採用する有用性を実証する。
enumは古くはC言語から存在する列挙型で既存のプログラミング言語では当たり前のように使われてきたが、TypeScript v3.4以降のconst assertionを使うと、従来の列挙型のenumを安全にユニオン型として置き換えて書けるようになった。
TypeScriptではenumとunionの両方を使えるが、どのようなシーンでenumとunionを使い分けるべきかといったコーディング標準のようなものはまだ整備されていないが、unionはenumを内包する概念と表現力を持っているため、ユニオン型に統一してしまって記法をシンプルにしてしまうことに強力なメリットを感じている人も出始めている。
RustのenumやHaskellやOCamlのdata type、Swiftのenumerationなどで使われる直和型についても、もしもユニオン型の定義が使えれば、直和型を廃止した表現が可能になる。ScalaやKotlinで使われるシールドクラスもユニオン型に統一できる可能性がある。
最近はV言語やJulia、Scala 3などでもユニオン型が使えるので、最近はユニオン型に便利さを感じているプログラマも増えてきている。提案者達が直和型の代わりにユニオン型を持つ静的型付け関数型言語を新しく開発し、世の中に広く情報発信することによって、ユニオン型言語大統一理論を概念実証し、その後開発されるプログラミング言語に長期的な影響を与え続けることを期待したい。
2022年6月20日
2022年度採択プロジェクト概要(伊藤・福間PJ)を掲載しました。