Releases: CatalaLang/catala
v0.10.0
A new release with many improvements. Some highlights:
- Support for list recombinations by @AltGr in #568
- Add a few optimisations for combined list operations by @AltGr in #570
- Allow access to intermediate variable states by @AltGr in #578
- Syntax: add keywords in front of list filtering / arg-extremum by @AltGr in #580
- Fix LaTeX literate output with tests by @AltGr in #581
- Allow generation of one latex file from multiple sources, and fixes by @AltGr in #583
- Small ocaml/js output rehaul by @AltGr in #582
- Support externals in scalc, correctly output them in Python by @AltGr in #584
- Allow "output subscopes" ; unify the internal representation of subscopes by @AltGr in #597
- Rework the Message module interface by @AltGr in #601
- Improve message formatting throughout by @AltGr in #602
- Support for structure updates by @AltGr in #603
- Support for direct tuple member access by @AltGr in #604
- Improvements around external modules and error handling by @AltGr in #605
- Update syntax highlighting rules and cheat-sheets by @AltGr in #606
- Add env variables to set flags
-O
,--avoid-exceptions
,--trace
by @AltGr in #607 - Unify runtime error handling by @AltGr in #611
Full Changelog: 0.9.0...0.10.0
v0.9.0
More than 900 patches since last release 😅
Here is an overview of some visible changes
What's Changed
- Embed the Pygments lexers in Catala by @AltGr in #428
- Add date rounding option in scope by @rmonat in #397
- Add support for let .. in constructions in Z3 backend by @R1kM in #434
- Add common linting passes to Catala by @denismerigoux in #438
- Adding an interpreter to lcalc by @adelaett in #432
- Vastly improve the printer by @AltGr in #450
- Print exception tree for fun and profit by @denismerigoux in #447
- Add experimental lazy interpreter as a plugin by @AltGr in #453
- Feat: add a ReScript runtime and a wrapper for
french_law.js
by @EmileRolley in #464 - Information about variable I/O in log events by @denismerigoux in #469
- Improve compiler messages dev interface by @denismerigoux in #470
- Improve unused scope variable detection by @denismerigoux in #472
- Switch from ANSITerminal to ocolor by @AltGr in #474
- Preliminary support for modules/externals + CLI subcommands by @AltGr in #478
- Implementing closure conversion by @denismerigoux in #475
- Add an
explain
plugin ; improve printers by @AltGr in #489 - Clearer errors by @Aminata-Dev in #481
- R backend for Catala by @denismerigoux in #496
- Module support: handle structs, enums and scope calls across modules by @AltGr in #497
- Define ANSI style at Uid level, update ocamlformat by @AltGr in #501
- Improvements to searching for libs at runtime (plugins, runtime, etc.) by @AltGr in #502
- Optim: avoid extra translations in the interpreter by @AltGr in #519
- Rehaul the Clerk build system by @AltGr in #512
- Improve trace printing by @denismerigoux in #523
- Clerk and testing improvements, rework resolution of module elements by @AltGr in #535
- Fix LaTeX weaving failing with code blocks by @denismerigoux in #544
- Document and first test for externals by @AltGr in #538
- Fixes decimal user-facing printer bug by @denismerigoux in #552
- [breaking changes] update syntax and CLI by @AltGr in #546
- Add tuples to the surface language, allow tuples for argument passing by @AltGr in #554
- Unify rounding operations in OCaml runtime by @pierregoutagny in #557
- Fixes wrong typing for date subtraction operator by @denismerigoux in #559
- Fixes missing minus sign printing for small negative amounts of money by @denismerigoux in #560
- Move examples and french_law to their own repositories by @AltGr in #527
- Allow literal scope output structures by @AltGr in #564
- Improve missing field error message by @denismerigoux in #566
Full Changelog: 0.8.0...0.9.0
v0.8.0
Summary
A lot has been going on, with more than 530 patches and 70 PRs merged since 0.7.0 last summer. Too many changes to list here in detail, so below are a few highlights, and check 0.7.0...0.8.0 for exhaustivity.
Notable caveat: installation of the Python dependencies has been reworked: make dependencies-python
should set up reliably for both syntax highlighting in literal output, and running generated Python code (see french_law/python
), but you will now have to either rely on the make
rules, or run . _python_venv/bin/activate
each time before your commands.
What's changed
-
Quite a lot of syntax improvements and changes. Checkout the latest cheat-sheet for an overview
-
Allow local
let ... equals ... in ...
definitions -
Better error messages and positions throughout
-
Added the ability to directly call a scope and retrieve its outputs, like a function
-
Added disambiguation, allowing to access structure fields without specifying the structure type each time
-
Added automated resolution of operators, allowing e.g. to write just
+
in place of all the type-specific operators+.
,+$
,+@
,+^
, etc. -
More consistent priority for operators. It is no longer allowed to write
a and b or c
without parenthesis. -
Added and changed some operators (
date + duration
now allowed either way,int / int
now returns a decimal, addedduration / duration
) -
Added the ability to have variables and functions defined at top-level (outside of any scope). See annex A of the tutorial for details.
-
Added support for functions with multiple arguments
-
Some big refactors in the compiler, allowing much better code sharing between the different passes, and making it much easier to extend. Also added the possibility to run the type-checker earlier, etc.
-
Countless bug-fixes
-
Improvements to our proof backend with Z3
-
A tool to automatically synchronise with the upstream French law from Legifrance
v0.7.0
Summary
This release focuses mostly on bug fixes and under-the-hood improvements of the compiler. It also contains everything necessary to run the French housing benefits examples, which with 10,000 lines of code is the biggest Catala program so far. Thanks to all the contributors !
What's Changed
- Use format strings directly in debug/error/log functions by @AltGr in #218
- Reformatting of the OCaml code by @denismerigoux in #220
- Command-line: use a record for the options by @AltGr in #221
- DCalc optimization pass: Remove if_then_else when both branches are identical by @R1kM in #224
- Refactor: group common functions related to backend_option in the Cli module by @EmileRolley in #222
- Make Z3 an optional dependency by @AltGr in #223
- Fix nix/alcotest+patch by @lIlIlIlIIIIlIIIllIIlIllIIllIII in #225
- Proof platform: Better error message when Z3 encoding not supported, and extend GetYear support by @R1kM in #227
- Fix logging operator location for default justifications by @denismerigoux in #229
- [Z3encoding] Basic support for arrays by @R1kM in #228
- [Z3encoding] Extend support for enumerations by @R1kM in #230
- Fix typos in English tutorial by @isovector in #232
- Adding a money rounding builtin to Catala by @denismerigoux in #233
- Select a single scope for the proof mode by @denismerigoux in #234
- Nice error messages for empty structs and enums by @denismerigoux in #239
- [Z3 encoding] Add support for durations by @R1kM in #236
- C backend : preparatory work by @denismerigoux in #235
- fix typo by @rprimet in #242
- Fix decimal parsing by @denismerigoux in #249
- Adds a decimal rounding operator by @denismerigoux in #251
- refactor(latex): print warning messages for too long block lines by @EmileRolley in #252
- Extract py runtime by @rprimet in #246
- Bringing structure to the Lcalc AST by @denismerigoux in #244
- Fix money parsing by @denismerigoux in #256
- Upgrade cmdliner to 1.1 (some API changes) by @AltGr in #258
- Fix ocamlformat crashes, and tweak some settings by @AltGr in #259
- Fix .git-blame-ignore-revs by @AltGr in #261
- Add a (very simple) syntax highlighting mode for Emacs by @AltGr in #262
- Emacs mode: small fixes + a couple typos in the english tutorial by @AltGr in #263
- Implementing French housing benefits by @denismerigoux in #165
- An attempt to fix some parser priorities by @AltGr in #260
- Allocation_logement: fix parentheses in formula by @AltGr in #265
- Refactor: add wrappers for file formatter by @EmileRolley in #264
- Refactor the web API by serializing runtime values by @EmileRolley in #267
- Add backend plugin support by @AltGr in #213
- Fix Nix expressions and convert them to flakes by @W95Psp in #270
- Compiler: support cumulative exceptions by @AltGr in #268
- Fix Nix expressions and convert them to flakes (Continuation) by @lIlIlIlIIIIlIIIllIIlIllIIllIII in #271
- add support for duration multiplication by @msprotz in #276
- Convert nix to flake (part 3) by @lIlIlIlIIIIlIIIllIIlIllIIllIII in #275
- Fix nix part 4 by @lIlIlIlIIIIlIIIllIIlIllIIllIII in #278
- fix(compiler): fix line num for HTML generation by @EmileRolley in #279
- Refactor(runtime/api_web): parse raw log events into structured ones by @EmileRolley in #280
- refactor(runtime): ignore function definition while parsing raw events by @EmileRolley in #283
- Implementation of French housing benefits : 2/N by @denismerigoux in #266
- docs: udpate the CITATION file by @EmileRolley in #284
- Partially fix #192 by @denismerigoux in #285
- Restore automatic rebuild of all tests by ninja by @denismerigoux in #286
- feat(backend): disambiguate OCaml record names derived from Catala structs by @EmileRolley in #288
- Annotate the ASTs with type information everywhere by @AltGr in #272
- Use custom Docker image for CI by @AltGr in #292
- fix(examples): assets are now generated from the repo root by @EmileRolley in #294
- Fix encoding of chains of groups of exceptions by @denismerigoux in #289
- Fixing French housing benefits by @denismerigoux in #287
- feat(plugins): add a new backend for generating JSOO wrapper by @EmileRolley in #291
- CI: Disable (broken) ubuntu builds by @AltGr in #298
- Change syntax for set membership predicate ('in' -> 'contains') by @AltGr in #297
- Expanding french_law with the French housing benefits by @denismerigoux in #295
- Add source positions in all backends exceptions by @denismerigoux in #300
- Feat: new json_schema plugin by @EmileRolley in #296
- Tweak priority of 'set contains elt' / tag Docker images by @AltGr in #302
- Build system rehaul, use of Docker for CI & artifact generation on Github by @AltGr in #299
- Mise à jour du calcul des aides au logement suite à revalorisation by @denismerigoux in #305
- Feat: improve the HTML generation with ToC and details tags by @EmileRolley in #303
New Contributors
- @isovector made their first contribution in #232
- @rprimet made their first contribution in #242
- @W95Psp made their first contribution in #270
- @msprotz made their first contribution in #276
Full Changelog: 0.6.0...0.7.0
v0.6.0
Major changes
- Catala as a proof platform (Z3 backend, safety checks)
- More expressivity for exceptions
- Multiple states for one variable
- Build system relying on ninja-build
- Better debug printers
- Alternative compilation mode without try ... with exceptions
Detailed changelog
- tentative nix support by @lIlIlIlIIIIlIIIllIIlIllIIllIII in #155
- Allow exceptions to a set of rules rather than one rule by @denismerigoux in #159
- Docs: comestic changes for the README by @EmileRolley in #163
- add menhirLib to Nix dependencies by @jakeisnt in #160
- Bring more structure to Dcalc by @denismerigoux in #164
- Fix: escape special LaTex characters by @EmileRolley in #168
- Fix(build/doc): remove warnings due to .ml* files by @EmileRolley in #169
- Allow exceptions to a group of rules by @denismerigoux in #171
- Fix console formatting with colors by @AltGr in #176
- Clerk, a build system for Catala by @denismerigoux in #177
- Revamping the tutorial by @denismerigoux in #173
- An attempt to simplify deps install and CI by @AltGr in #178
- Catala as a proof platform by @denismerigoux in #175
- Restore CI by disabling counterexamples printing by @denismerigoux in #184
- Cleaning up scopelang encoding and adding some default optimizations (beginning of #112) by @denismerigoux in #185
- Self-host CI at Inria by @denismerigoux in #187
- Better dispatching of full build CI by @denismerigoux in #188
- Implementation of scope variable visibility qualifiers by @denismerigoux in #189
- fix nix build by manually upgrading cmdliner by @lIlIlIlIIIIlIIIllIIlIllIIllIII in #196
- Pretty-printing: improve Lcalc, create Scalc by @denismerigoux in #197
- [Z3Backend] Add support for enumerations containing argument-less constructors by @R1kM in #202
- Revert "Merge pull request #196 from CatalaLang/fixup-cmdliner" by @lIlIlIlIIIIlIIIllIIlIllIIllIII in #206
- Add support for rationals in Z3 encoding by @R1kM in #205
- feat(compiler): Compiling Dcalc into Lcalc without using ∅ errors by @lIlIlIlIIIIlIIIllIIlIllIIllIII in #158
- Fix Python backend with exceptions avoided by @denismerigoux in #210
- Refactor(clerk): use ninja as backend to run tests by @EmileRolley in #186
- Fix(clerk): sort subdirectory names by @EmileRolley in #215
- Variable redefinitions: implementation of #114 by @denismerigoux in #212
New Contributors
- @lIlIlIlIIIIlIIIllIIlIllIIllIII made their first contribution in #155
- @jakeisnt made their first contribution in #160
Full Changelog: 0.5.0...0.6.0
v0.5.0
Catala v0.5.0
Changelog:
- Performance improvements
- Better error message formatting
- New Markdown syntax
- Better lexer factorization
- ...
The JS file below is the Catala compiler, that you can use directly with Node.js:
node catala.js <arguments>