Skip to content

Latest commit

 

History

History
1040 lines (743 loc) · 42.9 KB

CHANGELOG.md

File metadata and controls

1040 lines (743 loc) · 42.9 KB

Changelog

v1.1.6 - 2024-11-13

Added

  • aiken: Optionally provide blueprint file location when using blueprint apply. @Riley-Kilgore
  • aiken: Output test results as structured JSON when the target output is not a TTY terminal. @Riley-Kilgore, @KtorZ

Changed

  • aiken: Fix validator selection for apply, address and policy commands. Parameters are also now correctly applied to all handlers of a given validator, instead of needing to be manually targetted one-by-one. @KtorZ
  • aiken: Add more flexibility around the management of Plutus blueprint files for build, address, policy and apply commands. See #1055. @KtorZ
  • aiken: Rename --filter_traces to --trace_filter for more consistency with --trace_level. An alias for --filter_traces still exists for backward compatibility. @KtorZ
  • aiken-project: Fix aiken docs wrongly formatting list constants as tuples. See #1048. @KtorZ
  • aiken-project: Fix aiken docs source linking crashing when generating docs for config modules. See #1044. @KtorZ
  • aiken-project: Fix aiken docs generating very long lines for constants. @KtorZ
  • aiken-lang: Leverage Decision Trees for compiling pattern matches to UPLC. @MicroProofs
  • aiken-lang: Rework optimization passes to safely reduce different kinds of patterns for each pass over the uplc. @MicroProofs
  • aiken-lang: Implement a looping mechanism to reduce uplc with deletion optimizations until term count remains the same. @MicroProofs

Removed

  • N/A

v1.1.5 - 2024-10-19

Added

  • N/A

Changed

  • uplc: Fix costing of byteStringToInteger builtins. @Microproofs
  • aiken-lang: Fix data-type reification from Void; somehow missing from known definition 🤦. @KtorZ

Removed

  • N/A

v1.1.4 - 2024-10-01

Added

  • N/A

Changed

  • aiken-project: Generate empty redeemer for else handler, to keep full compliance with the blueprint spec. @KtorZ
  • aiken-lang: Forbid constants evaluating to generic or unbound functions. Same restrictions as for validators or any exported UPLC programs apply here. @KtorZ & @MicroProofs
  • aiken-lang: Fix compiler crash on trace + expect as last expression of a clause. See #1029. @KtorZ
  • aiken-lang: Fix redundant warning on introduced identifiers when destructuring validator params. @KtorZ
  • aiken-lsp: Compile project using verbose tracing, to avoid having the language server complain about unused imports. @KtorZ
  • uplc: Fix (again 😬) cost-models for PlutusV1 & PlutusV2. @MicroProofs

Removed

  • N/A

v1.1.3 - 2024-09-20

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

v1.1.2 - 2024-09-13

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

v1.1.1 - 2024-09-10

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

v1.1.0 - 2024-09-03

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.

v1.0.29-alpha - 2024-06-06

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

v1.0.28-alpha - 2024-05-23

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

v1.0.26-alpha - 2024-03-25

Fixed

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

v1.0.25-alpha - 2024-03-22

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

v1.0.24-alpha - 2024-01-31

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
  • aiken-lang: Calling head_list on a list of pairs no longer throws a type error. @MicroProofs

v1.0.23-alpha - 2024-01-24

Fixed

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

v1.0.22-alpha - 2024-01-24

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

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.

v1.0.21-alpha - 2023-12-04

Added

  • aiken: --watch flag on the build, check and docs commands to automatically watch and re-execute the command on file changes. @Quantumplation & @KtorZ
  • acceptance tests 28-30 @MicroProofs
  • aiken-lang: expose BLS builtins and types @MicroProofs & @rvcas
  • aiken-lsp: implement hover info for tuples, lists, and contructor pattern elements @rvcas
  • aiken-lsp: implement hover on when clause patterns @rvcas
  • aiken-lsp: hover support for the optional multi validator fn @rvcas
  • aiken-lsp: implement quickfix for "utf8 byte array is valid hex string" warning @rvcas
  • uplc: add all BLS builtins and types @MicroProofs & @rvcas
  • uplc: add plutus conformance tests from here. @MicroProofs & @rvcas
  • uplc: case and constr cost models @MicroProofs

