Closed hayashi-ay closed 1 year ago
Scala3の型ヒエラルキー。型ヒエラルキーは有向非巡回グラフ。 Scala3は合弁型(union type)と交差型(intersection type)をサポートしている。 合弁型、交差型はそれぞれ型の上界(upper bound)と下界(lower bound)を決定する。 任意の2つの型について上限と下限が存在するのでScala3の型システムは束(lattice)であるといえる。
例)
集合での二項関係で推移律、反対称律、完全律の全てを満たすもののこと。
また完全性から反射性も満たすことがいえる。
プログラムの中の四季をどんな順で評価していくかを評価戦略(評価順序)という。
match文により要素の型を指す仕組みをmatch typeという。
型消去(type erasure)とは型変数が存在するクラスや構造体において型変数を消去すること。
Javaにおける型消去はジェネリクスと型実現のためにコンパイル時に行われる処理のうちの1つである。Javaソースファイル中に書いた型変数はJVMには渡されない。
Javaは型消去することでジェネリクス型を実現した。全ての型変数を1つの型に置き換えることからこの手法は同種変換(homogenous translation)とよばれる。個別の型に置き換える手法は異種変換(hoterogeneous translation)と呼ばれる。C++のテンプレートは異種変換を採用していて、プログラムのサイズは大きくなるが実行性能では勝る。
TypeScriptにおける型消去とは、トランスパイルしてJavaScriptコードにする際に型情報などが取り除かれることを指す。
型Sが型Tの部分型であるということは以下のように定義される。
言語によっては「すべての型の上位型である型」「すべての型の部分型である型」が用意されている。前者をトップ型、校舎をボトム型という。
TypeScriptのトップ型はunknow、ボトム型はneverである。
型システムについてもっと深く理解したいけれど、一歩を踏み出すのが大変そうだったのでまず型システム入門の入門書と称している本書を手に取りました。本書の内容でも初めて知ることが多かったです。理論には踏み込まないが、外観がうっすらとつかめた感じがします。ちゃんと型システムを理解するにはそれのベースとなっている順序集合などの理論もある程度抑えていないといけなさそうなことが思いました。型システムに入門する際に詰まったらまた本書を読んでみようと思います。
https://techbookfest.org/product/5798421917073408