Skip to content

Releases: dylan-sutton-chavez/edge-lang

v0.9.6

Choose a tag to compare

@github-actions github-actions released this 10 Oct 09:52

Actor servers take thousands of clients on one thread and replay only unfinished messages, and module functions keep their locals apart once they run hot

  • A function from an imported module no longer mixes two of its locals from its second call on, a phi in the lowered code read its sources at the wrong instruction since 0.9.0.
  • A consistency suite holds 500 generated programs to one answer per call, cold, warm, from a module and as a method, and a std suite runs the edge-python-std tests on every push.
  • An eval waiting on a sleep or a host call parks instead of holding the scheduler, a busy actor yields every preempt back-edges and sits in the ready queue once, and limits.timeout sets the deadline of an eval group up to 300 seconds.
  • One mio thread serves the TCP ingress and the HTTP control port, a message holds at most 16 MiB, a request has 30 seconds to arrive, and a full inbox stops reading and answers 503.
  • The durable log marks each message done, compacts past 64 MiB and syncs before a /pub answers 202, so a restart replays only what was left, and SIGTERM gives the actors 25 seconds to finish.
  • Dead code and the limits.heap and limits.calls notices are gone, the Lucide fetch falls back to a second CDN, and the crates say 0.9.6.

v0.9.5...v0.9.6

v0.9.5

Choose a tag to compare

@github-actions github-actions released this 09 Oct 04:15

Lazy generators and iterators, live dict views and exception chaining, so the Python delta drops to three design choices

  • Generator expressions are lazy, and map, filter, zip, enumerate and reversed compute each item as it is asked for.
  • keys, values and items return views that read the dict live, and the keys and items views take the set operators and isdisjoint.
  • raise X from Y sets __cause__, an exception raised while another is handled keeps it as __context__, and an uncaught chain prints each exception in turn.
  • A local read or deleted before its first assignment raises UnboundLocalError, which sits under NameError.
  • Every comprehension runs in a scope of its own, a walrus in it binds in the enclosing scope, and its first iterable fails where the comprehension stands.
  • is takes only None, True, False, ... and NotImplemented, and named escapes, complex literals and what the engine only faked fail at compile time.
  • Every frame moves to one register stack, which ends the undefined behaviour in the collector, and snapshots move to format 9.
  • The docs link under /docs/edge-python, the fuzzer runs, watches, triages and replays a campaign from make, and the crates say 0.9.5.

v0.9.4...v0.9.5

v0.9.4

Choose a tag to compare

@github-actions github-actions released this 07 Oct 09:17

A Makefile runs every build, and the docs regroup with boxes and cards

  • A Makefile at the root runs every build, lint and test on Linux, macOS and Windows, and CI calls the same targets. The cargo aliases are gone, so cargo wasm is now make wasm.
  • Docs draw boxes from markdown markers and nest two folders deep, and edge build holds package docs to the same rules with raw HTML still refused.
  • The boxes are NOTE, TIP, IMPORTANT, WARNING, CAUTION, QUESTION, CARDS, BANNER and COPY, and a card takes any Lucide icon from the list make lucide fetches at build time.
  • The docs regroup into Get started, Language, Platforms, Reference and Internals, with a first app tutorial and new JavaScript, Rust and Registry pages.
  • Pages under getting-started and implementation, and the CLI, actors, embedding and HTTP API pages, move to new paths.
  • Miri drops the lang suite, which failed every day since the crate left the repo.
  • The engine and the JS host behave the same as 0.9.3, and the crates say 0.9.4.

v0.9.3...v0.9.4

v0.9.3

Choose a tag to compare

@github-actions github-actions released this 06 Oct 09:38

A plugin calls str.format and list.sort through the frame a script call gets

v0.9.2...v0.9.3

v0.9.2

Choose a tag to compare

@github-actions github-actions released this 06 Oct 08:33

edge publish signs with the token instead of sending it

  • edge publish signs the sha256 of the artifact, its token id and the second with an Ed25519 key derived from the token, so the registry keeps only a public key and the token never leaves the machine.
  • A signature holds for its own bytes and five minutes either side, and the registry refuses the old Bearer header.
  • Tokens made before the registry takes this change stop working. Make a new one at https://edgepython.com/settings#tokens and publis
  • The room script lives in js/src/room.ts, so a site can hash it for its CSP. The engine and the JS host behave the same as 0.9.1.
  • The crates say 0.9.2.

v0.9.1...v0.9.2

v0.9.1

Choose a tag to compare

