tardy v0.0.1 - Runtime polymorphism without inheritance
Atila Neves
atila.neves at gmail.com
Tue Jun 16 11:31:14 UTC 2020
On Tuesday, 16 June 2020 at 11:24:05 UTC, jmh530 wrote:
> On Tuesday, 16 June 2020 at 09:15:10 UTC, Atila Neves wrote:
>> [snip]
>>> In the more longer-term, is the goal of the project to
>>> implement a Typescript / Go interfaces like structural type
>>> system in user space?
>>
>> Yes. Other than allowing multiple interfaces, I think it's
>> already implemented.
>
> I'm not familiar with what Typescript does, but doesn't Go
> allow interfaces to be implemented by free-standing functions?
So does tardy.
> That is a little bit more similar to open methods. This
> requires the type inherit from the interface and implement
> member functions.
There is no inheritance anywhere, otherwise that'd defeat the
point of the library in the first place. I used interfaces
because they exist and intuively make sense, and support classes
because why not. Otherwise it could be just structs and other
values with candidate UFCS functions.
> I'm not that knowledgeable of Boost, but I see some
> similarities with Boost's type_erasure library. However, one
> main difference is that it is implemented with concepts, rather
> than the equivalent of interfaces. I would guess using
> interfaces has some benefits in terms of implementation since
> you know exactly what functions need to be called. Something
> like @models is very flexible, but that might be a downside.
Using an interface means using familiar syntax with the added
benefits of being able to write a signature like this:
int* fun(int*, int) @safe @nogc pure return scope const;
And then have all of those attributes and `this` modifiers used
in the vtable function pointer declarations. Overloading and UFCS
get dealt with naturally by usual language rules.
More information about the Digitalmars-d-announce
mailing list