fix(v4.0.0): step 6e review round 1 -- a take that does not take does nothing; output and answers wait at a middle node; no queue on the kernel's port; a printing wait is not interrupted
- The result of every take is looked at: a wire cut between the look and the take leaves nothing acted on (the text before run again, a refusal counted, a wait ended by an old answer, a way forgotten). - A node with no room to pass on what another printed, or its word of how text ended, leaves it on the wire it came by and moves it when there is room; what is behind it for the same port waits too. Sleep for room (9) is woken by room on any of the node's wires (engine; MESH.md 7d.3). - The lone node's host keeps no queue for the kernel's port: a message to it is error 18. The step limit is counted while the node waits for room. - A text waiting for room to print is not interrupted by console text; AWAIT is, as before. (BREAK?) is gone. - A GONE is believed only by the centre's port; unawaited answers let go are counted; nothing past a message's last character goes on a wire; AWAIT sets (AWAIT-FROM) only once the stack has been tried. - test_host_depth.c: ten paths, each run works or ends in one named stack error; it fails with (ROOM) or (ROOM-SERVE) taken out. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
b1d09af043
commit
6a7d0aa27f
+17
-5
@@ -794,7 +794,7 @@ the engine and happens whole.
|
||||
| 6, first | The mark is put at the message at the front of the wire. |
|
||||
| 7, next | The mark is put at the message after the one it is at. |
|
||||
| 8, sleep | The node is blocked until a message has come to one of its wires since it last fetched "which wires have a message". |
|
||||
| 9, sleep for room | The node is blocked until the wire has A cells free, or a message has come as in 8, whichever is first. |
|
||||
| 9, sleep for room | If the wire has A cells free it answers 0 at once. If not, the node is blocked until a message has come as in 8, or a message has come off any of the wires that lead from it since it was last woken that way: it is then answered 0 if the wire has the A cells and 1 if not, and asks which wire has what (10). *(Changed 2026-10-08, fix round 1 of tasks 2 and 3: it was woken by room on the named wire only. A node may be waiting to put on several wires -- output it is passing on, the answers of texts it has not begun -- and can name one.)* |
|
||||
| 10, room | Has the wire A cells free? It answers at once and changes nothing. |
|
||||
|
||||
- Each wire has a mark for the node that reads it: the message that
|
||||
@@ -835,6 +835,15 @@ waiting, the words that turned it, the list of NACKs owed, and
|
||||
it has been passed on 16 times, it is dropped, counted in `(LOST)`,
|
||||
and a NACK is put on the wire back toward its sender. A NACK or a
|
||||
GONE that cannot go is dropped and counted; nothing is owed for it.
|
||||
*(Ruled 2026-10-08, fix round 1 of tasks 2 and 3:)* **but what a
|
||||
node printed (type 2) and its word of how text ended (type 3) are
|
||||
not dropped for want of room.** The message is left on the wire it
|
||||
came by and gone past with next; what is behind it is served, but
|
||||
for what goes the same way, which is left too so that the order is
|
||||
kept; and it is moved when room appears. The node then sleeps for
|
||||
room (9), which room on any of its wires ends. The code before step
|
||||
6e waited here; letting output go while the line said ok was a
|
||||
step back.
|
||||
- *For itself:* it is taken and dealt with as now: text is done; a
|
||||
NACK is counted; a GONE from its centre is believed.
|
||||
- *`SEND`, how text ended, a NACK, a GONE* are built in the node's own
|
||||
@@ -842,10 +851,13 @@ waiting, the words that turned it, the list of NACKs owed, and
|
||||
others are counted in `(LOST)`.
|
||||
- *What text prints* is put when the output buffer fills and when the
|
||||
text ends. If the wire has no room the node sleeps for room (9). Woken
|
||||
by a message instead, it passes on what is for other nodes, as above,
|
||||
and sleeps again; text for itself from its console ends the text it is
|
||||
doing in error 21, "Interrupted"; anything else for itself stays on
|
||||
the wire.
|
||||
with no room yet, it passes on what is for other nodes, as above, and
|
||||
sleeps again; everything for itself stays on the wire. *(Reworded
|
||||
2026-10-08, ruled by Captain Bob in fix round 1 of tasks 2 and 3: as
|
||||
first ruled, text from its console ended the text in error 21. A line
|
||||
typed ahead while a text printed then cut the printing short. A text
|
||||
waiting for room to print is not interrupted; a console line ends an
|
||||
`AWAIT` only.)*
|
||||
- *`AWAIT`* sleeps (8) and, woken, goes through each wire with first and
|
||||
next: what is for other nodes is passed on; what would end its wait is
|
||||
taken -- the answer, a NACK or a believed GONE about the node waited
|
||||
|
||||
Reference in New Issue
Block a user