The compiler for ReScript.
Documentation
Please see the documentation site.
Contributing
See CONTRIBUTING.md.
Acknowledgments
- Thanks to the OCaml team, obviously, without such a beautiful yet practical language, this backend would not exist
- Thanks to ninja-build, ReScript also comes with a blazing fast build tool on top of it,
ninja
is a truly well engineered scalable build tool - Thanks to Bloomberg and Facebook. This project began at Bloomberg and was published in 2016; without the support of Bloomberg, it would not have happened. This project's funded by Facebook since July/2017
Licensing
See COPYING and COPYING.LESSER
The ocaml
directory contains the official OCaml compiler (version 4.06.1).
Refer to its copyright and license notices for information about its licensing.
The vendor/ninja.tar.gz
contains the vendored ninja.
Refer to its copyright and license notices for information about its licensing.
ReScript builds on parts of js_of_ocaml:
ReScript builds on parts of OCaml:
These modules were adapted from ocaml/bytecomp/simplif.ml
for
JavaScript specific optimization purposes.
jscomp/main/js_main.ml
is adapted from ocaml/driver/main.ml
. It is the main entry
point of the underlying compiler.
jscomp/stdlib-*
is copied from ocaml/stdlib
. It is compiled to JavaScript and included with ReScript.
jscomp/test
is based on ocaml/testsuite
.
ReScript unit test builds on parts of OUnit
jscomp/ounit
is adapted from ounit, the unit test
utilities are only used for dev purpose, they are not required for distribution
9.0.2
Provide user with a sugar to pattern match over modules:
let {length, cons} = module(List)
More discussions can be found here
9.0
-
#4933 update syntax bf6561bb5d84
syntax changes listed here
-
#4934 generate @pure
annotations to help esbuild remove more dead code
-
#4932 #4931 turn flow syntax checking from a error into warning 103, so it can be turned off as below
@@config({
flags: ["-w", "-103"],
})
%%raw(`
if (import.meta.hot){
console.log('es6')
}
`)
The rationale is that flow could be not standard compilant so we need provide a work around, here
import.meta
is something new in Ecmascript
-
#4926 #4928
internal changes, move jscomp/syntax to jscomp/frontend to avoid conflicts
-
#4924 #4927 better code generated for pattern match.
Take advantage of the JS runtime, some predicates can be simplified
-
#4920 #4925 support external-stdlib config
"external-stdlib" : "@rescript/std"
-
#4922 #4923 *breaking changes" Allow embed records in structural js objects
-
#4908 #4919 #4917 #4916 #4914 #4913 #4910
Get rid of camlp4 as a dev dependency, introduce an optimized visitor pattern
generator, better performance, no object usage and less dependency thanks to wasm
-
#4911 Relax uninterpretable attributes from error to warn to make ppx_deriving happy
-
#4905 internal add Js_exn.anyToExnInternal
-
#4903 porting to open BSD/adJ
-
#4902 for stdlib es6 artifacts ship .mjs instead of .js, so that
on the user side, if they config es6 with .mjs, it will work out of box
-
#4900 #4986 '
in string literals does not need to be escaped
-
#4893 internal simplify numbers in JS IR
-
#4892 #4891 internal simplify boxed int operations
-
#4890 clean up constant in lambda IR, fix a subtle bug when do constant folding
-
#4888 #4881 support external in private block
-
#4882 #4884 #4887 remove nativeint, not allow literlas like 3n
-
#4873 #4875 #4876 better code generation for pattern match
-
#4870 fix typo in uncurried error message
-
#4867 internal clean up bsb_helper