Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[new release] melange (2 packages) (2.0.0) #24430

Merged
merged 8 commits into from
Sep 16, 2023

Conversation

anmonteiro
Copy link
Contributor

Toolchain to produce JS from Reason/OCaml

CHANGES:

CHANGES:

- Build executables for bytecode-only platforms too
  ([melange-re/melange#596](melange-re/melange#596))
- Move the entire builtin PPX to `melange.ppx`. Preprocessing with
  `melange.ppx` will needed in most cases going forward, as it's responsible
  for processing `external` declarations, `@deriving` attributes and more,
  compared to the previous release where `melange.ppx` just processed AST
  extension nodes ([melange-re/melange#583](melange-re/melange#583))
- Remove old BuckleScript-style conditional compilation
  ([melange-re/melange#605](melange-re/melange#605))
- Don't emit JS import / require paths with `foo/./bar.js`
  ([melange-re/melange#598](melange-re/melange#598),
  [melange-re/melange#612](melange-re/melange#612))
- Wrap the melange runtime
  ([melange-re/melange#624](melange-re/melange#624),
  [melange-re/melange#637](melange-re/melange#637)). After this change,
  Melange exposes fewer toplevel modules. Melange runtime / stdlib modules are
  now wrapped under:
    - `Caml*` / `Curry` modules are part of the runtime and keep being exposed
      as before
    - `Js.*` contains all the modules previously accessible via `Js_*`, e.g.
      `Js_int` -> `Js.Int`
    - `Belt.*` wraps all the `Belt` modules; `Belt_List` etc. are not exposed
      anymore, but rather nested under `Belt`, e.g. `Belt.List`
    - `Node.*`: we now ship a `melange.node` library that includes the modules
      containing Node.js bindings. After this change, users will have to depend
      on `melange.node` explicitly in order to use the `Node.*` modules
    - `Dom.*`: we now ship a `melange.dom` library that includes the modules
      containing Node.js bindings. This library is included by default so the
      `Dom` module will always be available in Melange projects.
- Disable warning 61 (`unboxable-type-in-prim-decl`) for externals generated by
  Melange ([melange-re/melange#641](melange-re/melange#641),
  [melange-re/melange#643](melange-re/melange#643))
- Add `--rectypes` ([melange-re/melange#644](melange-re/melange#644)) to
  enable [recursive
  types](https://v2.ocaml.org/releases/5.0/htmlman/types.html#sss:typexpr-aliased-recursive)
- [melange.ppx]: Deprecate `bs.*` attributes in favor of `mel.*`
  ([melange-re/melange#566](melange-re/melange#566),
  [melange-re/melange#662](melange-re/melange#662),
  [melange-re/melange#663](melange-re/melange#663))
- [melange]: Fix field access code generation when `open`in inline functor
  applications ([melange-re/melange#661](melange-re/melange#661),
  [melange-re/melange#664](melange-re/melange#664))
- [melange]: Upgrade the OCaml typechecker version to 5.1
  ([melange-re/melange#668](melange-re/melange#668))
- [melange.ppx]: Deprecate `[@@mel.val]` and suggest its removal. This
  attribute is redundant and unnecessary
  ([melange-re/melange#675](melange-re/melange#675),
  [melange-re/melange#678](melange-re/melange#678))
- [melange]: remove old, unused CLI flags: `-bs-ns`, `-bs-cmi`, `-bs-cmj`,
  `-bs-no-builtin-ppx`, `-bs-super-errors`
  ([melange-re/melange#686](melange-re/melange#686)).
- [melange]: generate correct code for types with the `option` shape
  ([melange-re/melange#700](melange-re/melange#700)).
- [melange]: stop exporting `$$default` in the generated JavaScript when using
  ES6 default exports `let default = ..`
  ([melange-re/melange#708](melange-re/melange#708)).
- [melange]: allow exporting invalid OCaml identifiers in the resulting
  JavaScript with `@mel.as`
  ([melange-re/melange#714](melange-re/melange#714), fixes
  [melange-re/melange#713](melange-re/melange#713)).
- [melange]: Allow using `@mel.as` in external declarations without explicitly
  annotating `@mel.{string,int}`
  ([melange-re/melange#722](melange-re/melange#722), fixes
  [melange-re/melange#578](melange-re/melange#578)).
- [melange]: Allow using `@mel.unwrap` in external declarations with `@mel.obj`
  ([melange-re/melange#724](melange-re/melange#724), fixes
  [melange-re/melange#679](melange-re/melange#679)).
- [melange]: Support renaming fields in inline records / record extensions with
  `@mel.as` ([melange-re/melange#732](melange-re/melange#732), fixes
  [melange-re/melange#730](melange-re/melange#730)).
@mseri
Copy link
Member

mseri commented Sep 14, 2023

The two failures are CI issues, this looks good (besides the comment on ocaml >= 5.1).
Let me know

Co-authored-by: Marcello Seri <mseri@users.noreply.github.com>
@haochenx
Copy link
Collaborator

haochenx commented Sep 15, 2023

It looks like melange.2.0.0 fails to compile on 32-bit machines:
image

excerpt from https://opam.ci.ocaml.org/github/ocaml/opam-repository/commit/35cff5c4f8641bb539ec8f5f6b803900d6170ff8/variant/extras,arm32-ocaml-5.1,melange.2.0.0:

[ERROR] The compilation of melange.2.0.0 failed at "dune build -p melange -j 79 @install".

#=== ERROR while compiling melange.2.0.0 ======================================#
# context              2.2.0~alpha3~dev | linux/arm32 | ocaml-base-compiler.5.1.0 | pinned(https://github.com/melange-re/melange/releases/download/2.0.0/melange-2.0.0.tbz)
# path                 ~/.opam/5.1/.opam-switch/build/melange.2.0.0
# command              ~/.opam/opam-init/hooks/sandbox.sh build dune build -p melange -j 79 @install
# exit-code            1
# env-file             ~/.opam/log/melange-7-cb15c9.env
# output-file          ~/.opam/log/melange-7-cb15c9.out
### output ###
# (cd _build/default/jscomp/common && /usr/bin/bash -e -u -o pipefail -c 'echo let version = \"$(git rev-parse --verify HEAD)\"') > _build/default/jscomp/common/git_commit.ml
# fatal: not a git repository (or any parent up to mount point /)
# Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).
# (cd _build/default/jscomp/common && /usr/bin/bash -e -u -o pipefail -c 'echo let short_version = \"$(git rev-parse --short HEAD)\"') > _build/default/jscomp/common/git_commit.ml
# fatal: not a git repository (or any parent up to mount point /)
# Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).
# (cd _build/.sandbox/5fc0b2008c11410b4f98e13d272db50c/default && /home/opam/.opam/5.1/bin/menhir --lalr --explain --dump --require-aliases --strict --table -lg 1 -la 1 --unused-token COMMENT --unused-token DOCSTRING --unused-token EOL --unused-token GREATERRBRACKET --fixed-exception vendor/melange-compiler-libs/lib/parser.mly --base vendor/melange-compiler-libs/lib/parser --infer-read-reply vendor/melange-compiler-libs/lib/parser__mock.mli.inferred)
# Grammar has 208 nonterminal symbols, among which 15 start symbols.
# Grammar has 123 terminal symbols.
# Grammar has 859 productions.
# Built an LR(0) automaton with 1875 states.
# The grammar is not SLR(1) -- 140 states have a conflict.
# The construction mode is lalr.
# Built an LR(1) automaton with 1875 states.
# 1069 shift/reduce conflicts were silently solved.
# (cd _build/default && /home/opam/.opam/5.1/bin/ocamlc -w -40 -open Melange_compiler_libs -g -bin-annot -I jscomp/core/.core.objs/byte -I /home/opam/.opam/5.1/lib/dune-build-info -I /home/opam/.opam/5.1/lib/menhirLib -I /home/opam/.opam/5.1/lib/ocaml-compiler-libs/common -I /home/opam/.opam/5.1/lib/ocaml/compiler-libs -I /home/opam/.opam/5.1/lib/ocaml/unix -I /home/opam/.opam/5.1/lib/ppxlib/ast -I /home/opam/.opam/5.1/lib/ppxlib/astlib -I /home/opam/.opam/5.1/lib/stdlib-shims -I jscomp/common/.common.objs/byte -I jscomp/ext/.ext.objs/byte -I jscomp/js_parser/.js_parser.objs/byte -I vendor/melange-compiler-libs/lib/.melange_compiler_libs.objs/byte -I vendor/melange-compiler-libs/wrapper/.melange_wrapper.objs/byte -intf-suffix .ml -no-alias-deps -o jscomp/core/.core.objs/byte/js_exp_make.cmo -c -impl jscomp/core/js_exp_make.pp.ml)
# File "jscomp/core/js_exp_make.ml", line 824, characters 20-33:
# Error: Integer literal exceeds the range of representable integers of type int

We probably want to mark it as unavailable on 32-bit architectures before merging

@anmonteiro
Copy link
Contributor Author

Good point, added in 5c0cbde

@haochenx
Copy link
Collaborator

Thanks! There are some CI failures but I believe they are due to problems with the CI machines instead of this PR's contents.

Looks to me that it's all good to go!

@mseri
Copy link
Member

mseri commented Sep 16, 2023

Thanks

@mseri mseri merged commit 6780b05 into ocaml:master Sep 16, 2023
1 of 2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants