Skip to content

Releases: aiken-lang/aiken

v1.1.3 - 2024-09-20

20 Sep 18:19
3d77b5c
Compare
Choose a tag to compare

Release Notes

Added

  • N/A

Changed

  • aiken-project: Fix documentation link-tree generation messing up with modules when re-inserting the same module. @KtorZ
  • aiken-project: Provide intermediate feedback when looking for counterexamples during property tests. @KtorZ
  • aiken-lang: Fix formatter adding extra unnecessary newlines after literal lists clause values or assignments. @KtorZ
  • aiken-lang: Fix formatting of long multi-line if/is expressions. @KtorZ
  • aiken-lang: Fix extraneous white-space added by the formatter after multiline alternative patterns. @KtorZ
  • aiken-lang: Fix incorrect warning about unused variable when softcasting without explicit right-pattern. @KtorZ
  • aiken-lang: Fix soft cast and hard cast on same type issues that lead to validator errors. @MicroProofs
  • aiken-lang: Bls constants are automatically converted to a hoisted compressed form with uncompress builtin call. @MicroProofs
  • uplc: Fix cost-models for PlutusV1 & PlutusV2. @MicroProofs

Removed

  • N/A

Install aiken 1.1.3

Install prebuilt binaries via shell script

curl --proto '=https' --tlsv1.2 -LsSf https://github.com/aiken-lang/aiken/releases/download/v1.1.3/aiken-installer.sh | sh

Install prebuilt binaries via powershell script

powershell -c "irm https://github.com/aiken-lang/aiken/releases/download/v1.1.3/aiken-installer.ps1 | iex"

Install prebuilt binaries into your npm project

npm install @aiken-lang/aiken@1.1.3

Install prebuilt binaries via Homebrew

brew install aiken-lang/tap/aiken

Download aiken 1.1.3

File Platform Checksum
aiken-aarch64-apple-darwin.tar.gz Apple Silicon macOS checksum
aiken-x86_64-apple-darwin.tar.gz Intel macOS checksum
aiken-x86_64-pc-windows-msvc.tar.gz x64 Windows checksum
aiken-x86_64-unknown-linux-gnu.tar.gz x64 Linux checksum

v1.1.2 - 2024-09-13

13 Sep 21:12
7047c77
Compare
Choose a tag to compare

Release Notes

Added

  • N/A

