Why can’t we haz something like Elm in Elixir?
Elixir in the browser, Elixir on the server, Elixir drivers for DBs and be done with it.
Why can’t we haz something like Elm in Elixir?
There is ElixirScript available, which seems to be quite active in development, there was also a long blogpost from its creator about a month ago, but can’t find it right now. He mentioned and explained some stuff, about why there is currently no
spawn in ElixirScript.
Also if I wasn’t very happy with ElixirScripts documentation and behaviour when I tried it for the last time (half a year ago), I will give it a new chance when I am at the point to actually implement something on the browsers side.
Still, I think that ELM is a valuable gem, since it does give some guarantees that elixir can’t.
- We have typesafety in elm, something, that elixir can’t catch for us. But since we are already living with that in the backend, we would overcome that on the frontend as well.
- Let it crash is not suitable for a frontend. At least thats my opinion
After saying this, I do conclude, that one can use ElixirScript for small additions to what is there anyway (Make the progressbar update dynamically instead on refresh only, and similar stuff) while I would choose Elm for a complete frontend application or animations shown as part of the application (something one has used flash for a few years ago).
That’s very interesting, why can’t we have Elixir, with types, in the browser? Maybe bring them over afterwards?
I’m way out of my depth when it comes to language development, but how about using the browser as a platform for developing types for Elixir?
Or it’s impossible to add them due to the Erlang vm?! Sorry if this sounds like a bunch of baloney
maps will take untill OTP 20 before getting stable I fear).
It does not even matter which approach you choose, at the end you had to learn just another language to code in the web, the type language
Of course, types are not that necessary for web frontends, JS itself is dynamically typed as well, and if you are not having the correct typed variable at a certain point it will just crash.
It’s just the fact that types can give you some amount of provable safety. And as a personal opinion, there shall be no way that a customer notices crashes in the UI, so the more safety I get from my language, the better it is. And as long as we have ne
spawn of new processes in ElixirScript, we can’t restart crashed processes, but have to restart the whole application after a crash. So to avoid this you need to build safety nets into you code which you wouldn’t do in a “real” elixir application.
Also, I already mentioned the bridge between JS and Elms runtime. We could introduce something similar into ElixirScript, but I’m quite unsure about the consequences. At least such a thing really could get something away, which I really disliked that time when I took a look into ES: Server-Client-Communication: Even when elixir is a highly concurrent language and lets you communicate with servers thousands of miles away without letting you notice as a developer, in Elixr/ES-pairing you have to serialyze/deserialyze your data manually and transfer via HTTP. Using that mentioned bridge could reduce the amount necessary for this, but would also need a counterpart on serverside.
But I’ve written far too much again… Does happen always when I’m tired, I think it is best to go to bed now
Elm is different beast
Elixir/ Erlang -> strong + dynamic language
Clojure/ClojureScript -> strong + dynamic language
Haskell -> strong + static language
There is effort to bringing safe of types to dynamic languages (during compiling/testing)
- clojure/clojurescript -> contracts (nice talk Contracts in Clojure: Settling Types vs Tests)
- Elixir -> ???
For Elixir there is
elixir-contracts, and dialyzer of course.
Using typespecs in elixir and checking them, is done after compilation using a tool named
dialyzer. There are also packages available that make it wasier to use it.
Also, since it is meant for erlang in the first place, its reports are hard to read when not used to erlang syntax.
Another culprit is, that it has problems getting the type of maps correctly, and as such the types of elixir structs.
Ok so it would be nice to have some support for elixir complex types like in clojure. Maybe some specific dialyzer for Elixir. I found this article:
I was very interested about this a couple of months ago when I saw that dev’s talk but they seem to have abandoned it? They’re last commit was 5 months ago and most of the commits before that we’re just README updates. Not sure if the project is ‘complete’ or not.