4 ms·
Can you explain what you mean about module naming? I’ve done a good amount of Elixir, and I’m puzzled because I don’t know what you are referring to at all. Mo
by jswny 6y ago
Can you explain what you mean about module naming? I’ve done a good amount of Elixir, and I’m puzzled because I don’t know what you are referring to at all.
Most libraries and frameworks I’ve used enforce things on your modules via behaviors which have nothing to do with naming. Perhaps you are talking about naming functions for behaviors? Because I think it’s the same in most languages that “overridden” or “implementations” of functions for modules/classes that use some kind of interface must be named the same as the interface definition.
- searchableguy 6y ago> Perhaps you are talking about naming functions for behaviors? Because I think it’s the same in most languages that “overridden” or “implementations” of functions for modules/classes that use some kind of interface must be named the same as the interface definition. Yes. In typescript, you can have abstract classes or interfaces to implement which gives you more information (intellisense, visible errors, type information) and make the contract more explicit. I was trying out phoenix and I didn't get any hints about the methods to implement in the module. I was relying on documentation for that. If there was a way to say use @some_spec and get information about it in the editor. It would have helped out.
- shadowfacts 6y agoThe compiler will warn you about things like unimplemented functions that are required by behaviors, and there are plugins for various editors to display errors/warnings inline. There's also Dialyzer (and various IDE integrations) for some level of static type-checking.
- JohnHaugeland 6y agothere are language features directly for this. no need to rely on compiler hints or dialyzer. elixir people really should learn erlang. if you ever saw a coffeescript person struggling to do things that are straightforward in js, because they didn't bother to learn js? that's what you're doing now
- pjmlp 6y agoThis is the main reason why I learn programming languages to broaden my knowledge, but when it comes to production code, only platform languages matter.
- JohnHaugeland 6y agoWell no, it's just that Elixir is built on Erlang, so everything Erlang has is in Elixir If you learn the base language, you get more powerful in the descendant language as well
- pjmlp 6y agoIf one only uses the base language, no need to worry about the fate of the descendant language or how it exposes base language features.
- RandoHolmes 6y agoThis means you're arguing that one should never learn anything except machine code because machine code is what it all turns into at the end of the day. Only you DO use languages that end up as machine code, and the idea of understanding machine code to better utilize something like C isn't outlandish.
- pjmlp 6y agoNope, use C/C++/Perl/awk with UNIX, Java with the JVM, C++/Swift/Objective-C with iOS/macOS, Java/Kotlin/C++ with Android, VB.NET/C#/F#/C++ with Windows, JavaScript/WebAssembly with the Browser,.... and naturally Erlang/C with BEAM. No need for extra build tools, FFI with the platform language, additional debugging tools, the urge to create wrapper libraries that feel more idiomatic into the guest language, waiting for the guest language to come up with ways to expose new platform capabilities,... Guest languages are good for experimenting new ideas that eventually get adopted by the platform and then the world moves on, and they turn into the next CoffeeScript.
- JohnHaugeland 6y ago> In typescript, you can have abstract classes or interfaces to implement In erlang these are called "behaviours" . > I was relying on documentation for that Consider reading the Erlang documentation. The Elixir people really don't understand Erlang very well, and are trying to manufacture Ruby on top of a language that already gives them solutions to their problems that they just can't see. . > If there was a way to say use @some_spec and get information about it in the editor. It would have helped out. Basically every IDE that speaks Erlang knows behaviors. They're as fundamental to the language as header files are to C/C++. Elixir tried to "do away with them" because Elixir thinks they're "confusing" but they're actually really important tools.
- deleted 6y ago[deleted]
- emerongi 6y agoElixir does not try to do away with them. They are covered in the official guide: https://elixir-lang.org/getting-started/typespecs-and-behaviours.html#behaviours https://elixir-lang.org/getting-started/typespecs-and-behavi... As soon as I add @behaviour to a module, I get IDE autocomplete and compiler warnings if a function has not been implemented. I do agree that I have not seen a lot of behaviour use in the wild, even in cases where it's clear that they would be beneficial. Elixir developers seem to have some blindspots.
- searchableguy 6y ago> As soon as I add @behaviour to a module, I get IDE autocomplete and compiler warnings if a function has not been implemented. It is exactly what I was looking for. Thanks for mentioning it.
- ericmj 6y agoElixir hasn’t done away with behaviours. They exist in the language and are used to implement features in the standard library itself and many libraries in the ecosystem. You don’t have to go to Erlang documentation to learn about them since they are documented in Elixir as well [1] [2]. [1] https://elixir-lang.org/getting-started/typespecs-and-behaviours.html#behaviours https://elixir-lang.org/getting-started/typespecs-and-behavi... [2] https://elixir-lang.org/getting-started/typespecs-and-behaviours.html#behaviours https://elixir-lang.org/getting-started/typespecs-and-behavi...