6be2a3d5da
* Refactor ServiceSem * Refactor AbilityIdSem * Remove tokens from state * Refactor * Add mangler * Fix tests * Refactor valueToRaw * ServiceIdTag * AbilityId -> ServiceId * Add ServiceType * Fix defineServiceType * Refactor resolveArrowDef * Refactor TypesHelper * Add ServiceIdTag inlining * Implement resolution * Add service as ability passing * Fix importing services * Fix cli * Implement default service * Remove println * Fix capture * Add integration test * Fix id * Fix test * Fix test * Refactor test * Do not resolve id * Refactor FuncArrow creation * Refactor FuncArrow wrapper creation * Add named arguments * Add comment * ensureIsString -> valueToStringRaw, refactor OnSem * Resolve services as abilities * Add name to varNames * Remove service hack * Capture services, do not rename captured * Rename arrows along with values * Fix CallArrowRaw.map * Fix unit tests * Remove service case * Refactor abilities state * Propagate rootServiceIds * Remove unused * Add comments * Refactor * Refactor * Add test --------- Co-authored-by: Dima <dmitry.shakhtarin@fluence.ai> |
||
---|---|---|
.devcontainer | ||
.github | ||
.vscode | ||
api | ||
aqua-run/src/main/scala/aqua/run | ||
aqua-src | ||
backend | ||
compiler/src | ||
integration-tests | ||
io | ||
js | ||
language-server | ||
linker/src | ||
model | ||
parser/src | ||
project | ||
semantics/src | ||
types/src | ||
utils | ||
.gitignore | ||
.jvmopts | ||
.scalafmt.conf | ||
build.sbt | ||
CHANGELOG.md | ||
ci.cjs | ||
CONTRIBUTING.md | ||
INSTALL.md | ||
LICENSE | ||
pnpm-lock.yaml | ||
pnpm-workspace.yaml | ||
README.md |
Aqua
Aqua is an open-source language for distributed workflow coordination in p2p networks. Aqua programs are executed on many peers, sequentially or in parallel, forming a single-use coordination network. Applications are turned into hostless workflows over distributed function calls, which enables various levels of decentralization: from handling by a limited set of servers to complete peer-to-peer architecture by connecting user devices directly. Aqua is the core of the Fluence protocol and a framework for internet or private cloud applications.
Installation and Usage
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.
Other ways of installing Aqua can be found in INSTALL.md.
Documentation
Comprehensive documentation and usage examples as well as a number of videos can be found in Aqua Book. Aqua Playground demonstrates how to start writing Aqua and integrate it into a TypeScript application. Numerous videos are available at our YouTube channel.
Repository Structure
- api - Aqua API for JS
- api - Scala sources
- api-npm - JS project
- api-example - usage example
- aqua-run - Aqua API to run functions
- backend - compilation backend interface
- 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
- compiler - compiler as a pure function made from linker, semantics and backend
- model - middle-end, internal representation of the code, optimizations and transformations
- linker - checks dependencies between modules, builds and combines an abstract dependencies tree
- parser - parser, takes source text and produces a source AST
- semantics - rules to convert source AST into the model
- types - data types, arrows, stream types definitions and variance
Support
Please, file an issue if you find a bug. You can also contact us at Discord or Telegram. We will do our best to resolve the issue ASAP.
Contributing
Any interested person is welcome to contribute to the project. Please, make sure you read and follow some basic rules.
License
All software code is copyright (c) Fluence Labs, Inc. under the Apache-2.0 license.