All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Do not simplify /(x, 0) and %(x, 0) to avoid incorrect panic messages (issue mazeppa-dev#25).
- Hide empty reduction paths in CLI error messages (issue mazeppa-dev#27).
- Set the minimum
checked_oint
version requirement to0.3.0
.
- Do not extract operands from calls to primitive operations like
+
(issue mazeppa-dev#24).
- Set the minimum
menhir
version requirement to20180905
.
- Preserve the order of built-in panics in residual programs (issue mazeppa-dev#23).
- Algebraic simplification now requires operands to be either variables or constants, not compound values.
- Eliminate let-bindings for "innocent terms" via postprocessing.
- Innocent terms are variables, integer constants, and zero-arity constructor calls.
- Set the minimum supported OCaml version to 4.14.0.
- Set the minimum
checked_oint
version requirement to0.2.1
.
- The function
Const.escape_char
is no longer public [BC].
- Reuse predefined thunks for variables standing as constructor arguments.
- This improves output code size and compilation times when C code generation is used.
- Tweak the dependencies in
dune-project
after trying to publish the package.
- Expose the
Gensym
module in the public API (previously private).
- The Mazeppa-to-C translator (with GNU11 extensions) via the new
translate
CLI command (issue mazeppa-dev#1). - The
translate_to_c
andmazeppa_h
API functions.
- The
--print-gc-stats
flag forrun
andeval
to observe total memory usage. - Expose the
check
function in the public API.
- Optimize homeomorphic embedding by maintaining a local result cache (issue mazeppa-dev#20).
- Other homeomorphic embedding performance tweaks (issue mazeppa-dev#17).
- In particular, utilize
Weak
hash consing while building function bodies.
- In particular, utilize
- Rename the functions 1)
Symbol.kind
toop_kind
, 2)Symbol.is_lazy
tois_lazy_op
for clarity [BC]. - Hide the middles of long reduction paths with
(N more...)
(issue mazeppa-dev#21).
- Evaluation of built-in panics raising an exception (issue mazeppa-dev#22).
- The function
Raw_term.is_immediate
is no longer public [BC].
- Propagate positive information for inequality (
!=
) tests (issue mazeppa-dev#7). - More simplification rules:
- op(op(t)) -> op(t), where op is one of
u8
,u16
,u32
,u64
,u128
,i8
,i16
,i32
,i64
,i128
,string
. - /(0, t) -> 0
- |(t, all ones), |(all ones, t) -> all ones
- &(t, all ones), &(all ones, t) -> t
- op(op(t)) -> op(t), where op is one of
- Add the
check
command to the CLI for checking program well-formedness (issue mazeppa-dev#18). - Expose the
Symbol.list
function in the public API.
- Only whistle on terms with equal redex signatures (issues mazeppa-dev#9, mazeppa-dev#11).
- Only whistle on equal integers (issue mazeppa-dev#12).
- Rebuild as less terms as possible when substituting contractions (issue mazeppa-dev#14).
- Optimize homeomorphic embedding by storing term sizes (issue mazeppa-dev#17).
- Internal compiler errors when analyzing
T
/F
-patterns during driving. Instead, show proper error messages (issue mazeppa-dev#6). - Incorrect exception backtraces (issue mazeppa-dev#8).
- Require constructors to be used consistently [BC] (issue mazeppa-dev#10).
- Function productivity analysis for preventing unneeded specializations (issue mazeppa-dev#2).
pattern_to_string
andpattern_verbatim
(Raw_term
).
- Simplify horizontal configuration analysis by only checking for renamings instead of matching arbitrary safe instances.
- Do not emit 1) linear let-bindings for redexes, 2) unused let-bindings for immediate terms.
mazeppa eval
: A built-in evaluator for the Mazeppa language (issue mazeppa-dev#5).- Expose the
Const
module in the public API.
- The following simplification rules have been upgraded to handle arbitrary values instead of variables:
- *(x, 0), *(0, x) -> 0
- &(x, 0), &(0, x) -> 0
- %(x, 1) -> 0
- /(x, 0), %(x, 0) -> out of range
- |(x, x), &(x, x) -> x
- =(x, x), >=(x, x), <=(x, x) -> T()
- !=(x, x), >(x, x), <(x, x) -> F()
- The Mazeppa supercompiler.