RE: Re: I am close to using a behaviour as a pure interface and I feel dirty...

Brett Hemes <[email protected]>
Newsgroups gmane.comp.lang.erlang.general
Message-ID <CH2PR03MB533677FED05E7C77EC58FCFBBEC69@CH2PR03MB5336.namprd03.prod.outlook.com>
Historically, have there ever been discussion of including stuff like this in the language itself?

Brett

From: erlang-questions <[email protected]> On Behalf Of Tristan Sloughter
Sent: Wednesday, August 25, 2021 6:42 AM
To: Erlang Questions <[email protected]>
Subject: [EXTERNAL] Re: I am close to using a behaviour as a pure interface and I feel dirty...

I'll drop in this effort that was made years ago: https://github.com/erlware/erlware_commons/blob/master/doc/signatures.md

But I'm not saying I recommend it, I don't know that it is used much and I'd like to deprecate erlware_commons in the not too distant future (it is a dependency used by rebar3/relx and we want to remove as many of those as possible).

I'll also point out my use of behaviours to provide APIs for functionality (an Application Programming INTERFACE -- so "interface" isn't always an OOP construct). Hah, just realized I even called it an "interface" in my most recent PR https://github.com/open-telemetry/opentelemetry-erlang/pull/269

On Tue, Aug 24, 2021, at 15:46, Brett Hemes wrote:

> Erlang's behaviour is NOT an interface!

> If you are looking for some analogy from other languages the closest one is abstract classes in C#.



This isn’t very helpful...  it is the exact same response I find in the forums with no reasoning behind it.  I don’t need analogies either; I understand what behaviours are “supposed” to be from the documentation and comments (perhaps this wasn’t made clear by my post).  Where I fall short is “why” are behaviours limited to such and why aren’t more people asking the same questions I am stuck on (regarding polymorphism)?  My logic was: yes, this has been asked and discussed some in the past with no real resolution that I could find... therefore, users must be content/accepting of the tools provided.  I am not so naive to think I am the first to need/want such, so there must be a disconnect.



I posted my example to motivate my questioning hoping for some insight and/or comfort.  As of now, I have proceeded with storing “meta refs” to my child servers that are module/reference tuples (along with some dangerous and future-maintenance-issue-causing assumptions regarding their “interface”)... and it’s works... it just smells, and I am always eager to learn and find the right/better/best way.



Aside: a colleague came across this repo (https://github.com/eldarko/epolymorph) while digging and the readme seems to capture my use case almost exactly...



Brett
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.