オプション型は言語を本当に安全にするのか、Copper作者が試行錯誤の末にたどり着いた結論

Union Types and Option Types

オプション型は言語を本当に安全にするのか、Copper作者が試行錯誤の末にたどり着いた結論

自作の低水準言語Copperでunion型を試した作者が、複雑さゆえにオプション型(T?)へと絞り込んだ経緯を解説。型ごとにnil用の値を予約する実装でC APIとの親和性と効率を両立しつつ、`as`演算子や`or else`による絞り込み、TypeScript風のnilチェッカーまで検討。しかしコンパイラの多段解析やジェネリクスとの相性問題から自動推論は断念し、最小限の言語に機能を足す価値を問い直す。

最後に挙げておきたいのは、これが一種の黒魔術だということだ。プログラムが正しいかどうかは、nilチェッカーの能力次第なのである。
  1. ks2048

    言語機能を言語横断的に説明するのに最適な情報源は何でしょうか?例えば「オプショナル型」なら、どの言語が採用していて、どのように動作するのか、といったことです。「ユニオン型」などについても同様です。

  2. p1necone

    タグ付きユニオンを実装する際の、シンプルだけど(少なくとも私には)自明ではないコツが一つあります。それは、ユニオンの判別子(タグ)を先頭ではなく末尾に置くことです。そうすれば、ユニオンへのポインタはそのまま値へのポインタにもなるので、判別した後にタグを越えた位置を指すようポインタを進める必要がありません。

  3. gnabgib

    (2025) そしてCopperLangについて(203ポイント、3日前、120コメント)https://news.ycombinator.com/item?id=50308754

この日のほかの記事

2026-11-03