Changelog
Aqua compiler's versioning scheme is the following: 0.BREAKING.ENHANCING.RELEASE
0shows that Aqua does not meet its vision yet, so syntax and semantics can change quicklyBREAKINGpart is incremented for each breaking change when old.aquafiles need to be updated to compile with the new versionENHANCINGpart is incremented for every syntax additionRELEASEis the release number, shows internal compiler changes, bugfixes that keep the language untouched
0.13.4 - January 11, 2023
- compiler:
for ... recinstruction (not documented). (LNG-307) (#1026) - compiler: Enhance type error message on ability or structure creation (report missing fields, excessive arguments passed and types mismatch). (LNG-313) (#1033)
- FIX: compiler: Correctly capture arrows from context in nested closures. (LNG-317) (#1038)
- FIX: compiler: Correctly capture abilities in closures. (LNG-314) (#1035)
- FIX: compiler: Correctly type check calls to services and abilities methods (check number of arguments and their types). (LNG-315) (#1037)
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_IDwhen 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
- language-server: Pass types of variables tokens to LSP to display them. See Aqua Extension for VSCode. (LNG-285) (#999)
- compiler: Allow returning resolved service as ability. See Services and Abilities. (LNG-266) (#977)
- compiler: Support
*[](anonymous empty stream) as a function argument. See Collections. (LNG-280) (#967)
0.13.0 - November 22, 2023
- BREAKING CHANGE: compiler: Change type of
nilliteral from*⟂to?⟂. Refer to Literals to learn more aboutnil. (LNG-279) (#968) - BREAKING CHANGE: compiler: Prohibit mutating options (LNG-277) (#960)
- api: Use
js.UndefOrfordefaultServiceId(#980) - compiler: Allow omitting field name in struct creation (LNG-261) (#943)
- compiler: Always generate
lastargument offold(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
ifpropagate 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
onpropagate errors (LNG-203) (#788) - compiler: Make topology hop with non-FFI snippet (LNG-125) (#764)
0.11.7 – June 16, 2023
0.11.6 – June 15, 2023
0.11.5 – June 14, 2023
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
useexpression (LNG-187) (#733)
0.11.1 – June 01, 2023
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
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
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
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
copymethod to modify a structure field while preserving immutability (example, PR: #646) - bug fix: sometimes
nilcannot 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)
modulekey word was renamed toaqua(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
--timeoutflag inaqua 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 runwithout extra brackets for optional fields (#517)
0.7.3 – June 10, 2022
- Language server for VSCode (#512)
- Go-to definitions for VSCode (#514 #516)
PARTICLE_TTLandPARTICLE_TIMESTAMPconstants (#505)- Bug fix: #519 #518 #509 #507 #508 #510 #513 #504
0.7.2 – April 26, 2022
- FluenceJS was updated to 0.23.0 (#503)
noXor,noRelay,constandverboseoptions inaqua run (#473 #475)aqua runfunctions can now handle arrays as arguments (#497)aqua runwill 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
- Now Aqua supports arithmetic operators (e.g.
1 + x), arrow calls in any place (e.g.for x <- foo(3 + bar()) par...) and simple comparison (e.g.if a > 3) (#461 -> #410) - Aqua CLI fixes (#466, #465, #464, #462)
0.7.0 – March 22, 2022
- Moving all features from deprecated
fldisttoaqua. All interactions with peers moved toaqua remotesubcommand. (#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
- Closures capture their topological context now (#356)
- Small changes (#452, #449, #450)
0.6.3 – March 4, 2022
- Added collections creation syntax (#445)
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 deployto deploy a service to the Fluence network (#413, #419, #422, #431)aqua dist removeto remove a deployed service (#428)aqua envto 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
aquacompile just like inaqua run(#400) - Added helper for
aqua rundevelopment process (#407) - Various bugfixes (#412, #405, #397)
0.5.3 – January 13, 2022
- New expression: explicit
jointo wait for results computed in parallel branches (#402) - New syntax to access a collection element by index:
array[5]. With this syntax, non-literal indices are allowed, likearray[conf.length](#401) - Refactoring of the compiler's internals: introducing
rawmodel for values (#398) - New network monitoring functions are added to Aqua CLI (#393)
- Small improvements and bug fixes (#395, #396, #394, #392)
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
parblocks (#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 runas JSON via--dataor--data-pathflag (#386)
0.5.0 – November 24, 2021
- Breaking semantic change: Stream restrictions. This fixes many obscure bugs which happened when using streams inside
forcycles (#321) - This version of Aqua is not compatible with
fldistso far (cannot run the emittedAIRviafldist). Useaqua runto 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
--scheduledto 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):
shaqua run -i aqua/caller.aqua -f "callFunc(\"arg1\",\"arg2\")"
shaqua run -i aqua/caller.aqua -f "callFunc(\"arg1\",\"arg2\")"
- Many performance-related updates, compiler now runs faster (#308, #324)
- UX improvements for CLI and JS/TS backend (#307, #313, #303, #305, #301, #302)
0.3.1 – September 13, 2021
- Now
.aquaextension in imports is optional: you mayimport "file.aqua"or justimport "file"with the same effect (#292) - CLI improvements:
--dryrun (#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-availableHOST_PEER_IDandINIT_PEER_ID(#260) - The compiler is now distributed as @fluencelabs/aqua package (was
aqua-cli) (#278) aquais the name of the compiler CLI command now (wasaqua-cli) (#278)- JVM version of the compiler is now available with
aqua-jcommand; 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-jscommand (#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
(apinstruction, 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,exportexpressions (#245), see Imports and Exports 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.