Hi Shaping, Just to get in the right frame of mind, consider that because of the Blub Paradox (http://www.paulgraham.com/avg.html) you are going to have a hard time convincing people to "change to this language because of Feature X" just by saying so. You need to dig deeper. Now I I took a quick look to see what I could learn about Pony and the main interesting thing is its "Reference Capabilities". Indeed, it seems Pony's purpose is the POC for that research. I watched two videos... [1] Ãredev 2017 - Joe McIlvain - Pony - A Language for Provably Safe Lockless Concurrency https://www.youtube.com/watch?v=9NH4bVfbvYI [2] Sophia Drossopoulou - Pony for Safe, Fast, concurrent programs - Codemesh 2017 https://www.youtube.com/watch?v=e_bES30tFqI So my "quick" assessment is to consider Reference Capabilities not a Type System but a Meta-type System. [2] says "They are not a property of an object, but define how I can look at an object." To summarize the videos... [1]@29:15... [image: image.png] [image: image.png] [2]@13:40... [image: image.png] [2]@24:40... [image: image.png] [2]@28:30... [image: image.png] So you say...
I want to use the Pony concurrency model at the Smalltalk level. Thatâs the gist of it. Otherwise, I want a Smalltalk, not a statically compiled language.
I believe you have the wrong end of the the stick promoting that the VM needs to be redeveloped using Pony to get the Reference Capabilities at the Smalltalk level. After you Ahead-Of-Time compile the VM, the compiler is left behind. The features of the compiler don't automatically flow through to Smalltalk level. A third option could be to extend to the existing "Immutability capability" of the VM. The six Reference Capabilities might be stored in the Spur Object Header using a re-purposed Immutability bit plus the two free "green" bits. https://clementbera.wordpress.com/2014/01/16/spurs-new-object-format/ "Reference Capabilities for Dynamic Languages" could be a strong PhD project. cheers -ben On Fri, 10 Apr 2020 at 17:56, Shaping <shaping@uurda.org> wrote:
Hi Ken.
Not to discourage people, but I have not seen cases where a "strong type system would be able to scale for _real_ Smalltalk applications.
Youâre right. It doesn't. I'm not suggesting that.
The type safety is not for app-level Smalltalk development. It's for
building the VM only.
The six ref-cap ideas for sharing data reliably between actors are not
hard to grasp, but they take some getting used to, and involve some mental load. I don't want that much (concurrency-related or any other) implementation detail in the domain layer, much in the same vein as: I donât use Forth because I donât want to see stack acrobatics (ROTs and DUPs, etc.) amidst domain-level state-changes (FirePhotonTorpedo). Itâs distracting. It dilutes focus on the domain work/layer, and tends to cause mistakes there.
The programmerâs domain logic and the concurrency-integrity provided by
the ref-caps are different layers of thought and structure. The ref-caps are, however, mixed freely with domain logic in current Pony code. I think thatâs a mistake. But thatâs how it is now. I think of this layer mixing as an intermediate design stage of Pony. I want to abstract-out some or all ref-caps as the VM is built.
Pony language is not the remarkable thing here. I see it as a better C or
better Rust. Itâs very good (as Algol-60-ish-looking crap-syntaxes go), but thatâs not what this is about. Itâs about the actor programming, the concurrency model, and the guarantees given by use of the ref-caps. We would still obviously need to respect the Pony compilerâs determination of where ref-cap use is correct or not. Your Pony program wonât compile if you donât use the ref-caps correctly, and you donât get the guarantees or a running program without the compile. Much easier, therefore, might be to go the other way by changing Pony to support dynamic types without violating the invariants that allow the ref-caps (under the hood, abstracted out) to make the concurrency guarantees. Work Smalltalk dynamism into Pony, instead of building a Smalltalk VM with Pony.