Changed

  • aiken-lang: Fix issues with static recursive optimization. See #1009 @MicroProofs
  • aiken-lang: Aiken IR now interns variables while building up to ensure uniqueness for local vars. @MicroProofs
  • aiken-lang: Fix reification of Data (failing to reify) & PRNG (missing variants' arguments). @KtorZ
  • aiken-lang: Adjust reification of String to be shown as plain UTF-8 text strings (instead of hex-encoded byte array). @KtorZ
  • aiken-lang: Fix formatting of long if-condition over multiline. @KtorZ & @MicroProofs
  • aiken-lang: Fix formatting of standalone logical binary chains (and & or) in functions. @KtorZ
  • uplc: Fix script context generation failure on missing datum when evaluating transactions. @solidsnakedev

Removed

  • N/A

Install aiken 1.1.2

Install prebuilt binaries via shell script

curl --proto '=https' --tlsv1.2 -LsSf https://github.com/aiken-lang/aiken/releases/download/v1.1.2/aiken-installer.sh | sh

Install prebuilt binaries via powershell script

powershell -c "irm https://github.com/aiken-lang/aiken/releases/download/v1.1.2/aiken-installer.ps1 | iex"

Install prebuilt binaries into your npm project

npm install @aiken-lang/aiken@1.1.2

Install prebuilt binaries via Homebrew

brew install aiken-lang/tap/aiken

Download aiken 1.1.2

File Platform Checksum
aiken-aarch64-apple-darwin.tar.gz Apple Silicon macOS checksum
aiken-x86_64-apple-darwin.tar.gz Intel macOS checksum
aiken-x86_64-pc-windows-msvc.tar.gz x64 Windows checksum
aiken-x86_64-unknown-linux-gnu.tar.gz x64 Linux checksum

v1.1.1 - 2024-09-10

10 Sep 11:39
0905146
Compare
Choose a tag to compare

Release Notes

Added

  • N/A

Changed

  • aiken-lang: Fix validator's else handler generation. See #1015 @KtorZ
  • aiken-lang: Fix underflow in error message reported by the validator arity. See #1013 @KtorZ
  • aiken-lang: Fix list-pattern needlessly formatting over multiple lines. @KtorZ
  • aiken-lang: Fix formatter on long alternative patterns spanning over multiple lines. @KtorZ
  • aiken-lang: Fix needed parentheses under trace-if-false operator for todo, fail, unop & pipelines; removed when formatting. @KtorZ
  • aiken-lang: Fix formatter removing curly braces around multi-line constants. It's fine to not have curly braces, but it's the Aiken signature after all. @KtorZ
  • aiken-lang: Improve LSP suggestion for module imports. @Riley-Kilgore

Removed

  • N/A

Install aiken 1.1.1

Install prebuilt binaries via shell script

curl --proto '=https' --tlsv1.2 -LsSf https://github.com/aiken-lang/aiken/releases/download/v1.1.1/aiken-installer.sh | sh

Install prebuilt binaries via powershell script

powershell -c "irm https://github.com/aiken-lang/aiken/releases/download/v1.1.1/aiken-installer.ps1 | iex"

Install prebuilt binaries into your npm project

npm install @aiken-lang/aiken@1.1.1

Install prebuilt binaries via Homebrew

brew install aiken-lang/tap/aiken

Download aiken 1.1.1

File Platform Checksum
aiken-aarch64-apple-darwin.tar.gz Apple Silicon macOS checksum
aiken-x86_64-apple-darwin.tar.gz Intel macOS checksum
aiken-x86_64-pc-windows-msvc.tar.gz x64 Windows checksum
aiken-x86_64-unknown-linux-gnu.tar.gz x64 Linux checksum

v1.1.0 - 2024-09-03

03 Sep 21:18
be31a7c
Compare
Choose a tag to compare

Release Notes

Added

  • 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

Changed

  • 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:

    1. 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"
      
    2. 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
      
    3. Changes the behavior of the --trace-level compact mode to now:

    • remove trace-if-false (? operator) traces entirely in this mode;
    • only keep the label (first trace argument) and error when it isn't a string.

    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

Removed

  • aiken-lang: clause guards are no longer part of the language. See #886. @KtorZ.

Install aiken 1.1.0

Install prebuilt binaries via shell script

curl --proto '=https' --tlsv1.2 -LsSf https://github.com/aiken-lang/aiken/releases/download/v1.1.0/aiken-installer.sh | sh

Install prebuilt binaries via powershell script

powershell -c "irm https://github.com/aiken-lang/aiken/releases/download/v1.1.0/aiken-installer.ps1 | iex"

Install prebuilt binaries into your npm project

npm install @aiken-lang/aiken@1.1.0

Install prebuilt binaries via Homebrew

brew install aiken-lang/tap/aiken

Download aiken 1.1.0

File Platform Checksum
aiken-aarch64-apple-darwin.tar.gz Apple Silicon macOS checksum
aiken-x86_64-apple-darwin.tar.gz Intel macOS checksum
aiken-x86_64-pc-windows-msvc.tar.gz x64 Windows checksum
aiken-x86_64-unknown-linux-gnu.tar.gz x64 Linux checksum

Additional acknowledgements

v1.0.29-alpha - 2024-06-06

06 Jun 09:33
16fb02e
Compare
Choose a tag to compare

Release Notes

Added

  • aiken-lang: new LSP quickfix for 'use let' warning. @KtorZ

Changed

  • aiken-lang: the keyword 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. @KtorZ

Fixed

  • aiken-lang: fixed the number of 'after x tests' number reported on property test failure, which was off by one. @KtorZ
  • aiken-lang: fixed parsing of single hex digits. @KtorZ

Install aiken 1.0.29-alpha

Install prebuilt binaries via shell script

curl --proto '=https' --tlsv1.2 -LsSf https://github.com/aiken-lang/aiken/releases/download/v1.0.29-alpha/aiken-installer.sh | sh

Install prebuilt binaries via powershell script

powershell -c "irm https://github.com/aiken-lang/aiken/releases/download/v1.0.29-alpha/aiken-installer.ps1 | iex"

Install prebuilt binaries into your npm project

npm install @aiken-lang/aiken@1.0.29-alpha

Install prebuilt binaries via Homebrew

brew install aiken-lang/tap/aiken

Download aiken 1.0.29-alpha

File Platform Checksum
aiken-aarch64-apple-darwin.tar.gz Apple Silicon macOS checksum
aiken-x86_64-apple-darwin.tar.gz Intel macOS checksum
aiken-x86_64-pc-windows-msvc.tar.gz x64 Windows checksum
aiken-x86_64-unknown-linux-gnu.tar.gz x64 Linux checksum

v1.0.28-alpha - 2024-05-23

24 May 01:46
c9a1519
Compare
Choose a tag to compare

Release Notes

Added

  • aiken: install shell completions automatically. @freexploit
  • aiken: added export command that exports regular function definitons. @rvcas
  • aiken-project: compiler version field to aiken.toml @rvcas
  • aiken-project: plutus version field to aiken.toml @rvcas
  • aiken-lsp: hover and goto definition support on list tail. @rvcas
  • aiken-lsp: hover on prop test via expression. @rvcas
  • aiken-lang: new builtin types in the prelude Pair and Pairs. @KtorZ @MicroProofs
  • aiken-lang: Codegen now generates uplc version 1.1.0 scripts when running build with plutus v3.

Fixed

  • aiken-lang: formatter should not erase pub on validators. @rvcas
  • aiken-lang: error on using tuple index when a tuple is returned by a generic function. @rvcas
  • aiken-lang: backpassing with expect gives a warning on pattern matches. @rvcas
  • aiken-lang: fix a regression in the Type-checker introduced in v1.0.25-alpha regarding types comparison. See #917. @KtorZ
  • aiken-lang: fix incongruous generics after type-checking which caused [] to be treated as a list in cases where it needed to be an empty map primitive. See #922. @KtorZ
  • aiken-lang: fix for generic constrs being used as functions causing type mismatch errors. @MicroProofs
  • aiken-lang: fix for error occuring when a field holds Data that is not a constr type when compiler traces are on. @MicroProofs
  • aiken-lang: fix for curry optimization involving 2 constants #945. @MicroProofs
  • aiken-lang: fix compiler wrongly requiring MillerLoopResult to be 'serialisable' when manipulated as a top-level value. See #921. @KtorZ
  • aiken-lang: fix type-checker oversight regarding serialisation of generics. See #939. @KtorZ
  • aiken-lang: fix type-checker not raising error when comparing non-serialisable types. See #940. @KtorZ
  • aiken-project: show a warning when ignoring modules in lib/validator because they have an invalid name. See #916. @KtorZ

Changed

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 a List.

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) to Pair<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.

  • aiken-lang: altered internal representation of 2-tuples to distinguish them from pairs. @KtorZ @MicroProofs
  • aiken-lang: some more code gen cleanup. @MicroProofs
  • aiken-lang: new optimization for wrapped builtins found in the stdlib. @MicroProofs
  • aiken-project: slightly restyle warnings to be less noisy. @KtorZ

