<feed xmlns='http://www.w3.org/2005/Atom'>
<title>aup/README.md, branch master</title>
<subtitle>Declarative systems language and compiler targeting verified Pure modules.
</subtitle>
<id>http://git.yeowoo.org/aup/atom?h=master</id>
<link rel='self' href='http://git.yeowoo.org/aup/atom?h=master'/>
<link rel='alternate' type='text/html' href='http://git.yeowoo.org/aup/'/>
<updated>2026-10-18T18:30:16Z</updated>
<entry>
<title>Module format v7 (Pure 027's 4b-2): keyed documents gone from the language: no bytes by key, message by key, name[key] or .replace(first .. last, value), the opcodes DOC, DOC_SIZE and REPLACE (those after them moved up), the header 38 bytes; examples/editor.aup and bounded-editor.aup gone (examples/documents.aup does their work in a keyed list), and with them the parity with the earlier editor (documents_model checks the new one); diagnostics on documents rewritten for plain messages or gone (304); a module's records counted at their v7 place; a field changed by '=' said so where a call was written</title>
<updated>2026-10-18T18:30:16Z</updated>
<author>
<name>eunhhu</name>
<email>necpition205@gmail.com</email>
</author>
<published>2026-10-18T18:30:16Z</published>
<link rel='alternate' type='text/html' href='http://git.yeowoo.org/aup/commit/?id=26658fea927aa87e861c936b2d7aa4163d38bdb4'/>
<id>urn:sha1:26658fea927aa87e861c936b2d7aa4163d38bdb4</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Give aup an i64: exact integers, and literals typed by what they meet</title>
<updated>2026-09-30T15:32:17Z</updated>
<author>
<name>eunhhu</name>
<email>necpition205@gmail.com</email>
</author>
<published>2026-09-30T15:32:17Z</published>
<link rel='alternate' type='text/html' href='http://git.yeowoo.org/aup/commit/?id=24d95e19b4eec44c5f8c9f551ebf4e8fc465d5f5'/>
<id>urn:sha1:24d95e19b4eec44c5f8c9f551ebf4e8fc465d5f5</id>
<content type='text'>
state, record, message, output and argument fields, lets, views, keys
and slices can be i64 (Pure 016 stage 2). An integer literal becomes
an i64 where the other side of an operation, a comparison or an
assignment is one; a literal-only side follows the other, found by
compiling it on trial and rolling back. + - * and negation fail the
event with overflow, / and % floor, and i64(x) and number(n) are the
only way between the two, so a mix is a diagnostic that says so.

The check adds 18 i64 diagnostics, i64 accepted forms (with a 30-deep
chain that must stay linear), an event-by-event program past 2^53
and at the edges, and i64 values in the generated programs.
</content>
</entry>
<entry>
<title>Give aup a bool: true and false, and conditions that take one</title>
<updated>2026-09-30T14:23:30Z</updated>
<author>
<name>eunhhu</name>
<email>necpition205@gmail.com</email>
</author>
<published>2026-09-30T14:23:30Z</published>
<link rel='alternate' type='text/html' href='http://git.yeowoo.org/aup/commit/?id=b8e3faaf1a3766591d31e6c5411c9e4fcc59a7a4'/>
<id>urn:sha1:b8e3faaf1a3766591d31e6c5411c9e4fcc59a7a4</id>
<content type='text'>
A condition was any number, non-zero being true: done was a number field,
a view showed 1 for true, and done + 1 was no type error. Now bool is its
own type (Pure 016, module format v6):

- true and false; comparisons, text comparisons, has and ! &amp;&amp; || give a
  bool. Bools are equal or not; they are no numbers and have no order.
- if, conditional expressions, require, where (folds, walks, filtered
  tables) take a bool. Given a number, the diagnostic says how to make
  one: "if takes a bool, not a number: compare it, as in n != 0".
- Bool states (state on = false), record fields (done = false), message,
  output and argument fields (ok: bool), lets, views and columns.
  Interpolation writes true or false. A list is not keyed by a bool.
- The examples' flags are bools (charge's holding, toggle's visible,
  tasks' done).

Checks: 20 bool diagnostics, a form using bools everywhere, an app whose
every output shows true and false (states, items, views, columns, text)
and whose replacement turns a number into a bool and back. Models hold
bools and compare them strictly: Python's True == 1 no longer hides a 1
where a true belongs. Generated programs are typed, numbers and bools.
</content>
</entry>
<entry>
<title>Build Pure's hosts from its top level</title>
<updated>2026-09-27T12:14:46Z</updated>
<author>
<name>eunhhu</name>
<email>necpition205@gmail.com</email>
</author>
<published>2026-09-27T12:14:46Z</published>
<link rel='alternate' type='text/html' href='http://git.yeowoo.org/aup/commit/?id=04bc25fdf06247f3db781f581195ee7a16165a72'/>
<id>urn:sha1:04bc25fdf06247f3db781f581195ee7a16165a72</id>
<content type='text'>
Pure now keeps the app model, the store and pure-serve in core/, store/ and
serve/ with one top-level make; the earlier document server the parity
checks compare against stays in prototypes/connections.

</content>
</entry>
<entry>
<title>Add keyed lists and text comparison</title>
<updated>2026-09-26T15:38:33Z</updated>
<author>
<name>eunhhu</name>
<email>necpition205@gmail.com</email>
</author>
<published>2026-09-26T15:38:33Z</published>
<link rel='alternate' type='text/html' href='http://git.yeowoo.org/aup/commit/?id=e90d494d718762d402871c9194ab036088dd9e0c'/>
<id>urn:sha1:e90d494d718762d402871c9194ab036088dd9e0c</id>
<content type='text'>
state xs: list of R by field keeps its items in that field's order, each
key once: xs.add(R { ... }) places an item (a taken key fails the event
with exists), xs[key] finds one by halving (its field, or its index),
xs.has(key) asks, xs.remove(key) removes. append and insert are refused
on a keyed list, add on another, and a key field is never assigned.
Texts compare with == != &lt; &lt;= &gt; &gt;= by their bytes.

Checked against a Python model over 3,600 random steps with a text-keyed
and a number-keyed list; 13 diagnostics; examples/tally.aup.

</content>
</entry>
<entry>
<title>Add aup watch: build again when what a build read changes</title>
<updated>2026-09-26T10:49:33Z</updated>
<author>
<name>eunhhu</name>
<email>necpition205@gmail.com</email>
</author>
<published>2026-09-26T10:49:33Z</published>
<link rel='alternate' type='text/html' href='http://git.yeowoo.org/aup/commit/?id=cb0f7878f11025ea31cd4c5cecb5ae359b14c148'/>
<id>urn:sha1:cb0f7878f11025ea31cd4c5cecb5ae359b14c148</id>
<content type='text'>
A build records every path it opened or looked for and a digest of the
bytes there, so a rebuild happens exactly when one of them reads
differently: the source, a library (the one with the error too), or a
library appearing where one was searched. A change is built once it reads
the same twice in a row, so a file caught halfway through being written
is never built; the module is replaced whole through a rename.

</content>
</entry>
<entry>
<title>Check declared state across restarts</title>
<updated>2026-09-25T14:50:37Z</updated>
<author>
<name>eunhhu</name>
<email>necpition205@gmail.com</email>
</author>
<published>2026-09-25T14:50:37Z</published>
<link rel='alternate' type='text/html' href='http://git.yeowoo.org/aup/commit/?id=fd16040840e3f1392da9b4ed4175c6f4fc24a803'/>
<id>urn:sha1:fd16040840e3f1392da9b4ed4175c6f4fc24a803</id>
<content type='text'>
The list app and the text editor run on a tree store through pure-run
--store, restarting at random points, and must keep matching their
reference models. The language notes state that a declared state is a
stored state when the host gives a store.

</content>
</entry>
<entry>
<title>Record Vega's first component in the plan</title>
<updated>2026-09-25T14:24:13Z</updated>
<author>
<name>eunhhu</name>
<email>necpition205@gmail.com</email>
</author>
<published>2026-09-25T14:24:13Z</published>
<link rel='alternate' type='text/html' href='http://git.yeowoo.org/aup/commit/?id=2685f20d09b384309de294947099ce2ae29d13b8'/>
<id>urn:sha1:2685f20d09b384309de294947099ce2ae29d13b8</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Add fns and libraries</title>
<updated>2026-09-25T14:14:08Z</updated>
<author>
<name>eunhhu</name>
<email>necpition205@gmail.com</email>
</author>
<published>2026-09-25T14:14:08Z</published>
<link rel='alternate' type='text/html' href='http://git.yeowoo.org/aup/commit/?id=c298c2eec0b7ec0fcdacb8f661a9da3c184d2960'/>
<id>urn:sha1:c298c2eec0b7ec0fcdacb8f661a9da3c184d2960</id>
<content type='text'>
fn name(params) = value declares one expression, inlined where it is
called: arguments are computed once onto the stack and the body reads them
with PICK, so a fn costs no runtime call and keeps Pure's bound on work.
Parameters take any kind of value; recursion is a compile error.

use name reads name.aup beside the source or from AUP_PATH. A library
declares only fns and uses, sees only its parameters, and is called as
name.fn(...). Diagnostics now carry the file they are in, and the
compiler takes a loader so that sources come from the host.

examples/words.aup is such a library; examples/tasks.aup uses it and still
matches its reference model.

</content>
</entry>
<entry>
<title>Add conditional expressions and table views</title>
<updated>2026-09-25T14:05:58Z</updated>
<author>
<name>eunhhu</name>
<email>necpition205@gmail.com</email>
</author>
<published>2026-09-25T14:05:58Z</published>
<link rel='alternate' type='text/html' href='http://git.yeowoo.org/aup/commit/?id=91aa0afcd34cff345f1f7293d82fec7d00082d8b'/>
<id>urn:sha1:91aa0afcd34cff345f1f7293d82fec7d00082d8b</id>
<content type='text'>
if c { a } else { b }, with else-if chains, is an expression anywhere a
value goes. Only the chosen branch runs, every branch gives the same type,
and nesting that would pass Pure's limit of 8 value-carrying joins is a
compile error.

view name = each row in list { column = value ... } declares a table with
a row per item; columns read their row as an index of the list. An index
now reads and writes its item's fields directly (at.title, at.done = 1),
so 'position' cannot name a record field.

examples/tasks.aup gains conditional views and a board table and still
matches its reference model; a new check confirms the unchosen branch is
never computed.

</content>
</entry>
</feed>
