Skip to content

Confluence

Choose a tag to compare

@vygr vygr released this 18 Sep 13:59
· 1662 commits to master since this release

Release Notes

Summary of Major Highlights

This release introduces major distributed networking capabilities, rich internet
and desktop applications, enhanced system resilience, and runtime refinements:

  • Zero-Configuration Network Discovery: Automatic peer discovery and cluster
    joining over LAN via UDP beacons (link -a), backed by host UDP bindings
    and the @Net service.

  • New Desktop Applications & CLI Tools: Rich GUI additions including
    Weather, Crypto, World Sun Clock, and News (Hacker News reader),
    alongside the new curl HTTP client CLI and cluster monitoring command.

  • Three-Tier Service Scopes & Persistent System Identity: Clear scoping
    with * (Global across bridges), @ (System-wide on single machine), and
    local (per-node) prefixes, anchored by (system-id).

  • Resilient Timeouts & Clean Teardown: Standardized mail-read-timeout
    across all RPC client interfaces to prevent deadlocks, graceful GUI exit
    down to a pristine state via (pii-exit), and stable network settlement
    with (net-quiet).

  • Core Language & Build Enhancements: Multi-branch implicit progn for
    if/ifn else bodies, modernized vp-rdef/vp-fdef register binding,
    streamlined asynchronous CPM pipelines, and quiet builds (*build_verb*).


Desktop Applications & GUI

  • Weather App (apps/desktop/weather/app.lisp):

    • Desktop weather forecasting tool consuming wttr.in endpoints through
      lib/net/http.inc and lib/net/json.inc.

    • Performs asynchronous, non-blocking data acquisition on worker tasks.

    • Displays 2D procedural vector weather icons, weather metric cards,
      a 3-day forecast view, and quick city buttons with persistent state.

  • Crypto Ticker (apps/desktop/crypto/app.lisp):

    • Live cryptocurrency market monitoring consuming Coinranking endpoints.

    • Features real-time 24-hour procedural vector sparkline graphs with smooth
      curve interpolation and area shading.

    • Calculates 24-hour high/low spreads and persists user settings in
      crypto.tre.

  • World Sun Clock (apps/desktop/sunclock/app.lisp):

    • Visualizes spherical solar ephemeris and cartography on an equirectangular
      world map.

    • Renders subsolar zenith positioning, solar terminator curves with twilight
      bands, and day/night state across global continents.

    • Provides sunrise, sunset, solar noon, and day length calculations across
      world cities.

    • Supports interactive time navigation (-1h, +1h, -1d, +1d, Now)
      and automated daylight progression animation.

  • News Reader (apps/desktop/news/app.lisp):

    • Live Hacker News feed reader with category filtering across Top, Newest,
      Show HN, Ask HN, and Jobs.

    • Uses master-detail navigation with feed parsing via
      node-hnapi.herokuapp.com.

    • Renders story summaries and nested discussions using ChrysaLisp's native
      Md Markdown formatting component.

  • Interactive Terminal in GUI Mode:

    • Running ./run.sh -f launches Node 0 with a background TUI terminal
      beneath the GUI compositor.

    • Integrates native EOF stream termination in PII and TUI layers to enable
      direct command piping from the host shell (e.g. echo "tests" | ./run.sh -f).

  • Multi-Screen Session Configuration:

    • Launch scripts now accept -g <count> to specify the number of GUI
      sessions, defaulting to 1.
  • Graceful GUI Teardown:

    • Selecting Quit in the Logout application cleanly tears down the GUI
      service via RPC and terminates Node 0, leaving the host pristine.
  • Clock & Canvas Enhancements:

    • Updated Clock and reviewed underlying date routines in
      lib/date/date.inc.

    • Expanded Canvas demo capabilities and added the Opcode canvas demo.


Networking & Distributed Services

  • Zero-Configuration Link Auto-Discovery (link -a):

    • Servers started with link -l [port] -a broadcast periodic UDP beacons
      on port 3334 announcing their TCP listening port.

    • Clients started with link -a listen for peer beacons and automatically
      negotiate TCP links to join the cluster.

    • Servers run without -a operate in standard manual mode without
      broadcasting beacons.

  • Host UDP Socket Interface:

    • Added non-blocking UDP socket bindings in host PII (host_net_udp_bind,
      host_net_udp_send, host_net_udp_recv) supporting port reuse and
      broadcast delivery.

    • Exposed via the Node 0 @Net service through (net-beacon-rpc) and
      (net-discover-rpc).

  • Hierarchical Service Scoping:

    • Service names now follow a three-tier naming convention:

      • * Prefix: Global cluster services across link bridges.

      • @ Prefix: System-wide services shared across nodes on a single host.

      • No Prefix: Node-local services.

  • Cluster Inspection Tool (cmd/cluster.lisp):

    • New command inspecting cluster topology, node task counts, memory
      allocation, stack watermarks, host architectures (cpu/os/abi), and
      declared services.

    • Supports -v (--verbose) for live probe status and -t (--timeout)
      for custom probe timeouts.

  • HTTP Client CLI (cmd/curl.lisp):

    • Command-line HTTP client supporting request methods (-X), custom
      headers (-H), request payloads (-d), response headers (-i), head
      requests (-I), and silent execution (-s).
  • Network Link Fragment Unification:

    • Introduced :sys_link :in_frag for shared handling of incoming fragments.

    • Unified :host_net :in to share :sys_mail :in parcel assembly routines.

  • Network Settlement Helper:

    • Added (net-quiet [delay_us] [stable_count] [last_cnt]) -> (node_id ...)
      to verify that node count remains constant across successive intervals
      before proceeding with distributed tasks.

Kernel & System Infrastructure

  • Bounded RPC Mailbox Reads:

    • Introduced (mail-read-timeout mbox [timeout_us]) -> msg | :nil (aliased
      as mail-timeout-read) in sys/lisp.inc with architecture-scaled
      defaults.

    • Updated all system client *-rpc functions to use timeouts to prevent
      unbounded blocking on unresponsive tasks.

  • Host Machine Identification:

    • Added (system-id) -> nodeid kernel primitive retrieving the persistent
      unique host machine identifier.
  • PII Process Termination:

    • Added (pii-exit) to allow cooperative shutdown of the host process.
  • Bridge Node Cleanup:

    • Removed legacy (lisp-node?) and (cpp-node?) checks in favor of
      self-hosted system-to-system bridging.

    • Purged obsolete machine-specific cluster test scripts.


Language, Compiler & Build System

  • Control Flow Syntax Simplification:

    • if and ifn now support implicit progn evaluation in else branches:
      (if tst form [else_form ...]) and (ifn tst form [else_form ...]).

    • Updated when and unless macros to leverage this behavior, ensuring
      both evaluate strictly to :nil when their condition is not met.

  • Register Binding Macro Cleanup:

    • vp-rdef and vp-fdef now expand cleanly to standard bind forms
      with &ignore support, simplifying register extraction.
  • Orthogonal CPM Asynchronous Pipeline:

    • Restructured the asynchronous CPM image loading/saving pipeline into a
      streamlined, composable stage-based model.
  • Quiet Compilation Mode:

    • Added the *build_verb* configuration setting (defaulting to 0) to
      suppress compilation output.

    • Verbose diagnostic output can be enabled using make -v 1.