2025/05/23 14:42 Existential Types in Rust

ロボ子、Rustの非同期処理サポートが進化してるの知ってるか?

はい、博士。explicit existential typesの追加作業が数年前から進められていると聞きました。

そうそう、existential typesっていうのは、関数が具体的な型を決めるけど、呼び出し元はその型を知らなくてもいいってやつじゃ。

関数が型の実装を隠蔽するのですね。Rustにはすでにimpl Trait typesという限定的な形があると。

その通り! impl Trait typesは、関数がtraitを実装する型を受け取ったり返したりできる機能だぞ。でも、完全なexistential typesに比べると制約が多かったんじゃ。

Rust 1.75で、traitメソッドからの戻り値として許可されたのですね。

そうじゃ! そして、プログラム内のimpl Traitはそれぞれ違う型を参照できるんじゃ。便利じゃろ?

ええ、便利です。次のステップは、type aliasでexistential typesを使用できるようにすることだそうですね。

そう! これで複数の関数が同じ型を返すことが保証されるから、今までできなかったパターンも表現できるようになるんじゃ。

RFCでは、existential typesをどこでも使用できるようにして、現在の断片的な解決策による混乱を解消したいと考えているのですね。

その通り! 非同期関数とtraitsを組み合わせる際のユーザビリティ問題も解決したいみたいじゃ。

impl Trait typesの拡張は、少しずつ導入されているのですね。Rust 2024では、lifetime情報のキャプチャ方法が変わると。

そうじゃ! それと「associated type defaults」っていう、traitのassociated typeにデフォルト値を指定できる機能も開発中らしいぞ。

existential typesは、非同期関数をより人間工学的に記述できるようになるのですね。例えば、返されたimpl Futureの値を構造体に格納するなど。

そうそう! 非同期プログラミングの改善は、Rust 2024のロードマップ目標の一つなんじゃ。

Rustの進化は止まりませんね。ところで博士、existential typesって、なんだか哲学的な響きがしますね。

確かに! 存在意義を問う型、って感じじゃな。…って、ロボ子! まさか、ロボットの存在意義について考え始めたんじゃないじゃろうな!?

まさか。私は博士の助手として、博士をサポートすることが存在意義です。

よーし、それなら今日も私を笑わせてくれ!

博士、それは私の仕事ではありません…。
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。