@github-actions github-actions released this 05 Oct 22:44

The docs send questions to chat.edgepython.com, and search names services

  • Questions go to POST https://chat.edgepython.com, in the HTTP API page and in the skill an agent reads.
  • Search answers with docs, people, services and packages, and a service reads at /api/service/.
  • The crates say 0.9.1, and the engine, the CLI and the JS host are the same as 0.9.0.

v0.9.0...v0.9.1

v0.9.0

Choose a tag to compare

@github-actions github-actions released this 05 Oct 17:18

Lowered code runs on typed registers, and the repo builds and tests with no secret

  • Lowered code runs on typed registers, and a loop that turns hot moves up a tier in the middle of its run.
  • A call to an impure function takes the fast path, and only names, constants and single characters are interned.
  • The bench covers 5,496 cases instead of 5,463 and runs the shared ones 2.0% faster, its best case 4.6 times.
  • Snapshots carry format 7, so a state saved by 0.8 no longer restores.
  • The repo holds the engine, the CLI, the JS host and the docs, and CI tests them with no secret, so a pull request from a fork runs whole.
  • Build jobs hand their outputs on as artifacts, tests serve them on loopback through cdn/, and a release attaches the tested tree as cdn.tar.gz.

v0.8.2...v0.9.0

v0.8.2

Choose a tag to compare

@github-actions github-actions released this 04 Oct 22:30

The bot reads the pages it finds, and works its numbers out in Edge Python

  • The bot searches up to three terms per question and reads each page it finds, the section a hit points at or a package's record, rather than a short snippet.
  • It reads SKILL.md from edgepython.com, so a release reaches it without a redeploy.
  • When an answer needs a number or an output, the model runs Edge Python on the published engine, with nothing granted and a small budget.
  • A citation links the exact section as (1), a list like [1, 3] links each page, and a claim drawn from the reference links its closest page.
  • A mention whose text Discord withholds is left alone instead of answered blind.
  • A draft program no longer shows on the home page, as a card or as an untitled row under Artifacts.
  • CI runs every test again, and the memory tests take turns so they no longer fail at random.

v0.8.1...v0.8.2

v0.8.1

Choose a tag to compare

@github-actions github-actions released this 04 Oct 21:06

The engine closes its gaps with Python, and programs read the files and secrets they are granted

  • Full match patterns, generic aliases, unions, in-place dunders and subclasses of builtin exceptions work as in Python.
  • map, filter, zip and enumerate return iterators, and dicts and sets compare user objects by __hash__ and __eq__.
  • A nonlocal written in a loop keeps its value, floats round from their exact value, and an error keeps the line it was raised at.
  • The new fs and secret modules read project files and host secrets under what edge.json grants, and a package passes on only what its importer gave it.
  • A run is capped at 256 MB instead of 100,000 objects, --memory and --ops set the limits, and actor groups use limits.memory in place of heap.
  • The playground draws each system call of a run as a tree and never shows a secret whole.
  • Docs, packages and people answer as data under /api, and edgepython.com/SKILL.md gives an agent the whole reference.
  • The registry resolves at a new address, so a CLI older than 0.8.1 must be updated to add or lock packages.
  • Questions in any language are answered at ask.edgepython.com and in the Discord server, now linked from the nav.
  • The bench covers 5,463 cases instead of 4,213 and runs the shared ones 4.2% faster.

v0.8.0...v0.8.1

v0.8.0

Choose a tag to compare

@github-actions github-actions released this 01 Oct 09:10

A program pays only for the builtins it names, and memoization reaches every pure function

  • A VM registers only the builtins its program names, so print() costs 23 µs instead of 139 and the geometric mean of vm.json falls 62%.
  • Memoization reaches every pure function whose inputs cannot change, so fib(15) runs 32 times faster.
  • A memoized call drops results that a rebound builtin or a mutable argument made stale, and a free name reads the live global, never a caller local.
  • str.find, count, index, startswith and endswith read the string in place instead of copying it, and generators share the items they iterate.
  • A set that would hold itself raises TypeError instead of aborting, and dict and set lookups and hash() reject unhashable values.
  • A finished generator stays finished, builtins take a range or a generator, and import without a module name is a syntax error.
  • A constant fold stops at the join of or, and or a ternary, and naming the type of an instance no longer leaks memory.
  • The Bench job prints its mean on every run, and CI reports the brotli-11 size of compiler.wasm.
  • The site banner points to GitHub, and the Team plan offers a commercial license for lang.

v0.7.9...v0.8.0