Pharo-dev
By thread
pharo-dev@lists.pharo.org
By month
Messages by month
- ----- 2026 -----
- November
- October
- September
- August
- 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
- 1 participants
- 144633 messages
Re: [Pharo-dev] Initial Feedback on Pharo 7 contribution process
by Guillermo Polito
On Thu, Aug 17, 2017 at 10:44 AM, Torsten Bergmann <astares(a)gmx.de> wrote:
> Hi,
>
> even when contributing to Pharo 7.0 is still very very cumbersome I was
> able
> to sort out most of the problems and contribute already a few smaller
> things.
>
> Unfortunately there is not much communication on what is currently in the
> pipe
> or planned on easing the process - which can easily lead to the impression
> that we do not really move or slow us down.
>
Vacations period...
>
> I know step by step it goes and at least we have again the build process
> rolling
> https://pharoweekly.wordpress.com/2017/08/16/pharo-70-is-
> starting-to-roll-for-real/
>
> Nonetheless one of my PRs was already integrated and the integration of my
> WebBrowser
> package is still in the pipe (https://github.com/pharo-
> project/pharo/pull/193)
>
Yes, I need to document better all the process with the baselines, I know :)
>
> The descriptions from Guille helped me - but there are still things I need
> answers to:
>
> 1. Will or is it still possible to automatically update" an image in
> Pharo 7
> or in the future?
> The World menu entry "System" -> "System update" has been removed?
>
> Is this temporary of will it return once we know how it could be done
> again?
>
>
AFAIU, this never worked "safely".
>
> 2. In latest Pharo 7.0 image there is a glitch that a method category
> has a typo in class "HEBinaryReaderWriter" and is "writting" instead of
> "writing".
>
> Lets assume I want to fix such a simple problem. But Hermes was an
> external package managed on GitHub.
> And it is now part of the image and therefore also in the "pharo" repo
> on GitHub. So how is it
> maintainted/managed with the new process?
>
> So do I fix this as a regular PR for Pharo 7 https://github.com/pharo-
> project/pharo
> or should it be fixed in the original repo https://github.com/tesonep/
> hermes
> and Hermes is synched from time to time into or from Pharo.
>
My answer to this is: until we support multiple code directories per
repository in iceberg (I think that's scheduled for next release), we kind
of have a fork (as we had before with the image and people committing to
the inbox).
The good way to do the fix on hermes should be, although a bit cumbersome,
the following:
- fix it in hermes repo
- then sync hermes with your pharo fork
- pull request for pharo
I know these are a lots of steps...
>
> 3. What still hit me most is that it is hard to identify the images and
> find out
> how "new" they are.
>
> Example: In Guilles example https://github.com/guillep/
> PharoIntegrationProcess/wiki/Contribute-a-fix-to-Pharo
> it is written that one should use
>
> wget -O - get.pharo.org/70+vm | bash
>
> This gives me an image file called "Pharo.image" and after a few days
> I do not know how
> old it is or what it was built from.
>
> When I start the image and look into the about box it gives me
>
> Pharo 7.0
> Latest update: #0
>
> telling me nothing and when I run
>
> SystemVersion current
>
> it says "Pharo7.0SNAPSHOT of 16 August 2017 update 0" which is also
> very useless.
>
True, but if you inspect `SystemVersion` you'll see that it contains the
hash. Thus there are two issues:
- SystemVersion printing should include more info
- we should put build information into the image (so far it is only in
the zip archives in files.pharo.org)
The first issue should be easy to fix and maybe a good target for a guy
trying to make his first PR.
The second issue requires understanding a bit more the bootstrap process (I
need to write something more detailed about that, I know, but I'm on
vacations right now and from saturday I've no internet).
I can try to solve them today, I'll not be long I think.
>
> Both do not tell me anything about the build number!!! I can only
> guess the git commit from the name
> of the sources file:
>
> Pharo7.0-32bit-c28bff9.sources
>
> When I check https://github.com/pharo-project/pharo/commits/
> development with "c28bff9" then at least
> I have an idea how old it is.
>
> Especially the last topic is a pain point and the most pressuring to be
> discussed - without a clear image build number
> in the version/about box nobody is able to reproduce in which image one
> run into trouble or he is basing his work on.
>
> I know during transition time we need more patience and things will get
> more stable and we make progress over
> time. But I whised we would have more communication on the overall topic
> (current work, plans, ...) on this list here.
>
Well, in part what I wanted as a first milestone is to reach the point
where the process is smooth enough to let people contribute. And well... at
that point people could contribute :)
This is my TODO list, if somebody wants to help:
On the CI and integration front:
- automate integration mails
- automate github/jenkins/fogbugz communication
On the Iceberg front:
- my main wish is to have a smooth experience while submitting a fix to
pharo
- subdirectories (to better manage sub projects)
- less of a hard issue:
- there is a nice plugin architecture, I'd like to see more plugins
flourish?
- we need people involving themselves on it. I think Esteban alone
cannot with all the issues there.
On the general build process:
- we need to enhance how packages can be loaded in a `minimal image`
- Right now, we don't have baselines for each pharo subproject. For
example, the other day I wanted to install spacetally and I did not have a
baseline
- Even if we had baselines, there are ugly dependencies: for example,
spacetally depends on morphic.
- I started thinking we need the idea of a MultiProject baseline where
a baseline describes a top project with subprojects (baselines) in the same
repository
> I have no idea who is working on what already regarding making the process
> more easier.
>
Esteban is Iceberg's fairy-knight.
I was working a lot lately with Christophe to have the ci working and make
sure we can integrate PRs and we are not stuck. I made tests green to have
a better indication of the process. I started documenting all this.
Pavel is helping with the overall process too.
>From that list, Esteban is the only full time guy. I'm now doing stuff over
here and there but I'm on vacations and my relationship may depend on not
working so much :P
Now, sending mails like this is good because they raise good issues.
Please, people, raise more like this. For the brave, you can keep trying
publishing some Pull request, sharing your experience, documenting stuff...
>
> Thanks for any comments or own feedback you can share.
>
> Thank **you**,
Guille
> Regards
> T.
>
>
>
>
--
Guille Polito
Research Engineer
French National Center for Scientific Research - *http://www.cnrs.fr*
<http://www.cnrs.fr>
*Web:* *http://guillep.github.io* <http://guillep.github.io>
*Phone: *+33 06 52 70 66 13
Aug. 17, 2017
Re: [Pharo-dev] Issue that may break Epicea
by Guillermo Polito
Why would it break epicea?
There is no major change in API. Only the method #createDirectory is
removed, but the only users are internal to the library. In my latest image
there are no Epicea users of it.
On Wed, Aug 16, 2017 at 8:59 PM, Stephane Ducasse <stepharo.self(a)gmail.com>
wrote:
> Hi martin
>
>
> https://pharo.fogbugz.com/f/cases/18084/FileReference-EnsureCreateFile
> https://github.com/pharo-project/pharo/pull/133
>
>
--
Guille Polito
Research Engineer
French National Center for Scientific Research - *http://www.cnrs.fr*
<http://www.cnrs.fr>
*Web:* *http://guillep.github.io* <http://guillep.github.io>
*Phone: *+33 06 52 70 66 13
Aug. 17, 2017
Initial Feedback on Pharo 7 contribution process
by Torsten Bergmann
Hi,
even when contributing to Pharo 7.0 is still very very cumbersome I was able
to sort out most of the problems and contribute already a few smaller things.
Unfortunately there is not much communication on what is currently in the pipe
or planned on easing the process - which can easily lead to the impression
that we do not really move or slow us down.
I know step by step it goes and at least we have again the build process rolling
https://pharoweekly.wordpress.com/2017/08/16/pharo-70-is-starting-to-roll-f…
Nonetheless one of my PRs was already integrated and the integration of my WebBrowser
package is still in the pipe (https://github.com/pharo-project/pharo/pull/193)
The descriptions from Guille helped me - but there are still things I need
answers to:
1. Will or is it still possible to automatically update" an image in Pharo 7
or in the future?
The World menu entry "System" -> "System update" has been removed?
Is this temporary of will it return once we know how it could be done again?
2. In latest Pharo 7.0 image there is a glitch that a method category
has a typo in class "HEBinaryReaderWriter" and is "writting" instead of
"writing".
Lets assume I want to fix such a simple problem. But Hermes was an external package managed on GitHub.
And it is now part of the image and therefore also in the "pharo" repo on GitHub. So how is it
maintainted/managed with the new process?
So do I fix this as a regular PR for Pharo 7 https://github.com/pharo-project/pharo
or should it be fixed in the original repo https://github.com/tesonep/hermes
and Hermes is synched from time to time into or from Pharo.
3. What still hit me most is that it is hard to identify the images and find out
how "new" they are.
Example: In Guilles example https://github.com/guillep/PharoIntegrationProcess/wiki/Contribute-a-fix-to…
it is written that one should use
wget -O - get.pharo.org/70+vm | bash
This gives me an image file called "Pharo.image" and after a few days I do not know how
old it is or what it was built from.
When I start the image and look into the about box it gives me
Pharo 7.0
Latest update: #0
telling me nothing and when I run
SystemVersion current
it says "Pharo7.0SNAPSHOT of 16 August 2017 update 0" which is also very useless.
Both do not tell me anything about the build number!!! I can only guess the git commit from the name
of the sources file:
Pharo7.0-32bit-c28bff9.sources
When I check https://github.com/pharo-project/pharo/commits/development with "c28bff9" then at least
I have an idea how old it is.
Especially the last topic is a pain point and the most pressuring to be discussed - without a clear image build number
in the version/about box nobody is able to reproduce in which image one run into trouble or he is basing his work on.
I know during transition time we need more patience and things will get more stable and we make progress over
time. But I whised we would have more communication on the overall topic (current work, plans, ...) on this list here.
I have no idea who is working on what already regarding making the process more easier.
Thanks for any comments or own feedback you can share.
Regards
T.
Aug. 17, 2017
Re: [Pharo-dev] [Pharo-users] including Pillar in Pharo image by default
by Peter Uhnak
Even though I've initiated this discussion I kind of stopped reading because everyone started discussing completely unrelated things...
The initial point was.... "we are using github/gitlab more and more, lets leverage it more"
New, lets separate the concepts at play here...
"Pillar - document model" - the workhorse of pillar and (imho) the most important part of it, and also the part I am interested in being included. Because then I can generate the document directly without using any syntax...
"Pillar - syntax" - we can have endless arguments whether the syntax is good or bad, and imho that should be a separate discussion unrelated to the Pillar inclusion
"Markdown for unrelated usecases" - whether you can or cannot write your thesis in markdown is really irelevant here
"Markdown - export" - there will always be different variants and extensions for Markdown, simply because the sites using markdown offer different capabilities.
Therefore the first focus should be on the most impact/effort ratio, which is CommonMark (basically the only meaningful Markdown specification), and GFM (which is a CommonMark with added tables and strikethrough).
Adding support for more extensive export support, whether code related (e.g. GitLab), or code unrelated (writing a thesis) should be a future discussion, it is not relevant or too effortful right now.
"Markdown - import" - I would love to be able to write markdown and have it imported into the Pillar document model, however that is imho moot point right now, as it can always be added later
To summarize:
* primary
* include pillar document model
* include pillar syntax (as an import format)
* add CommonMark+GFM export
* secondary
* discuss Pillar syntax if needed (in a _new_ thread)
* discuss Markdown parser / importing CommonMark into Pillar model
* any other discussion not pertinent here should go elsewhere
Peter
On Wed, Aug 16, 2017 at 06:05:29PM +0200, Esteban Lorenzano wrote:
> Hi,
>
> In general (you all know me), I have the policy of âdo not go alien just becauseâ which means we do not need to reinvent the wheel all the time and we need to stick with what is already there and known (I have pushed many changes in pharo following this direction, iceberg being just the latest), but we need to keep also the basis of what we are (which means: when we need to stay alien, we need to embrace it too).
>
> Said that: while I would LOVE to have a markdown compatible format, the amount of effort put on pillar to make it *what we need* and is a format used not just for doing README.md but to write books, etc., then replacing it would be complicated.
>
> but⦠I think we can do pillar syntax more âmarkdown alikeâ (and we can even have a stripped-pillar with would be even more like md), I would salute such change.
>
> cheers,
> Esteban
>
>
> > On 15 Aug 2017, at 19:23, Eliot Miranda <eliot.miranda(a)gmail.com> wrote:
> >
> >
> >
> > On Aug 15, 2017, at 7:25 AM, Ben Coman <btc(a)openinworld.com <mailto:btc@openinworld.com>> wrote:
> >
> >>
> >>
> >> On Tue, Aug 15, 2017 at 12:54 AM, Esteban A. Maringolo <emaringolo(a)gmail.com <mailto:emaringolo@gmail.com>> wrote:
> >> You hit several birds with one single mail.
> >>
> >> 2017-08-14 13:34 GMT-03:00 Tim Mackinnon <tim(a)testit.works <mailto:tim@testit.works>>:
> >> > Jimmie et al. nicely reasoned arguments - and Doru's point about controlling
> >> > the syntax is an interesting one that I hadnât thought about.
> >> >
> >> > Personally, I find having too many similar syntaxâs confusing - contributing
> >> > to things is hard enough - having to remember that its !! Instead of ## and
> >> > ââ instead of ** is just frustrating for me.
> >>
> >> +1
> >>
> >> Not only for docs, most platforms like Slack/Discord share the syntax,
> >> so now I'm getting "muscle memory" when typing literals using the
> >> backtick (`) character, quoting with > or pasting snippets using ```
> >>
> >> +1. So I've posted this before...
> >> https://www.joelonsoftware.com/2000/06/03/strategy-letter-iii-let-me-go-bac… <https://www.joelonsoftware.com/2000/06/03/strategy-letter-iii-let-me-go-bac…>
> >> describing that "The only strategy in getting people to switch to your product is to eliminate barriers"
> >>
> >> But more... the best reason for Pillar to support a Markdown-ish syntax, is that when we scratch-our-own-itch (nominally for Pillar) to build the best damn markup-editor ever (because we can!) - if this happened to support Markdown it can draw in Markdown-non-Pharo users (because its the best editor ever!). Those users later want to make modifications, and now have a *reason* to learn Pharo... ahHaA! now you see the cunning plan...
> >>
> >> So don't just promote to people "hey come and play with this cool toy of ours (Pharo)."
> >> Instead give them a toy they *already-want* (Markdown editor) and then when they want to change the batteries, they *need* to use our special screwdriver (Pharo).
> >
> > +1!
> >
> >>
> >> cheers -ben
> >>
> >>
> >> > Sure, maybe we were first with Pillar, but for me, lots of programming is in
> >> > other languages, and I use Smalltalk where I can, and a hybrid of multiple
> >> > languages and projects is often the reality - so a lowest common denominator
> >> > of Markdown is just easier. The fact that we are quite close to what our
> >> > colleagues in other languages use (regardless of what Python has chosen), is
> >> > quite interesting.
> >>
> >> This helps building "bridges" with other communities.
> >>
> >>
> >>
> >>
> >>
> >>
> >> The language as a means of exchange is always the lowest common denominator.
> >> As long as it's "efficient enough" then I vote to use what other
> >> communities use.
> >>
> >> > That said, if the community wants to stick to its gunâs thats fine - I will
> >> > probably still investigate how to use Commonmark for myself, and will still
> >> > contribute to Pillar docs where I can (and curse history) - but I think we
> >> > are long better off trying to join emerging standards where we can
> >> > particularly if they arenât our core language thing. And it just makes it
> >> > less frictionless for ourselves and newcomers.
> >>
> >> The "Not Invented Here" syndrome is strong among Smalltalkers, it's
> >> important to be aware of this bias and think more than once whether
> >> eating our own dogfood adds value to the core of what Pharo brings.
> >>
> >> I think we missed some good years fighting with our own SCM and in the
> >> end git (or any other file based SCM) prevailed, even when it has
> >> limitations.
> >>
> >> Pareto (80-20) for everything non-core business should be a guide.
> >>
> >> > Of course, if we were to move, we would need to translate a lot of quality
> >> > docs to a new format - but I would be up for contributing to that if that
> >> > was a deciding factor.
> >>
> >> There are some Markdown exporters AFAIK, or it could be written.
> >>
> >>
> >> Esteban A. Maringolo
>
Aug. 17, 2017
Re: [Pharo-dev] [Vm-dev] eventual crashes pharo vm
by henry
To let you know what I tried, trying to learn about this system as I dig into it, I added isInteger to the #blockedSelectors of NearERef. This crashed the squeak vm when I ran the test, and as I look into how blockedSelectors is used it smashes the resolver. What seems to be needed is a list of immediateSelectors, though that may grow to be a sizeable list. This causes me to think there must be a different approach between async and sync code.
- HH
> -------- Original Message --------
> Subject: Re: [Vm-dev] [Pharo-dev] eventual crashes pharo vm
> Local Time: August 16, 2017 11:46 PM
> UTC Time: August 17, 2017 3:46 AM
> From: henry(a)callistohouse.club
> To: Eliot Miranda <eliot.miranda(a)gmail.com>
> Squeak Virtual Machine Development Discussion <vm-dev(a)lists.squeakfoundation.org>, Pharo Development List <pharo-dev(a)lists.pharo.org>, Marcus Denker <marcus.denker(a)inria.fr>
>
> Hi Eliot,
>
> I have disabled that test for the time being. It will require some deeper thought regarding immediate selectors, I think, and I am deep into another area right now. As mustBeBoolean is from inside the VM, a different approach may be the right solution. A part of me thinks autocoercion between msg sending (async) and msg calling (sync) is what is needed, but I want continuation-based VatSemaphores to prevent a liveness lock on the event loop to support. Again, I have not thought deep enough in this area.
>
> Thanks again for your help,
>
> - HH
>
>> -------- Original Message --------
>> Subject: Re: [Pharo-dev] eventual crashes pharo vm
>> Local Time: August 16, 2017 10:32 PM
>> UTC Time: August 17, 2017 2:32 AM
>> From: eliot.miranda(a)gmail.com
>> To: henry <henry(a)callistohouse.club>
>> Marcus Denker <marcus.denker(a)inria.fr>, Pharo Development List <pharo-dev(a)lists.pharo.org>, Squeak Virtual Machine Development Discussion <vm-dev(a)lists.squeakfoundation.org>
>>
>> Hi Henry,
>>
>> On Wed, Aug 16, 2017 at 6:33 PM, henry <henry(a)callistohouse.club> wrote:
>>
>>> That is good news, that it is due to this code doing funniness than a VM issue. This code trying to bring asynchrony within a synchronous environment brings new issues.
>>>
>>> What do you think that right solution is to the issue of a call expected to be immediate, change out to go eventual until the arguments resolve?
>>
>> I'm not informed enough to know. One could implement mustBeBoolean in the ERef hierarchy and resolve the promise before going on. One could rely on the mustBeBooleanMagic: if one wanted a fully lazy system. I don't know the trade-offs between the two. I do know that while the miustBeBooleanMagic: solution is cool and fun it is extremely slow. So if performance is an issue use the first approach.
>>
>>> How can it be structured correctly on the stack without generic functions? I think with the double dispatch of an eventual but I have not spend much time in this particular area.
>>
>> Yes that's an issue There is already a problem with #==. It needs to be symmetric for correctness.
>>
>>> Preventing the vm from crashing would be a good interim step but even here I am not sure how to go about crafting a solution.
>>
>> Well, the issue is simply that the wrong pc is chosen for the continuation after the mustBeBoolean. I'm sure the right answer is straight-forward to obtain.
>>
>>> Thank you for investigating this.
>>
>> You're welcome.
>>
>>> - HH
>>>
>>> On Wed, Aug 16, 2017 at 20:46, Eliot Miranda <eliot.miranda(a)gmail.com> wrote:
>>>
>>>> Hi Henry, Hi Marcus,
>>>>
>>>> On Sun, Aug 13, 2017 at 5:08 AM, henry <henry(a)callistohouse.club> wrote:
>>>>
>>>>> Hi all. I was testing with this eventual_test package and it blows up the pharo 6.1 vm. I'd welcome pointers
>>>>>
>>>>> http://www.squeaksource.com/TurquoiseTesting.html
>>>>>
>>>>> - HH
>>>>
>>>> I took a look at this and I think you've found a bug in the mustBeBooleanMagic: code. What's happening is a mustBeBoolean in Integer>>* due to evaluating
>>>> 10 * 42 eventual
>>>> in RefsTest>>testFailureArithmeticPrimitivesWithPromiseArgument
>>>>
>>>> Since 42 eventual is a NearERef the SmallInteger>>* primitive fails and does ^super * anInteger (where anInteger is the NearERef). So that evaluates Integer>>*
>>>>
>>>> Integer>>* aNumber
>>>> "Refer to the comment in Number * "
>>>> aNumber isInteger ifTrue:
>>>> [^ self digitMultiply: aNumber
>>>> neg: self negative ~~ aNumber negative].
>>>> ^ aNumber adaptToInteger: self andSend: #*
>>>>
>>>> aNumber, being a NearERef, answers a PromiseERef for the isInteger send, and this provokes a mustBeBoolean for the isInteger ifTrue: [...
>>>>
>>>> After the mustBeBooleanMagic: the stack looks wrong. The activation of Integer>>*, which is about to do
>>>> ^ aNumber adaptToInteger: self andSend: #*
>>>> does not have enough items on the stack. Instead of containing
>>>> a NearERef (for 42)
>>>> 10
>>>> #*
>>>> it contains
>>>> a PromiseERef (for 42 eventual isInteger)
>>>>
>>>> and the send of #adaptToInteger:andSend: ends up taking more form the stack than the VM can handle and it crashes. The bug appears to be with the use of sendNode irInstruction nextBytecodeOffsetAfterJump in Object>>mustBeBooleanMagic: since execution should resume at bytecode 55 below, but does so at bytecode 57
>>>>
>>>> 41 <10> pushTemp: 0
>>>> 42 <D0> send: isInteger
>>>> 43 <AC 09> jumpFalse: 54
>>>> 45 <70> self
>>>> 46 <10> pushTemp: 0
>>>> 47 <70> self
>>>> 48 <D1> send: negative
>>>> 49 <10> pushTemp: 0
>>>> 50 <D1> send: negative
>>>> 51 <E2> send: ~~
>>>> 52 <F3> send: digitMultiply:neg:
>>>> 53 <7C> returnTop
>>>> 54 <10> pushTemp: 0
>>>> 55 <70> self
>>>> 56 <24> pushConstant: #*
>>>> 57 <F5> send: adaptToInteger:andSend:
>>>> 58 <7C> returnTop
>>>>
>>>> So the positioning of the context's pc must be before any argument marshaling for the next send, not simply the send itself.
>>>>
>>>> Put a breakpoint at the end of Object>>mustBeBooleanMagic: and add initlaPC and resumePC temporaries at the beginning and capture them via
>>>> initialPC := context pc.
>>>> at the beginning and then
>>>> context pc: (resumePC := sendNode irInstruction nextBytecodeOffsetAfterJump)
>>>> to see what I'm seeing.
>>>>
>>>> Phew. Glad it's not a VM bug :-)
>>>>
>>>> HTH
>>>> _,,,^..^,,,_
>>>> best, Eliot
>>
>> --
>> _,,,^..^,,,_
>> best, Eliot
Aug. 17, 2017
Re: [Pharo-dev] eventual crashes pharo vm
by henry
Hi Eliot,
I have disabled that test for the time being. It will require some deeper thought regarding immediate selectors, I think, and I am deep into another area right now. As mustBeBoolean is from inside the VM, a different approach may be the right solution. A part of me thinks autocoercion between msg sending (async) and msg calling (sync) is what is needed, but I want continuation-based VatSemaphores to prevent a liveness lock on the event loop to support. Again, I have not thought deep enough in this area.
Thanks again for your help,
- HH
> -------- Original Message --------
> Subject: Re: [Pharo-dev] eventual crashes pharo vm
> Local Time: August 16, 2017 10:32 PM
> UTC Time: August 17, 2017 2:32 AM
> From: eliot.miranda(a)gmail.com
> To: henry <henry(a)callistohouse.club>
> Marcus Denker <marcus.denker(a)inria.fr>, Pharo Development List <pharo-dev(a)lists.pharo.org>, Squeak Virtual Machine Development Discussion <vm-dev(a)lists.squeakfoundation.org>
>
> Hi Henry,
>
> On Wed, Aug 16, 2017 at 6:33 PM, henry <henry(a)callistohouse.club> wrote:
>
>> That is good news, that it is due to this code doing funniness than a VM issue. This code trying to bring asynchrony within a synchronous environment brings new issues.
>>
>> What do you think that right solution is to the issue of a call expected to be immediate, change out to go eventual until the arguments resolve?
>
> I'm not informed enough to know. One could implement mustBeBoolean in the ERef hierarchy and resolve the promise before going on. One could rely on the mustBeBooleanMagic: if one wanted a fully lazy system. I don't know the trade-offs between the two. I do know that while the miustBeBooleanMagic: solution is cool and fun it is extremely slow. So if performance is an issue use the first approach.
>
>> How can it be structured correctly on the stack without generic functions? I think with the double dispatch of an eventual but I have not spend much time in this particular area.
>
> Yes that's an issue There is already a problem with #==. It needs to be symmetric for correctness.
>
>> Preventing the vm from crashing would be a good interim step but even here I am not sure how to go about crafting a solution.
>
> Well, the issue is simply that the wrong pc is chosen for the continuation after the mustBeBoolean. I'm sure the right answer is straight-forward to obtain.
>
>> Thank you for investigating this.
>
> You're welcome.
>
>> - HH
>>
>> On Wed, Aug 16, 2017 at 20:46, Eliot Miranda <eliot.miranda(a)gmail.com> wrote:
>>
>>> Hi Henry, Hi Marcus,
>>>
>>> On Sun, Aug 13, 2017 at 5:08 AM, henry <henry(a)callistohouse.club> wrote:
>>>
>>>> Hi all. I was testing with this eventual_test package and it blows up the pharo 6.1 vm. I'd welcome pointers
>>>>
>>>> http://www.squeaksource.com/TurquoiseTesting.html
>>>>
>>>> - HH
>>>
>>> I took a look at this and I think you've found a bug in the mustBeBooleanMagic: code. What's happening is a mustBeBoolean in Integer>>* due to evaluating
>>> 10 * 42 eventual
>>> in RefsTest>>testFailureArithmeticPrimitivesWithPromiseArgument
>>>
>>> Since 42 eventual is a NearERef the SmallInteger>>* primitive fails and does ^super * anInteger (where anInteger is the NearERef). So that evaluates Integer>>*
>>>
>>> Integer>>* aNumber
>>> "Refer to the comment in Number * "
>>> aNumber isInteger ifTrue:
>>> [^ self digitMultiply: aNumber
>>> neg: self negative ~~ aNumber negative].
>>> ^ aNumber adaptToInteger: self andSend: #*
>>>
>>> aNumber, being a NearERef, answers a PromiseERef for the isInteger send, and this provokes a mustBeBoolean for the isInteger ifTrue: [...
>>>
>>> After the mustBeBooleanMagic: the stack looks wrong. The activation of Integer>>*, which is about to do
>>> ^ aNumber adaptToInteger: self andSend: #*
>>> does not have enough items on the stack. Instead of containing
>>> a NearERef (for 42)
>>> 10
>>> #*
>>> it contains
>>> a PromiseERef (for 42 eventual isInteger)
>>>
>>> and the send of #adaptToInteger:andSend: ends up taking more form the stack than the VM can handle and it crashes. The bug appears to be with the use of sendNode irInstruction nextBytecodeOffsetAfterJump in Object>>mustBeBooleanMagic: since execution should resume at bytecode 55 below, but does so at bytecode 57
>>>
>>> 41 <10> pushTemp: 0
>>> 42 <D0> send: isInteger
>>> 43 <AC 09> jumpFalse: 54
>>> 45 <70> self
>>> 46 <10> pushTemp: 0
>>> 47 <70> self
>>> 48 <D1> send: negative
>>> 49 <10> pushTemp: 0
>>> 50 <D1> send: negative
>>> 51 <E2> send: ~~
>>> 52 <F3> send: digitMultiply:neg:
>>> 53 <7C> returnTop
>>> 54 <10> pushTemp: 0
>>> 55 <70> self
>>> 56 <24> pushConstant: #*
>>> 57 <F5> send: adaptToInteger:andSend:
>>> 58 <7C> returnTop
>>>
>>> So the positioning of the context's pc must be before any argument marshaling for the next send, not simply the send itself.
>>>
>>> Put a breakpoint at the end of Object>>mustBeBooleanMagic: and add initlaPC and resumePC temporaries at the beginning and capture them via
>>> initialPC := context pc.
>>> at the beginning and then
>>> context pc: (resumePC := sendNode irInstruction nextBytecodeOffsetAfterJump)
>>> to see what I'm seeing.
>>>
>>> Phew. Glad it's not a VM bug :-)
>>>
>>> HTH
>>> _,,,^..^,,,_
>>> best, Eliot
>
> --
> _,,,^..^,,,_
> best, Eliot
Aug. 17, 2017
Re: [Pharo-dev] eventual crashes pharo vm
by Eliot Miranda
Hi Henry,
On Wed, Aug 16, 2017 at 6:33 PM, henry <henry(a)callistohouse.club> wrote:
> That is good news, that it is due to this code doing funniness than a VM
> issue. This code trying to bring asynchrony within a synchronous
> environment brings new issues.
>
> What do you think that right solution is to the issue of a call
> expected to be immediate, change out to go eventual until the arguments
> resolve?
>
I'm not informed enough to know. One could implement mustBeBoolean in the
ERef hierarchy and resolve the promise before going on. One could rely on
the mustBeBooleanMagic: if one wanted a fully lazy system. I don't know
the trade-offs between the two. I do know that while the
miustBeBooleanMagic: solution is cool and fun it is extremely slow. So if
performance is an issue use the first approach.
> How can it be structured correctly on the stack without generic functions?
> I think with the double dispatch of an eventual but I have not spend much
> time in this particular area.
>
Yes that's an issue There is already a problem with #==. It needs to be
symmetric for correctness.
> Preventing the vm from crashing would be a good interim step but even here
> I am not sure how to go about crafting a solution.
>
Well, the issue is simply that the wrong pc is chosen for the continuation
after the mustBeBoolean. I'm sure the right answer is straight-forward to
obtain.
> Thank you for investigating this.
>
You're welcome.
>
> - HH
>
>
> On Wed, Aug 16, 2017 at 20:46, Eliot Miranda <eliot.miranda(a)gmail.com>
> wrote:
>
> Hi Henry, Hi Marcus,
>
> On Sun, Aug 13, 2017 at 5:08 AM, henry <henry(a)callistohouse.club> wrote:
>
>> Hi all. I was testing with this eventual_test package and it blows up the
>> pharo 6.1 vm. I'd welcome pointers
>>
>> http://www.squeaksource.com/TurquoiseTesting.html
>>
>> - HH
>>
>
> I took a look at this and I think you've found a bug in the
> mustBeBooleanMagic: code. What's happening is a mustBeBoolean in
> Integer>>* due to evaluating
> 10 * 42 eventual
> in RefsTest>>testFailureArithmeticPrimitivesWithPromiseArgument
>
> Since 42 eventual is a NearERef the SmallInteger>>* primitive fails and
> does ^super * anInteger (where anInteger is the NearERef). So that
> evaluates Integer>>*
>
> Integer>>* aNumber
> "Refer to the comment in Number * "
> aNumber isInteger ifTrue:
> [^ self digitMultiply: aNumber
> neg: self negative ~~ aNumber negative].
> ^ aNumber adaptToInteger: self andSend: #*
>
> aNumber, being a NearERef, answers a PromiseERef for the isInteger send,
> and this provokes a mustBeBoolean for the isInteger ifTrue: [...
>
> After the mustBeBooleanMagic: the stack looks wrong. The activation of
> Integer>>*, which is about to do
> ^ aNumber adaptToInteger: self andSend: #*
> does not have enough items on the stack. Instead of containing
> a NearERef (for 42)
> 10
> #*
> it contains
> a PromiseERef (for 42 eventual isInteger)
>
> and the send of #adaptToInteger:andSend: ends up taking more form the
> stack than the VM can handle and it crashes. The bug appears to be with
> the use of sendNode irInstruction nextBytecodeOffsetAfterJump in
> Object>>mustBeBooleanMagic: since execution should resume at bytecode 55
> below, but does so at bytecode 57
>
> 41 <10> pushTemp: 0
> 42 <D0> send: isInteger
> 43 <AC 09> jumpFalse: 54
> 45 <70> self
> 46 <10> pushTemp: 0
> 47 <70> self
> 48 <D1> send: negative
> 49 <10> pushTemp: 0
> 50 <D1> send: negative
> 51 <E2> send: ~~
> 52 <F3> send: digitMultiply:neg:
> 53 <7C> returnTop
> 54 <10> pushTemp: 0
> 55 <70> self
> 56 <24> pushConstant: #*
> 57 <F5> send: adaptToInteger:andSend:
> 58 <7C> returnTop
>
> So the positioning of the context's pc must be before any argument
> marshaling for the next send, not simply the send itself.
>
> Put a breakpoint at the end of Object>>mustBeBooleanMagic: and add
> initlaPC and resumePC temporaries at the beginning and capture them via
> initialPC := context pc.
> at the beginning and then
> context pc: (resumePC := sendNode irInstruction
> nextBytecodeOffsetAfterJump)
> to see what I'm seeing.
>
>
> Phew. Glad it's not a VM bug :-)
>
> HTH
> _,,,^..^,,,_
> best, Eliot
>
>
--
_,,,^..^,,,_
best, Eliot
Aug. 17, 2017
Re: [Pharo-dev] eventual crashes pharo vm
by henry
That is good news, that it is due to this code doing funniness than a VM issue. This code trying to bring asynchrony within a synchronous environment brings new issues.
What do you think that right solution is to the issue of a call expected to be immediate, change out to go eventual until the arguments resolve? How can it be structured correctly on the stack without generic functions? I think with the double dispatch of an eventual but I have not spend much time in this particular area. Preventing the vm from crashing would be a good interim step but even here I am not sure how to go about crafting a solution.
Thank you for investigating this.
- HH
On Wed, Aug 16, 2017 at 20:46, Eliot Miranda <eliot.miranda(a)gmail.com> wrote:
> Hi Henry, Hi Marcus,
>
> On Sun, Aug 13, 2017 at 5:08 AM, henry <henry(a)callistohouse.club> wrote:
>
>> Hi all. I was testing with this eventual_test package and it blows up the pharo 6.1 vm. I'd welcome pointers
>>
>> http://www.squeaksource.com/TurquoiseTesting.html
>>
>> - HH
>
> I took a look at this and I think you've found a bug in the mustBeBooleanMagic: code. What's happening is a mustBeBoolean in Integer>>* due to evaluating
> 10 * 42 eventual
> in RefsTest>>testFailureArithmeticPrimitivesWithPromiseArgument
>
> Since 42 eventual is a NearERef the SmallInteger>>* primitive fails and does ^super * anInteger (where anInteger is the NearERef). So that evaluates Integer>>*
>
> Integer>>* aNumber
> "Refer to the comment in Number * "
> aNumber isInteger ifTrue:
> [^ self digitMultiply: aNumber
> neg: self negative ~~ aNumber negative].
> ^ aNumber adaptToInteger: self andSend: #*
>
> aNumber, being a NearERef, answers a PromiseERef for the isInteger send, and this provokes a mustBeBoolean for the isInteger ifTrue: [...
>
> After the mustBeBooleanMagic: the stack looks wrong. The activation of Integer>>*, which is about to do
> ^ aNumber adaptToInteger: self andSend: #*
> does not have enough items on the stack. Instead of containing
> a NearERef (for 42)
> 10
> #*
> it contains
> a PromiseERef (for 42 eventual isInteger)
> and the send of #adaptToInteger:andSend: ends up taking more form the stack than the VM can handle and it crashes. The bug appears to be with the use of sendNode irInstruction nextBytecodeOffsetAfterJump in Object>>mustBeBooleanMagic: since execution should resume at bytecode 55 below, but does so at bytecode 57
>
> 41 <10> pushTemp: 0
> 42 <D0> send: isInteger
> 43 <AC 09> jumpFalse: 54
> 45 <70> self
> 46 <10> pushTemp: 0
> 47 <70> self
> 48 <D1> send: negative
> 49 <10> pushTemp: 0
> 50 <D1> send: negative
> 51 <E2> send: ~~
> 52 <F3> send: digitMultiply:neg:
> 53 <7C> returnTop
> 54 <10> pushTemp: 0
> 55 <70> self
> 56 <24> pushConstant: #*
> 57 <F5> send: adaptToInteger:andSend:
> 58 <7C> returnTop
>
> So the positioning of the context's pc must be before any argument marshaling for the next send, not simply the send itself.
>
> Put a breakpoint at the end of Object>>mustBeBooleanMagic: and add initlaPC and resumePC temporaries at the beginning and capture them via
> initialPC := context pc.
> at the beginning and then
> context pc: (resumePC := sendNode irInstruction nextBytecodeOffsetAfterJump)
> to see what I'm seeing.
>
> Phew. Glad it's not a VM bug :-)
>
> HTH
> _,,,^..^,,,_
> best, Eliot
Aug. 17, 2017
Re: [Pharo-dev] eventual crashes pharo vm
by Eliot Miranda
Hi Henry, Hi Marcus,
On Sun, Aug 13, 2017 at 5:08 AM, henry <henry(a)callistohouse.club> wrote:
> Hi all. I was testing with this eventual_test package and it blows up the
> pharo 6.1 vm. I'd welcome pointers
>
> http://www.squeaksource.com/TurquoiseTesting.html
>
> - HH
>
I took a look at this and I think you've found a bug in the
mustBeBooleanMagic: code. What's happening is a mustBeBoolean in
Integer>>* due to evaluating
10 * 42 eventual
in RefsTest>>testFailureArithmeticPrimitivesWithPromiseArgument
Since 42 eventual is a NearERef the SmallInteger>>* primitive fails and
does ^super * anInteger (where anInteger is the NearERef). So that
evaluates Integer>>*
Integer>>* aNumber
"Refer to the comment in Number * "
aNumber isInteger ifTrue:
[^ self digitMultiply: aNumber
neg: self negative ~~ aNumber negative].
^ aNumber adaptToInteger: self andSend: #*
aNumber, being a NearERef, answers a PromiseERef for the isInteger send,
and this provokes a mustBeBoolean for the isInteger ifTrue: [...
After the mustBeBooleanMagic: the stack looks wrong. The activation of
Integer>>*, which is about to do
^ aNumber adaptToInteger: self andSend: #*
does not have enough items on the stack. Instead of containing
a NearERef (for 42)
10
#*
it contains
a PromiseERef (for 42 eventual isInteger)
and the send of #adaptToInteger:andSend: ends up taking more form the stack
than the VM can handle and it crashes. The bug appears to be with the use
of sendNode irInstruction nextBytecodeOffsetAfterJump in
Object>>mustBeBooleanMagic: since execution should resume at bytecode 55
below, but does so at bytecode 57
41 <10> pushTemp: 0
42 <D0> send: isInteger
43 <AC 09> jumpFalse: 54
45 <70> self
46 <10> pushTemp: 0
47 <70> self
48 <D1> send: negative
49 <10> pushTemp: 0
50 <D1> send: negative
51 <E2> send: ~~
52 <F3> send: digitMultiply:neg:
53 <7C> returnTop
54 <10> pushTemp: 0
55 <70> self
56 <24> pushConstant: #*
57 <F5> send: adaptToInteger:andSend:
58 <7C> returnTop
So the positioning of the context's pc must be before any argument
marshaling for the next send, not simply the send itself.
Put a breakpoint at the end of Object>>mustBeBooleanMagic: and add initlaPC
and resumePC temporaries at the beginning and capture them via
initialPC := context pc.
at the beginning and then
context pc: (resumePC := sendNode irInstruction nextBytecodeOffsetAfterJump)
to see what I'm seeing.
Phew. Glad it's not a VM bug :-)
HTH
_,,,^..^,,,_
best, Eliot
Aug. 17, 2017
Re: [Pharo-dev] @About posting here
by Frank-B
Eliot,
I already wrote twice: This case was closed on my side. I made my points
clear but it seems you haven't read the whole thread.
*Only because you misquoted me at least twice*, I feel obliged to correct
your false quotations:
1)
> Why is free speech necessarily a national issue?
I NEVER wrote anything like that! It just aint fair to fake statements that
were never made!
Unfortunately the suppression of free speech and even more so the
self-censoring in peoples brains is in some countries, notably my home
country in absence of a first amendment, far more advanced than in others -
and in the US the "old system" is trying hard to achieve the same - look at
all the fakes and lies around Putin bashing.
But if writers here use the most primitive national cliches I find this
extremely stupid and annoying - espcially for someone like me who has lived
more than half of his life in several other countries.
2) You should really learn to read and quote exactly, instead of making so
many false allegations, because I also clearly did *NOT* call the JS
"community" idiots but very precisely the people who devloped this language
and the primitive tools without wanting to learn from existing technologies
like in Smalltalk.
I wrote:
> Why don't want these ignorant idiots who
*
> develop
*
> JavaScript and its primitive tools refuse to learn from Smalltalk?
Yes, that is my opinion!
/(Though gramatically not quite correct!)/
Because of many good reasons. Actually, nobody should know this better than
Smalltalkers!
The more I am pulled and forced into such useless discussions often bsed on
faked statements the less mood I have to add parts of my projects in the
future. This is partially also the case, because I often have very different
technological opinions not only on documentation. And if two writers tell me
here to start documenting a third person's code, I find this just a bad
silly joke. Yes, I am a documenation fanatic and my very long exprience
tells me that this is totally correct. Failing to document is amateurish in
my view and never ever can any excuse justify this failure!
I do not expect anybody to agree with me but I expect everbody to accepts
other opinions including mine. This wasn't the case here. See what I wrote
about Voltaire at 16. Aug. 14:23.
> I hope you have productive discussions here.
I must strongly doubt that this will be the case.
And here is one proof why:
I find it most unmasking and eye opening that *there was not a single
comment to my long technical posting* of 16. Aug. 08:34. All reactions were
bashing me for the opinions that I expressed and on my critics, which were
mostly addressing third party subjects (or did anybody here write this supa
dupa forum mailing list?).
*This proofs: Far more people here are interested in enforcing a social
consensus than they are in discussing technical proposals and innovations.*
Would you call this a good basis for productive technical discussion? I
wouln't!
Regards
Frank
P.S. I suppose and do hope that you don't read your program code with the
same low degree of precision as you quoted me!
P.S.2: This was defintely my LAST response to any such off-topic postings
whether fictious or true.
--
View this message in context: http://forum.world.st/Anybody-using-Orca-Smalltalk-to-JavaScript-tp4960519p…
Sent from the Pharo Smalltalk Developers mailing list archive at Nabble.com.
Aug. 16, 2017