일관성 없는 러스트
Rust의 코히어런스(coherence)와 오펀 규칙(orphan rules)는 생태계 발전에 근본적인 제약을 주고 있습니다.
코히어런스는 하나의 타입에 대해 하나의 트레잇 구현만 허용하여 충돌을 방지하고, 오펀 규칙은 현재 크레이트에서 정의된 타입이나 트레잇에만 구현을 허용해 생태계 내 구현 중복과 충돌을 막습니다.
하지만 이로 인해 예를 들어 serde 같은 핵심 라이브러리 대체가 어렵고, 새로운 직렬화 라이브러리를 도입하려면 모든 관련 크레이트를 수정해야 하는 등 생태계 진화가 저해됩니다.
기존 제안들은 코히어런스와 오펀 규칙의 제약을 완화하려 했으나, 근본적인 생태계 진화 문제를 해결하지 못했습니다.
저자는 트레잇 구현을 명시적으로 이름 붙이고, 구현을 값처럼 전달하는 새로운 모델을 제안하며, 이를 통해 코히어런스 없이도 안전성과 생태계 조합성을 유지할 수 있다고 주장합니다.
이 방식은 중첩된 트레잇 구현 허용, 불일치 문제 해결, 그리고 더 유연한 라이브러리 진화를 가능하게 하며, Rust 타입 시스템의 건전성을 강화할 잠재력이 있습니다.