Skip to main content

Changelog

Aqua compiler's versioning scheme is the following: 0.BREAKING.ENHANCING.RELEASE

  • 0 shows that Aqua does not meet its vision yet, so syntax and semantics can change quickly
  • BREAKING part is incremented for each breaking change when old .aqua files need to be updated to compile with the new version
  • ENHANCING part is incremented for every syntax addition
  • RELEASE is the release number, shows internal compiler changes, bugfixes that keep the language untouched

0.14.7 - May 14, 2024

0.14.6 - April 18, 2024

0.14.5 - March 28, 2024

  • compiler: Reimplement noXor compiler flag. If it is true, compiler does not wrap if with additional xor for error propagation. (LNG-347) (#1096)
  • FIX: compiler: Create stream restrictions on inlining. Compiler wraps streams with new in generated AIR based on block scopes. (LNG-346) (#1099)

0.14.4 - March 1, 2024

0.14.3 - February 29, 2024

  • FIX: compiler: Set noEmptyResponse default to true. Compiler does not generate topology return if there is no return value. (#1093)
  • FIX: language-server: Fix name clashing in LSP. (LNG-342) (#1089)

0.14.2 - February 21, 2024

0.14.1 - February 20, 2024

  • language-server: Add Aqua types representation to LSP. Used to show prettified types in Aqua VSCE. (LNG-331) (#1078)
  • language-server: Resolve filesystem paths for imports. Used to support go-to-definition on import statements in Aqua VSCE. (LNG-309) (#1079)
  • language-server: Support declares and exports in LSP. Show relevant information on hover for them in Aqua VSCE. (LNG-304, LNG-319) (#1070)
  • FIX: compiler: Correctly resolve types to fix issues in case they have the same name. (LNG-334) (#1071)

0.14.0 - January 30, 2024

0.13.4 - January 11, 2024

0.13.3 - December 22, 2023

  • api: Refactor JS API interfaces. See JS API. (#1024)
  • compiler: By default, do not generate topological hops back to INIT_PEER_ID when function has no return value. In other words, function without a return value has fire-and-forget semantics by default. (LNG-305) (#1019)

0.13.2 - December 14, 2023

  • api: Accept structured imports to allow correct resolving of transitive dependencies. See Aqua JS API for more info. (LNG-288) (#989)

0.13.1 - December 7, 2023

0.13.0 - November 22, 2023

  • BREAKING CHANGE: compiler: Change type of nil literal from *⟂ to ?⟂. Refer to Literals to learn more about nil. (LNG-279) (#968)
  • BREAKING CHANGE: compiler: Prohibit mutating options (LNG-277) (#960)
  • api: Use js.UndefOr for defaultServiceId (#980)
  • compiler: Allow omitting field name in struct creation (LNG-261) (#943)
  • compiler: Always generate last argument of fold (LNG-265) (#947)
  • compiler: Generate empty calls to responseHandlerSrv (LNG-286) (#979)
  • FIX: compiler: Generate correct stream name in AIR (LNG-276) (#958)
  • FIX: compiler: Do not throw exception on compilation error construction (LNG-274) (#959)
  • FIX: compiler: Correctly handle multiple closure returned from function calls (LNG-262) (#941)
  • FIX: compiler: Correctly handle incorrect creation of aliased type value (LNG-231) (#946)
  • FIX: compiler: Report error on unknown service or ability method call (LNG-273) (#957)

0.12.4 - October 23, 2023

  • compiler: Handle error function exit in tracing mode (LNG-250) (#921)
  • compiler: Optimize math in compile time (LNG-245) (#922)
  • compiler: Fix gate inlining (LNG-253) (#924)
  • compiler: Fix topology for adjacent ons (LNG-257) (#929)
  • compiler: Fix: passed function is not handled correctly (LNG-260) (#940)
  • compiler: Fix: return ability arrow (LNG-258) (#935)

0.12.3 - September 28, 2023

  • compiler: Make if propagate errors (LNG-202) (#779)
  • compiler: Replace %last_error% with :error: (LNG-239) (#883)
  • compiler: Create structs with stream maps (LNG-244) (#893)
  • compiler: Handle errors from result handling (LNG-247) (#913)

0.12.2 - September 26, 2023

  • compiler: Add warnings subsystem (LNG-117) (#906)
  • compiler: Fail on internal error (LNG-229) (#905)
  • compiler: Services as abilities (LNG-206) (#873)
  • api: Export types from aqua-api (#904)
  • language-server: Pass errors to LSP context (LNG-243) (#888)
  • api: Rethrow errors to capture stacktrace (#907)
  • compiler: Do not restrict stream args when ability is present (LNG-233) (#902)
  • compiler: Fix arrows capture in closures (LNG-242) (#903)

0.12.1 - September 11, 2023

  • compiler: Error on not arrow call after <- (#876)
  • compiler: Fix closure stream capture (LNG-58) (#857)

0.12.0 - August 25, 2023

  • js-client: Move to new js-client interface (#855)
  • compiler: Restrict abilities usage (LNG-208) (#854)
  • compiler: Fix nested abilities (LNG-220) (#852)

0.11.9 - August 9, 2023

  • compiler: Introduce boolean algebra (LNG-211) (#814)
  • compiler: Introduce equality operators (LNG-217) (#820)
  • compiler: Restrict exporting functions that return arrow types or ability types (LNG-209) (#815)
  • compiler: Fix math ops for u64 (LNG-204) (#811)
  • compiler: Add support for nested abilities (LNG-214) (#816)

0.11.8 - July 20, 2023

  • compiler: Introduce abilities (#731)
  • compiler: Find and display link cycles (#787)
  • compiler: Make on propagate errors (LNG-203) (#788)
  • compiler: Make topology hop with non-FFI snippet (LNG-125) (#764)

0.11.7 – June 16, 2023

  • compiler: Fix incorrect service method renaming (LNG-199) (#757)

0.11.6 – June 15, 2023

  • compiler: Fix SO in Topology (LNG-149) (#752)
  • generate JS in Aqua API properly (#755)

0.11.5 – June 14, 2023

  • compiler: Fix closure passing (LNG-92) (#747)
  • parser: Fix compare ops parsing (#748)

0.11.4 – June 13, 2023

  • tracing: Introduce function calls tracing (LNG-169) (#732)
  • aqua-api: Compilation to js/ts for file without exports (LNG-196) (#744)
  • compiler: Fix closure call compilation (LNG-193) (#741)

0.11.3 – June 09, 2023

  • devcontainer: Add js-client to devcontainer (#736)
  • aqua-api: Add default constants to Aqua API (LNG-194) (#738)

0.11.2 – June 07, 2023

  • aqua-api: return JS and TS sources from API (LNG-164) (#730)
  • language-server: Go-to definition for path in use expression (LNG-187) (#733)

0.11.1 – June 01, 2023

  • inline: Fix nullable value in a nested struct (LNG-160) (#724)

0.11.0 – May 29, 2023

  • BREAKING CHANGE: add name scopes to if/else/try blocks (LNG-55) (#715)
  • devcontainer: Add devcontainer spec (LNG-148) (#712)
  • BREAKING CHANGE: parser: Strict indentation (LNG-135) (#714)
  • use new blueprint (#708)

0.10.6 – May 3, 2023

  • bug fix: click-to-definition for modules and abilities (LNG-144) (#705)
  • refactoring: move LSP compiler code to LSP package (LNG-141) (#705)
  • refactoring: move struct/service definitions logic to separate algebra, create locations algebra for LSP (LNG-143) (#705)

0.10.5 – April 17, 2023

  • return arrows from functions (LNG-131) (#693)
  • dependency updates

0.10.4 – April 10, 2023

  • add aqua native compilation (#681)
  • multiline collections and objects creation (#684)
  • remove bangs in lambdas in AIR (#688)
  • bug fix: check if expression can be added to a block. Fix returning arrow in inner blocks (#685)
  • dependency updates

0.10.3 – February 28, 2023

  • bug fix: fix type resolving for functors (LNG-119) (#677)

0.10.2 – February 25, 2023

  • bug fix: name uniquness in stream gates in AIR (#676)

0.10.1 – February 16, 2023

  • bug fix: parse long strings JSON (#672)

0.10.0 – February 16, 2023

  • BREAKING CHANGE: support new JS client (DXJ-283) (#668)

0.9.4 – February 1, 2023

  • bug fix: Canonicalize variable in an object creation or a copy if a variable is a stream (#649) (fedd743)
  • performance: Unfold variables in parallel where it is possible (#656) (439f2cd)

0.9.3 – January 20, 2023

  • Add copy method to modify a structure field while preserving immutability (example, PR: #646)
  • bug fix: sometimes nil cannot be returned from a function properly (#629)
  • bug fix: incorrect number of arguments error message (#645)

0.9.2 – January 20, 2023

  • update dependency @fluencelabs/fluence to v0.28.0

0.9.1 – January 17, 2023

  • Huge refactoring to make it possible to use compiler API as a JS library. Introduce new JS library (@fluencelabs/aqua-api) with API to control Aqua compiler inside JS programs.
  • many Scala and JS libraries updated

0.8.0 – November 30, 2022

  • Structures can be instantiated right in the code (example, PR: #592)
  • module key word was renamed to aqua (docs, PR: #592)
  • Syntax checking has been disabled in generated JS/TS files (#585)
  • a lot of bug fixes (#590, #584, #582, #581, #580, #578, #579)
  • bump fluence-js to version 0.27.3

0.7.7 – October 18, 2022

  • Fix --timeout flag in aqua run, which didn't work
  • AquaVM: add null and never modes to fold instruction
  • AquaVM: Canonicalize streams in service calls and if statements
  • AquaVM: Stream canonicalization
  • bug fixes
  • bump fluence-js to latest version

0.7.6 – September 22, 2022

  • Run builtin services directly from aqua run without any input
  • Run services in aqua run
  • Forbid streams in structures. Restrict assignment with empty streams and arrays
  • bump fluence-js to v0.25.1
  • a lot of bugs fixed

0.7.5 – August 22, 2022

  • added AIR validation on Aqua compilation
  • Aqua parser will throw an error on negative array indexes
  • plugins feature added. Read here for more details
  • improvements in go-to definition feature in VSCode
  • a lot of bugs fixed

0.7.4 – June 24, 2022

  • JSON services for aqua run. (#520).
  • Use JSON for arguments in aqua run without extra brackets for optional fields (#517)

0.7.3 – June 10, 2022

0.7.2 – April 26, 2022

  • FluenceJS was updated to 0.23.0 (#503)
  • noXor, noRelay, const and verbose options in aqua run (#473 #475)
  • aqua run functions can now handle arrays as arguments (#497)
  • aqua run will match JSON arguments with given types (#492)
  • aqua fully supports mathematical expressions (#476)
  • A lot of help and error messages were rewritten (#494)
  • A lot of bug fixes: (#499 #463 #85 #166 #435 #460 #473 #478 #385)

0.7.1 – March 25, 2022

0.7.0 – March 22, 2022

  • Moving all features from deprecated fldist to aqua. All interactions with peers moved to aqua remote subcommand. (#457)
  • Update FluenceJS to 0.21.5 (#456)
  • Switching to v3 FluenceJS API. Improves JS support for optional Aqua types (#453)
  • Add message when function not found (#454)

0.6.4 – March 15, 2022

0.6.3 – March 4, 2022

0.6.2 – February 24, 2022

  • Added top and bottom types to the parser – will be used for debugging functions (#442)
  • Schedule scripts using Aqua CLI (#440)
  • Better timeouts handling for CLI (#437)

0.6.1 – February 16, 2022

  • aqua dist deploy to deploy a service to the Fluence network (#413, #419, #422, #431)
  • aqua dist remove to remove a deployed service (#428)
  • aqua env to show a list of known Fluence peers (#434)
  • Many, many bugfixes (#414, #415, #420, #426, #427)
  • Dependencies updated (#430)

0.6.0 – February 4, 2022

  • Big internal refactoring for better testability & inline syntax additions (#403) – breaks backward compatibility due to breaking change in Fluence-JS
  • Join expression was changed to generate noop (#406)
  • Now can use default imports for aqua compile just like in aqua run (#400)
  • Added helper for aqua run development process (#407)
  • Various bugfixes (#412, #405, #397)

0.5.3 – January 13, 2022

0.5.2 – December 24, 2021

  • Topology transformations were completely rewritten: the same Aqua scripts may produce different AIR, probably more efficient, but new bugs might be introduced as well (#371)
  • CLI: as an effort to move all the Fluence services management routines to Aqua, uploading files to Fluence's companion IPFS is now available via Aqua CLI (#390)
  • CLI: bugfixes (#388)

0.5.1 – December 10, 2021

  • CLI: Support for secret key in aqua run (#375)
  • CLI: Add log level, print generated AIR (#368)
  • Improved topology calculation in par blocks (#369)
  • JAR file is not pushed to releases anymore. JS is the sole compilation target now
  • CLI: path to @fluencelabs/aqua-lib is provided as an imports folder by default. import "@fluencelabs/aqua-lib/builtin.aqua" should always work now, even outside of an NPM project (#384)
  • CLI: Pass arguments to aqua run as JSON via --data or --data-path flag (#386)

0.5.0 – November 24, 2021

  • Breaking semantic change: Stream restrictions. This fixes many obscure bugs which happened when using streams inside for cycles (#321)
  • This version of Aqua is not compatible with fldist so far (cannot run the emitted AIR via fldist). Use aqua run to run Aqua instead (#358)
  • Added timeout parameter support for aqua run (#360)
  • You need to update FluenceJS to 0.15.0+ and Fluence Node to v0.0.23+ for Aqua 0.5 support, previous versions will not work.

0.4.1 – November 10, 2021

  • New language feature: closures (#327)
  • New CLI option --scheduled to compile Aqua for the Fluence's Script Storage (#355)
  • Bugfixes for using streams to construct more complex streams (#277)
  • Better errors rendering (#322, #337)
  • Bugfix for comparing Option types (#343)

0.4.0 – October 25, 2021

  • Now Aqua compiler emits JS/TS code for Fluence JS 0.14. The new JS/TS SDK is heavily rewritten to support async service functions declaration. It also embeds a deeply refactored AquaVM. (#334)
  • Various bugfixes for AIR generation and the compiler behavior (#328, #335, #336, #338)

0.3.2 – October 13, 2021

  • Experimental feature: now can run Aqua from Aqua CLI (#324):
sh
aqua run -i aqua/caller.aqua -f "callFunc(\"arg1\",\"arg2\")"
sh
aqua run -i aqua/caller.aqua -f "callFunc(\"arg1\",\"arg2\")"

0.3.1 – September 13, 2021

  • Now .aqua extension in imports is optional: you may import "file.aqua" or just import "file" with the same effect (#292)
  • CLI improvements: --dry run (#290), output directory is created if not present (#287)
  • Many bugfixes: for imports (#289), TypeScript backend (#285, #294, #298), and language semantics (#275).

0.3.0 – September 8, 2021

  • TypeScript output of the compiler now targets a completely rewritten TypeScript SDK (#251)
  • Constants are now UPPER_CASED, including always-available HOST_PEER_ID and INIT_PEER_ID (#260)
  • The compiler is now distributed as @fluencelabs/aqua package (was aqua-cli) (#278)
  • aqua is the name of the compiler CLI command now (was aqua-cli) (#278)
  • JVM version of the compiler is now available with aqua-j command; JS build is called by default – so no more need to have JVM installed (#278)
  • Now you can have a file that contains only a header with imports, uses, declares, and exports, and no new definitions (#274)

0.2.1 – August 31, 2021

  • Javascript build of the compiler is now distributed via NPM: to run without Java, use aqua-js command (#256)
  • Now dots are allowed in the module declarations: module Space.Module & many bugfixes (#258)

0.2.0 – August 27, 2021

  • Now the compiler emits AIR with the new (ap instruction, hence it's not backwards compatible (#241)
  • Many performance optimizations and bugfixes (#255, #254, #252, #249)

0.1.14 – August 20, 2021

  • Aqua file header changes: module, declares, use, export expressions (#245), see Modularity for the docs.
  • Experimental Scala.js build of the compiler (#247)

0.1.13 – August 10, 2021

  • Functions can export (return) several values, see #229
  • Internal changes: migrate to Scala3 (#228), added Product type (#168)

0.1.12 – August 4, 2021

  • Can have functions consisting of a return operand only, returning a literal or an argument

0.1.11 – August 3, 2021

  • Added host_peer_id , a predefined constant that points on the relay if Aqua compilation is configured so, and on %init_peer_id% otherwise, see #218.

0.1.10 – July 26, 2021

  • Added <<- operator to push a value into a stream, see #214, #209.