Replies: 2 comments
-
Incredible! |
Beta Was this translation helpful? Give feedback.
-
Hi! I mentioned this discussion here: ocaml/opam-repository#24618, but discussions do not seem to add mentions in the same way as issues or pull requests. The opam z3 4.8.5 package currently depends on Python 2, which is now often unavailable (e.g. on Debian stable). This opam-repository PR fixes this by replacing Python 2 dependencies with Python 3 ones, so that if z3 4.8.5 is still used, it can be built seamlessly. Nothing related to the z3 version should break. This is just a heads-up, please tell me if somethings seems wrong. And by the way, thank you very much for this work, looking forward to see the z3 default version flipped! Edit: due to some version constraints that will likely be fixed, the opam CI does not mention F*, but it already passed the F* build test in a previous PR iteration. |
Beta Was this translation helpful? Give feedback.
-
Hi F* hackers,
We are currently working on upgrading the Z3 version that F* uses from 4.8.5 (released in 2019) to the latest master, which would probably be 4.12.3 once released.
Thanks to a lot of help from Nikolaj Bjørner, the impact is actually rather minor. With his fixes, the files that need tweaks across our everest projects are close to none! For example here's the full diffstat for HACL*.
Some of it are just generic robustness improvements. The last file I reworked quite a bit to reduce the rlimit from 400 to 40. I still have one admit (which I think it's due to a Z3 regression), and a patch to Z3 that I need to run by Nikolaj, but otherwise the new Z3 already works.
So, given that we are very close, we could start syncing as to how to make the upgrade happen. Especially across projects, without having to do so atomically.
Here's some ideas:
#push-options
for individual definitions.z3-VERSION
(e.g.z3-4.8.5
, with an .exe suffix in windows) in the PATH, to enable transparently switching versions within a single machine.z3-VERSION
is not found, F* will try justz3
, and warn if the version is not the expected one (as it does now). This is only for compatibility, ideally, I think versions would always be explicit in the filename.--smt
option overrides all of the above, F* will use exactly that executable, and warn on a mismatch.z3-4.8.5
andz3-4.12.3
in our PATHs, and in the CI images, and then choose versions for each particular project using the version flag.--smt
flag, but--smt
is disabled for pragmas, mostly for security reasons)OTHERFLAGS
.My main questions are:
Once I get a full everest green with the new Z3, I'll run a detailed performance comparison and post it here. Unscientifically, I haven't observed a performance degradation, but I've indeed observed some improvements.
Guido
Beta Was this translation helpful? Give feedback.
All reactions