aqua/README.md
Dima 7556db0a93
Use .js file in aqua command by default (#278)
* move to `aqua` and `aqua-j`

* more updates

* update readme

* aqua-cli -> aqua

* don't publish aqua as aqua-cli

* update scala

Co-authored-by: Dmitry Kurinskiy <dmitry@fluence.one>
2021-09-08 13:37:59 +03:00

2.5 KiB
Raw Blame History

Aqua

release

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.

Using Aqua

Please refer to Aqua Book to learn how to use Aqua.

Compiler CLI

To build the Aqua compiler, clone the repo & run sbt cliJS/fullLinkOpt to build JavaScript file. File location: cli/.js/target/scala-%scala-version%/cli-opt. Or sbt cli/assembly to build JAR file. File location: cli/.jvm/target/scala-%scala-version%/ Or simply download the latest JS or JAR file from the releases page.

It requires node to run Aqua compiler in .js file from the command line:

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

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

Input directory should contain files with aqua scripts.

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