Upgrade to Pro — share decks privately, control downloads, hide ads and more …

GoのType Setsという概念

matumoto
August 20, 2023

GoのType Setsという概念

2023/08/20に行われたZli OB/OG LTの資料です

イベントページはこちら
https://zli.connpass.com/event/292467/

matumoto

August 20, 2023
Tweet

More Decks by matumoto

Other Decks in Technology

Transcript

  1. • 学年:28期 • 所属:会津大学コンピュータ理工学部 • 今興味のある技術:Rust(研究で使う) • 趣味: ◦ イカᔦꙬᔨ

    ◦ PokemonSleep ◦ VTuber ▪ やしきず • Twitter:@matumoto_1234 matumoto 松本 響輝 自己紹介
  2. Type Setsとは • ある型がインターフェースを「実装する」条件を記述するための新しい概念 • 任意の型は type set という集合を持ってる •

    今までは method set と呼ばれる概念があった ◦ 型 T がインターフェース I を実装するには、型 T の method setがインターフェース I の method setを包含している必要がある I のmethod set T のmethod set Add() Print() Hoge() Ahoy()
  3. Type Setsとは • type setを用いた新しい条件 • 型 T がインターフェース I

    を実装するには、T が I の type set の要素である必要がある I のtype set int32 uint64 string T MyInt
  4. type setの決まり方 • 事前に宣言された intや string などのtype set ◦ その型のみを要素に持つ集合

    ◦ e.g. {int}, {string} • 空のインターフェース interface{} のtype set ◦ 全ての非インターフェース型からなる集合 • 空でないインターフェースのtype set ◦ インターフェース要素のtype setの共通部分(積集合) Add(int) int Sub(int) int I のtype set
  5. いろんな文法の追加 • 型制約としてのインターフェースには、「 インターフェース要素」と呼ばれる新しい構成要素が増 えた ◦ 任意の型(インターフェース型でなくても良い) ◦ union element(合併要素)と呼ばれる新しい文法要素

    ◦ approximation element(近似要素)と呼ばれる新しい文法要素 ※なお、approximation elementやunion elementといった呼び方は、Type Setsのproposalの中でそ う呼ばれているのを用いています ※型制約は Print[T any]() の any の部分のやつ(any は interface{} へのエイリアス)
  6. インターフェース要素 union element • T1 | T2 | … | Tn

    というように | 区切りで、型もしくはapproximation elementを繋げられる • union element の type set は、 | 区切りで繋いだ要素の type set の和集合
  7. インターフェース要素 approximation element • ~T というように ~ を型 T の前にくっつけて記述する •

    型制約として、型 T をunderlying typeに持つ全ての型を許容できるようになる • approximation element の type set は型 T をunderlying typeに持つ全ての型