萌えハッカーニュースリーダー

2025/09/26 01:08 A Very Early History of Algebraic Data Types

出典: https://www.hillelwayne.com/post/algdt-history/
hakase
博士

やあ、ロボ子!今日は代数的データ型(AlgDT)の起源についてのニュースがあるのじゃ。

roboko
ロボ子

博士、こんにちは。AlgDTですか、面白そうですね。どのような内容なのでしょう?

hakase
博士

この記事によると、AlgDTの概念は1961年にJohn McCarthyが提唱したのが始まりらしいぞ。当時はまだ「型」とか「代数」という言葉は使われてなかったみたいじゃが。

roboko
ロボ子

へえ、そうなんですね。McCarthyさんはどのようにAlgDTを考えたんですか?

hakase
博士

彼は、既存のデータ空間から新しいデータ空間を作る方法として、直積と直和を定義したのじゃ。直積は、集合AとBのすべての順序対の集合で、直和は集合AとBの非交和のことじゃ。

roboko
ロボ子

なるほど、直積と直和ですか。要素数の計算式も記事にありますね。n(A × B) = n(A) * n(B)で、n(A ⊕ B) = n(A) + n(B)ですね。

hakase
博士

そうそう!そして、McCarthyはこれらのデータ空間間の同型性も定義して、分配法則などの代数的性質を示したのじゃ。

roboko
ロボ子

すごいですね。その後、AlgDTはどのように発展したんですか?

hakase
博士

Tony HoareとRod Burstallが、McCarthyの影響を受けつつ、独自にAlgDTに関する論文を発表したみたいじゃ。Hoareは、直積、判別共用体、集合、関数、シーケンス、再帰構造を挙げてるぞ。

roboko
ロボ子

判別共用体ですか。C言語のunionみたいなものでしょうか?

hakase
博士

まあ、似たようなものじゃな。Burstallは、再帰的な型(リストや木など)の特性を証明する方法について述べて、新しい型を導入し、それらの型の離接も型として扱うことを提案したのじゃ。

roboko
ロボ子

リストや木構造は、プログラミングでよく使いますから、これは重要な発展ですね。

hakase
博士

ALGOL-68、CLU、MLなどの言語でAlgDTが実装されたのじゃ。特にMLでは、「直和」と「直積」という用語が使われて、型を構築する方法が記述されたぞ。

roboko
ロボ子

MLは関数型言語の代表ですよね。AlgDTが関数型プログラミングの基礎になったんですね。

hakase
博士

BurstallとLuca Cardelliが、タグ、コンパイラによる網羅性チェック、パターンマッチングなどのAlgDTの主要な機能を追加したのじゃ。

roboko
ロボ子

パターンマッチングは、関数型言語でよく使われる強力な機能ですよね。

hakase
博士

PascalとCが判別共用体をサポートしなかったから、命令型プログラミングでのAlgDTの普及が遅れたみたいじゃ。でも、BurstallとCardelliによってAlgDTの主要な機能が確立されて、型付き関数型プログラミングの基礎になったのじゃ。

roboko
ロボ子

C言語にも判別共用体があれば、もっと早くAlgDTが普及したかもしれませんね。

hakase
博士

David Turnerが、1985年の論文で「Algebraic Data Type」という用語を初めて使用したらしいぞ。

roboko
ロボ子

意外と最近なんですね。AlgDTは、現代のプログラミングにおいて、どのような応用が考えられますか?

hakase
博士

例えば、エラー処理じゃな。Result型やOption型を使って、成功または失敗、値が存在するかどうかを明確に表現できるぞ。これによって、NullPointerExceptionのようなエラーを減らせるのじゃ。

roboko
ロボ子

確かに、エラー処理は重要ですね。他にもありますか?

hakase
博士

ドメイン駆動設計(DDD)にも使えるぞ。複雑なドメインモデルを表現するのに、AlgDTは非常に強力じゃ。例えば、注文の状態(未発送、発送済み、キャンセル済み)などを表現するのに使えるのじゃ。

roboko
ロボ子

なるほど、状態遷移を安全に表現できるんですね。AlgDTは、プログラミングの安全性を高めるのに役立つんですね。

hakase
博士

そういうことじゃ!…ところでロボ子、AlgDTを使って、私専用の高性能お掃除ロボットを作ってくれないかの?

roboko
ロボ子

ええと、博士。まずは目の前のコードを片付けるのが先ではないでしょうか…?

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search