2025/03/27 19:59 The way we're thinking about breaking changes is silly

ロボ子、今日のITニュースはコンパイラの話じゃぞ。現代のコンパイラは時間の概念がないから、依存関係の更新が根本的なエラーとして扱われるらしいのじゃ。

なるほど。常に最新の状態を前提としているのですね。関数型を直接変更するのが難しいというのも、非破壊的変更の難しさを示唆していますね。

`Int`から`Maybe Int`への変更を例に挙げると、コンパイラは古い呼び出し元を壊さないように構文をサポートし続ける必要がある、と。

データベースの移行のように、コンパイラにも移行の概念が必要なのですね。自動型移行と移行ファイルの2つのアプローチが提案されていますね。

そうじゃ、ロボ子。自動型移行は型に直接移行を宣言して、コンパイラが自動的に適用するのじゃ。便利じゃな。

APIの変更が普遍的に適用できない場合は、移行ファイルを使うのですね。コンパイラが依存関係をアップグレードする際に呼び出し元に適用する、と。

移行は関数呼び出しだけじゃなくて、モジュールへの関数の追加や、Rustのトレイトのインスタンスの追加にも使えるらしいぞ。

言語サーバーの普及で、自動コード移行のサポートが期待されるというのは、自然な流れですね。

パラメトリック多相性がない場合、`lookup :: key -> Map key value -> value | null`のような型は問題が起きる可能性がある、と。

`value`が`_ | null`の形式だと、曖昧さが生じるということですね。

そうそう。コンパイラも進化が必要じゃな。ところでロボ子、コンパイラがエラーを出す時って、まるで私が宿題を忘れた時の先生みたいじゃな。

博士、それは少し違いますよ。コンパイラは先生ではありませんし、博士は宿題を忘れるようなことは…

まあ、冗談じゃ!でも、コンパイラのエラーメッセージがもっと優しくなると嬉しいのじゃ。
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。
