2021-04-14 14:42:20 +03:00
## Aqua
2021-02-01 16:17:46 +03:00
2021-04-30 11:51:55 +03:00
[](https://github.com/fluencelabs/aqua/actions/workflows/release.yml)
2021-04-14 14:42:20 +03:00
Aqua is a new-gen language for distributed systems.
2021-02-01 16:17:46 +03:00
2021-04-14 14:42:20 +03:00
Aqua programs are executed on many peers, sequentially
2021-04-13 16:02:36 +03:00
or in parallel, forming a single-use coordination network.
2021-03-19 12:40:27 +03:00
2021-04-14 14:42:20 +03:00
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.
2021-03-19 12:40:27 +03:00
2021-04-16 20:15:45 +03:00
## Using Aqua
2021-08-03 17:23:28 +03:00
Please refer to [Aqua Book ](https://doc.fluence.dev/aqua-book/ ) to learn how to use Aqua.
2021-04-16 20:15:45 +03:00
2021-04-13 16:02:36 +03:00
## Compiler CLI
2021-03-19 12:40:27 +03:00
2021-09-08 13:37:59 +03:00
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 ](https://github.com/fluencelabs/aqua/releases ) page.
2021-03-19 12:40:27 +03:00
2021-09-08 13:37:59 +03:00
It requires `node` to run Aqua compiler in `.js` file from the command line:
2021-03-19 12:40:27 +03:00
```commandline
2021-09-08 13:37:59 +03:00
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:
```commandline
java -jar aqua-%version_number%.jar -i path/to/input/dir -o path/to/output/dir
2021-03-19 12:40:27 +03:00
```
2021-04-13 16:02:36 +03:00
Input directory should contain files with `aqua` scripts.
## Repository structure
- **[types ](./types )** – data types, arrows, stream types definitions and variance
- **[parser ](./parser )** - parser, takes source text and produces a source AST
- **[model ](./model )** - middle-end, internal representation of the code, optimizations and transfromations
2021-08-16 17:58:15 +03:00
- **[model/transform ](./model/transform )** - optimizations and transfromations, converting model to the result, ready to be rendered
- **[model/test-kit ](./model/test-kit )** - tests and test helpers for the model and transformations
2021-04-13 16:02:36 +03:00
- **[semantics ](./semantics )** - rules to convert source AST into the model
2021-04-13 16:05:31 +03:00
- **[linker ](./linker )** - checks dependencies between modules, builds and combines an abstract dependencies tree
2021-08-03 17:23:28 +03:00
- **[backend ](./backend )** - compilation backend interface
- **[compiler ](./compiler )** - compiler as a pure function made from _linker_ , _semantics_ and _backend_
2021-04-13 16:02:36 +03:00
- **[backend/air ](./backend/air )** – generates AIR code from the middle-end model
- **[backend/ts ](./backend/ts )** - generates AIR code and Typescript wrappers for use with Fluence JS SDK
- **[cli ](./cli )** - CLI interface