Pharo-dev
By thread
pharo-dev@lists.pharo.org
By month
Messages by month
- ----- 2026 -----
- July
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
May 2020
- 168 messages
Official Pharo consortium Call. Pharo needs you: Perfect time to join
by Stéphane Ducasse
Dear Pharo users, lovers, businessers
Context
*********
You may not know it clearly but the Pharo consortium succeeds to pay one full time engineer:
Esteban Lorenzano. Due to legal concerns with the Inria foundation effort, Inria
converted the position of Esteban into a permanent position. It was a great deal
because it secures Esteban.
Now based on contracts between the consortium and Lifeware ( https://www.lifeware.ch <https://www.lifeware.ch/> )
and Schmidt (http://bauing-schmidt.de <http://bauing-schmidt.de/>) the consortium is able to pay another engineer: Pablo Tesone until
April 2021. All this was announced at ESUG 2019 but not all of you may have known it.
<Mini news>
* The consortium has been working to get Pharo in the database of the
CNRS platforms (CNRS is a huge research organisation in France covering all research fields.
Guillermo Polito has a permanent position from CNRS allocated to the Lille University Lab and we
want to convince the lab that having Guille working on Pharo is the best ROI that they can make).
* We also are pursing a process to be recognized by the University of
Lille for the same reason.
We are also working to get PharoPro out of the ground but this is another story.
* All these efforts in communication are done to secure people position.
We have got many new academic members. Some should be announced soon.
</mini news>
Now THE announce.
*************************
During the last consortium meeting, we learned that David Margery (the Inria software manager
that is managing around 10 ofconsortiums for Inria) wants to propose to Inria to allocate another
permanent position to Pharo even if the consortium does not raise two full salaries.
This will secure the effort of the consortium for the coming years.
We were excited by the news because such positions are rare and lifelong!
David is building a case to defend his proposal:
* first the pharo consortium is in a good shape - thank you all
* second, Inria is interested to "assess if Pharo is usedâ
David told us that having more industrial partners (even first entry
ones) will really help our case: the fact that members are willing to pay to secure
the future of Pharo is the key indicator, the amount paid being only secondary.
Remember that the first membership fee is at 1K Euros.
Therefore the consortium is sending an official call. If you hesitated to join the consortium this is
clearly the moment. Your money will be multiplied. Because a full job for an expert
engineer is around 90 K so if we get 8 new members at 1/2 K we
have a strong multiplication effect and this will have an important impact on Pharo.
http://consortium.pharo.org <http://consortium.pharo.org/>
http://consortium.pharo.org/web/Membership <http://consortium.pharo.org/web/Membership>
So I hope that we convince you that you can get a real impact on Pharo. The consortium engineering team wants to
thank all the current consortium member because they make Pharo happening.
S. on the behalf of the consortium.
--------------------------------------------
Stéphane Ducasse
http://stephane.ducasse.free.fr / http://www.pharo.org
03 59 35 87 52
Assistant: Julie Jonas
FAX 03 59 57 78 50
TEL 03 59 35 86 16
S. Ducasse - Inria
40, avenue Halley,
Parc Scientifique de la Haute Borne, Bât.A, Park Plaza
Villeneuve d'Ascq 59650
France
May 11, 2020
[Mm10s] 2020-05-11
by Esteban Lorenzano
Last week and this one are still in low-motion, but here we are :)
### Last week:
* [Spec2] uncovered a bug in RubAbstractTextArea: it does not fires eventHandler events! (but I
will need to see how deep is this problem tomorrow, maybe it affects all events there).
* [Pharo 9] added a PR (https://github.com/pharo-project/pharo/pull/6305) to fix a missing event
handling of keyUp/keyDown events when morphic event handling is used.
* [Spec2] add cursorPosition protocol to SpTextPresenters, who will answer a column@row
position, instead of cursorPositionIndex who will answer the position in the text (an offset)
* [Spec2] add cmd+t to show context menus
* [Spec2-doc] SpStyle
* [NewTools] add a generic StHeaderPanel to contain a StHeaderBar and a content presenter. Add
also a global addWindowShortcurTo: to override on the presenters who wants to add global
shortcuts to its owner window.
* [NewTools-Playground] add line and cursor position information in the status bar.
* [NewTools-Playground] pass on load page dialog (presenter). Is working, but not as I want
* [NewTools-Playground] added headers to page selector window.
* [NewTools-Playground] auto-save current page
* [Spec2] added shortcut based context menu popup for morphic (it was implemented in Gtk
already)
* [NewTools-Playground] add publish code
* [Pharo 9] bug: spanNewSessionFrom: breakes debugging tests (moved to new tools, which is where is actually needed)
### This week (starting 2020-05-11):
- move new playground to beta status (open it for test)
- finish some keybindings issues on Gtk backend
- work on idle vm to fix remaining bugs
- sync with Ronnie to start testing lowcode memory access
- document transmission sub-framework
May 11, 2020
Re: [Pharo-dev] Need Idea for Pharo with freeCAD
by tbrunz
Hi Shawon,
I'm not familiar with FreeCAD, but there are a few general methods for
connecting Pharo with other software applications.
The lowest-level method would be to use the Pharo uFFI (Universal Foreign
Function Interface), which would be appropriate if FreeCAD has an API/ABI
(Application Programming|Binary Interface); this would allow you to directly
connect Pharo via a C programming interface.
There is a PDF booklet to introduce you to the uFFI here:
https://github.com/SquareBracketAssociates/Booklet-uFFI/releases
Pharo can also control other software through a command shell interface.
This would allow a Pharo application to launch FreeCAD (with command line
parameters); you may need to do this to get FreeCAD running in order to
connect to it. Christopher Fuhrman has written a good description of how
this can be done here:
https://fuhrmanator.github.io/2019/03/16/LibC-Pharo-experiments.html
And since you are learning about Pharo, you will probably want to read at
least the first two of three Pharo Tutorial Series booklets. Here is the
first:
https://github.com/SquareBracketAssociates/PharoByExample80/releases
and the second one is here, third row from the bottom, "Deep into Pharo":
http://books.pharo.org/
Have fun, and ask questions as you need to!
-Ted
--
Sent from: http://forum.world.st/Pharo-Smalltalk-Developers-f1294837.html
May 8, 2020
Re: [Pharo-dev] Need Idea for Pharo with freeCAD
by Cédrick Béler
Hi and welcome,
FreeCAD is quite a nice software. I donât know what youâd like to have but there is a python API that might be a starting point.
https://wiki.freecadweb.org/Category:API
There are some python bridges too for pharo but never used them.
HTH
Cedrick
> Le 8 mai 2020 à 08:15, shawon58 <shawonhoque58(a)gmail.com> a écrit :
>
> Hello
> I am starting learning about pharo. So my supervisor give task to learn how
> to connect pharo with FreeCAD. is there any idea how i can start to learn
> and what will way to learn Connect pharo with freeCAD. If i can able to run
> any simple code in pharo which can able to function freeCAD. Than my Grade
> will be save for the Project i take . Need Guidelines.
> Thanks
>
>
>
>
> --
> Sent from: http://forum.world.st/Pharo-Smalltalk-Developers-f1294837.html
>
May 8, 2020
Need Idea for Pharo with freeCAD
by shawon58
Hello
I am starting learning about pharo. So my supervisor give task to learn how
to connect pharo with FreeCAD. is there any idea how i can start to learn
and what will way to learn Connect pharo with freeCAD. If i can able to run
any simple code in pharo which can able to function freeCAD. Than my Grade
will be save for the Project i take . Need Guidelines.
Thanks
--
Sent from: http://forum.world.st/Pharo-Smalltalk-Developers-f1294837.html
May 8, 2020
Re: [Pharo-dev] [Vm-dev] Pony for Pharo VM
by Shaping
How do Pharoâs and Squeakâs VMs differ? I thought OpenSmalltalkVM was the common VM. I also read something recently from Eliot that seemed to indicate a fork.
I thought Pharo had the new tools, like GT, but Iâm not sure. I donât follow Squeak anymore.
Pharo may, it is fast moving and they drop historical support as new tools come online. I don't follow Pharo anymore. There is a common VM but the builds are separate.
I mostly donât follow Squeak, but do follow Pharo on and off, and may port as soon as the GUI formatting problems are fixed or are fixable by my own use of Spec2.
I tried Squeak 5.3 a few days ago for the first time in 16 years. It has a nicer induction/setup process, but menus were malfunctioning (rending spastically) before I finished getting reacquainted with the new surface. I donât have time these days to finish playing with it. I may get back to it, but why do that if the Pharo GUI is more advanced? Besides avoiding Pharo framework bloat and confusion, what about Squeak compels you to use it instead of Pharo for VM dev?
https://ponylang.zulipchat.com/#narrow/search/lzip
Here was the thread reference I was unable to follow. That you provided it around a discussion of why the CogVM was "not acceptable". Say what? So we are adding a near real-time requirement? I would suggest that the CogVM meets near real-time requirements. The longest GC pause may be 100 ms let us say. That is still near real-time.
5 to 10 ms is what I need. Even Ponyâs GCing barely keeps up with this, but the effect is smoother because all actors are running all the time, except when each actor GCs its own little heap. The timing issue is more about smoothness and predictably small tail latencies at the right end of a very steep and narrow latencies distribution.
Read the thread above and watch the video to sharper your imagination and mental model, somewhat, for how real object-oriented programs work at run-time. The video details are fuzzy, but you can get a good feel for message flow.
Exactly the way Smalltalk operates at runtime. Smalltalk was made with the benefit that the core message passing paradigm is the exact model of interaction we see remotely: message passing. Squeak is a native message passing machine.
This should have happened first in Smalltalk.
It did.
No, the idea of asynchronous messaging did, but not the implementation. Weâre not discussing the same phenomenon.
Smalltalk does not in general have asynchronous messaging between all actors all the time. It doesnât even have actors by default in the core language. You have to design them as an afterthought. Thatâs just wrong.
Smalltalk does not have true actors as a baseline implementation of the OO programming paradigm. You have to engineer it if you want it, and it doesnât scale well with the green threads. Just non-blocking FFI doesnât count; that is necessary and good, but not sufficient.
Async messaging: that was the original vision, and it still works best for state-machine construction, because no blocking and no read/write-barriers are needed. Hereâs the gist, and youâll find that Kay says the same in his talks, repeatedly (apparently no one listens and thinks about using it): advance the state of the state-machine only by exchange of asynchronous messages between actors. Thatâs the whole thing. Then you have the tooling on top of that to make the SM building systematic, reliable, and pleasant. Thatâs missing too, and must be done, as well, or the core idea is hard to use fullyâwhich is largely why we program as we do today. Most programmers are old dogs coding in the same old wrong way, because the new way, which is very much better, is even harder to do without the right tools and guarantees, and we donât have those yet. Functional programming (great for many domains) is a much better choice for general-purpose programming than the actor model with the current actor-based tools.
The performance of the GC in the CogVM is demonstrated with this profiling result running all Cryptography tests. Load Cryptography with this script, open the Test Runner select Cryptography tests and click 'Run Profiled':
Installer ss
project: 'Cryptography';
install: 'ProCrypto-1-1-1';
install: 'ProCryptoTests-1-1-1'.
Here are the profiling results.
- 12467 tallies, 12696 msec.
**Leaves**
13.8% {1752ms} RGSixtyFourBitRegister64>>loadFrom:
8.7% {1099ms} RGSixtyFourBitRegister64>>bitXor:
7.2% {911ms} RGSixtyFourBitRegister64>>+=
6.0% {763ms} SHA256Inlined64>>processBuffer
5.9% {751ms} RGThirtyTwoBitRegister64>>loadFrom:
4.2% {535ms} RGThirtyTwoBitRegister64>>+=
3.9% {496ms} Random>>nextBytes:into:startingAt:
3.5% {450ms} RGThirtyTwoBitRegister64>>bitXor:
3.4% {429ms} LargePositiveInteger(Integer)>>bitShift:
3.3% {413ms} [] SystemProgressMorph(Morph)>>updateDropShadowCache
3.0% {382ms} RGSixtyFourBitRegister64>>leftRotateBy:
2.2% {280ms} RGThirtyTwoBitRegister64>>leftRotateBy:
1.6% {201ms} Random>>generateStates
1.5% {188ms} SHA512p256(SHA512)>>processBuffer
1.5% {184ms} SHA256Test(TestCase)>>timeout:after:
1.4% {179ms} SHA1Inlined64>>processBuffer
1.4% {173ms} RGSixtyFourBitRegister64>>bitAnd:
**Memory**
old -16,777,216 bytes
young +18,039,800 bytes
used +1,262,584 bytes
free -18,039,800 bytes
**GCs**
full 1 totalling 86 ms (0.68% uptime), avg 86 ms
incr 307 totalling 81 ms (0.6% uptime), avg 0.3 ms
tenures 7,249 (avg 0 GCs/tenure)
root table 0 overflows
As shown, 1 full GC occurred in 86 ms
Not acceptable. Too long.
What is your near real-time requirement?
5 to 10 ms pauses per actor, not globally whilst all actors wait. Think smooth.
and 307 incremental GCs occurred for a total of 81 ms. All of this GC activity occurred within a profile run lasting 12.7 seconds. The total GC time is just 1.31% of the total time. Very fast.
Not acceptable. Too long. And, worse, it wonât scale.
I am unaware of any scaling problems. In Networking, 1000s of concurrent connections are supported. In computations, 10,000s objects. What are your timing requirements? Each incremental took a fraction of a millisecond to compute: 264 microseconds.
The problem is not the percentage; itâs the big delays amidst other domain-specific computation. These times must be much smaller and spread out across many pauses during domain-specific computations.
See the 307 incremental GCs? These are 264 microsecond delays spread out across domain-specific computations.
We have to watch definitions and constraints carefully.
Where memory management is concerned, this thread tries to compare the merits of the two extremes: per-actor memory management, as in the Orca (Pony practically), and global stop-the-world (StW) collection as in a classical Smalltalk.
You seem to be presenting something intermediate above, where there are segments that are GCed in turn. Are you stopping all domain threads/messaging during the incremental GCs, or just the ones for objects in a certain section of the heap? Or, are the heap partitions divided by more traditional criteria, like object size and lifespan? What is the spacing between the incremental GCs? Steady frequency of pauses, smallness of pauses, and narrowness of distribution of longest pauses, especially, are the most important criteria.
No serious real-time apps can be made in this case.
Of course they can. Model the domain as resilient & accepting of 100 ms pauses, for full GCs. It may be more could be done to the CogVM for near real-time, I am not very knowledgeable about the VM.
We are discussing different app domains.
I canât use 100 ms pauses in my real-time app. I need sub 10 ms pauses. Again even Pony needs better GCing, but the report I have from Rocco shows more or less acceptable pauses. He was kind enough to run the program again with the GC stats turned on. Iâll try to find the document and attach it.
I suggest studying the Pony and Orca material, if the video and accompanying explanation donât clarify Pony-Orca speed and scale.
Yeah, the video did not suggest anything other than using message passing.
You canât miss this detail; itâs almost everything that matters: asynchronous message passing between all actors, all the time, on the metal, not as an afterthought, with a guarantee of no data-races.
I could not find the thread discussing GC. Would you please post the specific URL to get to that resource, please? I do not want to guess any longer.
I donât get it. It works for me in a newly opened tab. I donât know what the problem is. Zulip should work for you as it does for me. Login to your Zulip and search on âRoccoâ. Youâll see Roccoâs stuff, which is largely about the parsing app he has. Better, just ask for the info you want.
Why would the idea of âremoteâ enter here? The execution scope is an OS process. Pony actors run on their respective threads in one OS process. Message passing is zero-copy; all âpassingâ is done by reference. No data is actually copied.
In the SqueakELib Capabilities model, between Vats (in-process, inter-process & inter-machine-node) most references to Actors are remote and then we have zero-copy. Sometimes we need to pass numbers/strings/collections and those are pass-by-copy.
Yeah, the copying wonât work well. Just never do it, at least not in one OS process. 0-copy messaging is the rule in Pony. Even this may not matter much eventually. The MM is being reworked with the hope of eliminating all consensus-driven messaging, which can be expensive, even if only transiently, on highly mutable object sets. See the Verona project, which seems to be slowly converging with Pony: https://github.com/microsoft/verona/blob/master/docs/faq.md. The Orca memory management core-weakness is still the fact that all messaging must be traced so that the collector knows which actors still refer to a given object. This is true of all concurrent collectors. That problemâand itâs a big problem-- goes away completely if the Pony runtime becomes Verona-ized.
The scheduler interleaves all threads needing to share a core if there are more actors than cores. Switching time for actor threads, in that case, is 5 to 15 ns. This was mentioned before. Opportunistic work stealing happens. That means that all the cores stay as busy as possible if there is any work at all left to do. All of this happens by design without intervention or thought from the programmer. You can read about this in the links given earlier. I suggest we copy the design for Smalltalk.
Which specific links? Could you send a summary email?
Not now, maybe later.
Some of this data comes from lectures by Clebsch, but youâll find most of the meat in the Pony papers, for which links can be found on the community page: https://www.ponylang.io/community/ .
I think the Pony runtime is still creating by default just one OS process per app and as many threads as needed, with each actor having only one thread of execution by definition of what an actor is (single-threaded, very simple, very small). A scheduler keeps all cores busy, running and interleaving all the current actor threads. Message tracing maintains ref counts. A cycle-detector keep things tidy. Do Squeak and Pharo have those abilities?
In the case of remote capability references, there is reference counting. This occurs inside the Scope object, there are 6 tables: 2 for third party introduction (gift tables), 2 for outgoing references (#answers & #export) and 2 for incoming references (#questions & #imports). These tables manage all the remote reference counting. Once again between any two Vats (in-process, inter-process & inter-machine-node). There are 2 GC messages sent back from a remote node (GCAnswer & GCExport) for each of the outgoing references. Alice has a reference to a remote object in Bob, when the internal references to Alice's reference end and the RemoteERef is to be garbage collected a GC message is sent to the hosting Vat, Bob.
In Squeak/Pharo do all actors stop for the GCs, even for the smaller incremental ones?
I have some experience with state-machine construction to implement security protocols. In Squeak, DoIt to this script to load Crypto and ParrotTalk & SSL (currently broken) and see some state-machines:
Installer ss
project: 'Cryptography'; install: 'ProCrypto-1-1-1';
project: 'Cryptography'; install: 'ProCryptoTests-1-1-1';
project: 'Cryptography'; install: 'CapabilitiesLocal';
project: 'Oceanside'; install: 'ston-config-map';
project: 'Cryptography'; install: 'SSLLoader;
project: 'Cryptography'; install: 'Raven'.
Pony has Actors. It also has Classes. The actors have behaviours. Think of these as async methods. Smalltalk would need new syntax for Actors, behaviours, and the ref-caps that type the objects. Doing this last bit well is the task that concerns me most.
Which? "ref-caps that type the objects"? What does that mean?
This is the best page on ref-caps: https://www.ponylang.io/learn/#reference-capabilities
The six ref caps define which objects can mutate which others at compile time. Ref-caps provide the guarantees. The ref caps connect the code of your language (Pony so far) to the MM runtime at compile time.
With the CapabilitiesLocal I pointed you to, we have an Actor model with async message passing to behaviors of an Actor. Squeak has Actors supporting remote references (3-way introductions, through the gift tables is broken. Remote references from Alice to Bob is working. See the tests in ThunkHelloWorldTest: #testConnectAES, #testConnectAESBufferOrdering & #testConnectAESBuffered.
that exists for Smalltalk capabilities and Pony capabilities. In fact, instead of talking about actors, concurrency & parallel applications, I prefer to speak of a capabilities model, inherently on an event loop which is the foal point for safe concurrency.
I suggest a study of the Pony scheduler. There are actors, mailboxes, message queues, and the scheduler, mainly. You donât need to be concerned about safety. Itâs been handled for you by the runtime and ref-caps.
Same with Raven, plus remote. We have all of that. See the PriorityVat class.
Last time I checked, Squeak/Pharo didnât have actors that run without interruption by the GC. Or can Smalltalk actors do that now? How hard to implement on OSVM would a per-actor memory architecture be? You need a concurrent collector algo to make it work. I donât think you have that in the current VM.
I donât have time for Pony programming these days--I canât even read about these days. Go ahead if you wish.
Your time is better spent in other ways, though.
I communicate with you about what could be, but I agree I must stay focused on my primary target, which is porting SSL to use my new ThunkStack framework for remote encrypted communications. End-to-end encryption is what I am about. Here is a visualization of what I aim for with TLS 1.3 and Signal as to be done projects, it is currently vaporware. I have ParrotTalk done and am working SSL, then I will move to SSH. The script I listed above will load all remote packages, except for SSH. I m attaching the flyer I created to broadcast Squeak's ProCrypto configuration.
The speed and scale advantages of Orca over the big-heap approach have been demonstrated. That was done some time ago. Read the paper by Clebsch and friends for details.
Regarding capabilities please read the ELib documentation on ERights website: http://erights.org/elib/index.html
The material is not well organized, and is very hard to even want to read. Maybe you are the one to change that.
Iâm looking for: 1) definitions of all terms that are new or nonstandard; 2) problem-constraint invariants (one canât reason about anything without invariants); 3) problem-solution objectives expressed in measurable terms, like data-rate or latency.
Can I get those? This might be a good time and place to describe your proposed concurrency solution for Smalltalk in terse, measurable terms.
Have you measured a running actor-based app on one node? On two or more?
You state that Pony is just to access Orca.
The two are codesigned.
What makes Orca so great?
The measurements. Read the end of the Orca paper if you canât read the whole thing. Orca is the best concurrent MM protocol now.
Aside: I want to be rid of general purpose GC. I think the purely functional approach with persistent data structures can work better (think Haskell). You still need to maintain state in processing queues (think Clojure; not sure how Haskell handles this). You still need temporal-coherency control devices at the periphery for IO (atoms for example).
There are definitely more than one Actor per Vat.
Why have another construct? It appears to be scoped to the node. Is that the reason for the vatâs existence? Does it control machine-node-specific messaging and resource management for the actors in it contains?
1 per process. There will be a finite number of Capability actors in each event loop.
But more than one and scale into thousands per Vat.
Is there a formal definition of vat? I found this:
âA vat is the part of the Neocosm implementation that has a unique network identity. We expect that normal circumstances, there will only be one vat running on a particular machine at one time. Neocom currently (28 May 1998) supports only one avatar per vat.â
Here is the state machine specification for ParrotTalk version 3.7, which is compiled by the ProtocolStateCompiler. This stateMap models states, triggers, transitions, default and callbacks and is simple to use.
ParrotTalkSessionOperations_V3_7 class>>#stateMap
"(((ParrotTalkSessionOperations_v3_7 stateMap compile)))"
| desc |
desc := ProtocolStateCompiler initialState: #initial.
(desc newState: #initial -> (#processInvalidRequest: -> #dead))
add: #answer -> (nil -> #receivingExpectHello);
add: #call -> (nil -> #receivingExpectResponse).
(desc newState: #connected -> (#processInvalidRequest: -> #dead))
addInteger: 7 -> (#processBytes: -> #connected).
(desc newState: #dead -> (#processInvalidRequest: -> #dead)).
(desc newState: #receivingExpectHello -> (#processInvalidRequest: -> #dead))
addInteger: 16 -> (#processHello: -> #receivingExpectSignature).
(desc newState: #receivingExpectSignature -> (#processInvalidRequest: -> #dead))
addInteger: 18 -> (#processSignature: -> #connected);
addInteger: 14 -> (#processDuplicateConnection: -> #dead);
addInteger: 15 -> (#processNotMe: -> #dead).
(desc newState: #receivingExpectResponse -> (#processInvalidRequest: -> #dead))
addInteger: 17 -> (#processResponse: -> #connected);
addInteger: 14 -> (#processDuplicateConnection: -> #dead);
addInteger: 15 -> (#processNotMe: -> #dead).
^desc.
--Because it will continue the current Smalltalk-concurrency lameness.
The only identified difference is not the Actor model, it is the near real-time requirements on the Garbage Collector, yes? So what lameness do you reference?
The actor model is a problem too if you stop all actors with a StW GC. Fix the problem by letting each actor run until it finishes processing the last message. Then let it collect its own garbage. Then let it take the next message from the queue. All actors are single-threaded by definition. This maximizes processing rate and smoothness of GC-disruption of domain work. It also increases tracing overhead transiently when large numbers of mutable objects are used (21% peak CPU consumption ascribable to tracing when you throw the tree/ring exercise at Pony with as many mutable types as possible). We will be turning to functional programming strategies for at least some (if not eventually all) core (not peripheral IO) parallelization efforts, but I digress somewhat.
Two big problems impede parallelization of programs in Smalltalk: 1) the GC stops all actors, all of them or large chunks of them at once, depending on how the GC works. Neither situation is acceptable. That this pause is small is not as important as the work lost from all the actors during that period; 2) core Smalltalk doesnât have a guaranteed concurrency-integrity model that automatically starts threads on different cores; it can only interleave them on one core (green threading).
These ideas should not be add-ons or frameworks. They should be core features. If we can do the above two in Squeak/Pharo, Iâll use Squeak/Pharo to work on a VM.
Have you tried implementing SmallInteger class>>#tinyBenchmarks in Pony?
No, sadly. Iâve yet to build Pony. Iâm still reading about the techniques and background. I plan to parse large CSV files into objects, as in Roccoâs exercise. I have some files I can use for that purpose, and can get the same data over HTTP to test a connection too. That would be a nice first experiment. We need to be clinical about this. All the talk and hand-waving is an okay start, but at some point, we must measure and keep on doing that in a loop, as architecture is tweaked. I would like to compare a Pony parsing program to my VW parsing program as a start. But the Pony work has to wait.
Too slow/wasteful. Moving an actor isnât needed if the each has its own heap.
In ELib, why not allow an Actor to be mobile and move from Alice's Vat to Bob's Vat?
Are Vats for scoping actors to specific machine nodes? If so, then yes move the actors to another machine node if it is better suited to what the actor does and needs.
Then automated management apps can really truly rebalance Actors. Only on a rare moment, not for every call.
Yes, we must have run-time feedback to adjust resources, which are the actors and the machine nodes they are made to run on. A coordination actor would watch all other actors and clusters of them.
Once again the near real-time of the Orca Garbage Collector. I am not convinced, but reading some papers.
Runtime action with an Orca collector is definitely smoother. This we can know before the fact (before we measure) from the fine-grain MM. What is not clear without testing is overall speed. We need to test and measure.
86 ms will not break the contract, I propose.
Itâs okay for a business app, certainly--not such much for machine-control or 3D graphics. Itâs good enough for prototyping a 3D sim, but not for deployment.
Yes, and a dedicated cycle-detecting actor watches for this in Pony-Orca.
I don't watch for it, but it is a strong design consideration. Keep Actor behaviors short and sweet.
The cycles are about chaining of messages/dependencies between actors. When a programmer makes these actor clusters manually, messing up is easy. A higher-level tools is need to manage these constructions. The actor-cycles will exist and become problematic even if each actor is fast. The detector finds and exposes them to the programmer.
E-right's event loops ensure no data races, as long as actor objects are not accessible from more than one event-loop.
Speed hit.
???
This constraint is not needed to guarantee correct concurrency in Pony, which happens at compile time and takes no CPU cycles. The approach above sounds dynamic; there are some CPU cycles involved.
Yes; I didnât claim otherwise. The networked version is coming. See above. My point is that the âremoteâ characterization is not needed. Itâs not helping us describe and understand.
It does so for me, either we have inner-Vat message calling, immediate, adding to the stack. And we have inter-Vat message sending, asynchronous, adding to the queue.
I still donât see a clear definition of vat.
None of the above language is needed when the concurrency scheme is simpler and doesnât use those ideas and devices.
Design wise, it makes much sense to treat inter-thread, inter-process and inter-machine concurrency as the same remote interface.
The design is already done, modulo the not-yet-present network extension. Interfacing between actors is always by async messaging. Messaging will work as transparently as possible in the networked version across machine nodes.
Must remember, we are still vulnerable to network failure errors.
Yes, they are keenly aware of that. Itâs a big task and wonât happen for a while. But it will happen.
I donât like the Pony language syntax. I donât like anything that looks like Algo-60. Pony is a language, compiler and runtime implementing Orca. The other stuff is good. And Iâve not had much time to use it; I suspect I could like it more.
No argument from me! Squeak is a language, a compiler and a profound image-based runtime. Is there another language with such an image-based runtime? I think not.
Yes, we all love Smalltalk. Itâs still too slow.
Weâre not talking about coding ergonomics and testing dynamic. We all agree that Smalltalk is a better that way to code and interact with the evolving program. But thatâs not what the thread is about. This is all about speed and scale across cores, CPUs, and machine nodes. The solution must be implemented close to the metal (VM). It canât be an add-on framework. We need an Actor class and syntax for making actors and their async behaviours. Then we need the VM to understand the new format and bytecodes associated with actors.
Shaping
May 8, 2020
[Pharo 9.0] Build #292: optionalFindThePig
by ci-pharo-ci-jenkins2@inria.fr
There is a new Pharo build available!
The status of the build #292 was: FAILURE.
The Pull Request #6314 was integrated: "optionalFindThePig"
Pull request url: https://github.com/pharo-project/pharo/pull/6314
Issue Url: https://github.com/pharo-project/pharo/issues/optionalFindThePig
Build Url: https://ci.inria.fr/pharo-ci-jenkins2/job/Test%20pending%20pull%20request%2…
May 7, 2020
[Pharo 9.0] Build #291: remove-RBRuleIfNotEmptyDo
by ci-pharo-ci-jenkins2@inria.fr
There is a new Pharo build available!
The status of the build #291 was: SUCCESS.
The Pull Request #6300 was integrated: "remove-RBRuleIfNotEmptyDo"
Pull request url: https://github.com/pharo-project/pharo/pull/6300
Issue Url: https://github.com/pharo-project/pharo/issues/remove
Build Url: https://ci.inria.fr/pharo-ci-jenkins2/job/Test%20pending%20pull%20request%2…
May 6, 2020
[Pharo 9.0] Build #290: Remove wrong detection of a lost change after save, wait and quit
by ci-pharo-ci-jenkins2@inria.fr
There is a new Pharo build available!
The status of the build #290 was: SUCCESS.
The Pull Request #6312 was integrated: "Remove wrong detection of a lost change after save, wait and quit"
Pull request url: https://github.com/pharo-project/pharo/pull/6312
Issue Url: https://github.com/pharo-project/pharo/issues/5308
Build Url: https://ci.inria.fr/pharo-ci-jenkins2/job/Test%20pending%20pull%20request%2…
May 6, 2020
StMPI: Parallel Processing with Smalltalk
by askoh
Hi:
Since July 2019, I have been mentoring Hakimie Salim for his Final Year
Project at Multimedia University in Malaysia. He has done an outstanding job
bring Parallel Processing to Smalltalk via MPI. The result is published at
github.
https://github.com/hakimiesalim/StMPI
This work offers a general way to interface Smalltalk to other programs in
any language and achieve parallel processing simultaneously. Since many MPI
programs already exists, they can be accessed by Smalltalk via StMPI
readily.
Let us know your feedback.
Thanks,
Aik-Siong Koh
StMPI
Many MPI implementations have been done such as MPICH, OpenMP, MSMPI and
JavaMPI. This project does not do a new MPI implementation from scratch but
rather bind Smalltalk language with C language to use other MPI in
Smalltalk. This implementation is named StMPI. An image processing
application and prime number application were created to test StMPI
performance. The source code for the application is provided. Download the
full application here,
https://drive.google.com/file/d/1oL8XaFfwhprqioUysIIDMo9VX2--6T6A/view?usp=…
and here,
https://drive.google.com/file/d/1uyM_wGf6dnJ8HNnNEF9iWiy61o9085zT/view?usp=….
Its was aimed to help Smalltalk prominent user to get the most performance
speed in their program by allowing them to do parallel computing. StMPI is
created to run on both Windows and Linux environments. You can implement it
on your system by following the guideline provided.
There is one field that could be explored based on this project which is to
use StMPI as a medium to communicate between Smalltalk programs to another
programming language program. The image processing application and prime
number application uses both the Smalltalk programming language and C++
programing language. This just shows that you could use StMPI as a
communication medium between programming languages.
--
Sent from: http://forum.world.st/Pharo-Smalltalk-Developers-f1294837.html
May 5, 2020