Changed

  • aiken: update to pallas v0.20.0 @rvcas
  • aiken-project: switch blueprint validator tests now uses insta @MicroProofs
  • aiken-project: update to pallas v0.20.0 @rvcas
  • aiken-lang: use a better algorithm for inlining single occurrences @MicroProofs
  • uplc: update to pallas v0.20.0 @rvcas
  • uplc: remove flat-rs crate and use it through pallas_codec instead

Fixed

  • aiken-lang: formatting unable to have newline after expect bool shortcut @rvcas
  • aiken-lang: formatter incorrectly erasing blocks in certain situations @rvcas
  • aiken-lang: use a distinct warning for discarded let assignments to avoid confusion @rvcas
  • aiken-lang: allow spread operator on positional constructor arguments @rvcas
  • aiken-lsp: and/or chains hovering on nested elements not working @rvcas
  • uplc: delay typemismatch errors in the machine runtime (caught by conformance tests) @rvcas

v1.0.20-alpha - 2023-10-25

Added

  • aiken-project: The plutus.json blueprint now contains a compiler.name and compiler.version fields.
  • aiken-prokect: Added compiler and system information to panic error report.
  • aiken-lsp: Added quickfix suggestions for unknown variables, modules and constructors.

Changed

  • aiken-lang: Added validator specific error when validator returns false
  • aiken-lang: Running a multi-validator with traces on will let you know which validator function is running
  • aiken-lang: Multi-validator with traces will give a better error when the 'spend' redeemer is not properly wrapped with a constr
  • aiken-lang: Code gen traces are referenced instead of being inlined leading to smaller validators

Fixed

  • aiken-lang: improved error messages for a |> b(x).
  • uplc: Fixed cost model issue when using div, quot, rem, mod.
  • aiken-lsp: Improved hovering suggestions and type annotations.

v1.0.19-alpha - 2023-09-29

Fixed

  • aiken-lang: Fixed small typo in hoist_dependent_functions lead to internal cyclic calls not being recognized.

v1.0.18-alpha - 2023-09-29

Added

  • aiken-lang: Code gen now allows for mutual recursion

Fixed

  • aiken-lang: fixed stack overflow with unbound typing being passed into a function with inferred types
  • aiken-lang: expect on tuples greater than 2 checks the length to ensure tuple lists are the same length as the type.

Changed

  • aiken-lang: (Code Gen): Rename some of the types to use aliases
  • aiken-lang: (Code Gen): Remove the use of Air::RecordAccess and TupleIndex and replace them with functions that directly get the item at the specified index. Also improves performance.
  • uplc: Added more cases to the inline optimization function to allow the removal of further unnecessary lambda bindings.

v1.0.17-alpha - 2023-09-20

Added

  • aiken: add ability to force warnings to cause a failing exit code on check, build, and docs
  • aiken-lang: automatically resolve and fetch latest revision of a package on build when a branch is specified as version
  • uplc: Add Case and Constr Terms; This includes their flat serialization and evaluation

Fixed

  • uplc: trim whitespace when loading files with hex strings to avoid confusing errors #720
  • uplc: uplc Constant::Data formatting
  • aiken-lang: code gen fixes including nested constr when matches and expect on None
  • aiken-lang: empty records properly parse as record sugar
  • aiken-lang: escape sequences are now properly preserved after formatting
  • aiken-lang: fixed parser ambiguity when using record constructor in if conditions followed by single-line var expressions #735
  • aiken-project: when a module name has a hyphen we should behave like rust and force an underscore

v1.0.16-alpha - 2023-08-24

Removed

  • aiken: aiken new no longer accept an --empty flag. Projects are generated empty by default.

v1.0.15-alpha - 2023-08-19

Added

  • aiken: Parameters for blueprint apply can now be built interactively.

Changed

  • aiken-lang: Opaque types are now properly handled in code gen (i.e. in code gen functions, in datums/redeemers, in from data casts).
  • aiken: blueprint apply now expects only one OPTIONAL argument. When not provided, the parameter will be prompted interactively.
  • aiken-lang: New tests for code gen around opaque types.
  • aiken-lang: traverse_with_tree now has a boolean parameter to determine when with is called.

Removed

  • aiken: blueprint apply no longer accept a target directory. The command has to be executed within the same directory as the aiken.toml.

v1.0.14-alpha - 2023-08-16

Added

  • aiken: new command now fetches latest stdlib version
  • aiken-lang: new and and or chaining
    and {
      1 == 1,
      or {
        2 == 2,
        3 != 2,
        True,
      },
    }
    

