<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
</head>
<body>
<p>Lots of context switches. Lots of idle. Minimal collection.</p>
<p><img moz-do-not-send="false" src="cid:part1.50GrKgye.E0fToOCm@callistohouse.org" alt="" width="901" height="220"/></p>
<img moz-do-not-send="false" src="cid:part2.agebP00w.bKo1tseR@callistohouse.org" alt="" width="1254" height="307"/><br/>
<div class="moz-cite-prefix">On 6/24/23 22:00, rabbit via Cuis-dev
wrote:<br/>
</div>
<blockquote type="cite" cite="mid:e9122009-7194-ad4d-a9ac-3b1bee357140@callistohouse.org">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<p>Thanks so very much, Juan! It's now #green. I have attached the
PromisesLocalCuisCompatability file and version <71> of
PromisesLocal. I changed my call to #becomeForward: only when
#isResolved not and changed my call from #cull: to #value: FIle
'em in and run the tests, as you wish. Viel spass!<br/>
</p>
<p><img moz-do-not-send="false" src="cid:part3.qzwJysRQ.SyKRrCAX@callistohouse.org" alt="" class="" width="893" height="491"/></p>
<p><br/>
</p>
<br/>
<div class="moz-cite-prefix">On 6/24/23 21:23, rabbit via Cuis-dev
wrote:<br/>
</div>
<blockquote type="cite" cite="mid:oEiGYYaNuu1r67zNZQB0d-JniVNEuE1H12eKfrLr_hobXgsuT75Czi_5ypYF9zHxUEoWCJtrQLfa7FtgPqDIxmVm-Mn65Z1bUMpG_yr3Pgw=@callistohouse.org">
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
<div><br/>
</div>
<div><br/>
</div>
<div class="protonmail_signature_block" id="protonmail_signature_block">
<div>❤️🔥🐰</div>
</div>
<div class="signature_br" contenteditable="false"><br/>
</div>
<div class="signature_br" contenteditable="false"><br/>
</div>
<div><br/>
</div>
<div><br/>
</div>
On Sat, Jun 24, 2023 at 21:15, Juan Vuletich <<a class="" href="mailto:On Sat, Jun 24, 2023 at 21:15, Juan Vuletich
<<a href=" moz-do-not-send="true">juan@cuis.st</a>>
wrote:
<blockquote type="cite" class="protonmail_quote">
<title></title>
On 6/24/2023 10:05 PM, rabbit via Cuis-dev wrote:
<blockquote type="cite">
<div dir="auto">Oh! That’s exactly the semantics I’m
expecting! When the method resumes I’m absolutely
expecting self to be the new guy. </div>
</blockquote>
<br/>
And the new guy doesn't include the method you are resuming!
Please check references to MethodInCallStackToBecomeInvalid .
If the new guy includes the same exact method, then it makes
sense to resume its execution. Maybe you can include that
method.</blockquote>
<div dir="auto"><br/>
</div>
I understand what you’re saying. I think. If the old guy and the
new guy both use the same superclass defined CompiledMethod
splayed on the stack, #becomeForward: should be happy? Thanks!
Let me go check.<caret></caret><br/>
<blockquote type="cite" class="protonmail_quote" dir="auto"> <br/>
<blockquote type="cite">
<div dir="auto">If a subsequent message call is not
understood, a DNU would be raised. Can we get a parallel
method to give me those semantics, please? Portability is
#becomeForward: but not that breaks your existing
contract. Could we test #isEventual in #becomeForward:,
perhaps?</div>
</blockquote>
<br/>
Not in Cuis base image. That programming pattern is completely
wrong in my view. But I won't police your code, I'll just be
very careful with the Cuis base image.</blockquote>
No doubt! If I can help I will. Solid. Totally fault-tolerant.
Always recoverable. Always on.
<div dir="auto"><span style="color: var(--text-color);" dir="auto"><br/>
</span></div>
<div dir="auto"><span style="color: var(--text-color);" dir="auto">I’m thinking the method sending </span><span style="color: var(--text-color);">the #becomeForward: is
absent in the new guy. Or different, perhaps. I’ll need to
turn that over a few times. Uno</span><span style="color:
var(--text-color);" dir="auto"> momento<caret></caret></span><span style="color: var(--text-color);">, per pia cheri!</span>
<div dir="auto">
<blockquote type="cite" class="protonmail_quote"> <br/>
<blockquote type="cite">
<div><br/>
</div>
<div id="protonmail_signature_block" class="protonmail_signature_block">
<div>❤️🔥🐰</div>
</div>
<div class="signature_br" contenteditable="false"><br/>
</div>
<div class="signature_br" contenteditable="false"><br/>
</div>
<div><br/>
</div>
<div><br/>
</div>
On Sat, Jun 24, 2023 at 20:38, Juan Vuletich <<a href="mailto:On%20Sat,%20Jun%2024,%202023%20at%2020:38,%20Juan%20Vuletich%20%3C%3Ca%20href=" class="" moz-do-not-send="true">juan@cuis.st</a>>
wrote:
<blockquote class="protonmail_quote" type="cite">
<title></title>
I'm not familiar with your code.<br/>
<br/>
But that error message you get is real. It is not a
problem in Cuis. It is a problem in your code. You are
doing #becomeForward: of an object that is in the
midst of running a method. If the become is done, that
method will later resume running, but self will be a
different object, maybe an object of another class,
where this method is not defined, and can not be run.<br/>
<br/>
I suggest understanding this problem. It is safer to
only do become on objects that are NOT running any
methods at that moment.<br/>
<br/>
Squeak doesn't give you this error simply because
Squeak doesn't check for this problem. A VM crash is
likely in this situation. I actually added this check
to Cuis after someone (it was a long time ago, I don't
remember who it was) was experiencing VM crashes
because a method was resumed on a becomed object, and
was writing instance variables that didn't exist in
the becomed object.<br/>
<br/>
HTH,<br/>
<br/>
On 6/24/2023 10:57 AM, rabbit via Cuis-dev wrote:
<blockquote type="cite">
<p>Hi Juan, I'm attaching 2 squeak source files, one
with 2 methods in compatibility and the other the
source.st out of my latest
PromisesLocal-rabbt.66,mcz. <br/>
</p>
<p>I got the Vat's eventual process working (issues
with terminate), <br/>
</p>
<p>but I'm blowing up on a call to #becomeForward:,
from ENearPromise>>#becomeContext:, when
resolving a promise. Here is an image of the
resulting debugger. Is there more information I
could provide or is someone willing to attempt to
reproduce? Many thanks! ❤️🔥🐰</p>
<p><img src="imap://rabbit%40callistohouse%2Eorg@127.0.0.1:1143/fetch%3EUID%3E/INBOX%3E2638?header=quotebody&part=1.1.2&filename=part1.03010406.06090709@cuis.st" alt="" class="loading-internal" moz-do-not-send="true"/></p>
<div class="moz-cite-prefix">On 6/23/23 20:50,
rabbit via Cuis-dev wrote:<br/>
</div>
<blockquote type="cite">
<div dir="auto">Ahh! Thanks for the reminder.
That’s how I started loading code a month ago or
whenever I was loading mczs. I’ll look into it
tomorrow.</div>
<div dir="auto"><br/>
</div>
<div dir="auto">Is it possible to get Monticello
pkg loading working again? That’d be very good.</div>
<div dir="auto"><br/>
</div>
<div dir="auto">What’s my go to solution for code
packaging in Cuis? I’d like to establish Crypto
in Cuis.</div>
<div><br/>
</div>
<div class="protonmail_signature_block" id="protonmail_signature_block">
<div>❤️🔥🐰</div>
</div>
<div class="signature_br" contenteditable="false"><br/>
</div>
<div class="signature_br" contenteditable="false"><br/>
</div>
<div><br/>
</div>
<div><br/>
</div>
On Fri, Jun 23, 2023 at 19:21, Juan Vuletich via
Cuis-dev <<a class="" href="mailto:On%20Fri,%20Jun%2023,%202023%20at%2019:21,%20Juan%0A%20%20%20%20%20%20%20%20Vuletich%20via%20Cuis-dev%20%3C%3Ca%20href=" moz-do-not-send="true">cuis-dev@lists.cuis.st</a>>
wrote:
<blockquote type="cite" class="protonmail_quote">
Hi rabbit,<br/>
<br/>
I suggest unzipping the Monticello files to
extract the code in plain text (yes, Monticello
files are just zip files). When you are there,
you can also fix the line ending convention of
the files. And of course, you'd neet to check
the code, because Cuis is not 100% compatible
with Squeak.<br/>
<br/>
We don't use Monticello in Cuis. At some point
in the past it was possible to open MC files in
Cuis, but nobody used that feature in ages and
it got bitrotten.<br/>
<br/>
Thanks,<br/>
<br/>
On 6/23/2023 4:00 PM, rabbit via Cuis-dev wrote:
<blockquote type="cite">
<p>I just realized I have been working in
squeak. I updated PromisesLocal-rabbt.66.mcz
and am attaching it. I am getting the error
below when I 'browse code' or 'install
Mionticello package'. I do not know. How can
I load Monticello packages? Any way to get
the Installer available in cuis? Install
Monticello config maps?<br/>
</p>
<p>I appreciate you,<br/>
rabbit</p>
<p><img alt="" class="loading-internal" moz-do-not-send="true" width="862" height="398"/></p>
<p><br/>
</p>
<div class="moz-cite-prefix">On 6/22/23 16:21,
rabbit via Cuis-dev wrote:<br/>
</div>
<blockquote type="cite">
<p>Hey! I got inspired by your proposal,
Luciano, and here's my solution in
eventual promises. Code can be loaded as:</p>
<blockquote>
<p>Installer ss project: 'Cryptography';
install: 'ProCrypto.release.3'.<br/>
</p>
</blockquote>
<p>I added a test method <br/>
</p>
<blockquote>
<p>RefsTest>>#testMultiReturns<br/>
<br/>
| selectCount unionFlag pair |<br/>
unionFlag := false.<br/>
selectCount := 0.<br/>
((pair := self promiseResolverPair) key
xgcd: 9) <br/>
<<* [:each | selectCount :=
selectCount + 1. Transcript cr; show:
'each = ', each];<br/>
<<* [:g :s :t | unionFlag := true.
Transcript cr; show: 'g = ', g, '; s =
', s, '; t = ', t. g + s + t].<br/>
pair value resolve: 21.<br/>
(Delay forMilliseconds: 333) wait.<br/>
self assert: (selectCount == 3).<br/>
self assert: (unionFlag).</p>
</blockquote>
<p>This calls new multireturn #xgcd: method</p>
<blockquote>
<p>xgcd: anInteger<br/>
" 21 xgcd: 9"<br/>
| g s t |<br/>
g := self gcd: anInteger.<br/>
s := self / g.<br/>
t := anInteger / g.<br/>
^ { g. s. t}<br/>
</p>
</blockquote>
<p>And in the test method there are eventual
sends (#<<*) to the promise of the
#xgcd: send once the reciever promise is
resolved to 21. This implementation
detects cardinality of the continuation
block and sends #whenResolved:
appropriately, for future evaluation.</p>
<blockquote>
<p>Object>>#<<* continuation<br/>
<br/>
(continuation numArgs == 1)<br/>
ifTrue: [^ self whenResolved: [:result |
result do: [:each | continuation value:
each]]].<br/>
^ self whenResolved: [:result |
continuation valueWithArguments:
result].</p>
</blockquote>
<p>One can see a 1 cardinality schedules the
continuation to evaluate with each result,
while a continuation with cardinality 2 or
more will be scheduled to receive all
results. #valueWithArguments:</p>
<p>Here are 2 return handlers, <br/>
</p>
<blockquote>
<p>promise := ((pair := self
promiseResolverPair) key xgcd: 9).</p>
</blockquote>
<p>the first for each argument <br/>
</p>
<blockquote>
<p>promise <<* [:each | selectCount
:= selectCount + 1. Transcript cr; show:
'each = ', each];</p>
</blockquote>
<p>and the second for all three arguments.</p>
<blockquote>
<p>promise <<* [:g :s :t | unionFlag
:= true. Transcript cr; show: 'g = ', g,
'; s = ', s, '; t = ', t. g + s + t].</p>
</blockquote>
<pre cols="72" class="moz-signature">--
❤️🔥🐰
</pre>
<div class="moz-cite-prefix">On 6/21/23
09:44, Luciano Notarfrancesco via Cuis-dev
wrote:<br/>
</div>
<blockquote type="cite">
<div dir="auto">Interesting, thanks for
sharing!</div>
<div dir="auto">Actually I think it’s the
same thing I did, my implementation
calls
BlockClosure>>#valueWithPossibleArgs: and takes only as many
arguments as needed by the block but the
array can be bigger than that (it should
be named #valueWithPossibleArguments:
tho, abbreviations are ugly).</div>
<div dir="auto"><br/>
</div>
<div><br/>
<div class="gmail_quote">
<div class="gmail_attr" dir="ltr">On
Wed, 21 Jun 2023 at 15:37 Christian
Haider via Cuis-dev <<a class="moz-txt-link-freetext" href="mailto:cuis-dev@lists.cuis.st" moz-do-not-send="true">cuis-dev@lists.cuis.st</a>>
wrote:<br/>
</div>
<blockquote style="margin: 0px 0px 0px
0.8ex; border-left: 1px solid
rgb(204, 204, 204); padding-left:
1ex;" class="gmail_quote">
<div style="" lang="DE">
<div class="m_-976565113171439616WordSection1">
<p class="MsoNormal"><span lang="EN-CA">I added
something similar to my
Values package (VW and
ports).</span></p>
<p class="MsoNormal"><span lang="EN-CA">The source is</span></p>
<p style="margin-left: 35.4pt;" class="MsoNormal"><span style="font-family:
"Courier New";" lang="EN-CA">SequenceableCollection>>asArgumentsIn:
aBlock</span></p>
<p style="margin-left: 35.4pt;" class="MsoNormal"><span style="font-family:
"Courier New";" lang="EN-CA"> "Evaluate
aBlock with the receiver's
elements as parameters.</span></p>
<p style="margin-left: 35.4pt;" class="MsoNormal"><span style="font-family:
"Courier New";" lang="EN-CA"> aBlock takes
its arguments from the
receiver.</span></p>
<p style="margin-left: 35.4pt;" class="MsoNormal"><span style="font-family:
"Courier New";" lang="EN-CA"> 'ok'</span></p>
<p style="margin-left: 35.4pt;" class="MsoNormal"><span style="font-family:
"Courier New";" lang="EN-CA"> #(1 2 3)
asArgumentsIn: [:a :b :c | a
+ b + c]</span></p>
<p style="margin-left: 35.4pt;" class="MsoNormal"><span style="font-family:
"Courier New";" lang="EN-CA"> #(1 2 3)
asArgumentsIn: [:a :b | a +
b]</span></p>
<p style="margin-left: 35.4pt;" class="MsoNormal"><span style="font-family:
"Courier New";" lang="EN-CA"> #(1 2 3)
asArgumentsIn: [:a | a]</span></p>
<p style="margin-left: 35.4pt;" class="MsoNormal"><span style="font-family:
"Courier New";" lang="EN-CA"> #(1 2 3)
asArgumentsIn: [42]</span></p>
<p style="margin-left: 35.4pt;" class="MsoNormal"><span style="font-family:
"Courier New";" lang="EN-CA"> 'not ok'</span></p>
<p style="margin-left: 35.4pt;" class="MsoNormal"><span style="font-family:
"Courier New";" lang="EN-CA"> #(1 2 3)
asArgumentsIn: [:a :b :c :d
| a + b + c + d]</span></p>
<p style="margin-left: 35.4pt;" class="MsoNormal"><span style="font-family:
"Courier New";" lang="EN-CA"> "</span></p>
<p style="margin-left: 35.4pt;" class="MsoNormal"><span style="font-family:
"Courier New";" lang="EN-CA"> </span></p>
<p style="margin-left: 35.4pt;" class="MsoNormal"><span style="font-family:
"Courier New";" lang="EN-CA"> ^aBlock
cullWithArguments: self
asArray</span><span lang="EN-CA"></span></p>
<p class="MsoNormal"><span lang="EN-CA"> </span></p>
<p class="MsoNormal"><span lang="EN-CA">The difference
is that it takes a list of
any size and picks out the
first items and binds them
to the variables.</span></p>
<p class="MsoNormal"><span lang="EN-CA">I use it often
for CSV processing like</span></p>
<p class="MsoNormal"><span lang="EN-CA"> </span><span style="" lang="EN-CA">(line
tokensBasedOn: $;)
asArgumentsIn: [:first
:second :y | … ].</span></p>
<p class="MsoNormal"><span lang="EN-CA"> </span></p>
<p class="MsoNormal"><span lang="EN-CA">I am just a bit
unhappy with the name – it
is too long. It reads ok
though.</span></p>
<p class="MsoNormal"><span lang="EN-CA">The pipe
character is an interesting
idea. I have to think about
it.</span></p>
<p class="MsoNormal"><span lang="EN-CA"> </span></p>
<p class="MsoNormal"><span lang="EN-CA">I am use it for
a while now and I am very
happy with it.</span></p>
<p class="MsoNormal"><span lang="EN-CA"> </span></p>
<p class="MsoNormal"><span lang="EN-CA">Happy hacking,</span></p>
<p class="MsoNormal"><span>Christian</span></p>
</div>
</div>
<div style="" lang="DE">
<div class="m_-976565113171439616WordSection1">
<p class="MsoNormal"><span> </span></p>
<p class="MsoNormal"><span> </span></p>
<div style="border-width: 1pt
medium medium; border-style:
solid none none; padding: 3pt
0cm 0cm; border-color:
rgb(225, 225, 225)
currentcolor currentcolor;">
<p class="MsoNormal"><b>Von:</b>
Cuis-dev <<a class="moz-txt-link-freetext" target="_blank" href="mailto:cuis-dev-bounces@lists.cuis.st" moz-do-not-send="true">cuis-dev-bounces@lists.cuis.st</a>>
<b>Im Auftrag von </b>Luciano
Notarfrancesco via Cuis-dev<br/>
<b>Gesendet:</b> Mittwoch,
21. Juni 2023 15:13<br/>
<b>An:</b> Discussion of
Cuis Smalltalk <<a class="moz-txt-link-freetext" target="_blank" href="mailto:cuis-dev@lists.cuis.st" moz-do-not-send="true">cuis-dev@lists.cuis.st</a>><br/>
<b>Cc:</b> Luciano
Notarfrancesco <<a class="moz-txt-link-freetext" target="_blank" href="mailto:luchiano@gmail.com" moz-do-not-send="true">luchiano@gmail.com</a>><br/>
<b>Betreff:</b> [Cuis-dev]
Methods that return multiple
values</p>
</div>
<p class="MsoNormal"> </p>
<p class="MsoNormal">Smalltalk
doesn’t have a convention for
methods returning multiple
values, and I’m not aware of
any implementation.</p>
<div>
<p class="MsoNormal">An
example of such thing is the
extended gcd: ‘a xgcd: b’
returns g, s, t where g is
the gcd, and as + bt = g.
Writing methods that return
multiple values is easy with
the curly brackets syntax,
Integer>>#xgcd: ends
with something like</p>
</div>
<div>
<p class="MsoNormal"> ^ {g. s.
t}</p>
</div>
<div>
<p class="MsoNormal">But using
sending messages that return
multiple values is kind of
annoying, I end up doing
something like:</p>
</div>
<div>
<p class="MsoNormal"> xgcd :=
a xgcd: b.</p>
</div>
<div>
<p class="MsoNormal"> g :=
xgcd at: 1.</p>
</div>
<div>
<p class="MsoNormal"> s :=
xgcd at: 2.</p>
</div>
<div>
<p class="MsoNormal"> t :=
xgcd at: 3</p>
</div>
<div>
<p class="MsoNormal">Some
years ago I thought about
using blocks for this, but I
never tried it. Today I just
did a little experiment
implementing anArray |
aBlock as ‘^ aBlock
valueWithPossibleArgs: self’
and I can do:</p>
</div>
<div>
<p class="MsoNormal"> (a xgcd:
b) | [:g :s :t| … ]</p>
</div>
<div>
<p class="MsoNormal"> </p>
</div>
<div>
<p class="MsoNormal">This is
seems quite nice already, I
guess I’ll start using it
and see how it feels. But
the point of this mail is
not to show a solution, but
to ask if anyone have
thought about this or if
they know any nicer
solutions. Any ideas?</p>
</div>
</div>
</div>
-- <br/>
Cuis-dev mailing list<br/>
<a class="moz-txt-link-freetext" target="_blank" href="mailto:Cuis-dev@lists.cuis.st" moz-do-not-send="true">Cuis-dev@lists.cuis.st</a><br/>
<a class="moz-txt-link-freetext" target="_blank" rel="noreferrer" href="https://lists.cuis.st/mailman/listinfo/cuis-dev" moz-do-not-send="true">https://lists.cuis.st/mailman/listinfo/cuis-dev</a><br/>
</blockquote>
</div>
</div>
</blockquote>
</blockquote>
<pre cols="72" class="moz-signature">--
❤️🔥🐰</pre>
</blockquote>
<br/>
<br/>
<pre cols="72" class="moz-signature">--
Juan Vuletich
cuis.st
github.com/jvuletich
researchgate.net/profile/Juan-Vuletich
independent.academia.edu/JuanVuletich
patents.justia.com/inventor/juan-manuel-vuletich
linkedin.com/in/juan-vuletich-75611b3
twitter.com/JuanVuletich</pre>
</blockquote>
</blockquote>
<pre cols="72" class="moz-signature">--
❤️🔥🐰</pre>
</blockquote>
<br/>
<br/>
<pre cols="72" class="moz-signature">--
Juan Vuletich
cuis.st
github.com/jvuletich
researchgate.net/profile/Juan-Vuletich
independent.academia.edu/JuanVuletich
patents.justia.com/inventor/juan-manuel-vuletich
linkedin.com/in/juan-vuletich-75611b3
twitter.com/JuanVuletich</pre>
</blockquote>
</blockquote>
<br/>
<br/>
<pre cols="72" class="moz-signature">--
Juan Vuletich
cuis.st
github.com/jvuletich
researchgate.net/profile/Juan-Vuletich
independent.academia.edu/JuanVuletich
patents.justia.com/inventor/juan-manuel-vuletich
linkedin.com/in/juan-vuletich-75611b3
twitter.com/JuanVuletich</pre>
</blockquote>
</div>
</div>
</blockquote>
<pre class="moz-signature" cols="72">--
❤️🔥🐰</pre>
</blockquote>
<pre class="moz-signature" cols="72">--
❤️🔥🐰</pre>
</body></html>