Hindley-Milnerを超えて:代数的部分型推論を用いたCubimlコンパイラチュートリアル

2025-06-13

このブログ記事シリーズでは、"cubic biunification"と呼ばれる新しい型推論システムを基盤としたCubimlコンパイラチュートリアルを紹介します。これは代数的部分型推論の改良版です。Hindley-Milnerシステムの部分型サポートの欠如という限界に対処し、より強力で直感的な型推論を提供します。チュートリアルでは、詳細なコード例を用いてCubimlの実装を段階的に解説し、ブール値、条件式、レコード、関数、letバインディング、再帰的なletバインディング、相互再帰、そしてcase型マッチングなどを網羅します。最終的な目標は、手動による型注釈を必要とせずに型チェックを行うコンパイラを作成することです。

続きを読む
開発

謎めいた型エラーに別れを告げる:PolySubMLが型推論のエラーメッセージを改善する方法

2025-05-23

PolySubMLは、グローバル型推論、サブタイピング、高度なポリモーフィズムを組み合わせたプログラミング言語です。この記事では、PolySubMLがどのように優れた型エラーメッセージを設計しているのかを調べ、既存の言語が型推論のエラーメッセージの改善においてしばしば不足している理由を説明します。著者は、5つのルールを提案しています。1. 推測したり、バックトラックしたりしないこと。2. 早まった結論を出さないこと。3. ユーザーに意図を明確にするように求めること。4. ユーザーが明示的な型注釈を書くことを許可すること。5. ランタイム実行モデルに静的型推論を含めないこと。これらのルールに従うことで、PolySubMLは型推論に伴う多くの一般的な問題を解決し、コードのデバッグ可能性を大幅に向上させています。

続きを読む
開発

オブジェクト指向を超えて:プログラミング言語におけるサブタイピングの進化

2025-03-29

この記事では、プログラミング言語設計におけるサブタイピングの重要な役割を探ります。著者は、複数のプログラミング言語の開発経験に基づき、サブタイピングがオブジェクト指向プログラミングにおけるクラス継承のみに限定されず、はるかに基本的な概念であることを説明しています。つまり、型Xが型Yのサブタイプであるとは、型Xの値を型Yが期待される場所でいつでも使用できることを意味します。この記事では、パフォーマンス重視の低レベル言語においてもサブタイピングが不可欠である理由を明確に説明しています。サブタイピングにより、コンパイラはnull値、エイリアシングなどの問題を静的にチェックできるようになり、コードの信頼性を向上させ、最終的にはプログラミング言語の進化を促進します。

続きを読む

Rustの借用チェッカーの4つの驚くべき制限

2024-12-24

この記事では、経験豊富なRustプログラマーでさえ遭遇する可能性のある、Rustの借用チェッカーの4つの驚くべき制限について掘り下げています。最初の制限は、借用チェッカーがmatchとreturn文を完全に考慮できないという点であり、HashMapを使用する際に冗長なチェックにつながります。2つ目の制限は非同期プログラミングに関連しており、Rustは現在、特定の非同期コールバックの型シグネチャを表現できません。3つ目は、FnMutクロージャがキャプチャされた変数の再借用を許可しないという点であり、非同期操作における可変状態へのアクセスを制限します。最後に、Sendチェッカーの制御フロー認識の欠如により、Sendであるべき一部のFutureが誤って非Sendとしてフラグ付けされます。著者は、具体的なコード例と回避策を用いてこれらの制限とその課題を示し、開発者の生産性を向上させるためにRustの型システムの改善を提唱しています。

続きを読む