# How mature is the Reasonml tooling with preprocessors

**URL:** https://discuss.ocaml.org/t/how-mature-is-the-reasonml-tooling-with-preprocessors/13574
**Category:** Learning
**Tags:** reason
**Created:** [December 5, 2023, 8:00pm UTC](https://discuss.ocaml.org/t/how-mature-is-the-reasonml-tooling-with-preprocessors/13574 "2023-12-05T20:00:19Z")
**Posts on this page:** 7
**Page:** 1

<div class="post-metadata">

### Author: ![MarcCoquand](https://sea2.discourse-cdn.com/flex020/user_avatar/discuss.ocaml.org/marccoquand/32/4901_2.png) [@MarcCoquand](https://discuss.ocaml.org/u/MarcCoquand)
#### Post date: [December 5, 2023, 8:00pm UTC](https://discuss.ocaml.org/t/how-mature-is-the-reasonml-tooling-with-preprocessors/13574/1 "2023-12-05T20:00:19Z")

</div>

Hey!

I’m trying to come up with a “easy” way to introduce some colleagues to OCaml, and since they have prior knowledge of Javascript/Typescript, I thought a soft way to do so is to use Reasonml. I just have some questions on that front:

1. Is Reasonml working with up-to-date Ocaml? AFAIK it’s just a new syntax.
2. How does reasonml work with preprocessing tools? I currently have pps lwt\_ppx ppx\_yojson\_conv that I use as preprocessing tools, and I’m curious if those continue to work if I have reasonML. I’d also like to have inline-tests in the future, hoping that will work as well.
3. Are there any compilation penalties that come as a result of using Reason in terms of speed?

---

<div class="post-metadata">

### Author: ![yawaramin](https://sea2.discourse-cdn.com/flex020/user_avatar/discuss.ocaml.org/yawaramin/32/3384_2.png) [@yawaramin](https://discuss.ocaml.org/u/yawaramin)
#### Post date: [December 6, 2023, 2:29pm UTC](https://discuss.ocaml.org/t/how-mature-is-the-reasonml-tooling-with-preprocessors/13574/2 "2023-12-06T14:29:34Z")

</div>

1. Reason is kept up-to-date with recent OCaml versions
2. PPXs work
3. No compilation penalty

---

<div class="post-metadata">

### Author: ![MarcCoquand](https://sea2.discourse-cdn.com/flex020/user_avatar/discuss.ocaml.org/marccoquand/32/4901_2.png) [@MarcCoquand](https://discuss.ocaml.org/u/MarcCoquand)
#### Post date: [December 7, 2023, 3:24pm UTC](https://discuss.ocaml.org/t/how-mature-is-the-reasonml-tooling-with-preprocessors/13574/3 "2023-12-07T15:24:13Z")

</div>

Awesome, thanks for the rapid response.

One last question I forgot to ask, are the error messages from the LSP also equally understandable?

---

<div class="post-metadata">

### Author: ![anmonteiro](https://sea2.discourse-cdn.com/flex020/user_avatar/discuss.ocaml.org/anmonteiro/32/300_2.png) [@anmonteiro](https://discuss.ocaml.org/u/anmonteiro)
#### Post date: [December 7, 2023, 5:13pm UTC](https://discuss.ocaml.org/t/how-mature-is-the-reasonml-tooling-with-preprocessors/13574/4 "2023-12-07T17:13:35Z")

</div>

The LSP messages use `ocamlmerlin-reason` which prints the outcome tree in Reason syntax. The dune error messages will, however, be in OCaml syntax.

Another point: obviously there’s a compilation speed penalty since dune spawns an extra process for every ReasonML file (and none for OCaml files). This is noticeable in large codebases, though for some teams a more familiar syntax justifies the slowdown.

---

<div class="post-metadata">

### Author: ![MarcCoquand](https://sea2.discourse-cdn.com/flex020/user_avatar/discuss.ocaml.org/marccoquand/32/4901_2.png) [@MarcCoquand](https://discuss.ocaml.org/u/MarcCoquand)
#### Post date: [December 7, 2023, 6:40pm UTC](https://discuss.ocaml.org/t/how-mature-is-the-reasonml-tooling-with-preprocessors/13574/5 "2023-12-07T18:40:04Z")

</div>

Great, that’s good to know!

---

<div class="post-metadata">

### Author: ![lukstafi](https://sea2.discourse-cdn.com/flex020/user_avatar/discuss.ocaml.org/lukstafi/32/3442_2.png) [@lukstafi](https://discuss.ocaml.org/u/lukstafi)
#### Post date: [December 8, 2023, 9:31am UTC](https://discuss.ocaml.org/t/how-mature-is-the-reasonml-tooling-with-preprocessors/13574/6 "2023-12-08T09:31:19Z")

</div>

OCaml is no stranger to revised syntaxes (cough camlp4 cough). How is ReasonML more than a revised syntax?  
Edit: so, it is a revised syntax plus a syntax extension to define [JavaScript objects e.g. `let jsObj = {"x": 1, "y": "hello"};`](https://medium.com/lambdaside/reasonml-vs-bucklescript-7bca6eae7730).

---

<div class="post-metadata">

### Author: ![yawaramin](https://sea2.discourse-cdn.com/flex020/user_avatar/discuss.ocaml.org/yawaramin/32/3384_2.png) [@yawaramin](https://discuss.ocaml.org/u/yawaramin)
#### Post date: [December 8, 2023, 11:31pm UTC](https://discuss.ocaml.org/t/how-mature-is-the-reasonml-tooling-with-preprocessors/13574/7 "2023-12-08T23:31:09Z")

</div>

Today, it’s basically a revised syntax that has become more successful and widely adopted than any other revised syntax, and even gained some support on the OCaml Platform itself.
