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

Support for Coq "vos" builds #7406

Merged
merged 1 commit into from
Mar 29, 2023
Merged

Support for Coq "vos" builds #7406

merged 1 commit into from
Mar 29, 2023

Conversation

rlepigre
Copy link
Contributor

This is an alternative to #4050, implementing @ejgallego's idea from #4050 (comment).

The "vos" mode is enabled using (mode vos) in coq.theory stanzas.

CC @Alizter.

@Alizter
Copy link
Collaborator

Alizter commented Mar 24, 2023

What happens when a user builds once in VoOnly stops the build realising they should have VosOnly and then continues? Doesn't this make the build inconsistent? IIRC Coq loads vo files if they are available and then vos files in vos mode.

We wouldn't have that problem if Coq rules could be sandboxed, but they cannot today for other unrelated reasons.

To be clear, I am in favour of adding something like this, but last time I worked on it I got blocked by the fragility of the build questions. So I just need to be sure we think through the design.

@rlepigre
Copy link
Contributor Author

Since you configure vo or vos per theory, you can't have both vo and vos at the same time. Will that not save us?

@Alizter
Copy link
Collaborator

Alizter commented Mar 24, 2023

The issue is that Coq goes and finds the files itself so if you have a dirty build directory you might corrupt the build. I can try and cook up an example later. Worst case we warn people to clean their builds when using vos.

@rlepigre
Copy link
Contributor Author

Just added a test, seems to just work to switch to normal mode without cleaning.

@Alizter
Copy link
Collaborator

Alizter commented Mar 24, 2023

What I am suggesting is the opposite situation. If you had 3 files:

A.v -> B.v -> C.v

Now if I had (mode vo) and built B.vo I would have A.vo and B.vo in my build directory. Now if I switch to (mode vos) I will and build C.vos, Dune will give us: A.vos, B.vos and C.vos. However when compiling C.vos, coqc would have used B.vo rather than B.vos.

This is if I recall what coqc does correctly, since I believe it prefers vo over vos. I could be wrong

@Alizter
Copy link
Collaborator

Alizter commented Mar 24, 2023

Actually nevermind. Reading the Coq refman I see that vos is indeed preferred over vo. https://coq.inria.fr/refman/practical-tools/coq-commands.html#compiled-interfaces-produced-using-vos

Copy link
Collaborator

@ejgallego ejgallego left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It is a pity we can't be more dynamic yet but the patch is a start thanks!

Needs documentation / changes entry, rest looks good to me!

@Alizter
Copy link
Collaborator

Alizter commented Mar 24, 2023

One more design consideration is if we want users to have to edit their stanzas at all. Perhaps it would be OK to have both rules at the same time as they are independent. We could even add vos to the check alias for example. We could even remove the vos targets from the @default alias.

@ejgallego
Copy link
Collaborator

What happens when a user builds once in VoOnly stops the build realising they should have VosOnly and then continues? Doesn't this make the build inconsistent? IIRC Coq loads vo files if they are available and then vos files in vos mode.

You don't have that problem as all the .vo targets in the first run become stale (as rules won't generate them anymore) so Dune will clean them up.

@rgrinberg rgrinberg added the coq label Mar 24, 2023
@ejgallego
Copy link
Collaborator

Perhaps it would be OK to have both rules at the same time as they are independent

That won't work but the reasons you state, coqc will become non-deterministic.

In order to be able to setup both rules you need indeed to make the targets directory different (and also ensure that rules are lazy enough because 2x rules can be felt I bet)

@Alizter
Copy link
Collaborator

Alizter commented Mar 24, 2023

@ejgallego It won't become nondeterministic see my retort above.

@ejgallego
Copy link
Collaborator

@ejgallego It won't become nondeterministic see my retort above.

If I understood your comment above, you actually are giving an example of a non-determinitic build for C.vos, as it now depends on what was built before.

@Alizter
Copy link
Collaborator

Alizter commented Mar 24, 2023

No, according to the Coq refman, vos is always preferred in -vos mode.

@ejgallego
Copy link
Collaborator

ejgallego commented Mar 24, 2023

No, according to the Coq refman, vos is always preferred in -vos mode.

The key word is preferred, but still if coqc can't find the vos it will fallback to the vo.

@ejgallego
Copy link
Collaborator

