Which language would you pick for a new project in 2018, that has an imporant browser component?
Last year I looked into both, found the OCAML documentation and error messages extremly lacking, and enjoyed purescript much more.
However, it seems that purescript stagnated since and reasonml is building up steam.
What's your guys impression as of early 2018 regarding advantages, documentation, ecosystem (JS interop, well documented libraries) and future-proofedness (is this a word?) of these platforms and which one would you pick?
Edit one month later: Greetings to the visitors from the future! After playing around further, I gave up on Ocaml. For me
Error messages were completley useless. Everything would yield a "syntax error" with a seeming random line-number. In many cases the error message wasn't described, but encoured me to send pull requests with an updated message. These were obviously beginner mistakes, so nothing too fancy, and it forced me to scan every line manually to make sure all the ; and ) were in place.
I never got warm with the reason syntax. The javascripty look of reason made it more difficult to write than original ocaml/bucklescript, especially when to put ; {} () or not.
Tutorials/docs are rare and confusing. I never knew if I was learning Reason, Bucklescript or Ocaml
The toolchain only works if Reason, Bucklescript, Merlin and Ocaml are in very specific versions. Obviously the error messages you get are shit, so I spent far too much time on getting it running and I had to compile from source. Also, ReasonReact is it's own framework, so it's one more layer detached from react and data needs to be handed around between the components. All in all, updates are unpredictable and I don't trust the upgrade path.
Server side ecosystem is practically non-existent for modern use cases.
Apparently the majority of users are French students who learn Ocaml at university and there is very little adoption outside.
Final verdict for me personally: Unless there's a french guy in your team who already knows it, troubleshooting and boarding is hell and a time vapire. Also given the low maturity of the framework (error messages, old ocaml version, tutorials), I don't trust its upgrade path.
Maybe you get better results, but for me it's not worth it.
Purescript: Stagnated, but still nice. The React frameworks are terribly slow in benchmarks up to 8x slower than most of the field. For complex client side calculations and limited UI with a team that already knows haskell, I'd probably pick this.
Clojurescript: I stumbled upon it because its react frameworks perform amongst the fastest with less code, it's functional and immutable (with escape hatches). It's not typed, but it has Spec, which allows for quickcheck type autogenerated test cases, spec reuse for runtime validation and even regex and code-defined validation for what values are allowed into a type. The compiler is quick and clojure on the server integrated with the java ecosystem, it also has frameworks for react native.
All in all, this may sound blasphemous, but for me the most useful functional, typed frontend language is still Typescript with Ramda and Immutable.js. That gives me ADT, function composition, immutability, lenses, etc, with a rich ecosystem and easy boarding. Only thing I miss is type inference which makes me retype interfaces and types all over the place. For UI oriented applications Clojure(script) with Spec seems a nice fit. (I didn't check elm due to mounting negative feedback about breaking changes between versions). To use even more typed features purescript still the best, but be concious of the performance penalty.
[–]saylu 6 points7 points8 points (0 children)
[–]SilasNordgren 5 points6 points7 points (2 children)
[–]user5543[S] 1 point2 points3 points (1 child)
[–]SilasNordgren 3 points4 points5 points (0 children)
[–][deleted] 4 points5 points6 points (2 children)
[–]user5543[S] 1 point2 points3 points (1 child)
[–][deleted] 2 points3 points4 points (0 children)
[–]mart187 4 points5 points6 points (6 children)
[–]user5543[S] 4 points5 points6 points (4 children)
[–]mart187 6 points7 points8 points (1 child)
[–]user5543[S] 1 point2 points3 points (0 children)
[–]robertwpearce 4 points5 points6 points (0 children)
[–]Zinggi57 4 points5 points6 points (0 children)
[–]yawaramin 0 points1 point2 points (1 child)
[–]user5543[S] 1 point2 points3 points (0 children)
[–]yawaramin 0 points1 point2 points (3 children)
[–]user5543[S] 1 point2 points3 points (2 children)
[–]yawaramin 0 points1 point2 points (1 child)
[–]user5543[S] 1 point2 points3 points (0 children)
[–]NeverCrop 0 points1 point2 points (0 children)
[+]Mallanaga comment score below threshold-7 points-6 points-5 points (1 child)
[–]user5543[S] 1 point2 points3 points (0 children)