<feed xmlns='http://www.w3.org/2005/Atom'>
<title>aup/src, 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-09-27T12:45:45Z</updated>
<entry>
<title>Name aup's one part: compiler/</title>
<updated>2026-09-27T12:45:45Z</updated>
<author>
<name>eunhhu</name>
<email>necpition205@gmail.com</email>
</author>
<published>2026-09-27T12:45:45Z</published>
<link rel='alternate' type='text/html' href='http://git.yeowoo.org/aup/commit/?id=56b8202a23eb08167f27fea4782152959f8ea9ef'/>
<id>urn:sha1:56b8202a23eb08167f27fea4782152959f8ea9ef</id>
<content type='text'>
As in Pure and Vega, the top level directories are the parts; aup has one,
the compiler, checked end to end by tests/check.py.

</content>
</entry>
<entry>
<title>Declare outputs and send them: output ordered = message { ... }</title>
<updated>2026-09-27T06:54:35Z</updated>
<author>
<name>eunhhu</name>
<email>necpition205@gmail.com</email>
</author>
<published>2026-09-27T06:54:35Z</published>
<link rel='alternate' type='text/html' href='http://git.yeowoo.org/aup/commit/?id=6d219cbfb8f88aa51ce785ff78c5250d806b67c9'/>
<id>urn:sha1:6d219cbfb8f88aa51ce785ff78c5250d806b67c9</id>
<content type='text'>
An output is a message the app sends, with fields and groups as a
message has; send ordered { item: x, to: { city: y } } gives every
field once, in any order, groups in their own braces, and compiles to
Pure's SEND. Diagnostics cover a missing field, a group given a value,
an unknown field, a mistyped value, a send to a message, a handler for
an output, a field given twice and reading an output as a state; kinds
in messages now carry their article (an output, a key input).

</content>
</entry>
<entry>
<title>Group message fields: to: { city: text }, read as ship.to.city</title>
<updated>2026-09-27T06:30:51Z</updated>
<author>
<name>eunhhu</name>
<email>necpition205@gmail.com</email>
</author>
<published>2026-09-27T06:30:51Z</published>
<link rel='alternate' type='text/html' href='http://git.yeowoo.org/aup/commit/?id=1a72fe031a007323c51f49810dcf6164b8aaaae2'/>
<id>urn:sha1:1a72fe031a007323c51f49810dcf6164b8aaaae2</id>
<content type='text'>
A message's field block may hold groups, nested as deep as the 31
characters of a path allow; the compiler flattens them into fields
named by their path (to.city), which Pure's module format takes, so
groups cost nothing at run time. A member chain on a message names a
field by its path; one that stops at a group, or names a field the
group lacks, is diagnosed, and a field's own member (m.text.bytes)
still reads the field. A module may have 64 message fields.

The JSON server check posts 100 random bodies with groups two deep
(members shuffled at every level, strings with escapes, control bytes,
Korean, emoji and U+2028) to pure-serve, which reads them in place, and
compares the answers and the table with a Python model; a group's fixed
field from the query and ten malformed group bodies are checked too.
Six diagnostics cover groups.

</content>
</entry>
<entry>
<title>Raise the program limits to Pure's: 65,535 instructions, 4,096 strings</title>
<updated>2026-09-26T17:10:52Z</updated>
<author>
<name>eunhhu</name>
<email>necpition205@gmail.com</email>
</author>
<published>2026-09-26T17:10:52Z</published>
<link rel='alternate' type='text/html' href='http://git.yeowoo.org/aup/commit/?id=8a3c59d61a61055b4d93838eff6fbb89b5b91e9a'/>
<id>urn:sha1:8a3c59d61a61055b4d93838eff6fbb89b5b91e9a</id>
<content type='text'>
The limit's diagnostic now comes from fns that double what they inline,
and a module of some 12,000 instructions (200 KB) must compile and run.

</content>
</entry>
<entry>
<title>Add time: now, every timers, floor and %</title>
<updated>2026-09-26T16:55:14Z</updated>
<author>
<name>eunhhu</name>
<email>necpition205@gmail.com</email>
</author>
<published>2026-09-26T16:55:14Z</published>
<link rel='alternate' type='text/html' href='http://git.yeowoo.org/aup/commit/?id=de0818ad89434b63ed82d49b57723e41ee4466ff'/>
<id>urn:sha1:de0818ad89434b63ed82d49b57723e41ee4466ff</id>
<content type='text'>
now is the time of the event a handler runs for (milliseconds since
1970, UTC), which a host gives and a script can replay; views cannot read
it. input tick = every 1 second declares a timer (ms, second, minute or
hour; 1 ms to a day). floor(x) and x % y, taking the divisor's sign as
Python does, take times apart. Checked against a Python model over 3,600
random steps; nine diagnostics.

</content>
</entry>
<entry>
<title>Declare number and text message fields; check JSON bodies</title>
<updated>2026-09-26T16:48:09Z</updated>
<author>
<name>eunhhu</name>
<email>necpition205@gmail.com</email>
</author>
<published>2026-09-26T16:48:09Z</published>
<link rel='alternate' type='text/html' href='http://git.yeowoo.org/aup/commit/?id=2a050e1b9842eda4cf89f4af6fe797560c9caad6'/>
<id>urn:sha1:2a050e1b9842eda4cf89f4af6fe797560c9caad6</id>
<content type='text'>
input add = message { title: text, points: number } now compiles, with
variable fields anywhere and several of them. The served-app checks post
300 random JSON objects (escapes, control bytes, Korean, surrogate pairs,
members in any order) and read them back as Python's json module does,
with a list of bodies that must be refused and why.

</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>Find an item with first(t in tasks where ...)</title>
<updated>2026-09-26T10:37:23Z</updated>
<author>
<name>eunhhu</name>
<email>necpition205@gmail.com</email>
</author>
<published>2026-09-26T10:37:23Z</published>
<link rel='alternate' type='text/html' href='http://git.yeowoo.org/aup/commit/?id=7b0d1ec72ee45631d7e71d7498d360b49e268eb6'/>
<id>urn:sha1:7b0d1ec72ee45631d7e71d7498d360b49e268eb6</id>
<content type='text'>
first(item in list [where condition]) is the index of the first item the
condition keeps, typed as an index of that list: at = first(...), a field
through first(...).title, or its .position. With no such item a view has
no value and a handler fails not_found. A fold's result now takes member
access like a call's. The random model check jumps to the first open
task and shows its position; one diagnostic joins.

</content>
</entry>
<entry>
<title>Filter a table view with where</title>
<updated>2026-09-26T10:30:17Z</updated>
<author>
<name>eunhhu</name>
<email>necpition205@gmail.com</email>
</author>
<published>2026-09-26T10:30:17Z</published>
<link rel='alternate' type='text/html' href='http://git.yeowoo.org/aup/commit/?id=b5cb79948d52fe9dd918a10a446dcf183c35d10d'/>
<id>urn:sha1:b5cb79948d52fe9dd918a10a446dcf183c35d10d</id>
<content type='text'>
view open_list = each t in tasks where !t.done { ... } has a row for each
item the condition keeps, in the list's order; the condition compiles to
the table's filter block, generated like a column so it reads the row's
item, and the view entry names the list in the byte after its type. A
count, sum, max or min inside the condition is a compile error, as Pure
refuses a fold in a filter. The random model check now compares a
filtered table too; two diagnostics join.

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