为什么外部证明撑不起循环 trait 实现
来源:smallcultfollowing.com — 2026-10-10
📋 概述
Niko Matsakis 在"循环 trait 实现"系列里比较两种处理父 trait 的策略:模块化证明与外部证明。模块化证明要求 impl 自身证明父 trait 成立——impl Magic for String 直接非法,因为 String 不满足 Copy;好处是 impl 一旦通过,程序其余部分就可以放心依赖。外部证明则把举证责任推给使用方:impl 本身合法但不可用,调用处必须同时证明浅层实现同时成立。作者已确信外部证明与 Rust 的设计不兼容,模块化证明是唯一选择。
🔑 核心要点
- 两种策略的分野在于"谁有责任证明父 trait 义务成立"
- 模块化证明下 impl Magic for String 直接非法,因为 String 不满足 Copy
- 模块化证明的隐患:impl 可能用自己来证明自己,需要额外的终止性规则
- 外部证明下该 impl 合法但不可用,调用处须自行证明浅层实现同时成立
- 用函数打比方:外部证明相当于调用方还要复核被调方函数体是否符合返回类型
- 作者结论:外部证明与 Rust 的设计不兼容,模块化证明是唯一出路
💡 金句
我已经确信外部证明与 Rust 的设计根本不相容,因此模块化证明实际上是唯一的选择。
👍 0
👎 0
← 返回 Lobsters 首页