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 quickly
- BREAKINGpart is incremented for each breaking change when old- .aquafiles need to be updated to compile with the new version
- ENHANCINGpart is incremented for every syntax addition
- RELEASEis 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 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 --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_TTLand- PARTICLE_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,- constand- verboseoptions in- aqua 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):
sh
sh
- 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 (was- aqua-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.