goの型をdefined typeとcomposite typeに2分出来ない理由
go1.18から型システムに大きな変更が加えられるという事で、改めてgoの型について学習しています。
教材としてGo言語仕様書輪読会
さんの発表スライドを大変参考にさせて頂いているのですが、defined type
の項目で気になる文言が
defined typeではない型は、全て型リテラルで表される型である
goの型は主に
- 事前定義型
- ユーザー定義型
- コンポジット型
の3要素で構成されていると認識していて、defined type
が事前定義型+ユーザー定義型を表すのなら、それ以外全てはコンポジット型なのでは?と考えていました。
その為「型リテラルで表される型である」という表現に若干違和感を覚えたのですが、以下のQAセクションでその理由が言及されていて
defined typeでないtypeはcomposite typeと呼べばいいんでしょうか?
ちょっと明確に答えられないところです。 composite typeという語は仕様書に現れるのですが明確に定義されていません。 string のような型リテラルがcomposite typeであることは確かなのですが、 type S string のようにして定義したSがcomposite typeなのかどうかはっきりと言えないためです。 defined typeではない型に対す
確かに、、、
この場合ユーザー定義型Sはdefined typeとコンポジット型、二つの性質を持つ事になってしまうので、defined typeとcomposite typeを完全に別物と定義するにはcomposite typeが「ユーザー定義型には適応されない」という文言が必要そうです。
なるほど、、、