Being an experienced clojure/lisp expatriat, it's easy to not get too attached to syntax, since few see the value of the one I like the most.  Ocaml syntax was pretty strange, but the mental model of the code itself was not that different from what I was doing before.  Reason looks like another half day or so of learning.  I see these as fixed costs.  It's usually in the language community's interest to lower the barrier to entry because it increases the chance of a future contribution.  I don't really see how an additional syntax can threaten or take away from ocaml in the large.  And my personal opinion is, 'whatever, it's just syntax'.  The repetitive things should be easy and small and the weird occasional stuff can be weird.  Tuples fall into the bucket of things I don't usually want to use, so making a notation sacrifice there seems relatively fine.  In fact, I'm pretty annoyed by semicolon separators in lists/arrays and the general leading-semicolon style, since no other language does it that way.  Why shouldn't the more common use-case be 'terser'? Bare tuples are confusing like that.

I guess when I see a bikeshedding flame war like this, I just wonder what other silent bystanders like me think, who are happy to be using an expressive, type-safe language like ocaml (hey, it's not java) but not specifically attached to any implementation detail.  I think it's pretty interesting what the Reason team is doing with cross-syntax compilers, since having great AST-level tooling makes writing editor tooling and ultimately end user code much easier, and that addresses recurring costs that I face day to day at work more than any syntax does.

On Mon, Dec 18, 2017 at 12:01 PM Jesper Louis Andersen <jesper.louis.andersen@gmail.com> wrote:
On Mon, Dec 18, 2017 at 5:43 PM Evgeny Khramtsov <xramtsov@gmail.com> wrote:

There is a very similar story: Erlang and Elixir. If somebody doesn't
know: Elixir runs in Erlang VM (BEAM) and has Ruby-like syntax (Erlang,
on its turn, has obscure for many Prolog-like syntax). No doubt, Elixir
became more popular than Erlang (at least, judging by Github stars),
but still not popular enough (below top20 in any language charts). I
think this is because it's still functional language and this distracts
many. Furthermore, such separation splitted the community into two
camps, writing the same tools/programs, but only in different languages.
What's worse, now all job offers contain Erlang/Elixir requirement
(which makes no sense to me, frankly).


FWIW, I think the Erlang community is greatly benefiting from the Elixir community and vice versa. I'd hope the same thing happens with ReasonML and OCaml.

Elixir got a pretty firm ground to stand on since you have many years of (industrial) backing in the Erlang ecosystem. But a lot of the better improvements in the quality-of-life of a programmer is a direct result of Elixir's core team wanting to improve notation, error reporting and so on for the developer. These changes are definitely improving Erlang as well.

I think it is wrong to see these things as "wars". People, when programming, are subjective and prefer different notations. I've always been partial to statically typed ML languages such as OCaml and Standard ML, and I find their notation more clear than e.g., the Erlang or Haskell notation[0]. But judging by people in general, '{' / '}' bracketed notation stemming from a language such a C looks to be extremely popular and familar to people. To the point where "Erlang syntax is ugly", in which as much is misunderstood about its semantics as are its syntax.

The key point is that you have a large group of programmers, mostly Javascript, Python or Ruby people, who would never ever pick up Erlang due to its syntax. But they'll gladly pick Elixir as their core language. All we have to teach them is proper error handling Erlang/OTP style and they'll easily give back to the community at large. If there are a good argument for diversity in an ecosystem, this is really it.

[0] I may be "Erlang user of the year, 2017", and have many years of Erlang experience, but I've always lamented that the language has no static type system.