Warning: mysqli::__construct(): (HY000/1203): User howardkn already has more than 'max_user_connections' active connections in D:\Inetpub\vhosts\howardknight.net\al.howardknight.net\includes\artfuncs.php on line 21
Failed to connect to MySQL: (1203) User howardkn already has more than 'max_user_connections' active connections
Warning: mysqli::query(): Couldn't fetch mysqli in D:\Inetpub\vhosts\howardknight.net\al.howardknight.net\index.php on line 66
Article <5hednQYuTYucCrf7nZ2dnZfqnPcAAAAA@giganews.com>
Deutsch   English   Français   Italiano  
<5hednQYuTYucCrf7nZ2dnZfqnPcAAAAA@giganews.com>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!Xl.tags.giganews.com!local-2.nntp.ord.giganews.com!news.giganews.com.POSTED!not-for-mail
NNTP-Posting-Date: Thu, 25 Apr 2024 17:46:40 +0000
Subject: Re: Meta: a usenet server just for sci.math
Newsgroups: sci.math,news.software.nntp,comp.programming.threads
References: <8f7c0783-39dd-4f48-99bf-f1cf53b17dd9@googlegroups.com>
 <b0c4589a-f222-457e-95b3-437c0721c2a2n@googlegroups.com>
 <5a48e832-3573-4c33-b9cb-d112f01b733bn@googlegroups.com>
 <8wWdnVqZk54j3Fj4nZ2dnZfqnPGdnZ2d@giganews.com>
 <MY-cnRuWkPoIhFr4nZ2dnZfqnPSdnZ2d@giganews.com>
 <NqqdnbEz-KTJTlr4nZ2dnZfqnPudnZ2d@giganews.com>
 <FqOcnYWdRfEI2lT4nZ2dnZfqn_SdnZ2d@giganews.com>
 <NVudnVAqkJ0Sk1D4nZ2dnZfqn_idnZ2d@giganews.com>
 <RuKdnfj4NM2rlkz4nZ2dnZfqn_qdnZ2d@giganews.com>
 <HfCdnROSvfir-E_4nZ2dnZfqnPWdnZ2d@giganews.com>
 <FLicnRkOg7SrWU_4nZ2dnZfqnPadnZ2d@giganews.com>
 <v7ecnUsYY7bW40j4nZ2dnZfqnPudnZ2d@giganews.com>
 <q7-dnR2O9OsAAH74nZ2dnZfqnPhg4p2d@giganews.com>
 <Hp-cnUAirtFtx2P4nZ2dnZfqnPednZ2d@giganews.com>
 <MDKdnRJpQ_Q87Z77nZ2dnZfqn_idnZ2d@giganews.com>
 <-bOdnWSSIMUKcZn7nZ2dnZfqnPednZ2d@giganews.com>
 <CoCdnYJuP9p8aob7nZ2dnZfqnPudnZ2d@giganews.com>
 <bJ6dna6Zv4r7lbn7nZ2dnZfqn_WdnZ2d@giganews.com>
 <TO6cnaz7jdFtBbv7nZ2dnZfqn_WdnZ2d@giganews.com>
From: Ross Finlayson <ross.a.finlayson@gmail.com>
Date: Thu, 25 Apr 2024 10:46:48 -0700
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101
 Thunderbird/38.6.0
MIME-Version: 1.0
In-Reply-To: <TO6cnaz7jdFtBbv7nZ2dnZfqn_WdnZ2d@giganews.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 7bit
Message-ID: <5hednQYuTYucCrf7nZ2dnZfqnPcAAAAA@giganews.com>
Lines: 1154
X-Usenet-Provider: http://www.giganews.com
X-Trace: sv3-Ph1782X8OgeKhsuagHa/SnmGDu/uy0m3hDR7Ig/zyRim1yKvTr684LHp5utdxzQIU28kDhZS8Wttbzq!BzNHOjtEr3Oudyy4wXytoGdDLvhYnOpfOWFr6egPDQiQir3bph96p1dZlkV53EXno/I0YM0E0aY=
X-Complaints-To: abuse@giganews.com
X-DMCA-Notifications: http://www.giganews.com/info/dmca.html
X-Abuse-and-DMCA-Info: Please be sure to forward a copy of ALL headers
X-Abuse-and-DMCA-Info: Otherwise we will be unable to process your complaint properly
X-Postfilter: 1.3.40
Bytes: 55467

