@aiken-lang/aiken
Advanced tools
Changelog
v1.1.0 - 2024-09-03
aiken-lang: also authorize (complete) patterns in function arguments list instead of only variable names. @KtorZ
aiken-lang: new syntax for soft casting otherwise known as if/is
. See #959 or Control Flow - soft casting for more details. @rvcas
aiken-lang: optimization: pre-evaluate constant arguments to lambdas when safe to do so. @MicroProofs
aiken-lang: infer type when immediately possible during a patterned type-cast. See #969. @KtorZ
aiken-lang: add support for mk_cons
and mk_pair_data
builtins. See #964. @KtorZ
aiken-lang: pattern-matching on bytearrays is now available. See #989. @KtorZ
aiken-project: conditional configuration and environment. See #937. @KtorZ
aiken-project: warning on compiler version mismatch. See de870e2. @rvcas
aiken-project: source links to generated documentation for types, constants and functions. @KtorZ
aiken-project: comments containing Markdown section headings (#
, ##
, ###
etc.) will now be preserved and rendered in generated documentation. @KtorZ
aiken-project: modules starting with @hidden
in their docs will be skipped from docs generation. @KtorZ
aiken-project: preserve type-aliases as titles in blueprint generated schemas. @KtorZ
uplc: support evaluation of Plutus V3 transactions, including new purposes introduced in Conway. @KtorZ
aiken-lang: zero-arg functions are no longer evaluated at compile-time. However, constants can now hold any expression and are fully evaluated at compile-time. Use const
whenever a zero-arg function was used, unless you do want to defer execution. @KtorZ @MicroProofs.
aiken-lang: fix zero-arg builtins mk_nil_data
and mk_nil_pair_data
invokation. @KtorZ
aiken-lang: rename some builtins. @KtorZ
| old name | new name |
| ------------------ | ----------- |
| mk_nil_data
| new_list
|
| mk_pair_data
| new_pair
|
| mk_nil_pair_data
| new_pairs
|
aiken-lang: duplicate import lines are now automatically merged instead of raising a warning. However, imports can no longer appear anywhere in the file and must come as the first definitions. @KtorZ
aiken-lang: remove warning on discarded expect, allowing to keep 'side-effects' when necessary. See #967. @KtorZ
aiken-lang: allow expect as last (or only) expression in function body, when clauses and if branches. Such expressions unify with Void
. See #1000. @KtorZ
aiken-lang: allow tests to return Void
. Tests that return Void
are treated the same as tests that return True
. See #1000. @KtorZ
aiken-lang: rework traces to be (1) variadic, (2) generic in its arguments and (3) structured. @KtorZ
In more details:
Enables the trace
keyword to take one, two or any argument really separated by comma after the first. For example:
trace @"a classic trace"
// ..
trace @"condition_1": @"foo"
// ...
trace @"condition_2": @"foo", @"bar"
Enables the trace
keyword to not only take strings as arguments; but any
data-type that is serialisable (i.e. that can be cast to Data). It is fundamentally identical to calling the cbor.diagnostic
function from the standard lib; except that this is done and glued with the rest of the trace automatically.
trace @"condition_1": [1, 2, 3]
// ...
let my_var = Some("foo")
trace my_var
Changes the behavior of the --trace-level compact
mode to now:
?
operator) traces entirely in this mode;See also #978.
aiken-lang: rework formatter behaviour on long-lines, especially in the presence of binary operators. @KtorZ
aiken-lang: provide better errors for unknown types used in cyclic type definitions. @KtorZ
aiken-project: fix blueprint's apply truncating last character of outputs. See #987. @KtorZ
aiken-project: provide better error (include input ref) when inputs are missing during transaction evaluation. See #974. @KtorZ
aiken-project: module inhabitants are no longer alphabetically sorted when generating documentation. Instead, the order in which they are defined in the module is used. @KtorZ
aiken-project: the sidebar links to modules within a package is now fully hierarchical and (hopefully) better-looking. @KtorZ
Changelog
v1.0.29-alpha - 2024-06-06
fail
on property-based test semantic has changed and now consider a test to succeed only if every execution of the test failed (instead of just one). The previous behavior can be recovered by adding the keyword once
after fail
. @KtorZChangelog
v1.0.28-alpha - 2024-05-23
aiken.toml
@rvcasaiken.toml
@rvcasPair
and Pairs
. @KtorZ @Microproofspub
on validators. @rvcas[!WARNING]
BREAKING-CHANGE
2-tuples
(a, b)
are now treated the same as 3+ tuples -- which directly impacts the way that Aiken now deserialise those, especially when nested inside aList
.To deserialize into a list of 2-tuple (
List<(a, b)>
), one is now expected to provide a CBOR array of arrays (of 2 elements). Previously, this would require to provide a CBOR map! The downside of the latter is that CBOR serialization libraries do not necessarily preserve the order of keys in a map which could cause issues down the line, in particular with Aiken's dictionnaries.To recover the old behavior when desired, Aiken introduces a new type
Pair<a, b>
to the language. So any existing program can be migrated by switching any occurences of(a, b)
toPair<a, b>
.However, it is often preferable to use 2-tuples where possible. The main place you will see usage of
Pair
is in the script context because its form is imposed by the ledger.