Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

"BuckleScript is one of the very few compilers which compiles an existing typed language to readable JavaScript."

Elm (type inference) is sort of. While there is a lot of OS type projects used, having bloomberg use it is a plus. Interesting that FB have build system ^Reason^ (build system) doing something similar (OCaml backend->JS) ~ http://facebook.github.io/reason/



Reason is an alternative, JavaScript-like, syntax for the OCaml language. Same language, different syntax! It's crazy cool. BuckleScript is an OCaml -> ES5 compiler, so it actually compiles Reason to ES5 just fine.

Bloomberg and Facebook are two big users of BuckleScript. FB have a couple of folks writing significant stuff in Reason, compiling with BuckleScript, and deploying to user-facing web properties.


What is the difference between reason and bucklescript?


Reason is a language, bucklescript is an alternative backend for ocaml which generates JavaScript. You write reason, you don't write bucklescript


okay, then what's the difference between ocaml and reason? :)


I spoke quite a bit about ReasonML during 2016, hopefully this should cover a lot of what Reason is, how it relates to OCaml, and how it's different: https://www.youtube.com/watch?v=8LCmLQ1-YqQ

Happy to answer any questions I didn't get to in the talk as well!


Reason is a js like syntax for ocaml, semantically they're identical. Similar to coffeescript and JavaScript, except ocaml has really good support for this kind of stuff


So what you're saying is I could write a JavaScript-esque program and compile it to OCaml using Reason, and then compile it to true JavaScript using Bucklescript?


Yes exactly, although you can avoid the middle step and go straight from reason to js because of the way bucklescript plugs into the ocaml compiler


Why would one prefer reason to ocaml? (Honest question)


You might find this page from the Reason website useful: https://facebook.github.io/reason/mlCompared.html

It replaces a lot of the idiosyncratic bits of OCaml's syntax with things that feel more appropriate if you're comfortable with other modern languages.

A quick example is tuple types. OCaml declares tuple types as int * int, which makes total sense if you know that tuples are a product type. However, you actually create tuples using commas. Reason throws away the connection to theory and uses the same syntax for types (int, int) and creating values of that type (3, 7).


Reason's syntax is a little cleaner and it's easier to get up and running with.


It is much more like JavaScript than ocaml and so you get a familiar language but one which benefits from all the cool things that ocaml can do.


Another n00b question: What are "all the cool things that ocaml can do"?

I only saw rather simple typing examples, which didn't seem much different from what TypeScript can do.

On the other hand I read often that ocaml doesn't have runtime errors, which I certainly get with TypeScript.


This is a good overview I think, although it doesn't get into specifics: https://realworldocaml.org/v1/en/html/prologue.html#why-ocam...

Of course the rest of the book is a great read too if you're so inclined.


OCaml does have exceptions at runtime (eg if you try to take the maximum of an empty list), but generally your programmes won't have type errors at runtime.



DDC is an alternative to the dart2js compiler. It supports "strong mode" which provides better compile time checking, and produces more idiomatic Javascript.

Dart has a large team behind it, an awesome package management infrastructure, a "Dart native" angular 2 library.


Dart is just another junk food programming language in the same vein as Java (with some of the same people involved). If you really want to learn what a "strong mode" is, learn OCaml. Good job Bloomberg for Bucklescript.


Kotlin can do that too: https://kotlinlang.org/


Kotlin is slow though. To compile that is.


I'm still waiting on full JSX and React for BuckleScript.


JSX is available in Reason out of the box: https://facebook.github.io/reason/#diving-deeper-jsx


Oh snap, didn't know this was supported yet.

I think the tooling isn't available for transforming Reason => JSX in a consistent development environment from what I gather, but I haven't paid attention for a few months.


"Interesting that FB have build system ^Reason^ (build system)"

One reason to define a tool and use language clearly, I interpreted, 'Build Systems Rapidly' as a ^build system^ where in reality Reason is a ^systems language^ to build things quickly.

Some of the tools are fantastic. I would love to have REFMT "dynamically as the window resizes in order to make optimal use of screen real estate while still abiding perfectly by the formatting rules" built into language editors to aid development.


didn't gwt do this 5 years ago


If we're just talking about compiling a typed language to javascript, gwt did it 12 years ago.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: