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

Kaigi On Railsあるし、Railsについて語ろう!

Kaigi On Railsあるし、Railsについて語ろう!

RubyやPHPなどをはじめとしたプログラミング言語の型システムについて調べてまとめてみました!横断的な資料であるので、深いところを知りたい方にはおすすめしませんが、概要をさらいたい方は見ていただけると良いかと思います。

Suguru Ohki

October 23, 2024
Tweet

More Decks by Suguru Ohki

Other Decks in Programming

Transcript

  1. プログラム内の データ 式 に 型 ( デ ー タ の

    種 類 や 性 質 ) を 割 り あ て そ れ ら の 使 用 を 規 定 す る ル ー ル の集合 型システムの定義とは?
  2. エラーの早期発見 d e c l a r e ( s

    t r i c t _ t y p e s = 1 ) ; じ ゃ な い 時 は ど う す る の か っ て ? 知 ら ん 知 ら ん
  3. コードの自己文書化 a r r a y の 中 身 に

    つ い て は 不 問 と し ま す ! ( 震 え 声 )
  4. API の設計とサポート a r r a y の 中 身

    に つ い て は 不 問 と し ま す ! ( 震 え 声 )
  5. そのほか リ フ ァ ク タ リ ン グ の

    支 援 型 情 報 を 利 用 し て 、 安 全 に コ ー ド を 変 更 で き ま す 。 I D E や ツ ー ル が 型 情 報 を 使 用 し て 、 関 連 す る 部 分 の 自 動 更 新 を 提 案 可 能 パ フ ォ ー マ ン ス の 最 適 化 コ ン パ イ ラ ー が 型 情 報 を 使 用 し て 、 最 適 化 さ れ た 機 械 語 コ ー ド を 生 成 P H P の 場 合 、 J I T コ ン パ イ ラ が よ り 効 率 的 な コ ー ド を 生 成 で き る 可 能 性 あ り
  6. Rubyの最近の型システム Ruby3. 0からはRBSを利用した RBS Steep 型を明示的に記述できるようになった。 これにより、 Nomi nal Type

    Systemの要素が強化 1 . 型安全性が向上 2 . Steepなどのツールを使用することで、RBSで定義された 型に基づいて静的な型検査が可能 3 .
  7. Rust 型システム: Hindly-Milner型推論?をベースとしたアルゴ リズムが利用 1 . 所有権とライフタイムの概念をアルゴリズムに対して拡張し て実装されている 2 .

    借用チェッカー: 参照の有効性をコンパイル時にチェック 3 . トレイトベースのジェネリクス: インターフェースとジェネ リクスを組み合わせた柔軟な抽象化が可能 4 . 代数的データ型: エニュームを使用して複雑なデータ構造を 表現できる 5 .
  8. TypeScri pt 型システム: Structural Subtyping 1 . 型推論システム: Hindly-Milner型推論?をベースとしたア ルゴリズムが利用

    2 . 型推論:多くの場合、明示的な型注釈がなくても型を推論 3 . ジェネリクス: 型パラメータを使用して、再利用可能な型定 義を作成できる 4 . 型ガード: 5 . 実行時の型チェックと静的型システムを連携させることがで きます。 6 .
  9. Ruby DuckTypingを利用。型の解析は、完全に外部へ出している 1 . Sorbetは、制約解決アルゴリズムを使用して型推論を行う 2 . 型の関係を制約として表現し、制約を満たす型の割り当て を見つけるアプローチをとっている a.

    Ruby3.0からは公式がサポートする型の定義が利用できる RBSが導入されている 3 . 作者のMatzさんは型宣言やTypeHintを入れる想定がな く、型推論が充実すれば必要なくなることを想定している 4 . 実際のコードに対して型情報を付加しても本番コードを変更 する必要がない 5 .