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 run make build. Read the makefile 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.