Programming language for distributed systems & p2p
Go to file
renovate[bot] 300d989797
chore(deps): update dependency org.scala-js:sbt-scalajs to v1.13.0 (#653)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-30 09:51:16 +03:00
.github chore: Fix release notify step (#651) 2023-01-27 12:59:25 +03:00
.vscode Add support for the new features of JS SDK API (#251) 2021-09-08 13:16:59 +03:00
api chore(main): release aqua 0.9.3 (#640) 2023-01-20 09:53:20 +03:00
aqua-run/src/main/scala/aqua/run fix(error-messages): fix incorrect number of arguments message [fixes LNG-108] (#645) 2023-01-18 20:06:31 +03:00
aqua-src feat: copy structures implementation [fixes LNG-102] (#646) 2023-01-20 12:02:05 +07:00
backend Add errors to API results, fix AquaConfig, fix types (#620) 2022-12-29 20:03:57 +03:00
cli chore(main): release aqua 0.9.3 (#640) 2023-01-20 09:53:20 +03:00
compiler/src feat: copy structures implementation [fixes LNG-102] (#646) 2023-01-20 12:02:05 +07:00
io Api for fluence cli (#611) 2022-12-28 11:30:42 +03:00
js Api for fluence cli (#611) 2022-12-28 11:30:42 +03:00
language-server chore(main): release aqua 0.9.3 (#640) 2023-01-20 09:53:20 +03:00
linker/src Module and Use expressions (#245) 2021-08-20 18:03:47 +03:00
model fix: Canonicalize variable in object creation or copy if variable is a stream (#649) 2023-01-27 13:24:52 +03:00
parser/src feat: copy structures implementation [fixes LNG-102] (#646) 2023-01-20 12:02:05 +07:00
project chore(deps): update dependency org.scala-js:sbt-scalajs to v1.13.0 (#653) 2023-01-30 09:51:16 +03:00
semantics/src feat: copy structures implementation [fixes LNG-102] (#646) 2023-01-20 12:02:05 +07:00
types/src LNG-96 object creation (#592) 2022-11-30 15:28:06 +03:00
utils Api for fluence cli (#611) 2022-12-28 11:30:42 +03:00
.gitignore Api for fluence cli (#611) 2022-12-28 11:30:42 +03:00
.jvmopts Upper cased constants (#260) 2021-09-07 11:09:48 +03:00
.scalafmt.conf VarModel -> VarRaw in collect functions (#405) 2022-01-20 07:08:26 +03:00
build.sbt chore(main): release aqua 0.9.3 (#640) 2023-01-20 09:53:20 +03:00
CHANGELOG.md chore(main): release aqua 0.9.3 (#640) 2023-01-20 09:53:20 +03:00
README.md update links (#583) 2022-10-25 11:46:27 +03:00

Aqua

release npm

Aqua is a new-gen language for distributed systems.

Aqua programs are executed on many peers, sequentially or in parallel, forming a single-use coordination network.

Aqua's runtime is heterogeneous: it includes browsers, servers, devices, all involved in solving a single task. Therefore, Aqua scripts are compiled into several targets at once, with AIR and Typescript as a default.

Please refer to Aqua Book to learn more about Aqua language.

Install and run

The easiest way to use Aqua is to download the latest build from npm: @fluencelabs/aqua.

npm i -g @fluencelabs/aqua
aqua --input src/aqua --output src/generated

Input directory should contain files with .aqua scripts.

Build from sources

If you want to build Aqua compiler from the sourcecode, you need Scala's sbt installed.

Aqua compiler itself can be compiled to and distributed either as JavaScript or Java file.

Build to JS

Run sbt cliJS/fullLinkOpt to build JavaScript file. You can find the compiled file in: cli/.js/target/scala-%scala-version%/cli-opt.

Then run it with node:

node aqua-%version_number%.js -i path/to/input/dir -o path/to/output/dir

Javascript build is the default for Aqua.

Build to JVM

Run sbt cli/assembly to build JAR file. It is located in cli/.jvm/target/scala-%scala-version%/

It requires java to run Aqua compiler in .jar file from the command line:

java -jar aqua-%version_number%.jar -i path/to/input/dir -o path/to/output/dir

Repository structure

  • types data types, arrows, stream types definitions and variance
  • parser - parser, takes source text and produces a source AST
  • model - middle-end, internal representation of the code, optimizations and transfromations
  • model/transform - optimizations and transfromations, converting model to the result, ready to be rendered
  • model/test-kit - tests and test helpers for the model and transformations
  • semantics - rules to convert source AST into the model
  • linker - checks dependencies between modules, builds and combines an abstract dependencies tree
  • backend - compilation backend interface
  • compiler - compiler as a pure function made from linker, semantics and backend
  • backend/air generates AIR code from the middle-end model
  • backend/ts - generates AIR code and Typescript wrappers for use with Fluence JS SDK
  • cli - CLI interface

References