fix(v4.0.0): step 6e review round 2 -- only the message looked at is taken, moved or dropped; the kernel's port has no queue in a fabric; an answer nobody awaits is not a loss
- Engine: a wire keeps whether the message at its mark is the one last looked at; a node's take, move and drop of any other answer 3 and write nothing (MESH.md 7d.3). A wire cut and made again between a look and a take no longer has a NACK done as text, or 256 cells written where one was looked for. - Engine: v4_fabric_wire_kernel wires a kernel to a port with no queues; a message for it is refused at once, error 18, on a mesh as on the products. - The result of a drop is looked at; a take that does not take has the message dropped, or gone past: nothing goes round. - An answer nobody waits for is let go uncounted; (LOST) counts what should have been delivered or acted on and was not. The flood's account is exact. - Error 18 from under a word that was printing empties the data stack, as a fault does: that word's own values are not left there. - Tests: the take and drop windows cut at every step, with and without another message put; a refusal owed to a stuck node whose wire is full. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
6a7d0aa27f
commit
f1419e739c
+21
-3
@@ -229,8 +229,11 @@ header CMOVE
|
||||
\ wire would be; or, if it is about the node this one is waiting on,
|
||||
\ (A-SELF) is set for AWAIT to find (quit.v4).
|
||||
\ (WIRE) is not what it was afterwards: the NACK went by another.
|
||||
\ If the drop does not drop -- the wire was cut after the message was looked
|
||||
\ at, which let it go already -- nothing is counted and no one is told.
|
||||
: (REFUSE)
|
||||
4 (DO) drop
|
||||
4 (DO) if DROPPED drop ; \ it was not there to drop -- its wire has been cut: nothing is counted or told
|
||||
DROPPED: drop
|
||||
(LOST) a! @ 1 + !
|
||||
(IN)+2 a! @ -4 + if NOT -1 + if NOT 2 + if ANSWER
|
||||
drop (IN) a! @ (ONE) a! ! (IN)+1 a! @ jump TELL \ about whom it was for; to its sender
|
||||
@@ -350,6 +353,17 @@ header CMOVE
|
||||
\ ( -- ) go past the message (MINE) found: it stays on its wire
|
||||
: (SKIP) (S-WIRE) a! @ (WIRE!) 7 (DO) drop ;
|
||||
|
||||
\ ( -- ) A TAKE DID NOT TAKE the message (MINE) found. The fabric takes
|
||||
\ only the message last looked at (MESH.md 7d.3), so either the wire has
|
||||
\ been cut -- and there is nothing there, or another message that has not
|
||||
\ been looked at -- or the message cannot be taken at all. It is dropped,
|
||||
\ and counted in (LOST); if it cannot be dropped either it is gone past.
|
||||
\ Either way whoever goes through the messages next is at another one:
|
||||
\ nothing goes round on one that will not be taken.
|
||||
: (UNTAKEN)
|
||||
(S-WIRE) a! @ (WIRE!) 4 (DO) if GONE drop jump (SKIP)
|
||||
GONE: drop (LOST) a! @ 1 + ! ;
|
||||
|
||||
\ ( -- how ) take the message (MINE) found, which has one word of text:
|
||||
\ its seven words stay in (IN), and its word goes to (ONE). 0: it is
|
||||
\ taken. Anything else: it is not -- the wire was cut after the message
|
||||
@@ -388,7 +402,11 @@ header CMOVE
|
||||
\ The three cells and two return entries this needs are tried first.
|
||||
\ WITH NO ONE ON THE PORT -- when it waits for room, or when it comes to
|
||||
\ put -- what was printed cannot be sent. While the text is being done
|
||||
\ that is its error, 18. Once it has been finished with, what it printed
|
||||
\ that is its error, 18; and the data stack is emptied first, as a fault
|
||||
\ empties it. A word that raises an error has taken its own arguments
|
||||
\ off; this one comes from under whatever word was printing, in the
|
||||
\ middle of its work, and what that word had on the stack is nothing its
|
||||
\ caller can use (as first built those values were left there). Once it has been finished with, what it printed
|
||||
\ is let go and counted in (LOST), and the text is said to have ended in
|
||||
\ an error: (LINE-STATUS), which is the word then sent of how it ended.
|
||||
: (FLUSH-OUT)
|
||||
@@ -401,7 +419,7 @@ header CMOVE
|
||||
(WAIT-ROOM) if ROOM
|
||||
NOONE: drop (QUIET) a! @ if TELL
|
||||
drop (OUT) (OUT^) a! ! (LOST) a! @ 1 + ! 2 (LINE-STATUS) a! ! ;
|
||||
TELL: drop NODE-ERROR b! 18 !b ;
|
||||
TELL: drop DSTACK-DEPTH b! a !b NODE-ERROR b! 18 !b ; \ the data stack is emptied, as by a fault: see below
|
||||
ROOM: drop
|
||||
(PRINT-TO) a! @ 2 (HDR)
|
||||
(OUT^) a! @ a! 0 !+ 0 !+ 0 !
|
||||
|
||||
Reference in New Issue
Block a user