Install aiken 1.0.28-alpha

Install prebuilt binaries via shell script

curl --proto '=https' --tlsv1.2 -LsSf https://github.com/aiken-lang/aiken/releases/download/v1.0.28-alpha/aiken-installer.sh | sh

Install prebuilt binaries via powershell script

powershell -c "irm https://github.com/aiken-lang/aiken/releases/download/v1.0.28-alpha/aiken-installer.ps1 | iex"

Install prebuilt binaries into your npm project

npm install @aiken-lang/aiken@1.0.28-alpha

Install prebuilt binaries via Homebrew

brew install aiken-lang/tap/aiken

Download aiken 1.0.28-alpha

File Platform Checksum
aiken-aarch64-apple-darwin.tar.gz Apple Silicon macOS checksum
aiken-x86_64-apple-darwin.tar.gz Intel macOS checksum
aiken-x86_64-pc-windows-msvc.tar.gz x64 Windows checksum
aiken-x86_64-unknown-linux-gnu.tar.gz x64 Linux checksum

v1.0.26-alpha

26 Mar 02:16
075668b
Compare
Choose a tag to compare

Fixed

  • aiken-lang: allow casting of types to Data in function pipiing. @KtorZ

v1.0.25-alpha

22 Mar 15:34
v1.0.25-alpha
4e8042f
Compare
Choose a tag to compare

