Range Redesign: Empty Ranges
Dukc
ajieskola at gmail.com
Wed Mar 6 22:54:54 UTC 2024
On Wednesday, 6 March 2024 at 21:24:59 UTC, Jonathan M Davis
wrote:
>
> This is a fundamental problem with classes in general.
> Attributes just do not play nicely with them. Either you're
> forced to require attributes that potentially won't work for
> some code, or you're forced to disallow attributes that some
> code might require.
It's not a problem with classes, it's a decision one has to make
when designing an interface with runtime variance regardless of
the mechanism. You either have to allow the unknown code you're
calling to execute side effects in which case it's impure, or you
must execute the side effects it requests on it's behalf which
means the unknown code must use your interfaces instead of doing
their io themselves. It would be the same with any other
mechanism.
> And what you're describing results in a proliferation of
> interfaces, which to an extent, goes against the point of using
> interfaces.
I don't think so. Say, you're designing an interpreter, and
decide the user-defined functions can't execute io directly or
break D type system, but can throw exceptions. Therefore the D
type for a range in your client langauge will be
`ForwardRange!(ClientLangValue, FunctionAttribute.safe |
FunctionAttribute.pure_)`. You need only one template instance,
same as presently. How is this exactly proliferation?
More information about the Digitalmars-d
mailing list