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 quicklyBREAKING
part is incremented for each breaking change when old.aqua
files need to be updated to compile with the new versionENHANCING
part is incremented for every syntax additionRELEASE
is the release number, shows internal compiler changes, bugfixes that keep the language untouched
0.13.4 - January 11, 2023
- compiler:
for ... rec
instruction (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_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
- 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
nil
literal from*⟂
to?⟂
. Refer to Literals to learn more aboutnil
. (LNG-279) (#968) - BREAKING CHANGE: compiler: Prohibit mutating options (LNG-277) (#960)
- api: Use
js.UndefOr
fordefaultServiceId
(#980) - compiler: Allow omitting field name in struct creation (LNG-261) (#943)
- compiler: Always generate
last
argument 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
on
s (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
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
use
expression (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
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 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
--timeout
flag 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 run
without 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_TTL
andPARTICLE_TIMESTAMP
constants (#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
,const
andverbose
options inaqua 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
- 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
fldist
toaqua
. All interactions with peers moved toaqua 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
- 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 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 inaqua run
(#400) - Added helper for
aqua run
development process (#407) - Various bugfixes (#412, #405, #397)
0.5.3 – January 13, 2022
- New expression: explicit
join
to 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
raw
model 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
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 emittedAIR
viafldist
). Useaqua 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\")"
- 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
.aqua
extension in imports is optional: you mayimport "file.aqua"
or justimport "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-availableHOST_PEER_ID
andINIT_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 (wasaqua-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 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.