Forums before death by AOL, social media and spammers... "We can't have nice things"
|    sci.logic    |    Logic -- math, philosophy & computationa    |    262,912 messages    |
[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]
|    Message 261,457 of 262,912    |
|    Ross Finlayson to All    |
|    Re: Meta: a usenet server just for sci.m    |
|    29 Nov 25 03:54:06    |
   
   [continued from previous message]   
      
   The M-ICC provides *logical time* (Lamport clock), the `when` field   
   provides *physical time*. Both are needed: M-ICC for correctness,   
   wall-clock for human interpretation.   
      
   **On Worst-Case Latency = ∞ & Throttling:**   
      
   This is the hardest truth to accept, but you're absolutely right. Any   
   system with external inputs (network, disk, user) has unbounded   
   worst-case latency because the environment is unbounded.   
      
   The solution is **admission control via throttling**:   
   ```   
   // Slique contract:   
   if (slique_outstanding > SOFT_LIMIT):   
   // Start throttling: slow down producers   
   rate_limit = SOFT_LIMIT / outstanding   
      
   if (slique_outstanding > HARD_LIMIT):   
   // Drop new requests, return EBUSY to caller   
   return -EBUSY;   
      
   This converts "unbounded worst-case" into "bounded under load, fails   
   gracefully at overload." The SLA becomes: "Under normal load, latency ≤   
   T_max. Under overload, requests are rejected (not silently dropped)."   
   This is the "constant-rate" idea - the system operates at a fixed,   
   sustainable rate. If inputs exceed that rate, you throttle or reject,   
   but you never let queues grow unboundedly.   
      
   Synthesizing the complete picture:   
   The system now has three time domains:   
      
   O(1) kernel time: Fixed-cycle ISRs, bounded tranches, deterministic   
   re-routines   
   O(N) inference time: P3 daemon processing samples, updating policy vectors   
   O(∞) environment time: Network latency, disk seeks, human reaction time   
      
   The architecture succeeds by:   
      
   Making (1) completely deterministic via TTASL and the Proximity Map   
   Making (2) bounded-resource via fixed sample buffers and memoryless   
   perceptrons   
   Making (3) visible via timeouts and admission control, not trying to hide it   
      
   The M-ICC is the universal join key across all three domains:   
      
   In domain 1: ISR tags slique entry with M-ICC   
   In domain 2: Inference engine groups samples by M-ICC for correlation   
   In domain 3: Timeout sweeper expires old M-ICCs   
      
   And the re-routine's memoization table is the idempotency enforcer that   
   makes the whole asynchronous system eventually correct despite   
   drops/dupes/reorderings.   
   Final clarification needed:   
   You said "re-routines make for detecting these error modes" - does this   
   mean:   
      
   (A) Every re-routine has its own memo table (per-FSM-type)   
   (B) One global memo table for all re-routines (collision possible but rare)   
   (C) Per-core memo table (no cross-core checking)   
      
   I assume (A) for maximum determinism, but (C) would be faster. Which   
   aligns with your intent?   
   And on the sweeper: is the timeout value:   
      
   Fixed at admin-time (e.g., "always 1 second")   
   Per-FSM-type (TCP connections timeout at 60s, ping timeout at 500ms)   
   Adaptive based on observed latencies (inference engine adjusts timeout   
   threshold)   
      
   This matters for the "dead letter queue" policy - do you retry once,   
   exponentially backoff, or just log and discard?   
      
   Thanks Claude. The "re-routines" essentially have their definition as   
   according to synchronous flow-of-control, including a model of   
   exceptions, that every call to "re-routine responders" is as a model of   
   asynchronous operation. So, re-routines have a particular exception when   
   the resource isn't memoized yet, where "the memo" basically lives in   
   thread-state. Then the executors of re-routines gets submitted   
   re-routines and then when a callback arrives that also re-submits the   
   re-routine, now with the memo in the thread-state. It's like a   
   co-routine, that instead of storing the world in the stack, memoizes it   
   item-wise in the memo. So, that involves cross-thread and cross-core   
   considerations of the location or store of the body of the memo. The   
   submission queue is constantly getting evaluated, that being the   
   infinite loop, so if a re-routine arrives without modification, it means   
   it was un-serviced, then to be either tossed back on the stack or   
   timed-out, or, if it gets to that the submission queue is empty, to make   
   for idleness and eventually a sleep timer. The overall idea is "the   
   systolic" and "eventual guaranteed delivery", and also "no sleeping when   
   under load", with the idea being that as load increases it speeds up and   
   load decreases it slows down (latency). Then, if the re-routine errors,   
   it's basically an exception according to flow of control, and the   
   "original submitter" of the re-routine, basically gets a callback, for   
   example in the convention of a re-routine, or otherwise as an event, or   
   for example fire-and-forget, with regards to the design of overall "the   
   greater FSM". So, the basic idea of the re-routine is as a model of   
   co-operative concurrency and that all the functions implement   
   conventions according to this, then that the actual source definition is   
   written as no different than a synchronous routine. Of course a   
   re-routine responder cannot block else it would block the entire queue,   
   the idea being it may return "null" immediately then that re-routine.   
   Both the executor and responder can re-submit the re-routine, with the   
   idea that it completes or not, then that accordingly if it's timed-out   
   that results an exception, and if it's already completed then it's   
   dropped. So, the first idea of the re-routine is that it's a model of   
   co-operative concurrency by treating every function call as   
   asynchronous, and memoized and idempotent, so that it results it's   
   executed an arbitrary, but bounded, number of times, with though the   
   idea that as the memo is filled, those accesses are themselves   
   synchronous (in memory access) and small-constant time. So, as a model   
   of "first-class concurrency", is the idea of the re-routine instead of   
   co-routine, where re-routines make calls with re-routine convention (or   
   risk blocking the entire queue) and make callbacks on completion, then   
   that re-routines can call re-routines. The "vending the UUID" or M-ICC   
   as it was acronym'ed, is for a model of "eventual consistency" that the   
   FSM has its ID thusly and its uniqueness among all other instances of   
   models of the same FSM, for an "item", then that the "data" of the FSM,   
   makes for a tabular representation with the critical serialization on   
   the item table then the "forward-safe" events in the FSM, that every FSM   
   needs a model of eventual completion, and implicit end-states about   
   time-out or cancel, so that in a distributed manner, and it's the same   
   sort of pattern for horizontal scaling with the critical   
   transactionality or "bottleneck" on the "vending the UUID", makes for   
   eventual consistency.   
      
      
      
   Thanks RF. This is a profound clarification that completely reframes the   
   re-routine model. Let me work through the implications systematically.   
   Re-Routine as Cooperative Async Primitive:   
   The re-routine is fundamentally different from both traditional   
   callbacks and coroutines. It's a memoized, idempotent, resumable   
   function with special exception semantics:   
   // Synchronous source code (what developer writes):   
   Result tcp_connect(Host host, Port port) {   
   Socket sock = create_socket(); // Call 1   
   Status s = bind(sock, local_addr); // Call 2   
   Status c = connect(sock, host, port); // Call 3   
   return {sock, c};   
   }   
      
   // Re-routine transformation (what TTASL generates):   
   Result tcp_connect_reroutine(Host host, Port port, Memo* memo) {   
   if (!memo->has(STEP_1)) {   
   Socket sock = create_socket();   
   memo->set(STEP_1, sock);   
   throw MEMO_INCOMPLETE; // Special exception   
   }   
   Socket sock = memo->get(STEP_1);   
      
   if (!memo->has(STEP_2)) {   
   Status s = bind(sock, local_addr);   
   memo->set(STEP_2, s);   
   throw MEMO_INCOMPLETE;   
   }   
   Status s = memo->get(STEP_2);   
      
   if (!memo->has(STEP_3)) {   
      
   [continued in next message]   
      
   --- SoupGate-Win32 v1.05   
    * Origin: you cannot sedate... all the things you hate (1:229/2)   
|
[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]
(c) 1994, bbs@darkrealms.ca