Added

  • aiken-lang: Data now has a generic argument that can be used to specify the blueprint type. @KtorZ
  • aiken-lang: New types PRNG and Fuzzer in the prelude. @KtorZ
  • aiken-lang: Test definitions now accept an (optional) argument alongside a new keyword via to specify fuzzers. @KtorZ
  • aiken-project: Property-based testing framework with integrated shrinking and case labelling. @KtorZ
  • aiken-project: Unit tests now show assertion operands as Aiken expression instead of raw UPLC . @KtorZ
  • aiken: The check command now accept an extra arg --seed to provide an initial seed for the pseudo-random generator of properties. @KtorZ
  • uplc: add integerToByteString and byteStringToInteger builtins. @rvcas @MicroProofs
  • aiken-lang: add integer_to_byte_string and byte_string_to_integer aiken/builtins. @rvcas
  • uplc: more conformance tests for integerToByteString and byteStringToInteger along with new ones. @rvcas
  • aikup: error message when version is not found. @rvcas
  • aiken: support outputting mainnet addresses for validators. @rvcas
  • aiken-lang: added serde to CheckedModule to encode modules as cbor. @rvcas
  • aiken-lang: Strings can contain a nul byte using the escape sequence \0. @KtorZ
  • aiken: The check command now accept an extra (optional) option --max-success to control the number of property-test iterations to perform. @KtorZ
  • aiken: The docs command now accept an optional flag --include-dependencies to include all dependencies in the generated documentation. @KtorZ
  • aiken-lang: Implement function backpassing as a syntactic sugar. @KtorZ
  • aiken-lang: Extend backpassing to support multiple patterns/arguments. @rvcas

Fixed

  • aiken-lang: Boolean operators (|| and &&) were (somewhat) left-associative. This is now fixed and changed to right-associativity. @KtorZ
  • uplc: serialise_data builtin wrongly encoding some larger ints as tagged CBOR bigints, instead of plain integers over 9 bytes. @KtorZ
  • aiken-project: Unit tests reports are now inline with the test with less noise. @KtorZ
  • aiken-lang: Data deserialization for primitive types (pairs, bools, void) now do full checks on the Data structure. @MicroProofs
  • aiken-lang: The identity reducer optimization was not removing the identity function before. That is fixed now.@MicroProofs
  • aiken-lang: Inner opaque types can now be properly destructured by expect and when patterns. @MicroProofs
  • aiken-lang: A codegen specific name-unique interner is now used to preserve lambda scoping. @MicroProofs
  • aiken-lang: if there is only one clause we want to present a warning that suggests that a let binding should be used instead but only if it's an exhaustive pattern. @rvcas
  • aiken-lang: support nested void matching @rvcas
  • uplc: fix constr identity (constr-3.uplc) conformance test. @rvcas
  • aiken-lang: disallow MLResult in a type definition. @rvcas
  • aiken-lang: reversed deserialization of bls types out of data types. @rvcas
  • aiken-lang: validator args unexpectedly unbound causing code gen crashes. @rvcas
  • aiken-lang: allow implicitly discarded values when right-hand side unified with Void. @KtorZ
  • aiken-lang: allow zero arg mutually recursive functions. @MicroProofs
  • aiken-lang: function aliases now resolved to the module and function name in codegen. @MicroProofs
  • aiken-lang: fix indentation of pipelines to remain a multiple of the base indent increment. @KtorZ
  • aiken-lang: forbid presence of non-serialisable data-types in compound structures like List and Tuple. @KtorZ
  • aiken-lang: fix 'given' arity reported by 'incorrect arity' error message. @rvcas

