Skip to content

richardwesthaver/demo

Repository files navigation

Welcome to our first demo system. What you will find here is a modular client-server software stack which can be extended and customized by the user at runtime.

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).

Guide

Build

  • install dependencies
    ./tools/deps.sh
        
  • make executables
    Simply run make build. Read the makefile and change the options as needed.
MODE
Mode (debug, release)
LISP
Lisp (sbcl, cmucl, ccl)
CFG
Config (default.cfg)

Run

./demo -i

Config

Configs can be specified in JSON, TOML, RON, or of course SEXP. See default.cfg for an example.

Play

The high-level user interface is presented as a multi-modal GUI application which adapts to the specific application instances below.

Weather

This backend retrieves weather data using the NWS API.

Stocks

The ‘Stocks’ backend features a stock ticker with real-time analysis capabilities.

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.

tasks

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

rs-macroexpand

  • rs-gen-file
  • rs-defmacro
  • rs-macros
  • rs-macroexpand
  • rs-macroexpand-1

c-macroexpand

  • c-gen-file h/c
  • c-defmacro
  • c-macros
  • c-macroexpand
  • c-macroexpand-1

slint-macroexpand

  • slint-gen-file
  • slint-defmacro
  • slint-macros
  • slint-macroexpand
  • slint-macroexpand-1

html (using who)

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.

CLI

using clingon, decide on generic options and write it up

docs

work on doc generation – Rust and CL should be accounted for.

tests

We have none! need to make it more comfy - set up testing in all Rust crates and for the lisp systems.