<div dir="ltr">This seems possibly a *little* too similar to the existing Interface type in Object Pascal, however, I *would* really like to see some kind of functionality that basically amounts to "has the same capabilities as Interfaces and works on records and objects too, but does NOT require any kind of heap allocation".<div><br></div><div>So whether it be this, or just an improvement on the Interfaces we already have, I'd definitely personally be in favor of something that "works like Interfaces except minus the negative performance implications."</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Feb 9, 2021 at 9:27 PM Ryan Joseph via fpc-pascal <<a href="mailto:fpc-pascal@lists.freepascal.org">fpc-pascal@lists.freepascal.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">We had talked about this some time ago and it's been rattling around in my brain so I wanted to write it down into a formal proposal where we can discuss it and hopefully agree upon a syntax. Everything is preliminary and tentative but this is a syntax which allows a "composition over inheritance" model, also known as "mix-ins" in some languages. That idea is similar to multiple inheritance except you have a concrete reference to the trait being implemented so you can resolve conflicts easily.<br>
<br>
Here's what I have so far. Please feel free to look at it and give any feedback.<br>
<br>
<a href="https://github.com/genericptr/freepascal/wiki/Traits-Proposal" rel="noreferrer" target="_blank">https://github.com/genericptr/freepascal/wiki/Traits-Proposal</a><br>
<br>
====================<br>
<br>
type<br>
  TSomeTrait = trait<br>
    public<br>
      field: integer;<br>
      procedure DoThis;<br>
  end;<br>
<br>
  TMyClass = class<br>
    private<br>
      _trait: TSomeTrait;<br>
    public<br>
      property someTrait: TSomeTrait implements _trait;<br>
  end;<br>
<br>
var<br>
  c: TMyClass;<br>
begin<br>
  c := TMyClass.Create;<br>
  c.DoThis;<br>
  writeln(c.field):<br>
end;<br>
<br>
Regards,<br>
        Ryan Joseph<br>
<br>
_______________________________________________<br>
fpc-pascal maillist  -  <a href="mailto:fpc-pascal@lists.freepascal.org" target="_blank">fpc-pascal@lists.freepascal.org</a><br>
<a href="https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal" rel="noreferrer" target="_blank">https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal</a><br>
</blockquote></div>