Tho indeed maybe the race is for the vo objects, let me check coq's source

@rlepigre
Copy link
Contributor Author

One question I have is: can we somehow make it so that we can configure the mode in the profile? Is it already possible with what I did?

@Alizter
Copy link
Collaborator

Alizter commented Mar 24, 2023

@rlepigre We can detect the -vos flag in (coq (flags ...)) if a user has that and prefer the mode that way. I think it is better to do that in a later PR though.

If I am correct about being able to have both the vo and vos rules at the same time, then that would mean we wouldn't need it anyway.

@Blaisorblade
Copy link
Contributor

@Alizter coqc can mix vo and vos files, so you do need separate directories; also the vo build overrides vos/vok files but dune might be able to handle that. And since we need separate profiles, can we use that to enable vos mode?

Let me quote the manual (since there's no anchor to link)

Interaction with standard compilation

When compiling a file foo.v using coqc in the standard way (i.e., without -vos nor -vok), an empty file foo.vos and an empty file foo.vok are created in addition to the regular output file foo.vo. If coqc is subsequently invoked on some other file bar.v using option -vos or -vok, and that bar.v requires foo.v, if Coq finds an empty file foo.vos, then it will load foo.vo instead of foo.vos.

The purpose of this feature is to allow users to benefit from the -vos option even if they depend on libraries that were compiled in the traditional manner (i.e., never compiled using the -vos option).

@ejgallego
Copy link
Collaborator

Indeed I'm not sure we have the right mechanism to perform this kind of selection at runtime, it seems to me that using flags is not better than using mode, as both require updating the stanza which we def don't want.

I can't check the exact dependency rules now, so indeed the next step would be to see if we can enable both modes without getting unsoundness as Ali proposes.

In the immediate term, I propose we merge this PR once the docs are added, and continue the discussion in the issue / subsequent PR

@rlepigre
Copy link
Contributor Author

I guess I need to change the Coq language version @ejgallego?

@Alizter
Copy link
Collaborator

Alizter commented Mar 29, 2023

@rlepigre You don't need to bump the coq lang version since for Dune 3.8 it will be 0.8 and we haven't released Dune yet.

@ejgallego
Copy link
Collaborator

ejgallego commented Mar 29, 2023

@rlepigre You don't need to bump the coq lang version since for Dune 3.8 it will be 0.8 and we haven't released Dune yet.

Indeed, thanks @Alizter ; the changelog of language versions should make this clear by maybe adding the Dune version next to the coq lang version https://github.com/ocaml/dune/blob/main/doc/coq.rst#coq-language-version

Note that indeed we bumped the lang in the implementation https://github.com/ocaml/dune/blob/main/src/dune_rules/coq/coq_stanza.ml#L4
but not in the docs.

@Alizter
Copy link
Collaborator

Alizter commented Mar 29, 2023

It will be bumped in the docs, that is what #7384 is about. I don't mind adding the vos doc later as long as you make a note in that PR.

@rlepigre rlepigre requested a review from christinerose as a code owner March 29, 2023 18:26
@rlepigre
Copy link
Contributor Author

rlepigre commented Mar 29, 2023

Sorry, I'm just only seeing your last messages now: I pushed some documentation, but maybe not exactly what you had in mind. In particular I did not bump the version in the doc, only added a paragraph about the option.

doc/coq.rst Outdated Show resolved Hide resolved
Copy link
Collaborator

@Alizter Alizter left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM I'll let @ejgallego decide when to merge.

@rlepigre
Copy link
Contributor Author

Actually, we have a CI failure on the test I added: apparently, the output is not consistent with what I get locally. Any clue why this happens @Alizter? I'm running Coq 8.16.0, and CI seems to be using 8.16.1: could that be the reason?

diff --git a/_build/.sandbox/d3bcb07409ea29304d4499ea0e5fe788/default/test/blackbox-tests/test-cases/coq/vos-build.t/run.t b/_build/.sandbox/d3bcb07409ea29304d4499ea0e5fe788/default/test/blackbox-tests/test-cases/coq/vos-build.t/run.t.corrected
index 1b5e703..65ef517 100644
--- a/_build/.sandbox/d3bcb07409ea29304d4499ea0e5fe788/default/test/blackbox-tests/test-cases/coq/vos-build.t/run.t
+++ b/_build/.sandbox/d3bcb07409ea29304d4499ea0e5fe788/default/test/blackbox-tests/test-cases/coq/vos-build.t/run.t.corrected
@@ -35,8 +35,8 @@ Checking that we can go back to vo mode (without cleaning).
 
   $ mv dune-vo dune
   $ dune build --display short --debug-dependency-path @all
-          coqc foo.{glob,vo}
-          coqc bar.{glob,vo}
+          coqc Nbasic_foo.{cmi,cmxs},foo.{glob,vo}
+          coqc Nbasic_bar.{cmi,cmxs},bar.{glob,vo}
   $ dune build --debug-dependency-path @default
   lib: [
     "_build/install/default/lib/base/META"
@@ -44,6 +44,10 @@ Checking that we can go back to vo mode (without cleaning).
     "_build/install/default/lib/base/opam"
   ]
   lib_root: [
+    "_build/install/default/lib/coq/user-contrib/basic/.coq-native/Nbasic_bar.cmi" {"coq/user-contrib/basic/.coq-native/Nbasic_bar.cmi"}
+    "_build/install/default/lib/coq/user-contrib/basic/.coq-native/Nbasic_bar.cmxs" {"coq/user-contrib/basic/.coq-native/Nbasic_bar.cmxs"}
+    "_build/install/default/lib/coq/user-contrib/basic/.coq-native/Nbasic_foo.cmi" {"coq/user-contrib/basic/.coq-native/Nbasic_foo.cmi"}
+    "_build/install/default/lib/coq/user-contrib/basic/.coq-native/Nbasic_foo.cmxs" {"coq/user-contrib/basic/.coq-native/Nbasic_foo.cmxs"}
     "_build/install/default/lib/coq/user-contrib/basic/bar.v" {"coq/user-contrib/basic/bar.v"}
     "_build/install/default/lib/coq/user-contrib/basic/bar.vo" {"coq/user-contrib/basic/bar.vo"}
     "_build/install/default/lib/coq/user-contrib/basic/foo.v" {"coq/user-contrib/basic/foo.v"}

@ejgallego
Copy link
Collaborator

@rlepigre the difference you see is because dune's CI test with the coq-native opam package installed

@ejgallego
Copy link
Collaborator

We can still improve the docs of the (mode ...) field but IMHO that can be done in a different PR.

@ejgallego ejgallego enabled auto-merge (rebase) March 29, 2023 22:38
This is configured using a new [vos] mode, that can be configured
in the [coq.theory] stanza.

Signed-off-by: Rodolphe Lepigre <rodolphe@bedrocksystems.com>
@ejgallego ejgallego merged commit ad088a5 into ocaml:main Mar 29, 2023
emillon added a commit to emillon/opam-repository that referenced this pull request Apr 18, 2023
CHANGES:

- When a rule's action is interrupted, delete any leftover directory targets.
  This is consistent with how we treat file targets. (@rgrinberg, 7564)

- Fix plugin loading with findlib. The functionality was broken in 3.7.0.
  (ocaml/dune#7556, @anmonteiro)

- Introduce a `public_headers` field on libraries. This field is like
  `install_c_headers`, but it allows to choose the extension and choose the
  paths for the installed headers. (ocaml/dune#7512, @rgrinberg)

- Load the host context `findlib.conf` when cross-compiling (ocaml/dune#7428, fixes
  ocaml/dune#1701, @rgrinberg, @anmonteiro)

- Resolve `ppx_runtime_libraries` in the target context when cross compiling
  (ocaml/dune#7450, fixes ocaml/dune#2794, @anmonteiro)

- Use `$PKG_CONFIG`, when set, to find the `pkg-config` binary  (ocaml/dune#7469, fixes
  ocaml/dune#2572, @anmonteiro)

- Preliminary support for Coq compiled intefaces (`.vos` files) enabled via
  `(mode vos)` in `coq.theory` stanzas. This can be used in combination with
  `dune coq top` to obtain fast re-building of dependencies (with no checking
  of proofs) prior to stepping into a file. (ocaml/dune#7406, @rlepigre)

- Fix dune crashing on MacOS in watch mode whenever `$PATH` contains `$PWD`
  (ocaml/dune#7441, fixes ocaml/dune#6907, @rgrinberg)

- Fix `dune install` when cross compiling (ocaml/dune#7410, fixes ocaml/dune#6191, @anmonteiro,
  @rizo)

- Find `pps` dependencies in the host context when cross-compiling,  (ocaml/dune#7410,
  fixes ocaml/dune#4156, @anmonteiro)

- Dune in watch mode no longer builds concurrent rules in serial (ocaml/dune#7395
  @rgrinberg, @jchavarri)

- `dune coq top` now correctly respects the project root when called from a
  subdirectory. However, absolute filenames passed to `dune coq top` are no
  longer supported (due to being buggy) (ocaml/dune#7357, fixes ocaml/dune#7344, @rlepigre and
  @Alizter)

- Added a `--no-build` option to `dune coq top` for avoiding rebuilds (ocaml/dune#7380,
  fixes ocaml/dune#7355, @Alizter)

- RPC: Ignore SIGPIPE when clients suddenly disconnect (ocaml/dune#7299, ocaml/dune#7319, fixes
  ocaml/dune#6879, @rgrinberg)

- Always clean up the UI on exit. (ocaml/dune#7271, fixes ocaml/dune#7142 @rgrinberg)

- Bootstrap: remove reliance on shell. Previously, we'd use the shell to get
  the number of processors. (ocaml/dune#7274, @rgrinberg)

- Bootstrap: correctly detect the number of processors by allowing `nproc` to be
  looked up in `$PATH` (ocaml/dune#7272, @Alizter)

- Speed up file copying on macos by using `clonefile` when available
  (@rgrinberg, ocaml/dune#7210)

- Adds support for loading plugins in toplevels (ocaml/dune#6082, fixes ocaml/dune#6081,
  @ivg, @richardlford)

- Support commands that output 8-bit and 24-bit colors in the terminal (ocaml/dune#7188,
  @Alizter)

- Speed up rule generation for libraries and executables with many modules
  (ocaml/dune#7187, @jchavarri)

- Add `--watch-exclusions` to Dune build options (ocaml/dune#7216, @jonahbeckford)

- Do not re-render UI on every frame if the UI doesn't change (ocaml/dune#7186, fix
  ocaml/dune#7184, @rgrinberg)

- Make coq_db creation in scope lazy (@ejgallego, ocaml/dune#7133)

- Non-user proccesses such as version control or config checking are now run
  silently. (ocaml/dune#6994, fixes ocaml/dune#4066, @Alizter)

- Add the `--display-separate-messages` flag to separate the error messages
  produced by commands with a blank line. (ocaml/dune#6823, fixes ocaml/dune#6158, @esope)

- Accept the Ordered Set Language for the `modes` field in `library` stanzas
  (ocaml/dune#6611, @anmonteiro).

- dune install now respects --display quiet mode (ocaml/dune#7116, fixes ocaml/dune#4573, fixes
  ocaml/dune#7106, @Alizter)

- Stub shared libraries (dllXXX_stubs.so) in Dune-installed libraries could not
  be used as dependencies of libraries in the workspace (eg when compiling to
  bytecode and/or Javascript).  This is now fixed. (ocaml/dune#7151, @nojb)

- Allow the main module of a library with `(stdlib ...)` to depend on other
  libraries (ocaml/dune#7154, @anmonteiro).

- Bytecode executables built for JSOO are linked with `-noautolink` and no
  longer depend on the shared stubs of their dependent libraries (ocaml/dune#7156, @nojb)

- Added a new user action `(concurrent )` which is like `(progn )` but runs the
  actions concurrently. (ocaml/dune#6933, @Alizter)

- Allow `(stdlib ...)` to be used with `(wrapped false)` in library stanzas
  (ocaml/dune#7139, @anmonteiro).

- Allow parallel execution of inline tests partitions (ocaml/dune#7012, @hhugo)

- Support `(link_flags ...)` in `(cinaps ...)` stanza. (ocaml/dune#7423, fixes ocaml/dune#7416,
  @nojb)

- Allow `(package ...)` in any position within `(rule ...)` stanza (ocaml/dune#7445,
  @Leonidas-from-XIV)

- Always include `opam` files in the generated `.install` file. Previously, it
  would not be included whenever `(generate_opam_files true)` was set and the
  `.install` file wasn't yet generated. (ocaml/dune#7547, @rgrinberg)
emillon added a commit to emillon/opam-repository that referenced this pull request May 23, 2023
CHANGES:

- Fix string quoting in the json file written by `--trace-file` (ocaml/dune#7773,
  @rleshchinskiy)

- Read `pkg-config` arguments from the `PKG_CONFIG_ARGN` environment variable
  (ocaml/dune#1492, ocaml/dune#7734, @anmonteiro)

- Correctly set `MANPATH` in `dune exec`. Previously, we would use the `bin/`
  directory of the context. (ocaml/dune#7655, @rgrinberg)

- Allow overriding the `ocaml` binary with findlib configuration (ocaml/dune#7648,
  @rgrinberg)

- merlin: ignore instrumentation settings for preprocessing. (ocaml/dune#7606, fixes
  ocaml/dune#7465, @Alizter)

- When a rule's action is interrupted, delete any leftover directory targets.
  This is consistent with how we treat file targets. (ocaml/dune#7564, @rgrinberg)

- Fix plugin loading with findlib. The functionality was broken in 3.7.0.
  (ocaml/dune#7556, @anmonteiro)

- Introduce a `public_headers` field on libraries. This field is like
  `install_c_headers`, but it allows to choose the extension and choose the
  paths for the installed headers. (ocaml/dune#7512, @rgrinberg)

- Load the host context `findlib.conf` when cross-compiling (ocaml/dune#7428, fixes
  ocaml/dune#1701, @rgrinberg, @anmonteiro)

- Add a `coqdoc_flags` field to the `coq.theory` stanza allowing the user to
  pass extra arguments to `coqdoc`. (ocaml/dune#7676, fixes ocaml/dune#7954 @Alizter)

- Resolve `ppx_runtime_libraries` in the target context when cross compiling
  (ocaml/dune#7450, fixes ocaml/dune#2794, @anmonteiro)

- Use `$PKG_CONFIG`, when set, to find the `pkg-config` binary  (ocaml/dune#7469, fixes
  ocaml/dune#2572, @anmonteiro)

- Modules that were declared in `(modules_without_implementation)`,
  `(private_modules)` or `(virtual_modules)` but not declared in `(modules)`
  will cause Dune to emit a warning which will become an error in 3.9. (ocaml/dune#7608,
  fixes ocaml/dune#7026, @Alizter)

- Preliminary support for Coq compiled intefaces (`.vos` files) enabled via
  `(mode vos)` in `coq.theory` stanzas. This can be used in combination with
  `dune coq top` to obtain fast re-building of dependencies (with no checking
  of proofs) prior to stepping into a file. (ocaml/dune#7406, @rlepigre)

- Fix dune crashing on MacOS in watch mode whenever `$PATH` contains `$PWD`
  (ocaml/dune#7441, fixes ocaml/dune#6907, @rgrinberg)

- Fix `dune install` when cross compiling (ocaml/dune#7410, fixes ocaml/dune#6191, @anmonteiro,
  @rizo)

- Find `pps` dependencies in the host context when cross-compiling,  (ocaml/dune#7410,
  fixes ocaml/dune#4156, @anmonteiro)

- Dune in watch mode no longer builds concurrent rules in serial (ocaml/dune#7395
  @rgrinberg, @jchavarri)

- Dune can now detect Coq theories from outside the workspace. This allows for
  composition with installed theories (not necessarily installed with Dune).
  (ocaml/dune#7047, @Alizter, @ejgallego)

- `dune coq top` now correctly respects the project root when called from a
  subdirectory. However, absolute filenames passed to `dune coq top` are no
  longer supported (due to being buggy) (ocaml/dune#7357, fixes ocaml/dune#7344, @rlepigre and
  @Alizter)

- Added a `--no-build` option to `dune coq top` for avoiding rebuilds (ocaml/dune#7380,
  fixes ocaml/dune#7355, @Alizter)

- RPC: Ignore SIGPIPE when clients suddenly disconnect (ocaml/dune#7299, ocaml/dune#7319, fixes
  ocaml/dune#6879, @rgrinberg)

- Always clean up the UI on exit. (ocaml/dune#7271, fixes ocaml/dune#7142 @rgrinberg)

- Bootstrap: remove reliance on shell. Previously, we'd use the shell to get
  the number of processors. (ocaml/dune#7274, @rgrinberg)

- Bootstrap: correctly detect the number of processors by allowing `nproc` to be
  looked up in `$PATH` (ocaml/dune#7272, @Alizter)

- Speed up file copying on macos by using `clonefile` when available
  (@rgrinberg, ocaml/dune#7210)

- Adds support for loading plugins in toplevels (ocaml/dune#6082, fixes ocaml/dune#6081,
  @ivg, @richardlford)

- Support commands that output 8-bit and 24-bit colors in the terminal (ocaml/dune#7188,
  @Alizter)

- Speed up rule generation for libraries and executables with many modules
  (ocaml/dune#7187, @jchavarri)

- Add `--watch-exclusions` to Dune build options (ocaml/dune#7216, @jonahbeckford)

- Do not re-render UI on every frame if the UI doesn't change (ocaml/dune#7186, fix
  ocaml/dune#7184, @rgrinberg)

- Make coq_db creation in scope lazy (@ejgallego, ocaml/dune#7133)

- Non-user proccesses such as version control or config checking are now run
  silently. (ocaml/dune#6994, fixes ocaml/dune#4066, @Alizter)

- Add the `--display-separate-messages` flag to separate the error messages
  produced by commands with a blank line. (ocaml/dune#6823, fixes ocaml/dune#6158, @esope)

- Accept the Ordered Set Language for the `modes` field in `library` stanzas
  (ocaml/dune#6611, @anmonteiro).

- dune install now respects --display quiet mode (ocaml/dune#7116, fixes ocaml/dune#4573, fixes
  ocaml/dune#7106, @Alizter)

- Stub shared libraries (dllXXX_stubs.so) in Dune-installed libraries could not
  be used as dependencies of libraries in the workspace (eg when compiling to
  bytecode and/or Javascript).  This is now fixed. (ocaml/dune#7151, @nojb)

- Allow the main module of a library with `(stdlib ...)` to depend on other
  libraries (ocaml/dune#7154, @anmonteiro).

- Bytecode executables built for JSOO are linked with `-noautolink` and no
  longer depend on the shared stubs of their dependent libraries (ocaml/dune#7156, @nojb)

- Added a new user action `(concurrent )` which is like `(progn )` but runs the
  actions concurrently. (ocaml/dune#6933, @Alizter)

- Allow `(stdlib ...)` to be used with `(wrapped false)` in library stanzas
  (ocaml/dune#7139, @anmonteiro).

- Allow parallel execution of inline tests partitions (ocaml/dune#7012, @hhugo)

- Support `(link_flags ...)` in `(cinaps ...)` stanza. (ocaml/dune#7423, fixes ocaml/dune#7416,
  @nojb)

- Allow `(package ...)` in any position within `(rule ...)` stanza (ocaml/dune#7445,
  @Leonidas-from-XIV)

- Always include `opam` files in the generated `.install` file. Previously, it
  would not be included whenever `(generate_opam_files true)` was set and the
  `.install` file wasn't yet generated. (ocaml/dune#7547, @rgrinberg)

- Fix regression where Merlin was unable to handle filenames with uppercase
  letters under Windows. (ocaml/dune#7577, @nojb)

- On nix+macos, pass `-f` to the codesign hook to avoid errors when the binary
  is already signed (ocaml/dune#7183, fixes ocaml/dune#6265, @greedy)

- Fix bug where RPC clients built with dune-rpc-lwt would crash when closing
  their connection to the server (ocaml/dune#7581, @gridbugs)

- Introduce mdx stanza 0.4 requiring mdx >= 2.3.0 which updates the default
  list of files to include `*.mld` files (ocaml/dune#7582, @Leonidas-from-XIV)

- Fix RPC server on Windows (used for OCaml-LSP). (ocaml/dune#7666, @nojb)

- Coq language versions less 0.8 are deprecated, and will be removed
  in an upcoming Dune version. All users are required to migrate to
  `(coq lang 0.8)` which provides the right semantics for theories
  that have been globally installed, such as those coming from opam
  (@ejgallego, @Alizter)

- Bump minimum version of the dune language for the melange syntax extension
  from 3.7 to 3.8 (ocaml/dune#7665, @jchavarri)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants