Commit graph

22 commits

Author SHA256 Message Date
15bfc18167 Native executables, std/array and std/simd
"Projects and packages" gets a section on Native AOT: (aot #t), where the
executable goes, what it gives and costs, and (aot-cpu ...) for the CPU it
is built for. The standard library chapter gets std/array and std/simd
after std/maths, and "Performance" a section on vectors: the kernels first,
a loop with its tail, masks, and when vectors pay, with the measurements
from the Advent of Code solutions. modules/std/array.sz and
modules/std/simd.sz are the reference pages, generated from the modules'
docs.

🤖 Generated with [ECA](https://eca.dev) (anthropic/claude-opus-4-7)

Co-Authored-By: eca-agent <git@eca.dev>
2026-10-18 17:16:42 +02:00
ca170a7e24 Grammars read quoted literals
Bjolang 0.2.0 reads a quoted literal with a grammar, and refuses #:tag
on a union case. The section on literals for your own types now declares
a def/grammar and shows its errors. The std/url summary says what the
compiler checks in a URL literal, and how a computed scheme, host or
port is made.

🤖 Generated with [ECA](https://eca.dev) (anthropic/claude-opus-4-7)

Co-Authored-By: eca-agent <git@eca.dev>
2026-10-17 18:03:35 +02:00
1b4493700d Benchmarking: #:setup and #:setup-every as bindings, the body as forms
(std bench) changed: a setup binds names, as let* does, and the body uses
them and the parameters by name instead of being a (fun ...). The deck's
benchmark file, the options table and the paragraphs on the setups and
parameters say so, with an example of the two setups used together. The
outputs are unchanged: the same benchmarks measure the same.

🤖 Generated with [ECA](https://eca.dev) (anthropic/claude-opus-4-7)

Co-Authored-By: eca-agent <git@eca.dev>
2026-10-16 21:07:00 +02:00
f8cb9d3459 Benchmarking: (std bench) and bjo bench, with the card game
A new section 2.9 between Testing and Performance: time-it, a benchmark file
for the deck, how a benchmark is measured, setup and parameters, the menu,
--detail and --scaling, --compare-within, saving and comparing, --against
with --processes, the flags, and --serve. Every output is from a real run.
It shows the weakness of comparing two processes too: unchanged benchmarks
called faster or SLOWER by a few percent, and how --processes 6 settles it.

The standard library chapter gets std/bench, std/stopwatch says time-it is
(std bench)'s, and modules/std/bench/ has the reference pages for (std
bench), (std bench stats) and (std bench store).

🤖 Generated with [ECA](https://eca.dev) (anthropic/claude-opus-4-7)

Co-Authored-By: eca-agent <git@eca.dev>
2026-10-16 19:42:23 +02:00
ef24c95108 Performance: choosing between List and Vec, and Map and OrderedMap
A new subsection under Performance with two tables from the benchmarks in
bench/collections. It says which operations each collection does cheaply,
and names the traps: vec-add in a loop, binding the rest of a vec in a
recursive match, and indexing into a list.

🤖 Generated with [ECA](https://eca.dev)

Co-Authored-By: eca-agent <git@eca.dev>
2026-10-14 21:38:05 +02:00
671ad9ac88 Benchmarks: the memory the service took, measured again
Bjolang's peak in the service's closed loop was inflated by how its
program gathered samples, and Go's matched run was given that peak as its
limit. With the program fixed, Bjolang peaks at 369 MB on all cores, and
Go, given the larger corrected .NET peak, at 364.

🤖 Generated with [ECA](https://eca.dev)

Co-Authored-By: eca-agent <git@eca.dev>
2026-10-14 12:02:50 +02:00
ba5c7afc9d Benchmarks: Go and Hopac in one comparison, and the service run again
The primitive benchmarks are one table with all six columns, Bjolang's
two, Go's two and Hopac's two, with the introduction once and what each
comparison says after it. What each operation allocates is one paragraph
for all three.

The service section has a new run on the current runtime. Go with as
much memory as .NET has the shortest tail at 250k/s on four cores;
Bjolang has it at every higher load. Over three runs the row at 500k/s
on all cores moved too much to rank, and the text says so.

🤖 Generated with [ECA](https://eca.dev)

Co-Authored-By: eca-agent <git@eca.dev>
2026-10-14 11:45:01 +02:00
970754b3be Benchmarks: the choose after the scheduler fix
A chain of two fibers no longer moves between cores when the inline
budget runs out, and the skewed choose takes 181 ns at best, not 230.
The ring rows move by a nanosecond or two, and the spawn row to 210 ns.
The text says that the spawn row is slow only on many cores: on two or
four, the current scheduler spawns faster than the pool did.

🤖 Generated with [ECA](https://eca.dev)

Co-Authored-By: eca-agent <git@eca.dev>
2026-10-14 10:38:28 +02:00
6fef5a9c5f Benchmarks: current numbers, and a service under load
The ring, spawn and choose rows are measured again. Spawn and choose cost
about twice what they did, with the scheduler that replaced the .NET
pool, and several sentences no longer held: an event synced alone costs
nothing over chan-put, a choose allocates 56 bytes, and Hopac's choose
stays ahead with a cancel IVar.

A new section gives bench/service against Go and Hopac: the closed loop,
and the open loop with latency taken from when a request was due.

🤖 Generated with [ECA](https://eca.dev)

Co-Authored-By: eca-agent <git@eca.dev>
2026-10-14 07:51:19 +02:00
bb8cefba19 Scopes work in ordinary code, and macros can write by-colour
The Scopes section shows a with-scope in a defun, and own!, own-disposable
and release!. The Macros section has a section on by-colour.

🤖 Generated with [ECA](https://eca.dev) (anthropic/claude-opus-5-5)

Co-Authored-By: eca-agent <git@eca.dev>
2026-10-10 22:45:43 +02:00
56a5e7c141 Transactions: a guide in Part II, and reference pages for (std stm)
Part II's section on concurrency has a new subsection, "Shared state:
atomics and transactions": when to share data instead of sending it,
locations and atomically, the rules for a transaction function, waiting
with tx-retry, a transaction as an event in a choose, tx-or-else, the
queue, map and counter, and what transactions cost. The examples use
the card game and were compiled and run.

Part III has a section on std/stm that links the four reference pages:
(std stm), and (std stm queue), (std stm map) and (std stm counter) in
a directory of their own, as (text xml) has.

🤖 Generated with [ECA](https://eca.dev)

Co-Authored-By: eca-agent <git@eca.dev>
2026-10-09 14:05:10 +02:00
bc58247994 The REPL section: line editing, Tab completion and :complete.
The REPL no longer relies on rlwrap. Say what it does at a terminal
instead (history, Enter continuing an open form), how Tab completes,
and that :complete gives editors the same completions.

🤖 Generated with [ECA](https://eca.dev)

Co-Authored-By: eca-agent <git@eca.dev>
2026-10-06 13:08:01 +02:00
5735643b05 Fix two typos in the benchmark comparison.
🤖 Generated with [ECA](https://eca.dev)

Co-Authored-By: eca-agent <git@eca.dev>
2026-10-06 11:54:38 +02:00
60110605ec Compare the concurrency benchmarks with Hopac as well as Go.
The Go table is refreshed with a new run (the numbers moved within the
noise), and the section gains a Hopac part: the same rows on the same
.NET runtime, plain and with every operation raced against a cancel
IVar, with what the numbers show. Hopac is ahead without cancellation
and far behind with one shared cancel IVar, and allocates more.

🤖 Generated with [ECA](https://eca.dev)

Co-Authored-By: eca-agent <git@eca.dev>
2026-10-06 11:47:23 +02:00
7fbff1f6cc Changed some language in Writing Programs. 2026-10-06 10:41:30 +02:00
554d74b7f2 chan-put and chan-get, and Bjolang's concurrency compared with Go
The channels section introduces chan-put and chan-get beside the event
forms. A new section compares the CML benchmarks with their Go twins, with
Bjolang measured both syncing events and with chan-put/chan-get and Go both
plain and racing ctx.Done(), and says what Bjolang has that Go does not:
events as values and structured scopes.

🤖 Generated with [ECA](https://eca.dev)

Co-Authored-By: eca-agent <git@eca.dev>
2026-10-06 08:22:12 +02:00
96d6ebc8e2 The REPL's :show prints the doc of a visible name
🤖 Generated with [ECA](https://eca.dev)

Co-Authored-By: eca-agent <git@eca.dev>
2026-10-05 21:42:58 +02:00
1ef2489224 Strings are UTF-8, and System.String is converted at a .NET call
🤖 Generated with [ECA](https://eca.dev)

Co-Authored-By: eca-agent <git@eca.dev>
2026-10-04 22:20:16 +02:00
48771a225a Paths, .field, hoisting, and (std hashset)
- (.field value), and get, try-get, set and update for reading and copying
  along a path of fields and keys, with ref-set in the generic operations.
- please-hoist-i-promise-i-am-not-naughty, in the macros section.
- (std set) is (std hashset), and the collector is hash-setting.

🤖 Generated with [ECA](https://eca.dev) (anthropic/claude-opus-4-5)

Co-Authored-By: eca-agent <git@eca.dev>
2026-10-03 15:03:56 +02:00
1fe22a4dfd Loops: :finish, :abandon, :while, :until and the :subloop form
The clause table, stopping early and nesting use the new names, and
count-lines uses :until instead of a counter that only drove the loop.

🤖 Generated with [ECA](https://eca.dev) (anthropic/claude-opus-5-5)

Co-Authored-By: eca-agent <git@eca.dev>
2026-10-02 22:01:47 +02:00
27c7d64641 The manual as a site: a landing page, the chapters, and a page per module
index.sz is a landing page pointing to the manual, now manual.sz, and to
modules/, where each library module has a page made by @generate-docs from
the docs it was compiled with. The chapters gain appendices, and part III
links each module to its page. glasnost's page cache is ignored.

🤖 Generated with [ECA](https://eca.dev) (anthropic/claude-opus-5-5)

Co-Authored-By: eca-agent <git@eca.dev>
2026-10-01 18:37:22 +02:00
e54bd31d69 first commit 2026-10-01 11:36:18 +02:00