1. How it works
The backend services are written in Rust and controlled by a simple messaging protocol. Services provide common runtime capabilities known as the service protocol but are specialized on a unique service type which may in turn register their own custom protocols (via core).
Services are capable of dispatching data directly to clients, or storing data in the database (sqlite, postgres, mysql).
The frontend clients are pre-dominantly written in Common Lisp and come in many shapes and sizes. There is a cli-client, web-client (CLOG), docker-client (archlinux, stumpwm, McCLIM), and native-client which also compiles to WASM (slint-rs).
2. Guide
2.1. Build
install dependencies
./tools/deps.sh
- make executables
Simply runmake build
. Read themakefile
and change the options as needed. - Mode (debug, release)
- Lisp (sbcl, cmucl, ccl)
- Config (default.cfg)
2.2. Run
./demo -i
2.3. Config
Configs can be specified in JSON, TOML, RON, or of course SEXP. See
default.cfg
for an example.
2.4. Play
The high-level user interface is presented as a multi-modal GUI application which adapts to the specific application instances below.
2.4.1. Weather
This backend retrieves weather data using the NWS API.
2.4.2. Stocks
The 'Stocks' backend features a stock ticker with real-time analysis capabilities.
2.4.3. Bench
This is a benchmark backend for testing the capabilities of our demo. It spins up some mock services and allows fine-grained control of input/throughput.
3. tasks
3.1. TODO DSLs
- consider tree-sitter parsing layout, use as a guide for developing a single syntax which expands to Rust or C.
- with-rs
- with-c
- with-rs/c
- with-cargo
- compile-rs/c
3.1.1. TODO rs-macroexpand
- rs-gen-file
- rs-defmacro
- rs-macros
- rs-macroexpand
- rs-macroexpand-1
3.1.2. TODO c-macroexpand
- c-gen-file h/c
- c-defmacro
- c-macros
- c-macroexpand
- c-macroexpand-1
3.1.3. TODO slint-macroexpand
- slint-gen-file
- slint-defmacro
- slint-macros
- slint-macroexpand
- slint-macroexpand-1
3.1.4. TODO html (using who)
3.2. TODO web templates
create a basic static page in CL which will be used to host Slint UIs and other WASM doo-dads in a browser.
3.3. TODO CLI
using clingon, decide on generic options and write it up
3.4. TODO docs
work on doc generation – Rust and CL should be accounted for.
3.5. TODO tests
We have none! need to make it more comfy - set up testing in all Rust crates and for the lisp systems.