Repository navigation
·
11 commits
to main
since this release
Immutable
release. Only release title and notes can be modified.
Removed
intois gone. The undocumentedxs |> into "cmdline"ransh -c
past every effect check (pure,readonly,plan, module loading,
--can). Pipe instead:xs | sh -c "…", or betterxs | prog args.
Changed
- A lazy value runs where it is used, unless it was written inside a
within.let here = lsthencd srcthenherelistssrc/
(it listed the old directory). A value written insidewithin cd/
within envstill keeps that scope however late it runs. An init
file'slet gl = git log …now logs the repo you are in. - The REPL echo of a command-backed
letnever runs it. It shows
gl : seq<string> (command-backed — runs on each use; type gl to run it);let cleanup = rm -rf buildno longer deletes on Enter. A
frozen or reified value still echoes its data. - A lazy command
letis allowed in the init file and in modules
(let gl = git log --oneline -n 10); eager forms (| line,$(…)
read at once,Seq.freeze) stay refused, with a message that says
why. - A module's body runs once per program, shared by every import of
it (diamonds, aliases, symlinks — identity is the real path). It ran
once per import site, so nested imports could take exponential time. - No command runs while a module is imported — refused at run time
too, so a lambda or a helper passed as a value can't slip through. servebounds request bodies:maxBody(aSize, default
16 MiB), answered 413 past it.Uuidparsing refuses surrounding whitespace, inUuid.parse
and in JSON fields alike.- A source file must be valid UTF-8: an invalid byte is a located
error, not a silent U+FFFD. - Statements in a block don't count toward the nesting limit, so a
function orwithinbody can be any length.
Fixed
- A long flat script no longer overflows the stack (6,000 lines
crashed with exit 134; 700 on a 1 MB stack). - A
Secretargument works in captured commands —curl -H $auth … | complete,| line,$e(…),NAME=$s cmd,within env A=$s. - Module members named like a builtin are exported (
Doc.Text). - SIGTERM stops every child tree once, including
pmapworkers'
grandchildren, which could be orphaned. weir restoresends the host token asadddoes, never writes
lock.json, and names the entry and field of a malformed lock entry
instead of crashing.- HTTP client: one header pair per received line (
Set-Cookieno
longer merged, values never rewritten); an unknown charset is a
precise error;authplus an explicitAuthorizationis refused;
Authorization/Cookieare dropped on a cross-origin redirect; a
redirect loop is a named error. serve: no body on HEAD, 1xx, 204 or 304; framing and hop-by-hop
headers from a handler are dropped; aStreamelement is split into
onedata:line per line, so a newline can't forge an SSE event.gen typesleaves a self-referential field out (with a note), so
the type reads withfrom json.- REPL:
HOME=no longer crashes it;#savewrites a script that
runs; the line editor moves and deletes an emoji whole; path
completion quotes spaces and quotes; typed-ahead input and Enter
before the first prompt work; a piped blank line ends an unfinished
entry; anonymous-record fields complete;#quit now,#alias let,
#help map, piped#historyand destructuringletechoes behave. - One formatter for the CLI and the LSP: the shebang stays
verbatim, error lines count from line 1,fmtrefuses rather than
flip-flopping, and trims only what the parser treats as whitespace. - LSP: every request gets an answer, with the JSON-RPC error codes;
exitwithoutshutdownexits 1; header names are case-insensitive. - Checker: copy-and-update fields align under the first field;
imported unions type an unannotated parameter; a union reached only
through another module doesn't make a local constructor ambiguous;
let un (W x) = xworks for a single-case union. - Weir-worded errors for an unreadable or directory script,
importing a directory or device,within lockon a directory, a
negative or zeropoll interval, a lone surrogate in JSON,from json
type mismatches, a comma between record fields,cmd |> try,-e ''. - Smaller fixes: run time is linear in a statement's lines (a 64k-
line heredoc took 53 s);Path.globbracket classes never reach the
regex engine raw;showprintsSome (1, 2); a timed-outretry
reports the attempts it made; float-holding==namesFloat.near;
build --helpon a union-onlyArgs.loadis scoped; error columns
stay on their line.