4 ms·
I want a statically typed functional language with a big ecosystem. I want to use the same language across front-end and back-end. What are my options? - Pure
by de_keyboard 6y ago
I want a statically typed functional language with a big ecosystem. I want to use the same language across front-end and back-end.
What are my options?
- PureScript on web and Node.js
Can use NPM packages! Node.js as a run-time lacks features like shared memory across threads. PureScript is still too early IMO.
- Scala on JVM and web using Scala.js
Not a bad option, although the language is very complex. More towards the OOP end than the ML end in the spectrum of language design. JVM can be a good or a bad thing, depending on what you are doing.
- F# on .NET Core and web using Fable
Simple functional language with access to the .NET ecosystem. ASP.NET has great performance. Access to NPM packages on web. Lacks some advanced type-system features in Haskell, OCaml and Scala. However, the community has a pragmatic focus as a result.
- OCaml and ReasonML
ReasonML has limited backing from Facebook. OCaml has support from a few financial institutions (e.g. Jane Street) but it's not on the same level as what a big tech company could provide. Tiny (but high quality) community and ecosystem. OCaml has great single-threaded performance but mult-threading is not quite ready. Already small community split by compiler extensions and standard libraries.
- Haskell and GHCJS
Again, tiny community and ecosystem. Beautiful language, but lazy evaluation has bit me too many times. Steep learning curve since newcomers cannot fall-back to OOP and imperative code.
- Elm
Tiny ecosystem, tied to Node.js (see PureScript). Interop story with NPM modules is worse than PureScript.
For me, F# is the clear winner.
If you aren't particularly interested in functional programming - maybe you just use some delegates here and there - then C# is a fine choice. Otherwise, C# quickly becomes awkward compared to F#. Besides, C# to JS options are not as mature as Fable.
- anotherhue 6y agoAlso Clojure/ClojureScript if you're willing to give up the static typing.
- LandR 6y agoClojurescript with Re-Frame / RE-Frame-10x / Reagent has transformed front-end for me. It's so good.
- ollran 6y agoRe-frame (just like Clojure in general) seems to be much more stable than alternatives in a sense how much things change over time.
- de_keyboard 6y agoClojure is such a different school of thought! Most of the arguments I have heard for Clojure (immutability, thinking in data, etc) also apply to ML though. Still, I hope to try it out properly one day! I wonder what is easier for a strong OOP developer to learn, Lisp or ML?
- pjmlp 6y agoLisp and Clojure have CLOS, which is more powerful than what most people know as OOP. ML, depending on the flavour gets pretty how one combines functors, aka generic modules, which is similar to component based programming like COM, or just plain objects as in OCaml. Now the immutability isn't as hard to adapt to as one may think.
- lispm 6y agoClojure has CLOS? That would be new.
- pjmlp 6y agoFair enough, I was over simplifying, still it has a nice subset of it.
- lispm 6y agoWhat is this 'subset'? CLOS is based around class&inhertance&mutability + generic function dispatch over classes. Spiritually Clojure wants to avoid OOP, where CLOS is a full object system with an optional meta-layer.
- pjmlp 6y agoI know you are a Lisp expert with a deep knowledge of its eco-system, but trying to downplay the existence of multiple dispatch and protocols doesn't help. Also I bet that The Art of Metaobject Protocol reference implementation can be ported into Clojure without major issues.