[HN Gopher] Melange 1.0: Compile OCaml / ReasonML to JavaScript
___________________________________________________________________
Melange 1.0: Compile OCaml / ReasonML to JavaScript
Author : anmonteiro90
Score : 162 points
Date : 2023-06-12 16:28 UTC (6 hours ago)
(HTM) web link (buttondown.email)
(TXT) w3m dump (buttondown.email)
| colesantiago wrote:
| Do I need OCaml installed to use this, why not a single binary?
| anmonteiro90 wrote:
| Melange approaches the problem from the OCaml perspective. It
| inserts itself within the OCaml community, so you need the
| OCaml Platform[1] tooling to install and use it.
|
| This way, you get all the benefits of having a native toolchain
| and build system, and a great integration with modern
| JavaScript with e.g. npm or yarn.
|
| [1]: https://ocaml.org/docs/platform
| js_of_ocaml_3 wrote:
| A lot of the ecosystem is written in TypeScript (heavy on
| structural typing). Last I've checked OCaml still doesn't have
| substructural row polymorphism or set theoretic types, so this
| seems to be a futile endeavor until underlying fundamentals in
| its type system are addressed.
|
| Elm & PureScript I believe solved this problem.
| yawaramin wrote:
| OCaml's object types solve exactly this problem. And they have
| been around since Caml became OCaml.
| arxanas wrote:
| Why would you need substructural typing to emulate Typescript?
| Is there a substructural type system feature in TS?
|
| You can accomplish width subtyping with OCaml's "polymorphic
| variants", which could be used to emulate TS union types more
| flexibly than traditional sum types.
|
| What are the features of Elm and Purescript that help model TS
| that OCaml doesn't have?
| pbiggar wrote:
| When we (darklang.com) were working with Rescript, I was not
| optimistic about Melange's approach, but in retrospect I think it
| has legs.
|
| The challenge with ReScript is that the authors really were
| focusing on the JS ecosystem, and didn't care at all about OCaml.
| Their fusion with the ReasonML community didn't make a whole lot
| of sense. ReScript is a much better language now that it has
| split than it was then, if you look solely through the lens of a
| better JS.
|
| But, as Elm and other compiled-to-JS languages have learned,
| Typescript has gotten good enough that other languages might not
| be sufficiently better than TS to attract enough interest to have
| a vibrant community. Doubly so since the JS-interop story isn't
| nearly as good in ReScript as it is in Typescript (though it's
| much much better than in Elm).
|
| However, the aim of writing programs in OCaml which compile to
| nice JS and also native OCaml, and allowing both client and
| server to be written in OCaml, remains valid and interesting (and
| I would argue was held back by js_of_ocaml, the pre-existing way
| to do it). So I think there is something interesting here, though
| it isn't a ReScript competitor except tangentially.
|
| Though I cannot really understand where ReasonML (a JS-like
| syntax for OCaml) fits into this - if the target is OCaml devs,
| than surely the ReasonML syntax stuff is not valuable anymore?
| square_usual wrote:
| I think it has value in that some people find OCaml syntax
| confusing, especially developers who have only had experience
| with C-style languages. For them, ReScript makes sense as an
| alternative syntax to a great language!
| anmonteiro90 wrote:
| Hi Paul, appreciate the kind words.
|
| Your perspective on the project is exactly how we think about
| it: Melange provides the tooling for fullstack (@davesnx likes
| to call them Universal) Reason/OCaml applications.
|
| I suspect my time in Clojure(Script) has heavily influenced how
| I look at a "Language of the System"[1], and that's effectively
| what we're trying to do here.
|
| Re: ReasonML, I very much understand the sentiment. In my mind
| right now, ReasonML is only there to provide JSX and reason-
| react support. I suspect we'll eventually write a JSX PPX for
| OCaml and stop using ReasonML down the road (fairly longer
| term).
|
| [1]: https://www.youtube.com/watch?v=ROor6_NGIWU
| m0meni wrote:
| Thanks for Melange! I fully believe in the mission, backing,
| and philosophy of Melange over ReScript.
|
| To add a counterpoint, though I'm in the minority, I think
| ReasonML is really really important to keep OCaml accessible
| to a larger amount of people. I work in a very cross-platform
| context and program in 5/6 different languages a month, and
| despite having a lot of experience with different syntaxes,
| OCaml is just weirdly unique enough that it's hard to
| immediately transfer my skills. I haven't written OCaml
| seriously in a while, and even looking back on my own code,
| for example the PPX I wrote
| https://github.com/AriaFallah/ppx_str 5 years ago, I can't
| really read it without zoning in and thinking quite hard vs.
| just flowing.
| anmonteiro90 wrote:
| Thank you :-)
|
| You also make a good point. I didn't go into too much
| detail about ReasonML in another comment, but I know Jordan
| (@jordwalke) has plans for a ReasonML v4 [1] with slight
| syntax improvements. I don't currently know the status of
| that work, however, but I think we'll want to make progress
| soon.
|
| So the TL;DR is more that ReasonML is not going anywhere,
| especially since Ahrefs have a huge ReasonML frontend
| codebase [2].
|
| [1]: https://github.com/reasonml/reason/pull/2605 [2]:
| https://tech.ahrefs.com/ahrefs-is-now-built-with-
| melange-b14...
| meitros wrote:
| Out of curiosity, what do you think the issues with js_of_ocaml
| were?
| pbiggar wrote:
| The main problems as I perceive it: - unreadable generated
| code (aka, hard to debug in the browser) - not very
| accessible (complex docs, unclear what it is or how to use
| it)
| tylerag wrote:
| In the unlikely event you are confused on the difference between
| ReScript, Reason, and ReasonML, I recommend this post:
|
| https://ersin-akinci.medium.com/confused-about-rescript-resc...
| davesnx wrote:
| It's a good idea to read "A bit of history" under Melange docs:
| https://melange.re/v1.0.0/rationale/#a-bit-of-history
| thangngoc89 wrote:
| Congratulations on the project @anmonteiro90. Reading the thread
| makes me understand more about the situation of Rescript and
| ReasonML after the split. It's totally makes sense now. I hope to
| pick up some OCaml project soon
| k__ wrote:
| As if the whole Reason/ReScript story wasn't complicated enough
| already :D
|
| First, we had BuckleScript, that compiled OCaml to JavaScript to
| bring the OCaml type system to the Web.
|
| Then we had Reason, that brought JS syntax to OCaml, so it's
| easier to grasp for JS devs.
|
| Seemingly, some people didn't care about OCaml at all, and forked
| (I guess?) Reason to ReScript, that focused on JS compilation.
| They also added a few syntax changes in the process.
|
| Now, the remaining (pre-fork) Reason people created a new(?)
| compiler that's an alternative to BuckleScript, and compiles
| OCaml and Reason to JS.
|
| While I appreciate the effort, and think ReScript and Reason are
| superior to TypeScript, I totally understand why it didn't get as
| popular as this superiority implies.
| sp33der89 wrote:
| What is the status of ReasonML? My first experiences with
| ReasonML were very nice, because I found OCaml syntax confusing.
| I kinda left around the time ReScript got introduced. But OCaml
| syntax after a while isn't that bad, and in F# and Scala land I
| do miss the compile time speed of OCaml.
| davesnx wrote:
| With Melange ReasonML has a small comeback, since Melange and
| dune supports it out-of-the-box.
|
| There has been a bit of activity on fixing bugs on refmt and
| polish the experience, no plans for big features so far but we
| will keep working on it.
|
| We will update documentation from either reason-react and
| reason to highlight the integration with Melange soon.
| anmonteiro90 wrote:
| ReasonML purely as a syntax layer on top of OCaml is still
| being updated and released[1]. Incidentally, I'm one of the
| maintainers of that project too :-)
|
| With this Melange release, we're hoping to somewhat revive
| ReasonML and channel some folks back to the community from the
| perspective of a vertically integrated platform[2] that has
| seen major investment in the past few years.
|
| [1]: https://github.com/reasonml/reason [2]:
| https://ocaml.org/docs/platform
| cassepipe wrote:
| Sorry if I am being pedantic but isn't it (confusingly)
| Reason (the new syntax) and not ReasonML (the organization) ?
| Taikonerd wrote:
| I'm glad to hear that! I had thought ReasonML was dead,
| because the blog hasn't been updated since 2018:
| https://reasonml.github.io/blog/
|
| If you want to revitalize the project, please start updating
| the blog again :-)
| gdsdfe wrote:
| this is all very confusing
| Mimmy wrote:
| Might as well ask this here, but any thoughts on how ReScript /
| ReasonML compare to Elm, PureScript, or ClojureScript? If someone
| were looking for a fp language that compiled to JS, how would
| they think about the pros and cons of the available options?
|
| Last discussion I could find was from 2018 [1].
|
| [1] https://news.ycombinator.com/item?id=17910069
| davesnx wrote:
| Biased answer:
|
| The biggest differences between Elm and ReScript/ReasonML as
| language features are bindings, JSX and purity. Bindings in Elm
| are cumbersome and limited (on purpose) while in
| ReScript/ReasonML are easy, more feature complete and a little
| more fragile. JSX is exactly as React, while Elm doesn't have
| it; some people prefer it, some people don't. I love it. Purity
| in general terms makes Elm more strict while ReasonML/ReScript
| allow impurity when needed, still most APIs enforce functional
| style, immutability and proper data structures.
|
| Regarding community, there's drama everywhere not sure If I can
| do a good job here. Maybe community size Elm is much bigger
| than others, but they need to reinvent most of tooling that is
| done in JS and ReScript/Reason takes advantage.
|
| I encourage to not rely on anyones opinion about what's better,
| because you listed 5 languages with opposite directions.
|
| Try it out yourself and decide based on users/team needs.
| Cheers.
| Weebs wrote:
| I have nothing to say other than thank you! I might not use OCaml
| often myself, but I appreciate the effort to improve the ML
| ecosystem in any way :) I was a bit disappointed with the
| ReScript fork abandoning the compatibility with OCaml so this
| project was welcome news
| square_usual wrote:
| Me too. I think the ReScript people were well within their
| rights to fork off - they realized that what they wanted was a
| better JS and compatibility with OCaml held them back, but it
| also split an already small community and made it hard for me
| to convince even myself to pick OCaml for hobby projects. I'm
| glad melange is picking up and becoming viable, and once the
| situation with multicore and web frameworks built on multicore
| stabilizes I'd love to make a full-stack OCaml web app.
| orra wrote:
| I'm also pleased to see this, as somebody who likes functional
| programming and ML dialects. I don't need braces just because C
| has them.
|
| BuckleScript, when it was called that, was incredibly
| compelling for me. This was in part thanks to being blazing
| fast, unlike TypeScript. So I am pleased to see a spiritual
| successor.
| ekosz wrote:
| Interesting to see oh this will affect (or not) the Rescript
| project.
| chrischen wrote:
| I'm using both, with with Rescript primarily on the front-end
| and Melange on the backed... both targeting JS/NodeJS.
| anmonteiro90 wrote:
| Melange and ReScript target different audiences.
|
| AFAIU, ReScript is a new language that offers an alternative to
| TypeScript.
|
| Melange approaches the problem from the perspective of
| compatibility with OCaml / ReasonML. We've focused very hard on
| vertical integration with the OCaml Platform[1] and we're
| getting all the benefits with this release!
|
| That said, both communities are fairly small, and I don't doubt
| that somewhat competing projects have some impact on community.
| From our perspective (the Melange team), our goals fit a
| specific use case, and e.g. Ahrefs, one of the leading SEO
| engines in the world, is using Melange[2] in production to
| power all their web experiences.
|
| [1]: https://ocaml.org/docs/platform [2]:
| https://tech.ahrefs.com/ahrefs-is-now-built-with-melange-b14...
| freedomben wrote:
| Great work on this write-up! Super informative and well
| written. It's refreshing to read posts like this
| fredrikholm wrote:
| First multicore, now this? This makes me really happy.
|
| OCaml is the most fun I've ever had writing code; seeing this
| after the whole Re* rebranding death spiral makes me hopeful that
| fullstack OCaml is still a possibility.
|
| Thank you!
| paulsb wrote:
| And Dream is being actively developed again:
| https://aantron.github.io/dream/
| cassepipe wrote:
| Maybe will Onivim rise from the dead too ? Who knows
| asycocaml wrote:
| Can someone please expain the state of doing async with Melange?
| ReasonML never had an answer in that important area to my
| knowledge.
| cassepipe wrote:
| Congrats on the releases ! I have been waiting for this make it
| to 1.0 for some time now. That's a pleasant suprise.
___________________________________________________________________
(page generated 2023-06-12 23:00 UTC)