Date: Tue, 14 Oct 2025 20:18:05 +0300
On Tue, 14 Oct 2025 at 19:30, Ryan McDougall via SG21
<sg21_at_[hidden]> wrote:
> I think what you're imagining is an internet-like ecosystem where small time developers and small time users are throwing things together without much training, documentation, or coordination.
I don't think we are. There is no lack of training, documentation, or
coordination, but there are existing and widely-employed deployment
scenarios where application programmers
use binary libraries and do not compile all their code. Quite a lot of
such scenarios, in fact.
>Contracts may offer a new facet, but the fundamental problem of sharing binaries is older than assert. It's just regular old 1970's library design: you have to produce multiple binaries for each target, be thoughtful about the ABI, and document how to use the ABI as intended.
Being thoughtful about the ABI doesn't seem to help much, considering
that while it may be feasible for a hardened standard library
implementation
to make different contract evaluation semantics ABI-incompatible, it
may well be less so feasible for other libraries and applications
combined
with such libraries.
> While some ODR violations are detectable, ODR is actually IFNDR -- so I don't think ODR is actually a preferable situation.
It is highly non-obvious to me what actual benefits we gain from
having multiple inline function definitions in the same program
compiled with different contract evaluation semantics, and what actual
practical problems we think we solve by making such
multiple definitions ODR-equivalent.
<sg21_at_[hidden]> wrote:
> I think what you're imagining is an internet-like ecosystem where small time developers and small time users are throwing things together without much training, documentation, or coordination.
I don't think we are. There is no lack of training, documentation, or
coordination, but there are existing and widely-employed deployment
scenarios where application programmers
use binary libraries and do not compile all their code. Quite a lot of
such scenarios, in fact.
>Contracts may offer a new facet, but the fundamental problem of sharing binaries is older than assert. It's just regular old 1970's library design: you have to produce multiple binaries for each target, be thoughtful about the ABI, and document how to use the ABI as intended.
Being thoughtful about the ABI doesn't seem to help much, considering
that while it may be feasible for a hardened standard library
implementation
to make different contract evaluation semantics ABI-incompatible, it
may well be less so feasible for other libraries and applications
combined
with such libraries.
> While some ODR violations are detectable, ODR is actually IFNDR -- so I don't think ODR is actually a preferable situation.
It is highly non-obvious to me what actual benefits we gain from
having multiple inline function definitions in the same program
compiled with different contract evaluation semantics, and what actual
practical problems we think we solve by making such
multiple definitions ODR-equivalent.
Received on 2025-10-14 17:18:20
