On Tuesday, 14 June 2022 at 23:51:45 UTC, Adam Ruppe wrote:
>On Tuesday, 14 June 2022 at 23:41:55 UTC, Walter Bright wrote:
>Even with a linker error there'd be constant maintenance problem for the user.
What maintenance problem?
When a library changes, it recompiles and generates its new interface file (if it even uses interface files; they're extremely rare in real world D code).
If the library hasn't changed, there's no need to update anything, inference or not.
This is near zero work.
I'm assuming you're arguing for an always-on function attribute inference, at least for scope
and return scope
. Please no!
This would be outright poison for a stable API or ABI of a library, probably including ARSD. All your public functions have attributes added to them under your nose, and then you cannot change them without breaking client code because it depends on those attributes you did not intend to add.
Even in a top-level application it happens every now and then that I intentionally want to disable some attributes from a function. Maybe to hunt for some bug, maybe for DBI or testing purposes. Now I can do that with void nonScopeArgument(int*){}
. With universal inference I'd have to resort to error-prone hacks like
void nonScopeArgument(int* arg)
{ static int* dummy;
if(false) dummy = arg;
}
. No thanks.