On 04/22/2024 10:06 AM, Ross Finlayson wrote:
> On 04/20/2024 11:24 AM, Ross Finlayson wrote:
>>
>>
>> Well I've been thinking about the re-routine as a model of cooperative
>> multithreading,
>> then thinking about the flow-machine of protocols
>>
>> NNTP
>> IMAP <-> NNTP
>> HTTP <-> IMAP <-> NNTP
>>
>> Both IMAP and NNTP are session-oriented on the connection, while,
>> HTTP, in terms of session, has various approaches in terms of HTTP 1.1
>> and connections, and the session ID shared client/server.
>>
>>
>> The re-routine idea is this, that each kind of method, is memoizable,
>> and, it memoizes, by object identity as the key, for the method, all
>> its callers, how this is like so.
>>
>> interface Reroutine1 {
>>
>> Result1 rr1(String a1) {
>>
>>      Result2 r2 = reroutine2.rr2(a1);
>>
>>      Result3 r3 = reroutine3.rr3(r2);
>>
>>      return result(r2, r3);
>> }
>>
>> }
>>
>>
>> The idea is that the executor, when it's submitted a reroutine,
>> when it runs the re-routine, in a thread, then it puts in a ThreadLocal,
>> the re-routine, so that when a re-routine it calls, returns null as it
>> starts an asynchronous computation for the input, then when
>> it completes, it submits to the executor the re-routine again.
>>
>> Then rr1 runs through again, retrieving r2 which is memoized,
>> invokes rr3, which throws, after queuing to memoize and
>> resubmit rr1, when that calls back to resubmit r1, then rr1
>> routines, signaling the original invoker.
>>
>> Then it seems each re-routine basically has an instance part
>> and a memoized part, and that it's to flush the memo
>> after it finishes, in terms of memoizing the inputs.
>>
>>
>> Result 1 rr(String a1) {
>>    // if a1 is in the memo, return for it
>>    // else queue for it and carry on
>>
>> }
>>
>>
>> What is a re-routine?
>>
>>      It's a pattern for cooperative multithreading.
>>
>>      It's sort of a functional approach to functions and flow.
>>
>>      It has a declarative syntax in the language with usual
>> flow-of-control.
>>
>> So, it's cooperative multithreading so it yields?
>>
>>      No, it just quits, and expects to be called back.
>>
>> So, if it quits, how does it complete?
>>
>>      The entry point to re-routine provides a callback.
>>
>>      Re-routines only return results to other re-routines,
>>      It's the default callback.  Otherwise they just callback.
>>
>> So, it just quits?
>>
>>      If a re-routine gets called with a null, it throws.
>>
>>      If a re-routine gets a null, it just continues.
>>
>>      If a re-routine completes, it callbacks.
>>
>> So, can a re-routine call any regular code?
>>
>>      Yeah, there are some issues, though.
>>
>> So, it's got callbacks everywhere?
>>
>>      Well, it's just got callbacks implicitly everywhere.
>>
>> So, how does it work?
>>
>>      Well, you build a re-routine with an input and a callback,
>>      you call it, then when it completes, it calls the callback.
>>
>>      Then, re-routines call other re-routines with the argument,
>>      and the callback's in a ThreadLocal, and the re-routine memoizes
>>      all of its return values according to the object identity of the
>> inputs,
>>      then when a re-routine completes, it calls again with another
>> ThreadLocal
>>      indicating to delete the memos, following the exact same
>> flow-of-control
>>      only deleting the memos going along, until it results all the
>> memos in
>>      the re-routines for the interned or ref-counted input are deleted,
>>      then the state of the re-routine is de-allocated.
>>
>> So, it's sort of like a monad and all in pure and idempotent functions?
>>
>>      Yeah, it's sort of like a monad and all in pure and idempotent
>> functions.
>>
>> So, it's a model of cooperative multithreading, though with no yield,
>> and callbacks implicitly everywhere?
>>
>>      Yeah, it's sort of figured that a called re-routine always has a
>> callback in the ThreadLocal, because the runtime has pre-emptive
>> multithreading anyways, that the thread runs through its re-routines in
>> their normal declarative flow-of-control with exception handling, and
>> whatever re-routines or other pure monadic idempotent functions it
>> calls, throw when they get null inputs.
>>
>>      Also it sort of doesn't have primitive types, Strings must always
>> be interned, all objects must have a distinct identity w.r.t. ==, and
>> null is never an argument or return value.
>>
>> So, what does it look like?
>>
>> interface Reroutine1 {
>>
>> Result1 rr1(String a1) {
>>
>>      Result2 r2 = reroutine2.rr2(a1);
>>
>>      Result3 r3 = reroutine3.rr3(r2);
>>
>>      return result(r2, r3);
>> }
>>
>> }
>>
>> So, I expect that to return "result(r2, r3)".
>>
>>      Well, that's synchronous, and maybe blocking, the idea is that it
>> calls rr2, gets a1, and rr2 constructs with the callback of rr1 and it's
>> own callback, and a1, and makes a memo for a1, and invokes whatever is
>> its implementation, and returns null, then rr1 continues and invokes rr3
>> with r2, which is null, so that throws a NullPointerException, and rr1
>> quits.
>>
>> So, ..., that's cooperative multithreading?
>>
>>      Well you see what happens is that rr2 invoked another re-routine or
========== REMAINDER OF ARTICLE TRUNCATED ==========