Changed

  • aiken-lang: Discards will now also type check the validator arguments instead of completely ignoring them. @MicroProofs
  • aiken-lang: Further improvements to tracing when using expect casting from Data. @MicroProofs
  • aiken-lang: The set of curriable builtins with arguments that occur 3 or more times are now hoisted in scope with the arguments curried. @MicroProofs
  • aiken-lang: Improved the way the lambda inliner works to prevent unnecessary inlining into functions. @MicroProofs
  • aiken-lang: Simplifications to the AirTree type in codegen. @MicroProofs
  • aiken-lang: CONSTR_FIELD_EXPOSER and CONSTR_INDEX_EXPOSER now inline the builtins instead. @MicroProofs
  • aiken-lang: SubtractInteger with a constant as the second arg is now flipped to addInteger with a negated constant. @MicroProofs
  • aiken-lang: Validator arguments are now checked per arg instead of after all args are applied. @MicroProofs
  • aiken-project: remove test definitions from dependency modules. @rvcas
  • aiken-project: ignore warnings from dependency modules. @rvcas
  • aiken-project: parse sources in parallel, this resulted in a nice speedup. @rvcas
  • aiken-lang: You can no longer use expect on opaque types in various situations. @rvcas & @KtorZ

Acknowledgements

A big thanks to those not directly mentioned in the CHANGELOG, but that contributed to this release 🙏.

v1.0.24-alpha

31 Jan 19:01
Compare
Choose a tag to compare

Added

  • aiken: New aliases for check (aiken c) and build (aiken b) commands. @Kuly14

Fixed

  • aiken-lang: Fixed an issue with expects on lists that used discards. This fixes
    the validator issues being seen for previously succeeding validators on 1.0.21-alpha. @MicroProofs
  • aiken-lang: Out of Span issue is now solved. This also fixes incorrectly selected
    traces from the wrong module, which in some cases lead to the out of span issue. @MicroProofs

v1.0.23-alpha

25 Jan 20:22
Compare
Choose a tag to compare

Added

  • aiken: New --trace-level option for the check and build commands to
    allow chosing the verbosity level of traces amongst three levels: silent,
    compact & verbose. @MicroProofs @KtorZ
  • aiken: New --filter-traces option for the check and build commands
    to enable restricting traces with more granularity between user-defined
    traces, compiler-generated traces or both. @MicroProofs @KtorZ.
  • aiken-lang: Most builtin errors are now caught and instead catched trace
    errors are thrown. The exception is BLS primitives.

Fixed

  • aiken-lang: Fix flat encoding and decoding of large integer values. @KtorZ
  • aiken-lang: Traces should not have following expressions formatted into a
    block. @rvcas
  • aiken-lang: Sequences should not be erased if the sole expression is an
    assignment. @rvcas
  • aiken-lang: Should not be able to assign an assignment to an assignment.
    @rvcas
  • aiken-lang: Should not be able to have an assignment in a logical op
    chain. @rvcas
  • aiken: Ensures that test expected to fail that return False are
    considered to pass & improve error reporting when they fail. @KtorZ
  • aiken-lang: Fix generic edge case involving tuples.
  • aiken: aiken new now uses the current version for the github action.
  • aiken-lang: Using the head_list builtin on assoc lists now works.
  • aiken-lang: Now using correct discard match for constructor field access.
  • aiken-lang: The list_access_to_uplc now always returns a lambda wrapped
    term even with only discards. This fixes an apply error being seen by a few
    people.

Removed

  • aiken: The options --keep-traces (on the build command) and
    --no-traces (on the check command) have been removed; superseded by the
    new options. @MicroProofs @KtorZ

Tip

  • If you've been using aiken check --no-traces, you can recover the old
    behavior by doing aiken check --trace-level silent.
  • If you've been using aiken build --keep-traces, you can recover the old
    behavior by doing aiken build --trace-level verbose.