Changed

  • aiken-lang: significantly improved pattern matching exhuastiveness checking
  • aiken-lang: Tx Simulate now returns a list of execution budgets for each redeemer instead of calculating the total units required to run all the scripts.
  • aiken-lang: Now code gen uses a tree abstraction to build the Aiken Intermediary Representation. This now fixes quite a number of minor issues while making the code more maintainable. This is a large leap towards a stable version and future updates will be on further simplifying and stabilizing the tree abstraction.
  • aiken-lang: Zero argument anonymous functions now are implemted as a delayed function body and calling them simply does force
  • aiken-lang: Matching on int in expect and when cases is now implemented
  • aiken-lang: Using assign in nested pattern matches is now implemented
  • aiken-lang: Using List as a validator params only checks the type is a list and does not attempt to check each item
  • aiken-lang: Recursion optimization to prevent static parameters from being passed through every recursion
  • aiken-lang: aliased import of single type throws compiler error
  • aiken-lsp: fix diagnostics and formatting on windows vscode
  • aiken: decode should always print to textual
  • uplc: pair type formatting

v1.0.13-alpha - 2023-07-15

Added

  • aiken-lang: expect foo == bar desugars into expect True = foo == bar

Fixed

  • aiken-lang: fail, todo, and trace had issues with sequences and expressions

v1.0.12-alpha - 2023-07-14

Added

  • aiken: added a blueprint policy command to compute the policy ID of a minting script
  • uplc: parsing and pretty printing for PlutusData

Fixed

  • aiken-lang: Prevent mutual recursion caused by conflicting function names for generic expect type
  • aiken-lang: UPLC evaluation of large integers literals (> max u64)
  • aiken-lang: Parsing of error / todo keywords in when cases
  • aiken-lang: Parsing of negative integer patterns and constants
  • aiken-lang: automatically infer unused validator args as Data
  • aiken-lang: test crashing when referencing validators
  • aiken: mem and cpu values were not showing in white terminals, switched to cyan

