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