Skip to content

Recent Changes

Mike Wright edited this page Sep 2, 2026 · 1 revision

Recent changes

This page summarizes user-visible work merged into sw-mlpl during the 30-day window from 2026-08-04 through 2026-09-02. It is a curated guide, not a replacement for the repository's complete commit-derived change log or compiler coverage report.

Language and array programming

  • Comparison operators can now be written infix: <, >, <=, >=, ==, and !=.
  • at(v, i) provides direct vector indexing, and a length-one array broadcasts like a scalar.
  • First-class references are namespace-qualified rather than limited to user functions. Partial application and call support higher-order programs; each, table, atop, and over add array-oriented composition.
  • Static include, annotations and @test reflection, guaranteed cleanup with bracket, explicit global_set, name removal, generalized transpose_axes, and blocked rank-3/rank-4 display broaden general-purpose use.
  • Ordering/selection, generation, bit operations, KV-cache state, structured record access, JSON/TOML/native codecs, and character-aware string operations were added or expanded.

See the Language Tour and the repository language reference for current forms and exact contracts.

Files, streams, and native compilation

The native sandbox now has filesystem walking, text and byte I/O, atomic writes, metadata, bounded reads, incremental sinks, packed-byte readers, decode limits, and length-prefixed scanning. read_stdin_chunk enables bounded incremental input.

The compile-to-Rust subset grew substantially: user functions, conditionals, loops and mutation, records and Result, ?, strings, binary I/O, bit operations, process I/O and exit status, comparisons, array bridges, common string operations, and several inspection/array builtins now lower to native code. A generated coverage gate prevents the implementation and its report from silently drifting. Compilation remains a subset; check the compiler guide before choosing it as a deployment target.

Native extensions and application loops

Native hosts can register namespaced extension providers, inspect their signatures, and invoke them through the interpreter. The C-compatible boundary now carries scalars, dense arrays, nested records, and opaque persistent handles, with panic/error containment.

Native builds can dynamically load packaged .dylib/.so providers with load_extension and MLPL_EXTENSION_PATH. Ports provide bounded share-nothing channels, handler dispatch, and a parked-main applet model for host-driven event loops. These facilities are native-only and are not exposed by the browser/WASM evaluator. The adjacent demo-extensions repository exercises the boundary end to end.

Browser, demos, visualization, and editing

  • The browser gained a clearer REPL/Editor split, narrated editor runs, build-provenance and skew indicators, improved demo discovery, and contextual next-step help.
  • The demo collection reached 96 entries in this window, adding Data Forge, experiment-quality, classical-ML, book-coverage, combinator, KV-cache, rolling-retrain, compact-idiom, and dataflow examples.
  • dataflow(nodes, edges) renders structural SVG diagrams with grouping bands, quantitative edge widths, highlighting, recurrence back-edges, label-aware spacing, and caller-controlled layout spacing.
  • The bundled Emacs mode gained indentation, buffer/batch formatting, reflow, a menu, and a one-file setup example. User-defined MLPL functions and extracted web demos now carry docstrings.

Ecosystem growth

The core repository's web footer now exposes the growing companion collection by subject. The adjacent repositories use real applications, curricula, and research experiments to exercise public MLPL surfaces and identify small, reusable upstream capabilities. See Companion Repositories for the current map, including emufpga.

Clone this wiki locally