Changed

  • uplc: make list type and pair type parsing match the plutus core spec
  • aiken-lang: rename error to fail
  • aiken-lang: new failing test syntax test name() fail {

Removed

v1.0.11-alpha - 2023-06-23

Added

  • aiken: enhance aiken new

  • aiken-lang: Binary operator are now treated like first-class citizen in expressions. In particular, they can be used as function arguments directly:

    compare_with(a, >=, b) == compare_with(a, fn(l, r) { l >= r }, b)
    
  • aiken-lang: Make traces produced by expect dependent on the value of the tracing flag.

Fixed

  • aiken-lang: Explain discards and expect a bit better in the unused var warning
  • aiken-lang: Fix expect _ = ... not including the cast from data logic if the type is data and right hand has a type annotation
  • aiken-lang: Fix for the final clause of a when expecting another clause afterwards in nested list cases.
  • aiken-lang: Fix for all elements were being destructured in tuple clauses even if not used.
  • aiken-lang: Fix for tuple clause not consuming the next case causing incomplete contracts. Now tuple clause will always consume the next case unless it is the final clause
  • aiken-lang: Fix for builtins using the incorrect data to type conversion when used as a function param.

v1.0.10-alpha - 2023-06-13

Added

  • aiken: added panic hook to present a link to make a bug report

Fixed

  • aiken-lang: fmt for module.Constr { field: value }
  • aiken-lang: Issue where using var pattern in a when was passing the constr index instead of the constr
  • aiken-lang: Issue where expecting on a list had unexpected behaviors based on list length.
  • aiken-lang: Issue where expecting on a list from data was using the wrong expect cast for the list tail.

Removed

N/A

v1.0.8-alpha - 2023-06-08

Added

  • aiken-lang: numbers can now be written as hexadecimal digits (e.g. 0x42)
  • aiken-lang: numbers can now be written using numeric underscores as separator (e.g. 1_000_000)

Fixed

  • aiken-lang: fixed operator precedences, in particular the pipe operator (|>) which is now of the lowest precedence.
  • aiken-project: need to convert to Program before dumping to uplc
  • aiken-lang: fmt crashing when comment at end of file with no newline
  • aiken-lang: Fixed error when using nested boolean checks in when conditions
  • aiken-lang: Had the wrong conversion for constant maps to plutus data. Fixed to check for right conversion
  • aiken-lang: Zero arg functions were grabbing extra dependencies they didn't need to
  • aiken-lang: Rearrange list clauses and fill in gaps now handles nested patterns in a uniform way
  • aiken-lang: Fixed discards in records that were being sorted incorrectly leading to type issues

Removed

N/A

v1.0.7-alpha - 2023-06-02

Added

  • aiken-lang: Add a way to express that tests can return an error

Fixed

  • uplc: Fix pair formatting
  • aiken-lang: forced new line in formatter for assignments
  • aiken-lang: Incorrect parsing of generic type annotation prefixed with module
  • aiken-lang: Incorrect handling of comments at end of a file when newline not present
  • aiken-lang: Record update in code gen is now flexible enough to support fields being passed in any order.
  • aiken-lang: Record update now produces better uplc code then creating a record by the normal instantiation.
  • aiken-lang: Issue with Constructors being passed as functions to other function arguments was fixed.
  • aiken-lang: show module name when type mismatch names are the same
  • aiken: make uplc flat and uplc unflat subcommands more consistent and flexible

v1.0.6-alpha - 2023-05-17

Fixed

  • aiken-lang: Fix for cases where identity function is used as a param to a function or assigned to a var.
  • aiken-lang: Fix for free unique caused by code gen function having a missing dependency.

v1.0.5-alpha - 2023-05-14

Added

  • aiken-lang: Add Record Module support for records with 0 fields
  • aiken-lang: Added some optimization tests
  • aiken-lang: Added an Aiken to uplc conversion tests on validators
  • aiken-lang: Added some uplc builder functions for builtin creation
  • aiken-lang: Added optimization where identity functions called on an arg are reduced to just the arg.

Fixed

  • aiken-lang: Fix for nested constructors where the type had a single constructor. The fields exposed were not being added to the Air.

v1.0.4-alpha - 2023-05-09

Added

  • aiken-lang: ChooseUnit builtin uses a more efficient way of handling the first arg (unit) by just assigning to lambda

Fixed

  • aiken-lang: Negative numbers now show up as a constant instead of 0 - that number
  • aiken-lang: Expect on constructors without field maps no longer panics
  • aiken-lang: Expect on constructors with discard as assigned field names now no longer throws free unique

Changed

  • aiken-lang: Refactor how builtins are processed to uplc in code gen

v1.0.3-alpha - 2023-04-28

Added

  • aiken-lang: added optimization to help prevent unnecessary data wraps or unwraps
  • aiken-lang: optimization to strip unnecessary lambdas
  • aiken-lang: implement Clone for ParseError and tipo::Error for the playground
  • aiken-project: added end to end tests on conversion from aiken lang to uplc

Fixed

  • aiken: fixed 'new' instructions to properly show project name and folder
  • aiken-lang: Add name of var to the unused var warning
  • aiken-lang: fix expect on an empty list
  • aiken-lang: pattern match on boolean with simple clause bodies
  • aiken-lang: fix for inline_direct_reduce to be applied to pattern match function instead of argument
  • aiken-lang: code gen function dependencies won't be hoisted to the top, instead hoisted at the location depended on.

v1.0.2-alpha - 2023-04-17

Fixed

  • aiken-lang: needed to assert_no_assignment in when and if blocks
  • uplc: need to return deserialization error in some cases for the machine builtins

v1.0.1-alpha - 2023-04-16

Fixed

  • aiken-lang: incorrect scoping for anonymous functions
  • aiken-lang: duplicate arguments were allowed in anonymous functions

v1.0.0-alpha - 2023-04-13

Added

  • aiken: new command blueprint convert

Changed

  • aiken-project: tests filtering with -m during check now happens in Project::collect_tests

  • aiken-project: fixed generation of blueprints for recursive and mutually recursive data-types

  • aiken-project: perform validation of parameters on blueprint apply

  • aiken-lang: block Data and String from unifying when casting

  • aiken-lang: remove ability for a type with many variants with matching field labels and types to support field access

  • aiken-lang: various uplc code gen fixes

  • aiken-lang: update todo warning to include type

  • aiken-lang: |> operator can now be formatted as a single (short) line or forced over multiline in a flexible manner

  • aiken-lang: the compiler now provides better feedback for type holes (i.e. _) in type annotations

  • aiken-lang: assignment and clause guard are now always formatted on a new line

  • aiken-lang: unused let-bindings are now fully removed from generated code and discarded unused let-binding now raise a warning

  • aiken-lang: support multi-clause patterns (only as a syntactic sugar)

  • aiken-lang: fix lexer panic when parsing too large (> u32) tuple-indexes

  • uplc: Greatly improved the Plutus virtual machine performances for script evaluation

v0.0.29 - 2023-02-23

Added

  • aiken-project: new dep rayon for parallel test execution
  • aiken: new blueprint command
  • aiken-lang: new syntax for defining validators
  • aiken: new address command for deriving addresses out of plutus.json
  • aiken-lang: Add missing Plutus builtins to Aiken's lang.
  • aiken: fancy nix stuff
  • aiken-lsp: go to definition
  • aiken-lsp: docs on hover
  • aiken-lsp: enable compiler a project

Changed

  • aiken-lang: assert renamed to expect
  • aiken-lang: new syntax for strings and byte array literals
  • aiken-lang: lots of code gen improvements
  • aiken-lang: validator checks now happen during infer instead of in project
  • aiken-lang: fixed unicode parsing
  • aiken-lang: update default costs models
  • aiken-lang: Use variable-length threshold for levenshtein distance
  • aiken-project: Move module name validation outside of type-checking
  • aiken-project: Add 'plutusVersion' to blueprints

Removed

  • aiken-project: remove assets folder in favor of plutus.json
  • aiken-lang: removed some unused constant related data types

v0.0.28 - 2023-01-06

Added

N/A

Changed

  • uplc: Reward accounts are now correctly turned into script credentials in ScriptContext.
  • all: bump pallas version to v0.16.0

Removed

N/A

v0.0.27 - 2022-MM-DD

Added

  • aiken-lang: integrated unit tests

    Aiken now supports writing unit tests directly in source files using the new test keyword. Tests are functions with no arguments that are implicitly typed to bool. For example:

    test foo () {
      1 + 1 == 2
    }
  • aiken: new --skip-tests flag for the check command

Changed

  • aiken: check now also runs and reports on any test found in the project
  • aiken: fix Plutus V1 to_plutus_data() for post-alonzo txout with no datum hash

Removed

N/A

v0.0.26 - 2022-11-23

Added

  • aiken-lsp: handle DidSaveTextDocument notification
  • aiken-lsp: convert errors into lsp_types::Diagnostic
  • aiken-lang: doc comment parsing
  • aiken-lang: code generation for pattern matching expressions
  • aiken-lang: extended script context
  • aiken-lang: added Option to builtins
  • aiken-lang: properly handle record parsing and sugar in patterns

v0.0.25 - 2022-11-14

Added

  • aiken: new lsp command
  • aiken: new fmt command
  • aiken: build command now works and outputs assets
  • aiken: validate project name on aiken new
  • aiken-lang: formatter for UntypedExpr
  • aiken-lang: uplc code gen
  • aiken-lang: add Data to prelude
  • aiken-lang: allow Data to unify with anything that's not in the prelude
  • aiken-project: validate if validator function return bool
  • aiken-project: validate if validator function has minimum number of arguments
  • aiken-lsp: new crate that contains the aiken language server

Changed

  • uplc: Converter::get_index now takes the full name to provide better error messages for Error::FreeUnique

v0.0.24 - 2022-11-04

Changed

  • uplc: Sorted remaining structured in the ScriptContext (Value, Wdrl, (Ref) Inputs, Mint, Required signers, Data, Redeemers)

v0.0.23 - 2022-11-03

Changed

v0.0.22 - 2022-10-31

Added

  • aiken: Fancy errors using miette
  • aiken: Typechecking
  • aiken: Inject aiken/builtin module with some functions from DefaultFunction in UPLC directly exposed
  • aiken-lang: add infer method to UntypedModule which returns a TypedModule
  • uplc: Expose various Pallas primitives from UPLC to make constructing UPLC types possible for consumers

Changed

  • aiken: Project structure is now a bit different. See examples/sample for more

v0.0.21 - 2022-10-23

Added

  • flat-rs: New errors for debugging flat decoding issues

Changed

  • uplc: Fixed overflow issue by changing i64 to i128 in BigInt::Int instances
  • uplc: Added apply_params_to_script function (applies params to script and serializes the new script).

v0.0.20 - 2022-10-17

Added

  • aiken: Project module which is responsible loading modules and running the compilation steps
  • aiken: UplcCommand::Flat flip the cbor_hex if condition so that the correct logic runs when using the flag
  • uplc: use i128 for Constant::Integer
  • flat-rs: add support for i128 encode and decode
  • flat-rs: add i128 zigzag function