Pharo-users
By thread
pharo-users@lists.pharo.org
By month
Messages by month
- ----- 2026 -----
- 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
December 2020
- 37 participants
- 108 messages
Re: Can a class be not equal to itself?
by Konrad Hinsen
On 31/12/2020 12:19, Konrad Hinsen wrote:
> It's been a while since I have encountered mysterious behavior in
> Pharo, but today it happened. I set up a dictionary with classes as
> keys, and got "Key not found" errors for keys that were definitely in
> my dictionary. A quick debugging session showed the underlying issue:
> I had two references to a class which look the same when inspected,
> but turn out to be not identical (==) and thus not equal (=). How can
> this happen?
Update, after a few more debugging sessions: my dictionary is the result
of a deepCopy operation, meaning the class has been copied. And the copy
of a class is indeed a distinct but otherwise indistinguishable class.
'Object copy = Object' is 'false'.
Konrad.
Dec. 31, 2020
Re: Can a class be not equal to itself?
by Tudor Girba
Hi Konrad,
Could it be that you have overridden = on the class side of your class?
Otherwise, I do not see how this can happen.
Cheers,
Tudor
> On Dec 31, 2020, at 12:19 PM, Konrad Hinsen <konrad.hinsen(a)fastmail.net> wrote:
>
> Hi everyone,
>
>
> It's been a while since I have encountered mysterious behavior in Pharo, but today it happened. I set up a dictionary with classes as keys, and got "Key not found" errors for keys that were definitely in my dictionary. A quick debugging session showed the underlying issue: I had two references to a class which look the same when inspected, but turn out to be not identical (==) and thus not equal (=). How can this happen?
>
>
> Konrad.
--
feenk.com
"It's not how it is, it is how we see it."
Dec. 31, 2020
Can a class be not equal to itself?
by Konrad Hinsen
Hi everyone,
It's been a while since I have encountered mysterious behavior in Pharo,
but today it happened. I set up a dictionary with classes as keys, and
got "Key not found" errors for keys that were definitely in my
dictionary. A quick debugging session showed the underlying issue: I had
two references to a class which look the same when inspected, but turn
out to be not identical (==) and thus not equal (=). How can this happen?
Konrad.
Dec. 31, 2020
Re: PrintString in PBE8
by Julián Maestri
As far as I know:
aStream
nextPutAll: ' with value: â;
print: count.
Works with most streams, does not create intermediary streams, and is
readable.
On Sun, 27 Dec 2020 at 05:59, Stéphane Ducasse <stephane.ducasse(a)inria.fr>
wrote:
>
>
> On 26 Dec 2020, at 20:41, Sean P. DeNigris <sean(a)clipperadams.com> wrote:
>
> Sven Van Caekenberghe-2 wrote
>
> Maybe his question is (also) why the automatic refactoring did it wrong,
> the rules warned about the wrong use of #printString, suggested a fix, but
> the solution is still using #printString, hence the same problem.
>
>
> I might be reading it wrong, but I thought everything worked as advertised,
> and the limitation was that there was no option to automatically fix the
> other warning about the printString. The "Use cascaded nextPutAll:âs
> instead
> of #, in #nextPutAll:" transformation did change:
>
> aStream nextPutAll: ' with value: ', count printString.
>
> to:
>
> aStream
> nextPutAll: ' with value: ';
> nextPutAll: count printString
>
>
>
>
> Yes but with such approach you still create an extra intermediary
> stream.
>
> The solution should be
>
>
> aStream
> nextPutAll: ' with value: â.
> count printOn: aStream
>
> Now this is a bit more tricky to do.
>
>
>
>
>
> -----
> Cheers,
> Sean
> --
> Sent from: http://forum.world.st/Pharo-Smalltalk-Users-f1310670.html
>
>
> --------------------------------------------
> Stéphane Ducasse
> http://stephane.ducasse.free.fr / http://www.pharo.org
> 03 59 35 87 52
> Assistant: Aurore Dalle
> 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
>
>
Dec. 29, 2020
Re: Pharo and Virtual Realitity
by Sven Van Caekenberghe
> On 28 Dec 2020, at 03:25, askoh <askoh(a)askoh.com> wrote:
>
> ZnReadEvalPrintDelegate startInServerOn: 1701.
>
> (ZnServer on: 1701)
> bindingAddress: NetNameResolver localHostAddress;
> delegate: ZnReadEvalPrintDelegate new;
> start;
> yourself
I don't know anything about VRIDE but the above two expressions are equivalent, they do the same thing, twice. You need only one of them.
Dec. 28, 2020
Re: Pharo and Virtual Realitity
by askoh
Hi:
I installed Pharo and enter the following in workspace.
Author uniqueInstance fullName: 'VRIDE User'.
Metacello new
baseline: 'Roassal3';
repository: 'github://ObjectProfile/Roassal3';
load.
Metacello new
baseline: 'Roassal3Exporters';
repository: 'github://ObjectProfile/Roassal3Exporters';
load.
Metacello new
baseline: 'Roassal3Exporters';
repository: 'github://ObjectProfile/Roassal3Exporters';
load: 'AFrame'.
ZnReadEvalPrintDelegate startInServerOn: 1701.
(ZnServer on: 1701)
bindingAddress: NetNameResolver localHostAddress;
delegate: ZnReadEvalPrintDelegate new;
start;
yourself
PharoVRIDE open
I don't understand the following instructions in GitHub page:
Now open PharoVRIDE. Right into the first scene, you will see a field asking
for the IP address of your Pharo server. It must be as follows:
http://<Host name or IP Address>:<Port>/repl
If you are running on localhost just as shown in the previous script, press
the Enter button to proceed. Otherwise, you must specify an address.
Finally, put on your VR headset, and try some stuff!
Please advise.
Thanks,
Aik-Siong Koh
--
Sent from: http://forum.world.st/Pharo-Smalltalk-Users-f1310670.html
Dec. 28, 2020
Re: PrintString in PBE8
by Stéphane Ducasse
> On 26 Dec 2020, at 20:41, Sean P. DeNigris <sean(a)clipperadams.com> wrote:
>
> Sven Van Caekenberghe-2 wrote
>> Maybe his question is (also) why the automatic refactoring did it wrong,
>> the rules warned about the wrong use of #printString, suggested a fix, but
>> the solution is still using #printString, hence the same problem.
>
> I might be reading it wrong, but I thought everything worked as advertised,
> and the limitation was that there was no option to automatically fix the
> other warning about the printString. The "Use cascaded nextPutAll:âs instead
> of #, in #nextPutAll:" transformation did change:
>
> aStream nextPutAll: ' with value: ', count printString.
>
> to:
>
> aStream
> nextPutAll: ' with value: ';
> nextPutAll: count printString
>
>
Yes but with such approach you still create an extra intermediary
stream.
The solution should be
aStream
nextPutAll: ' with value: â.
count printOn: aStream
Now this is a bit more tricky to do.
>
> -----
> Cheers,
> Sean
> --
> Sent from: http://forum.world.st/Pharo-Smalltalk-Users-f1310670.html
--------------------------------------------
Stéphane Ducasse
http://stephane.ducasse.free.fr / http://www.pharo.org
03 59 35 87 52
Assistant: Aurore Dalle
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
Dec. 27, 2020
Re: PrintString in PBE8
by Sean P. DeNigris
Sven Van Caekenberghe-2 wrote
> Maybe his question is (also) why the automatic refactoring did it wrong,
> the rules warned about the wrong use of #printString, suggested a fix, but
> the solution is still using #printString, hence the same problem.
I might be reading it wrong, but I thought everything worked as advertised,
and the limitation was that there was no option to automatically fix the
other warning about the printString. The "Use cascaded nextPutAll:âs instead
of #, in #nextPutAll:" transformation did change:
aStream nextPutAll: ' with value: ', count printString.
to:
aStream
nextPutAll: ' with value: ';
nextPutAll: count printString
-----
Cheers,
Sean
--
Sent from: http://forum.world.st/Pharo-Smalltalk-Users-f1310670.html
Dec. 26, 2020
Re: PrintString in PBE8
by Stéphane Ducasse
I opened a ticket.
https://github.com/pharo-project/pharo/issues/8178
> On 25 Dec 2020, at 22:43, Stéphane Ducasse <stephane.ducasse(a)inria.fr> wrote:
>
> Ah indeed.
> So we will have to have a look.
>
> S
>
>> On 25 Dec 2020, at 16:36, Sven Van Caekenberghe <sven(a)stfx.eu <mailto:sven@stfx.eu>> wrote:
>>
>> Maybe his question is (also) why the automatic refactoring did it wrong, the rules warned about the wrong use of #printString, suggested a fix, but the solution is still using #printString, hence the same problem.
>>
>>> On 25 Dec 2020, at 16:20, Stéphane Ducasse <stephane.ducasse(a)inria.fr <mailto:stephane.ducasse@inria.fr>> wrote:
>>>
>>> Hi
>>>
>>> this warning is just that printOn: is working on a stream
>>>
>>> and when we do
>>>
>>> printOn: aStream
>>>
>>> aStream nextPutAll: x printString
>>>
>>> printString creates yeat another stream then ask the contents and passes it to the first one
>>>
>>>
>>> printOn: aStream
>>>
>>> x printOn: aStream
>>>
>>> is faster and cleaner in that case.
>>>
>>>
>>>> On 24 Dec 2020, at 18:32, g_patrickb--- via Pharo-users <pharo-users(a)lists.pharo.org <mailto:pharo-users@lists.pharo.org>> wrote:
>>>>
>>>> I started working through PBE8, and in section 3.13 there is a method:
>>>>
>>>> Counter >> printOn: aStream
>>>>
>>>> super printOn: aStream.
>>>>
>>>> aStream nextPutAll: ' with value: ', count printString.
>>>>
>>>> But it returns two warnings:
>>>>
>>>> [printString] No printString inside printOn
>>>>
>>>> Use cascaded nextPutAll:âs instead of #, in #nextPutAll:
>>>>
>>>>
>>>>
>>>> It has the option to automatically resolve the cascaded nextPutAll: which results in:
>>>>
>>>> printOn: aStream
>>>>
>>>> super printOn: aStream.
>>>>
>>>> aStream
>>>>
>>>> nextPutAll: ' with value: ';
>>>>
>>>> nextPutAll: count printString
>>>>
>>>>
>>>>
>>>> But it still has the warning about printString.
>>>>
>>>
>>> --------------------------------------------
>>> Stéphane Ducasse
>>> http://stephane.ducasse.free.fr <http://stephane.ducasse.free.fr/> / http://www.pharo.org <http://www.pharo.org/>
>>> 03 59 35 87 52
>>> Assistant: Aurore Dalle
>>> 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
>>>
>
> --------------------------------------------
> Stéphane Ducasse
> http://stephane.ducasse.free.fr <http://stephane.ducasse.free.fr/> / http://www.pharo.org <http://www.pharo.org/>
> 03 59 35 87 52
> Assistant: Aurore Dalle
> 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
>
--------------------------------------------
Stéphane Ducasse
http://stephane.ducasse.free.fr / http://www.pharo.org
03 59 35 87 52
Assistant: Aurore Dalle
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
Dec. 25, 2020
Re: PrintString in PBE8
by Stéphane Ducasse
Ah indeed.
So we will have to have a look.
S
> On 25 Dec 2020, at 16:36, Sven Van Caekenberghe <sven(a)stfx.eu> wrote:
>
> Maybe his question is (also) why the automatic refactoring did it wrong, the rules warned about the wrong use of #printString, suggested a fix, but the solution is still using #printString, hence the same problem.
>
>> On 25 Dec 2020, at 16:20, Stéphane Ducasse <stephane.ducasse(a)inria.fr> wrote:
>>
>> Hi
>>
>> this warning is just that printOn: is working on a stream
>>
>> and when we do
>>
>> printOn: aStream
>>
>> aStream nextPutAll: x printString
>>
>> printString creates yeat another stream then ask the contents and passes it to the first one
>>
>>
>> printOn: aStream
>>
>> x printOn: aStream
>>
>> is faster and cleaner in that case.
>>
>>
>>> On 24 Dec 2020, at 18:32, g_patrickb--- via Pharo-users <pharo-users(a)lists.pharo.org> wrote:
>>>
>>> I started working through PBE8, and in section 3.13 there is a method:
>>>
>>> Counter >> printOn: aStream
>>>
>>> super printOn: aStream.
>>>
>>> aStream nextPutAll: ' with value: ', count printString.
>>>
>>> But it returns two warnings:
>>>
>>> [printString] No printString inside printOn
>>>
>>> Use cascaded nextPutAll:âs instead of #, in #nextPutAll:
>>>
>>>
>>>
>>> It has the option to automatically resolve the cascaded nextPutAll: which results in:
>>>
>>> printOn: aStream
>>>
>>> super printOn: aStream.
>>>
>>> aStream
>>>
>>> nextPutAll: ' with value: ';
>>>
>>> nextPutAll: count printString
>>>
>>>
>>>
>>> But it still has the warning about printString.
>>>
>>
>> --------------------------------------------
>> Stéphane Ducasse
>> http://stephane.ducasse.free.fr / http://www.pharo.org
>> 03 59 35 87 52
>> Assistant: Aurore Dalle
>> 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
>>
--------------------------------------------
Stéphane Ducasse
http://stephane.ducasse.free.fr / http://www.pharo.org
03 59 35 87 52
Assistant: Aurore Dalle
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
Dec. 25, 2020
Re: PrintString in PBE8
by Sven Van Caekenberghe
Maybe his question is (also) why the automatic refactoring did it wrong, the rules warned about the wrong use of #printString, suggested a fix, but the solution is still using #printString, hence the same problem.
> On 25 Dec 2020, at 16:20, Stéphane Ducasse <stephane.ducasse(a)inria.fr> wrote:
>
> Hi
>
> this warning is just that printOn: is working on a stream
>
> and when we do
>
> printOn: aStream
>
> aStream nextPutAll: x printString
>
> printString creates yeat another stream then ask the contents and passes it to the first one
>
>
> printOn: aStream
>
> x printOn: aStream
>
> is faster and cleaner in that case.
>
>
>> On 24 Dec 2020, at 18:32, g_patrickb--- via Pharo-users <pharo-users(a)lists.pharo.org> wrote:
>>
>> I started working through PBE8, and in section 3.13 there is a method:
>>
>> Counter >> printOn: aStream
>>
>> super printOn: aStream.
>>
>> aStream nextPutAll: ' with value: ', count printString.
>>
>> But it returns two warnings:
>>
>> [printString] No printString inside printOn
>>
>> Use cascaded nextPutAll:âs instead of #, in #nextPutAll:
>>
>>
>>
>> It has the option to automatically resolve the cascaded nextPutAll: which results in:
>>
>> printOn: aStream
>>
>> super printOn: aStream.
>>
>> aStream
>>
>> nextPutAll: ' with value: ';
>>
>> nextPutAll: count printString
>>
>>
>>
>> But it still has the warning about printString.
>>
>
> --------------------------------------------
> Stéphane Ducasse
> http://stephane.ducasse.free.fr / http://www.pharo.org
> 03 59 35 87 52
> Assistant: Aurore Dalle
> 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
>
Dec. 25, 2020
Re: PrintString in PBE8
by Stéphane Ducasse
Hi
this warning is just that printOn: is working on a stream
and when we do
printOn: aStream
aStream nextPutAll: x printString
printString creates yeat another stream then ask the contents and passes it to the first one
printOn: aStream
x printOn: aStream
is faster and cleaner in that case.
> On 24 Dec 2020, at 18:32, g_patrickb--- via Pharo-users <pharo-users(a)lists.pharo.org> wrote:
>
> I started working through PBE8, and in section 3.13 there is a method:
>
> Counter >> printOn: aStream
>
> super printOn: aStream.
>
> aStream nextPutAll: ' with value: ', count printString.
>
> But it returns two warnings:
>
> [printString] No printString inside printOn
>
> Use cascaded nextPutAll:âs instead of #, in #nextPutAll:
>
>
>
> It has the option to automatically resolve the cascaded nextPutAll: which results in:
>
> printOn: aStream
>
> super printOn: aStream.
>
> aStream
>
> nextPutAll: ' with value: ';
>
> nextPutAll: count printString
>
>
>
> But it still has the warning about printString.
>
--------------------------------------------
Stéphane Ducasse
http://stephane.ducasse.free.fr / http://www.pharo.org
03 59 35 87 52
Assistant: Aurore Dalle
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
Dec. 25, 2020
Re: PrintString in PBE8
by Richard Sargent
You should be able to replace
nextPutAll: count printString
with
print: count
On December 24, 2020 9:32:38 AM PST, g_patrickb--- via Pharo-users <pharo-users(a)lists.pharo.org> wrote:
>I started working through PBE8, and in section 3.13 there is a method:
>
>`Counter >> printOn: aStream `
>
>`super printOn: aStream. `
>
>`aStream nextPutAll: ' with value: ', count printString.`
>
>But it returns two warnings:
>
>\[printString\] No printString inside printOn
>
>Use cascaded nextPutAll:âs instead of #, in #nextPutAll:
>
>It has the option to automatically resolve the cascaded nextPutAll:
>which results in:
>
>`printOn: aStream`
>
>` super printOn: aStream.`
>
>` aStream`
>
>` nextPutAll: ' with value: ';`
>
>` nextPutAll: count printString`
>
>But it still has the warning about printString.
Dec. 24, 2020
PrintString in PBE8
by g_patrickb@yahoo.com
I started working through PBE8, and in section 3.13 there is a method:
`Counter >> printOn: aStream `
`super printOn: aStream. `
`aStream nextPutAll: ' with value: ', count printString.`
But it returns two warnings:
\[printString\] No printString inside printOn
Use cascaded nextPutAll:âs instead of #, in #nextPutAll:
It has the option to automatically resolve the cascaded nextPutAll: which results in:
`printOn: aStream`
` super printOn: aStream.`
` aStream`
` nextPutAll: ' with value: ';`
` nextPutAll: count printString`
But it still has the warning about printString.
Dec. 24, 2020
Re: Pharo image size increases continuously
by Dario Romano Trussardi
Ciao,
> Il giorno 23 dic 2020, alle ore 20:09, Stéphane Ducasse <stephane.ducasse(a)inria.fr> ha scritto:
>
> In Pharo 90 latest image I got
>
> and
>
> Array allInstances groupedBy: [:each | each pointersTo]
in a clean Pharo 8.0.0 image with 34798 array instances after 2 hours still no result.
Let's imagine ourselves with 572944 array instances
In these weeks - months I am just making simple changes to the code
and testing the functioning of the Seaside application via browser (always keeping clean the WA sessions that are created).
I just can't understand what could be the source of the problem.
>
> killed or is taking probably a huge amount of time.
I still remark the fact:
I noticed that the saved image is now always the size of: 280245832
Strange â¦.?!
Is there any parameter to configure ? ( GC settings? Image size limit? â¦â¦? â¦. ? )
Considerations ?
Thanks,
Dario
Dec. 23, 2020
Re: Pharo image size increases continuously
by Stéphane Ducasse
In Pharo 90 latest image I got
and
Array allInstances groupedBy: [:each | each pointersTo]
killed or is taking probably a huge amount of time.
Class code space # instances inst space percent inst average size
Array 4234 187839 16711456 21.50 88.97
CompiledMethod 26148 138563 12168736 15.70 87.82
ByteArray 15396 737 11636720 15.00 15789.31
Bitmap 4718 3057 9906096 12.70 3240.46
ByteString 2996 54379 2953952 3.80 54.32
MethodDictionary 3385 22698 2941960 3.80 129.61
ByteSymbol 1919 90457 2757616 3.50 30.49
WeakArray 1570 1917 2264336 2.90 1181.19
CompiledBlock 2704 35768 2123040 2.70 59.36
IdentitySet 410 83394 2001456 2.60 24.00
Association 1562 69581 1669944 2.10 24.00
Protocol 1885 41668 1000032 1.30 24.00
ClassOrganization 4927 20604 659328 0.80 32.00
AllProtocol 689 20604 659328 0.80 32.00
Set 3183 26341 632184 0.80 24.00
AdditionalMethodState 4195 16947 549776 0.70 32.44
InstanceVariableSlot 707 13080 523200 0.70 40.00
Metaclass 5966 9271 519176 0.70 56.00
ProtocolOrganizer 2549 20604 494496 0.60 24.00
FixedLayout 490 20544 493056 0.60 24.00
LayoutClassScope 1621 20578 435400 0.60 21.16
Dictionary 7956 16470 395280 0.50 24.00
Point 9616 12679 304296 0.40 24.00
GlobalVariable 824 10313 247512 0.30 24.00
SparseLargeTable 3157 2 236680 0.30 118340.00
OrderedCollection 7145 6349 203168 0.30 32.00
GlyphForm 770 2820 180480 0.20 64.00
FreeTypeCacheEntry 748 3216 180096 0.20 56.00
RBPatternVariableNode 1495 1470 141120 0.20 96.00
TaCompositionElement 2326 8781 140496 0.20 16.00
MorphExtension 3922 982 125696 0.20 128.00
Pragma 3886 3848 123136 0.20 32.00
ClassVariable 1098 3008 120320 0.20 40.00
LiteralVariable 3050 4588 110112 0.10 24.00
Context 28759 1579 105896 0.10 67.07
DateAndTime 14494 2394 95760 0.10 40.00
FullBlockClosure 2821 2081 90648 0.10 43.56
AtomicQueueItem 662 3288 78912 0.10 24.00
TraitedMetaclass 3680 877 77176 0.10 88.00
WideString 2715 118 70648 0.10 598.71
ToggleMenuItemMorph 4361 369 64944 0.10 176.00
RPackageTag 3596 1866 59712 0.10 32.00
MCLazyVersionInfo 1225 773 55656 0.10 72.00
MCWorkingCopy 7667 773 55656 0.10 72.00
RBPatternMethodNode 1347 427 51240 0.10 120.00
RBMessageNode 8676 789 50496 0.10 64.00
RPackage 21037 774 49536 0.10 64.00
RBSequenceNode 6328 682 43648 0.10 64.00
Rectangle 12475 1767 42408 0.10 24.00
Color 27729 1025 41000 0.10 40.00
RBSelectorNode 1099 803 38544 0.00 48.00
PluggableMenuItemSpec 2121 376 36096 0.00 96.00
TableLayoutProperties 1626 265 36040 0.00 136.00
TaEmptyComposition 1921 1650 26400 0.00 16.00
Form 31908 503 24144 0.00 48.00
RBBlockNode 5280 235 22560 0.00 96.00
MorphEventSubscription 1215 556 22240 0.00 40.00
MessageSend 2535 681 21792 0.00 32.00
AbsolutePath 868 280 21792 0.00 77.83
SortedCollection 2342 525 21000 0.00 40.00
WordArray 2203 205 20160 0.00 98.34
Duration 5977 789 18936 0.00 24.00
SpValueHolder 855 586 18752 0.00 32.00
UUID 1950 775 18600 0.00 24.00
Date 6041 775 18600 0.00 24.00
Time 7899 774 18576 0.00 24.00
MCWorkingAncestry 636 773 18552 0.00 24.00
MCMethodDefinition 4575 288 18432 0.00 64.00
AnnouncementSubscription 976 414 16560 0.00 40.00
MCRepositoryGroup 1653 667 16008 0.00 24.00
MetaclassForTraits 2088 162 15552 0.00 96.00
LayoutProperties 1464 474 15168 0.00 32.00
IntegerArray 510 837 13448 0.00 16.07
MCPackage 1919 778 12448 0.00 16.00
WeakAnnouncementSubscription 1988 221 12376 0.00 56.00
IdentityDictionary 367 513 12312 0.00 24.00
RBVariableNode 6180 215 12040 0.00 56.00
StrikeFont 21432 80 11520 0.00 144.00
CmdContextMenuActivation 0 178 11392 0.00 64.00
RSLabel 3493 62 10912 0.00 176.00
KMKeymap 2471 225 10800 0.00 48.00
WeakValueAssociation 290 411 9864 0.00 24.00
ColorArray 217 23 9808 0.00 426.43
IcePackage 2790 295 9440 0.00 32.00
MenubarMenuMorph 332 71 9088 0.00 128.00
WeakMessageSend 3464 221 8840 0.00 40.00
TaClassCompositionElement 418 506 8096 0.00 16.00
KMModifiedKeyCombination 1520 331 7944 0.00 24.00
ImageMorph 7092 120 7680 0.00 64.00
Semaphore 1838 232 7424 0.00 32.00
KeyedTree 1405 309 7416 0.00 24.00
SpObservableSlot 656 177 7080 0.00 40.00
MethodChangeRecord 432 288 6912 0.00 24.00
FileReference 6845 281 6744 0.00 24.00
ClyBrowserItem 3158 104 6656 0.00 64.00
SmallIdentityDictionary 122 195 6240 0.00 32.00
RBLiteralValueNode 1025 89 5696 0.00 64.00
TableLayout 6384 235 5640 0.00 24.00
KeyboardKey 10288 229 5496 0.00 24.00
SimpleAnnotationContext 565 332 5312 0.00 16.00
BorderedMorph 4419 73 5256 0.00 72.00
KMMetaModifier 740 200 4800 0.00 24.00
LabelMorph 2600 34 4624 0.00 136.00
KMSingleKeyCombination 1480 287 4592 0.00 16.00
AthensAffineTransform 3334 82 4592 0.00 56.00
Morph 98041 78 4368 0.00 56.00
RBAssignmentNode 2879 77 4312 0.00 56.00
CmdShortcutActivation 1095 84 4032 0.00 48.00
KMUntypeableSingleKeyCombination 2060 124 3968 0.00 32.00
WeakIdentitySet 285 123 3936 0.00 32.00
SimpleBorder 1251 123 3936 0.00 32.00
ClyMainItemCellMorph 2422 32 3840 0.00 120.00
ImageFillStyle 989 67 3752 0.00 56.00
SubscriptionRegistry 1842 150 3600 0.00 24.00
SolidFillStyle 930 150 3600 0.00 24.00
StringMorph 10731 37 3552 0.00 96.00
ExternalLibraryFunction 582 61 3416 0.00 56.00
CompilationContext 8129 20 3200 0.00 160.00
LayoutFrame 3912 41 2952 0.00 72.00
PluggableMenuSpec 2428 71 2840 0.00 40.00
Interval 3523 88 2816 0.00 32.00
OrderedDictionary 7045 117 2808 0.00 24.00
IconicButton 2695 19 2736 0.00 144.00
SpImagePresenter 848 10 2720 0.00 272.00
KMShiftModifier 275 108 2592 0.00 24.00
KMStorage 759 107 2568 0.00 24.00
RunArray 7527 52 2496 0.00 48.00
LargePositiveInteger 1900 88 2448 0.00 27.82
ClyBrowserItemContext 393 151 2416 0.00 16.00
ClyCollapsedDataSource 2259 30 2400 0.00 80.00
MorphicEventHandler 3332 149 2384 0.00 16.00
ReRewriteTreeWrapper 197 149 2384 0.00 16.00
RSTextExtents 1312 42 2352 0.00 56.00
Announcer 3122 146 2336 0.00 16.00
WeakFinalizerItem 922 58 2320 0.00 40.00
RubScrollBar 267 10 2320 0.00 232.00
RBMethodNode 11990 20 2240 0.00 112.00
KMDispatcher 3370 46 2208 0.00 48.00
ClyDataSourceItem 3550 69 2208 0.00 32.00
Object 42463 137 2192 0.00 16.00
KMCategoryBinding 1040 68 2176 0.00 32.00
SpCommand 851 30 2160 0.00 72.00
IceTipToolbarActivation 378 30 2160 0.00 72.00
KMComposedModifier 1352 65 2080 0.00 32.00
FTTableRowMorph 463 32 2048 0.00 64.00
WeakKeyAssociation 1350 85 2040 0.00 24.00
RSComposite 4120 15 2040 0.00 136.00
ProcessList 4011 81 1944 0.00 24.00
ExternalAddress 8761 120 1920 0.00 16.00
ClyNotebookPageActionButtonMorph 761 17 1904 0.00 112.00
ClassChangeRecord 2880 39 1872 0.00 48.00
KMPlatformSpecificKeyCombination 1505 78 1872 0.00 24.00
SycSourceCodeMenuActivation 0 28 1792 0.00 64.00
RubCompositionScanner 1734 8 1792 0.00 224.00
ClyToolbarActivation 75 27 1728 0.00 64.00
SpStyleGeometry 1756 30 1680 0.00 56.00
ExternalType 9046 42 1680 0.00 40.00
CheckboxButtonMorph 5109 11 1672 0.00 152.00
RubTextComposer 4396 8 1664 0.00 208.00
ColorForm 4836 23 1656 0.00 72.00
CairoGlyphsArray 304 41 1640 0.00 40.00
ThirtyTwoBitRegister 1987 68 1632 0.00 24.00
TextColor 1550 102 1632 0.00 16.00
RSGroup 2305 40 1600 0.00 40.00
CheckboxMorph 8052 11 1584 0.00 144.00
KMCategory 2171 65 1560 0.00 24.00
FreeTypeFont 10698 16 1536 0.00 96.00
SpLabelPresenter 950 6 1536 0.00 256.00
AlphaImageMorph 3892 12 1536 0.00 128.00
AnnouncementSet 230 63 1512 0.00 24.00
FreeTypeFace 1682 6 1488 0.00 248.00
SpBoxConstraints 1049 23 1472 0.00 64.00
CursorWithMask 862 26 1456 0.00 56.00
RBReturnNode 1775 36 1440 0.00 40.00
FreeTypeFontFamilyMember 2227 16 1408 0.00 88.00
KMCtrlModifier 274 57 1368 0.00 24.00
ScrollBar 11971 6 1344 0.00 224.00
RubPrimarySelectionMorph 840 8 1344 0.00 168.00
TextEmphasis 1508 56 1344 0.00 24.00
LargeNegativeInteger 1666 49 1328 0.00 27.10
FFIExternalStructureType 2016 41 1312 0.00 32.00
RubEditingArea 2968 6 1296 0.00 216.00
FTTableMorph 19342 6 1296 0.00 216.00
OCMethodScope 108 20 1280 0.00 64.00
SpToolbarButtonMorph 1455 4 1280 0.00 320.00
MCClassDefinition 8290 16 1280 0.00 80.00
SpStyleClass 1819 39 1248 0.00 32.00
Text 8681 52 1248 0.00 24.00
ScaledDecimal 3225 38 1216 0.00 32.00
KMTarget 688 50 1200 0.00 24.00
TaSequence 4234 74 1184 0.00 16.00
TextStyle 7814 12 1152 0.00 96.00
BrokenClassAnnotation 461 24 1152 0.00 48.00
ForbiddenClassAnnotation 191 28 1120 0.00 40.00
MenubarItemMorph 482 7 1120 0.00 160.00
SpToolbarButtonPresenter 931 4 1120 0.00 280.00
RBPatternMessageNode 1403 14 1120 0.00 80.00
TaRemoveMethod 916 46 1104 0.00 24.00
RubTextLine 3026 10 1040 0.00 104.00
LogicalFont 10941 10 1040 0.00 104.00
ClyTableDecorationStrategy 614 26 1040 0.00 40.00
ClassSessionHandler 406 61 976 0.00 16.00
ClyNotebookPageHeaderPresenter 1034 5 960 0.00 192.00
ClyMethodCodeEditorToolMorph 4876 5 960 0.00 192.00
FreeTypeEmbeddedFileInfo 771 6 960 0.00 160.00
SpRubFindReplaceService 2355 8 960 0.00 120.00
FFIExternalResourceExecutor 230 29 928 0.00 32.00
CmdCommandActivator 2670 29 928 0.00 32.00
ClyRawQueryResult 63 14 896 0.00 64.00
CopiedLocalVariable 692 16 896 0.00 56.00
Process 6856 11 880 0.00 80.00
DependentsArray 2399 52 880 0.00 16.92
SpBoxLayout 5943 10 880 0.00 88.00
ClyDesiredSelection 701 27 864 0.00 32.00
MenuLineMorph 814 15 840 0.00 56.00
SycDebuggingMenuActivation 0 13 832 0.00 64.00
CmdTextLeftBarMenuActivation 0 13 832 0.00 64.00
MultistateButtonMorph 4139 8 832 0.00 104.00
WindowEdgeGripMorph 418 8 832 0.00 104.00
ObjectFinalizerCollection 117 26 832 0.00 32.00
ClyQueryViewMorph 8018 6 816 0.00 136.00
SpStyleVariable 503 50 800 0.00 16.00
SpMorphicBoxAdapter 3361 10 800 0.00 80.00
DoubleLink 684 25 800 0.00 32.00
KMKeyCombinationChoice 957 50 800 0.00 16.00
AlignmentMorph 6839 11 792 0.00 72.00
FTRowLayout 336 32 768 0.00 24.00
HaloSpec 476 15 720 0.00 48.00
ArgumentVariable 414 15 720 0.00 48.00
RubCursor 3933 8 704 0.00 88.00
KMKeyCombinationSequence 1037 44 704 0.00 16.00
RSMultilineLabelBuilder 1037 17 680 0.00 40.00
TFIntType 343 14 672 0.00 48.00
PropertySortFunction 670 28 672 0.00 24.00
ClySortedQueryResult 476 9 648 0.00 72.00
KMCommandModifier 268 27 648 0.00 24.00
PanelMorph 1862 9 648 0.00 72.00
Margin 1936 16 640 0.00 40.00
RubEditingState 2161 8 640 0.00 80.00
OCBlockScope 354 10 640 0.00 64.00
ClyNotebookPageMorph 1298 5 640 0.00 128.00
TaskbarItemMorph 2080 2 608 0.00 304.00
ControlButtonMorph 1252 2 608 0.00 304.00
ClyTableIconCommandActivation 159 15 600 0.00 40.00
ClyTabActivationStrategy 291 15 600 0.00 40.00
ClyBrowserModeSwitchMorph 423 8 576 0.00 72.00
ClyQueryViewState 542 24 576 0.00 24.00
BoxedFloat64 2967 36 576 0.00 16.00
ClyContextSelectionStrategy 720 12 576 0.00 48.00
TextMethodLink 1454 12 576 0.00 48.00
TemporaryVariable 220 12 576 0.00 48.00
ClyTestResultProperty 1279 14 560 0.00 40.00
SpMorphicImageAdapter 740 10 560 0.00 56.00
ClyExpandedDataSource 1330 7 560 0.00 80.00
ThemeSettings 6604 2 544 0.00 272.00
ClyNotebookPageAction 626 17 544 0.00 32.00
FTTableContainerMorph 4336 6 528 0.00 88.00
VariableLayout 521 22 528 0.00 24.00
RubCharacterBlock 2545 16 512 0.00 32.00
SmallDictionary 6544 16 512 0.00 32.00
ClyClassDefinitionEditorToolMorph 1434 3 504 0.00 168.00
RubScrolledTextMorph 18629 3 504 0.00 168.00
BlockClosure 13109 15 488 0.00 32.53
CmdDragAndDropActivation 394 10 480 0.00 48.00
ProportionalSplitterMorph 4981 4 480 0.00 120.00
RBComment 1480 10 480 0.00 48.00
RSBox 323 4 480 0.00 120.00
TransformWithLayoutMorph 322 6 480 0.00 80.00
TabLabelMorph 2122 5 480 0.00 96.00
CmUILeftPositionStrategy 126 30 480 0.00 16.00
CmUIDisableWhenCantBeRun 75 30 480 0.00 16.00
ClyAsyncQueryResult 1398 6 480 0.00 80.00
GeneralScrollBar 693 2 464 0.00 232.00
SpMorphStyle 1656 19 456 0.00 24.00
Mutex 299 19 456 0.00 24.00
SpCodePresenter 7365 1 448 0.00 448.00
ClyBrowserTabCommandActivation 0 7 448 0.00 64.00
FFIVariableArgument 377 11 440 0.00 40.00
RubTextScrollPane 5872 5 440 0.00 88.00
FT2GlyphSlot 1594 3 432 0.00 144.00
SHStyleElement 1817 13 416 0.00 32.00
FFITypeDeclaration 855 13 416 0.00 32.00
ReverseSortFunction 267 26 416 0.00 16.00
RSPopup 947 17 408 0.00 24.00
RubTextFieldMorph 3428 2 400 0.00 200.00
WeakIdentityKeyDictionary 374 10 400 0.00 40.00
RubTextFieldArea 509 2 400 0.00 200.00
ClyBrowserQueryCursor 1941 7 392 0.00 56.00
MCGitHubRepository 2130 7 392 0.00 56.00
BinaryFileStream 697 8 384 0.00 48.00
RubParagraph 8631 8 384 0.00 48.00
SpMorphicLabelAdapter 581 6 384 0.00 64.00
RBCascadeNode 2688 8 384 0.00 48.00
RSLine 175 3 384 0.00 128.00
SpAbstractWidgetLayout 591 23 368 0.00 16.00
OCOptimizedBlockScope 322 5 360 0.00 72.00
MCVersionInfo 2495 5 360 0.00 72.00
FFIUInt32 383 14 336 0.00 24.00
SHRBTextStyler 14864 3 336 0.00 112.00
SpWindowPresenter 6417 1 336 0.00 336.00
EFContext 4800 1 328 0.00 328.00
CmdMenuCommandActivationExample 0 5 320 0.00 64.00
WeakSet 2643 10 320 0.00 32.00
ByteLayout 604 20 320 0.00 16.00
ExternalData 1735 13 312 0.00 24.00
PluggableToggleButtonMorph 714 1 312 0.00 312.00
SpToggleButtonPresenter 722 1 304 0.00 304.00
ClyFullBrowserState 451 6 288 0.00 48.00
TonelRepository 2603 6 288 0.00 48.00
FFIInt32 263 12 288 0.00 24.00
ClyMethodDefinitionProperty 583 6 288 0.00 48.00
Monitor 3261 5 280 0.00 56.00
SpStyleFont 2709 5 280 0.00 56.00
RSNoWrapStrategy 116 17 272 0.00 16.00
RSSimplePopupBuilder 639 17 272 0.00 16.00
SpToolbarPresenter 2513 1 272 0.00 272.00
WeakLayout 543 11 264 0.00 24.00
ClyStatusBarMorph 1056 3 264 0.00 88.00
ObservableSlot 592 6 240 0.00 40.00
SpStyleDraw 619 10 240 0.00 24.00
ClyMainTableColumn 242 6 240 0.00 40.00
MCVersion 3138 5 240 0.00 48.00
WordLayout 618 15 240 0.00 16.00
ChangeSet 15710 6 240 0.00 40.00
HandMorph 15371 1 232 0.00 232.00
CmdDoubleClickActivation 60 4 224 0.00 56.00
OCVectorTempVariable 672 4 224 0.00 56.00
CmdKMDispatcher 453 4 224 0.00 56.00
SpMorphicToolbarButtonAdapter 721 4 224 0.00 56.00
ClyBrowserQueryCache 1139 7 224 0.00 32.00
ClyToolbarSeparatorMorph 246 4 224 0.00 56.00
LRUCache 1462 4 224 0.00 56.00
RubGhostTextDisplayer 1841 3 216 0.00 72.00
SpWindow 760 1 216 0.00 216.00
SystemWindow 42552 1 216 0.00 216.00
UndoRedoRecord 905 9 216 0.00 24.00
WeakValueDictionary 1290 9 216 0.00 24.00
StPlaygroundPagePresenter 4025 1 208 0.00 208.00
RubExtraSelectionDecorator 1937 5 200 0.00 40.00
ClyFullBrowser 9322 1 200 0.00 200.00
HistoryIterator 2821 5 200 0.00 40.00
StPlayground 1155 1 192 0.00 192.00
OCRequestorScope 555 6 192 0.00 32.00
RBArrayNode 3020 3 192 0.00 64.00
FileLocator 6018 8 192 0.00 24.00
ClyMethodCreationToolMorph 1719 1 192 0.00 192.00
RBPragmaNode 3788 3 192 0.00 64.00
ToManyRelationSlot 319 3 192 0.00 64.00
MorphicTransform 2809 6 192 0.00 32.00
ClyBrowserButtonMorph 578 3 192 0.00 64.00
FTSearchFunction 848 4 192 0.00 48.00
RubScrolledTextModel 5687 4 192 0.00 48.00
MCFileTreeRepository 6139 3 192 0.00 64.00
BottomRightGripMorph 807 2 176 0.00 88.00
TopRightGripMorph 825 2 176 0.00 88.00
TopLeftGripMorph 809 2 176 0.00 88.00
BottomLeftGripMorph 830 2 176 0.00 88.00
SpMillerColumnPresenter 2107 1 176 0.00 176.00
RelativePath 576 10 176 0.00 17.60
ClyRichTextClassCommentEditorToolMorph 1480 1 176 0.00 176.00
FFIInstVarArgument 540 11 176 0.00 16.00
TextFontReference 566 7 168 0.00 24.00
SpMillerPaginatorPresenter 733 1 168 0.00 168.00
TKTProductionProfile 354 2 160 0.00 80.00
MouseButtonEvent 674 2 160 0.00 80.00
ClyTaggedClassesQuery 647 5 160 0.00 32.00
AtomicSharedQueue 369 5 160 0.00 32.00
ClyTaggedClassGroup 780 4 160 0.00 40.00
ClyAsyncQuery 776 4 160 0.00 40.00
InsetBorder 439 5 160 0.00 32.00
RubTextEditor 29131 5 160 0.00 32.00
WeakKeyDictionary 3253 4 160 0.00 40.00
TaskbarTask 1320 4 160 0.00 40.00
RubTextSegmentIconDisplayer 2314 2 144 0.00 72.00
RSUMLClassCalypso 1163 1 144 0.00 144.00
Delay 3152 3 144 0.00 48.00
ClyHighlightingSelection 160 6 144 0.00 24.00
RSTreeLayout 63 1 144 0.00 144.00
ClyExtensionLastSortedClasses 912 2 144 0.00 72.00
ClyActivityAnimationIconMorph 680 2 144 0.00 72.00
ClyDataSourceSelection 3478 6 144 0.00 24.00
SpBrowseClassCommand 488 3 144 0.00 48.00
Fraction 5117 6 144 0.00 24.00
RubShoutStylerDecorator 2335 3 144 0.00 48.00
SpPresenter 12611 1 144 0.00 144.00
RSPolyline 306 1 136 0.00 136.00
MenubarMorph 1953 1 136 0.00 136.00
TextClassLink 650 4 128 0.00 32.00
RSPolygon 1761 1 128 0.00 128.00
CoCompletionEngine 558 2 128 0.00 64.00
RSBorder 1389 4 128 0.00 32.00
RubTextStopConditions 723 4 128 0.00 32.00
ClyQueryResultMetadata 527 8 128 0.00 16.00
WeakRegistry 1495 4 128 0.00 32.00
CacheWeight 599 4 128 0.00 32.00
ZnCharacterReadStream 611 4 128 0.00 32.00
SpNotebookTabSelectorMorph 786 1 128 0.00 128.00
SourceFile 2619 4 128 0.00 32.00
UndoRedoGroup 221 5 120 0.00 24.00
ZnBufferedReadStream 3652 3 120 0.00 40.00
CairoFontFaceExecutor 423 3 120 0.00 40.00
Heap 4754 3 120 0.00 40.00
WriteStream 3480 3 120 0.00 40.00
SpCodeInspectItCommand 389 3 120 0.00 40.00
SpBrowseSendersCommand 380 3 120 0.00 40.00
OSWindowAttributes 3119 1 120 0.00 120.00
SpCodeDebugItCommand 970 3 120 0.00 40.00
MCSnapshot 815 5 120 0.00 24.00
SessionCategory 801 5 120 0.00 24.00
ClassAnnotationExampleWithPriority 0 3 120 0.00 40.00
SpBrowseImplementorsCommand 390 3 120 0.00 40.00
SpCodePrintItCommand 498 3 120 0.00 40.00
RSAthensMorph 7869 1 120 0.00 120.00
StartupAction 1311 3 120 0.00 40.00
SpCodeDoItCommand 382 3 120 0.00 40.00
ClyNotebookMorph 1359 1 120 0.00 120.00
AlienWeakTable 594 2 112 0.00 56.00
CmdTextLeftBarClickActivation 0 2 112 0.00 56.00
RSCanvas 10744 1 112 0.00 112.00
MetacelloMCBaselineOfProjectSpec 2188 1 112 0.00 112.00
ClyTextEditingMode 567 2 112 0.00 56.00
MillerScrollPane 906 1 112 0.00 112.00
FTFilterFunction 1962 2 112 0.00 56.00
RubAdornmentDisplayer 1185 2 112 0.00 56.00
FreeTypeSettings 3828 1 112 0.00 112.00
IceWorkingCopy 7552 2 112 0.00 56.00
CharacterSet 1914 7 112 0.00 16.00
TKTWorkerProcess 1077 2 112 0.00 56.00
StdioStream 230 2 112 0.00 56.00
RSLegend 3286 1 104 0.00 104.00
OmBlockFileStore 948 1 104 0.00 104.00
WorldState 10511 1 104 0.00 104.00
RSUMLCalypsoRenderer 535 1 104 0.00 104.00
ClyAllBasisCritiqueQuery 154 4 96 0.00 24.00
SpMorphicCodeCompletionEngine 706 1 96 0.00 96.00
ClyFullBrowserMethodContext 296 3 96 0.00 32.00
ClyFullBrowserClassContext 356 3 96 0.00 32.00
FreeTypeFontFamily 513 4 96 0.00 24.00
ProportionalLayout 214 6 96 0.00 16.00
ClyClassSideScope 211 3 96 0.00 32.00
ZnUTF8Encoder 2708 6 96 0.00 16.00
ClyQueryResultBrowserAdapter 1440 6 96 0.00 16.00
ClyMethodTagsAndPackageEditorMorph 2153 1 96 0.00 96.00
OmBlock 1127 2 96 0.00 48.00
ClyTextEditor 1657 2 96 0.00 48.00
CairoScaledFont 4699 3 96 0.00 32.00
SpMorphicMillerAdapter 2403 1 96 0.00 96.00
FTNullColumnSortingStrategy 213 6 96 0.00 16.00
TFCharType 124 2 96 0.00 48.00
FTRowSelectionModeStrategy 1219 6 96 0.00 16.00
FTMultipleSelection 615 6 96 0.00 16.00
OSStateModifiers 2018 1 96 0.00 96.00
CallbackForX64 771 2 96 0.00 48.00
KMAltModifier 276 4 96 0.00 24.00
CacheStatistics 414 4 96 0.00 24.00
ClyClassDefinitionProperty 133 3 96 0.00 32.00
DelaySemaphoreScheduler 473 1 96 0.00 96.00
RubTextSelectionColor 1326 3 96 0.00 32.00
ClyCriticDecorator 1856 2 96 0.00 48.00
FFICallback 2053 2 96 0.00 48.00
ColorMap 3454 3 96 0.00 32.00
DoubleLinkedList 2693 4 96 0.00 24.00
File 11729 6 96 0.00 16.00
WorldMorph 7811 1 96 0.00 96.00
TKTWorker 2172 2 96 0.00 48.00
FFIVoid 1272 4 96 0.00 24.00
MouseMoveEvent 1014 1 88 0.00 88.00
SystemProgressMorph 8016 1 88 0.00 88.00
SpToolbarMorph 2493 1 88 0.00 88.00
OSSDL2BackendWindow 7527 1 80 0.00 80.00
ClassAnnotationExample3 0 2 80 0.00 40.00
AthensCairoCanvas 8717 1 80 0.00 80.00
RubOpeningClosingDelimiterDecorator 1182 5 80 0.00 16.00
WeakSlot 548 2 80 0.00 40.00
RSHighlightable 3070 2 80 0.00 40.00
ClyNavigateBrowserForwardCommand 378 5 80 0.00 16.00
ClyToolbarMorph 680 1 80 0.00 80.00
RSCornerRadius 1097 2 80 0.00 40.00
RSEdgeBuilder 10299 1 80 0.00 80.00
RSUMLClassDescriptor 1234 1 80 0.00 80.00
ClyNavigateBrowserBackCommand 380 5 80 0.00 16.00
WideSymbol 1264 3 80 0.00 26.67
ComposableMorph 15330 1 80 0.00 80.00
ClyMethodVisibilityProvider 231 2 80 0.00 40.00
ContextualClassAnnotationExample1 84 2 80 0.00 40.00
TKTWatchDog 1442 1 80 0.00 80.00
BottomBorder 223 2 80 0.00 40.00
SystemVersion 3547 1 80 0.00 80.00
ClassAnnotationExample2 0 2 80 0.00 40.00
ClassAnnotationExample1 0 2 80 0.00 40.00
WeakFinalizationList 168 5 80 0.00 16.00
ClyInheritedScopeProvider 493 2 80 0.00 40.00
MetacelloMCBaselineProject 1510 1 80 0.00 80.00
IceTipCommandStrongSelectionActivation 0 2 80 0.00 40.00
MCOrganizationDefinition 1995 5 80 0.00 16.00
PragmaMenuAndShortcutRegistration 3250 2 80 0.00 40.00
ClyMethodVisibilityGroups 707 1 72 0.00 72.00
SycAddSubclassCommand 434 3 72 0.00 24.00
ClyAllClassesQuery 128 3 72 0.00 24.00
PharoLightTheme 3419 1 72 0.00 72.00
OSSDL2FormRenderer 1062 1 72 0.00 72.00
SpMillerLayout 4958 1 72 0.00 72.00
StPlaygroundPage 1590 1 72 0.00 72.00
MCCacheRepository 1948 1 72 0.00 72.00
FreeTypeExternalMemory 598 3 72 0.00 24.00
TaskbarMorph 4499 1 72 0.00 72.00
OmReference 924 3 72 0.00 24.00
RSControlConfiguration 1212 1 72 0.00 72.00
WaitfreeQueue 1992 3 72 0.00 24.00
ClySubclassHierarchy 1374 3 72 0.00 24.00
CharacterSetComplement 1779 3 72 0.00 24.00
SpNotebookPanelMorph 400 1 72 0.00 72.00
OmSessionStore 2772 1 72 0.00 72.00
ClyCursorPositionLabelMorph 857 1 72 0.00 72.00
ClyFluidClassDefinitionSwitchMorph 517 1 72 0.00 72.00
ClyHierarchicallySortedClasses 990 1 72 0.00 72.00
FFICharacterType 1018 3 72 0.00 24.00
ClyAllMethodsQuery 128 3 72 0.00 24.00
ClyTextWrapModeSwitchMorph 505 1 72 0.00 72.00
ZnUrl 12463 1 72 0.00 72.00
ClyTextLineNumbersSwitchMorph 533 1 72 0.00 72.00
ClyFormatAsReadSwitchMorph 680 1 72 0.00 72.00
StInspectorRefreshService 578 1 72 0.00 72.00
AthensCairoSurface 10198 1 64 0.00 64.00
ClyInstanceSideScope 137 2 64 0.00 32.00
FFIAlienCallback 914 2 64 0.00 32.00
MetacelloRepositorySpec 1921 1 64 0.00 64.00
FFIFunctionSpec 1032 2 64 0.00 32.00
FFITestEnumeration 398 4 64 0.00 16.00
SessionManager 4453 1 64 0.00 64.00
ThreadSafeTranscript 2941 1 64 0.00 64.00
ClyNotebookManager 4162 1 64 0.00 64.00
ClyUnknownQueryResult 966 1 64 0.00 64.00
MCClassVariableDefinition 168 4 64 0.00 16.00
IceRepositoryProperties 2282 2 64 0.00 32.00
ClyClassScope 107 2 64 0.00 32.00
ZipEncoderTree 1738 2 64 0.00 32.00
CornerRounder 1198 2 64 0.00 32.00
RSVerticalLineLayout 527 1 64 0.00 64.00
OSWorldRenderer 2652 1 64 0.00 64.00
RBLiteralArrayNode 1649 1 64 0.00 64.00
FileCompilerRequestor 635 2 64 0.00 32.00
RBSearchRule 460 2 64 0.00 32.00
IceLibgitRepository 8828 1 64 0.00 64.00
CompiledMethodLayout 434 4 64 0.00 16.00
RubLineNumberDisplayer 2490 1 64 0.00 64.00
ClyMethodScope 189 2 64 0.00 32.00
MetacelloProjectRegistration 5565 1 64 0.00 64.00
SourceFileBufferedReadWriteStream 2737 1 64 0.00 64.00
ToOneRelationSlot 341 1 64 0.00 64.00
SpMorphicCodeAdapter 2432 1 64 0.00 64.00
CairoFreetypeFontRenderer 4695 1 64 0.00 64.00
TKTCommonQueueWorkerPool 6358 1 56 0.00 56.00
AnimationSettings 500 1 56 0.00 56.00
TKTTaskExecution 1038 1 56 0.00 56.00
StPharoApplication 1384 1 56 0.00 56.00
DisplayScreen 5571 1 56 0.00 56.00
RubSurfaceSelectionShape 862 1 56 0.00 56.00
SystemDictionary 4261 1 56 0.00 56.00
SpMorphicWindowAdapter 2897 1 56 0.00 56.00
EpMonitor 6095 1 56 0.00 56.00
RSScrollBarsCanvas 2151 1 56 0.00 56.00
ShortcutReminder 4529 1 56 0.00 56.00
ClyNavigationEnvironment 2670 1 56 0.00 56.00
SharedRandom 411 1 56 0.00 56.00
SpMorphicToolbarAdapter 718 1 56 0.00 56.00
FreeTypeFontProvider 5969 1 56 0.00 56.00
SpMorphicToggleButtonAdapter 1079 1 56 0.00 56.00
RSKeyNavigationCanvas 1600 1 48 0.00 48.00
RubSmalltalkEditor 13105 1 48 0.00 48.00
RowLayout 699 2 48 0.00 24.00
ClySystemEnvironment 3887 1 48 0.00 48.00
FileSystem 9240 3 48 0.00 16.00
RubTextInsertionStrategy 130 3 48 0.00 16.00
UndeclaredVariable 661 2 48 0.00 24.00
ClySortByNameFunction 72 3 48 0.00 16.00
SpNullApplication 86 1 48 0.00 48.00
ClyAllMethodGroupsQuery 669 2 48 0.00 24.00
RubCurrentLineBarDecorator 569 3 48 0.00 16.00
Cursor 8958 1 48 0.00 48.00
GAngle 2536 3 48 0.00 16.00
TFCallbackQueue 1736 1 48 0.00 48.00
FFIUInt8 373 2 48 0.00 24.00
Random 1990 1 48 0.00 48.00
ClyItemChildrenTag 368 3 48 0.00 16.00
OmDeferrer 1031 1 48 0.00 48.00
SpKMCategoryBuilder 311 3 48 0.00 16.00
DamageRecorder 562 2 48 0.00 24.00
ClyNavigationHistory 1176 1 48 0.00 48.00
InputEventSensor 4902 1 48 0.00 48.00
SQSurfaceDispatch 1375 1 48 0.00 48.00
ClyBrowserDialogContext 641 2 48 0.00 24.00
RSLocation 1313 1 48 0.00 48.00
RBParseTreeSearcher 4276 1 48 0.00 48.00
MetacelloAddMemberSpec 178 1 48 0.00 48.00
WorkingSession 1597 1 48 0.00 48.00
RPackageOrganizer 13563 1 48 0.00 48.00
OSMouseMoveEvent 62 1 48 0.00 48.00
ClyTableFilterFactory 526 2 48 0.00 24.00
MetacelloRepositoriesSpec 1432 1 48 0.00 48.00
ImmediateLayout 585 3 48 0.00 16.00
ClyAllMethodGroup 475 1 48 0.00 48.00
ClyMultipleClassRelationScope 678 1 48 0.00 48.00
CairoFontFace 4324 3 48 0.00 16.00
MorphicAlarm 328 1 48 0.00 48.00
FFICallbackThunk 2766 2 48 0.00 24.00
WeakKeyToCollectionDictionary 356 1 40 0.00 40.00
SystemOrganizer 2187 1 40 0.00 40.00
SystemAnnouncer 3543 1 40 0.00 40.00
ThemeIcons 4904 1 40 0.00 40.00
AthensCairoPathBuilder 7060 1 40 0.00 40.00
OSWindow 5364 1 40 0.00 40.00
TFPointerType 209 1 40 0.00 40.00
ClyTaggedMethodGroup 834 1 40 0.00 40.00
ContextualClassAnnotationExample2 0 1 40 0.00 40.00
RubSmalltalkScriptingMode 491 1 40 0.00 40.00
ASTCache 749 1 40 0.00 40.00
TFFloatType 200 1 40 0.00 40.00
FreeTypeCache 2135 1 40 0.00 40.00
TFDoubleType 200 1 40 0.00 40.00
TFBasicType 4101 1 40 0.00 40.00
SpTextFindCommand 243 1 40 0.00 40.00
RSStrokeStyle 771 1 40 0.00 40.00
GLMNoBrowser 352 1 40 0.00 40.00
RSDraggableCanvas 1677 1 40 0.00 40.00
UUIDGenerator 1125 1 40 0.00 40.00
SpTextPasteCommand 315 1 40 0.00 40.00
CmdCommandActivationExample 0 1 40 0.00 40.00
CleanBlockClosure 1164 1 40 0.00 40.00
MouseOverHandler 1339 1 40 0.00 40.00
ClyClassGroup 1443 1 40 0.00 40.00
RSSearchInCanvas 2057 1 40 0.00 40.00
Pharo3TabPanelBorder 297 1 40 0.00 40.00
ClyInheritanceAnalysisEnvironmentPlugin 2436 1 40 0.00 40.00
StEvaluateCommand 447 1 40 0.00 40.00
SpTextCopyCommand 314 1 40 0.00 40.00
ClyCompositeScope 1909 1 40 0.00 40.00
SpTextCutCommand 313 1 40 0.00 40.00
RSConfigurableCamera 401 1 40 0.00 40.00
ZdcByteArrayManager 828 1 32 0.00 32.00
UnixStore 693 2 32 0.00 16.00
CairoUTF8Converter 446 1 32 0.00 32.00
IceAnnouncer 578 1 32 0.00 32.00
AthensCairoMatrix 7253 2 32 0.00 16.00
RSCanvasController 1187 1 32 0.00 32.00
IceUnknownCommit 1163 1 32 0.00 32.00
ClyPackageExtensionScope 275 1 32 0.00 32.00
ClyFullBrowserClassGroupContext 738 1 32 0.00 32.00
IceCredentialStore 1977 1 32 0.00 32.00
ClyUnionQuery 610 1 32 0.00 32.00
EpLog 4395 1 32 0.00 32.00
SDL_MouseMotionEvent 1572 2 32 0.00 16.00
ClyTaggedMethodsQuery 731 1 32 0.00 32.00
StHaltCache 5914 1 32 0.00 32.00
TKTWorkerExecutor 151 2 32 0.00 16.00
MorphicUIManager 24067 2 32 0.00 16.00
GlobalIdentifierStonPersistence 289 1 32 0.00 32.00
ClyFullBrowserMethodGroupContext 217 1 32 0.00 32.00
SpStyleContainer 795 1 32 0.00 32.00
OSSDL2Driver 6259 1 32 0.00 32.00
ObservableValueHolder 843 1 32 0.00 32.00
RSVerticalAttachPoint 194 1 32 0.00 32.00
SpMorphicBackend 636 2 32 0.00 16.00
ClySortItemGroupFunction 100 2 32 0.00 16.00
RubPluggableGetMenuPolicy 486 1 32 0.00 32.00
SpMorphicAdapterBindings 60 2 32 0.00 16.00
IceTokenCredentials 1056 1 32 0.00 32.00
SpStyleVariableEnvironmentFont 628 2 32 0.00 16.00
SourceFileArray 4733 1 32 0.00 32.00
ClyPackageScope 663 1 32 0.00 32.00
KMRepository 2461 1 32 0.00 32.00
CommandLinePasswordManager 1963 1 32 0.00 32.00
GlobalIdentifierFuelPersistence 288 1 32 0.00 32.00
ClyUnknownScope 587 1 32 0.00 32.00
PharoCommonTools 3957 1 32 0.00 32.00
RSLayoutBuilder 1020 2 32 0.00 16.00
ClySystemEnvironmentScope 718 1 32 0.00 32.00
InputEventFetcher 1494 1 32 0.00 32.00
ClySortMethodBySelectorFunction 168 2 32 0.00 16.00
TKTGenericTask 164 2 32 0.00 16.00
ClyMergedHierarchy 577 1 32 0.00 32.00
TKTPharoProcessProvider 193 2 32 0.00 16.00
RSMarker 445 1 32 0.00 32.00
SmalltalkImage 24644 1 32 0.00 32.00
StPlaygroundDoItCommand 285 1 32 0.00 32.00
SpStyleVariableEnvironmentColor 501 2 32 0.00 16.00
StPlaygroundPagesCommand 308 1 32 0.00 32.00
StPlaygroundBindingsCommand 313 1 32 0.00 32.00
MCClassInstanceVariableDefinition 114 2 32 0.00 16.00
StPlaygroundPublishCommand 920 1 32 0.00 32.00
SuperVariable 410 1 24 0.00 24.00
ReInvocationSequenceRuleSequence 785 1 24 0.00 24.00
ClyAllClassGroupsQuery 437 1 24 0.00 24.00
ThisContextVariable 407 1 24 0.00 24.00
RSAthensRenderer 6275 1 24 0.00 24.00
ProcessorScheduler 3622 1 24 0.00 24.00
SelfVariable 403 1 24 0.00 24.00
ClySubstringPattern 479 1 24 0.00 24.00
ClyAllPackagesQuery 309 1 24 0.00 24.00
ClyCriticEnvironmentPlugin 1150 1 24 0.00 24.00
RbScriptingSetBeforeModel 176 1 24 0.00 24.00
PrimitiveError 270 1 24 0.00 24.00
ClyShowClassRefCommand 879 1 24 0.00 24.00
StPlaygroundInteractionModel 917 1 24 0.00 24.00
EphemeronLayout 432 1 24 0.00 24.00
ZnCharacterWriteStream 582 1 24 0.00 24.00
TKTConfiguration 2222 1 24 0.00 24.00
ClyShowMessageImplementorCommand 754 1 24 0.00 24.00
SourceFileCharacterReadWriteStream 1700 1 24 0.00 24.00
SpEventHandler 1176 1 24 0.00 24.00
TaAliasMethod 2006 1 24 0.00 24.00
MetacelloProjectRegistrationVersionInfo 293 1 24 0.00 24.00
IceGitIndex 1260 1 24 0.00 24.00
ClyShowMessageSenderCommand 929 1 24 0.00 24.00
IceMetacelloPharoPlatform 553 1 24 0.00 24.00
WriteBarrierTest 4614 1 24 0.00 24.00
EmbeddedFreeTypeFontInstaller 1785 1 24 0.00 24.00
OSWindowClipboard 397 1 24 0.00 24.00
FreeTypeCacheLinkedList 1068 1 24 0.00 24.00
GlobalIdentifier 1147 1 24 0.00 24.00
OmStoreFactory 936 1 24 0.00 24.00
MetacelloProjectRegistry 2272 1 24 0.00 24.00
SharedQueue 1527 1 24 0.00 24.00
ClassAnnotationRegistry 2586 1 24 0.00 24.00
ToolShortcutsCategory 919 1 24 0.00 24.00
GTSpotterGlobalShortcut 855 1 24 0.00 24.00
GTSpotterProfiler 304 1 24 0.00 24.00
IceBasicProject 2144 1 24 0.00 24.00
InteractiveResolver 318 1 24 0.00 24.00
KMBuffer 604 1 24 0.00 24.00
KMNamedCharKeyCombination 548 1 24 0.00 24.00
ClyRunClassScriptCommand 670 1 24 0.00 24.00
UserInterruptHandler 765 1 24 0.00 24.00
FloatPrintPolicy 184 1 24 0.00 24.00
ClyTraitUserHierarchy 368 1 24 0.00 24.00
StartupPreferencesLoader 4208 1 24 0.00 24.00
ClyUnknownQuery 522 1 24 0.00 24.00
RSAnimatedPopup 614 1 24 0.00 24.00
RSZoomableCanvas 690 1 24 0.00 24.00
RSAdaptativePopup 453 1 24 0.00 24.00
Alien 12685 1 24 0.00 24.00
ClyIcebergShowMethodVersionCommand 761 1 24 0.00 24.00
Model 2700 1 24 0.00 24.00
ClyDataSourceUpdateScheduler 474 1 24 0.00 24.00
ZnNetworkingUtils 4201 1 24 0.00 24.00
ClySwitchToPackagesCommand 395 1 16 0.00 16.00
ClyCriticBrowserPlugin 215 1 16 0.00 16.00
ClyClassChange 233 1 16 0.00 16.00
ReRewriteBlockWrapper 198 1 16 0.00 16.00
CairoFontOptions 5380 1 16 0.00 16.00
SDL_Cursor 146 1 16 0.00 16.00
SpaceTally 2730 1 16 0.00 16.00
TKTReadyTaskState 149 1 16 0.00 16.00
ClyMethodChange 389 1 16 0.00 16.00
ClyMonticelloBrowserPlugin 0 1 16 0.00 16.00
ReIconHardcodedMessageRule 416 1 16 0.00 16.00
ReShouldTransformedIntoAssertRule 3423 1 16 0.00 16.00
ReAssertEqualSignIntoAssertEqualsRule 3928 1 16 0.00 16.00
SettingDontTranslateDescriptionRule 522 1 16 0.00 16.00
ReTrueFalseDuplicationRule 2282 1 16 0.00 16.00
ClyTestedClassProperty 171 1 16 0.00 16.00
ReUnwindBlocksRule 969 1 16 0.00 16.00
ClyReflectiveEnvironmentPlugin 600 1 16 0.00 16.00
ClyStandardBrowserPlugin 55 1 16 0.00 16.00
ClyDefaultSystemEnvironmentPlugin 776 1 16 0.00 16.00
RSZoomToFitCanvas 962 1 16 0.00 16.00
ClyInheritanceAnalysisBrowserPlugin 0 1 16 0.00 16.00
CairoTextExtents 988 1 16 0.00 16.00
AthensCairoPaintMode 5659 1 16 0.00 16.00
OSButtonState 898 1 16 0.00 16.00
ClySwitchToVariablesCommand 122 1 16 0.00 16.00
ClyEvaluationScript 70 1 16 0.00 16.00
ClySwitchToMethodGroupsCommand 122 1 16 0.00 16.00
ClyClassScriptProperty 171 1 16 0.00 16.00
TextFontChange 1023 1 16 0.00 16.00
RSVerticalCPAPController 96 1 16 0.00 16.00
ClyTraitFirstSortFunction 130 1 16 0.00 16.00
SycCopyMethodNameToClypboardCommand 635 1 16 0.00 16.00
ClyOpenSpotterMenuCommand 634 1 16 0.00 16.00
TKTRunningTaskState 307 1 16 0.00 16.00
ClySwitchToInstanceSideCommand 115 1 16 0.00 16.00
SycShowMethodVersionCommand 549 1 16 0.00 16.00
ClySwitchToClassSideCommand 123 1 16 0.00 16.00
ClyRegexPattern 345 1 16 0.00 16.00
ExactFloatPrintPolicy 63 1 16 0.00 16.00
ClySUnitEnvironmentPlugin 1217 1 16 0.00 16.00
ReThemeAPIUpdateRule 493 1 16 0.00 16.00
ClyMonticelloEnvironmentPlugin 330 1 16 0.00 16.00
ClyTestedEnvironmentPlugin 1333 1 16 0.00 16.00
RSCenteredAttachPoint 144 1 16 0.00 16.00
ClyUndeclaredEnvironmentPlugin 153 1 16 0.00 16.00
ClyDeprecationEnvironmentPlugin 333 1 16 0.00 16.00
ClySwitchToFlatClassesCommand 193 1 16 0.00 16.00
ClySwitchToScopedViewCommand 414 1 16 0.00 16.00
ClyClassScriptEnvironmentPlugin 112 1 16 0.00 16.00
ClySwitchToFullHierarchyCommand 382 1 16 0.00 16.00
ClyFFIEnvironmentPlugin 153 1 16 0.00 16.00
ClyTraitEnvironmentPlugin 239 1 16 0.00 16.00
ClyFlagsEnvironmentPlugin 170 1 16 0.00 16.00
ReSuperSendsRule 514 1 16 0.00 16.00
SystemNavigation 9391 1 16 0.00 16.00
StPharoDefaultIconProvider 455 1 16 0.00 16.00
StPharoMorphicConfiguration 507 1 16 0.00 16.00
SpStyleVariableReset 231 1 16 0.00 16.00
SpBindings 81 1 16 0.00 16.00
SpFocusReceivedEventDefinition 64 1 16 0.00 16.00
SpToolbarItemPositionLeft 64 1 16 0.00 16.00
SpPopoverPositionRight 63 1 16 0.00 16.00
SpPopoverPositionBottom 63 1 16 0.00 16.00
SpLayoutConstraints 191 1 16 0.00 16.00
SpLayoutWidgetAlignmentCenter 60 1 16 0.00 16.00
SpKeyUpEventDefinition 64 1 16 0.00 16.00
SpToolbarDisplayModeIconAndLabel 271 1 16 0.00 16.00
SpMouseUpEventDefinition 65 1 16 0.00 16.00
SDL_Texture 1061 1 16 0.00 16.00
GlobalIdentifierPersistenceChecker 109 1 16 0.00 16.00
OSWindowMorphicEventHandler 4434 1 16 0.00 16.00
MacOSResolver 863 1 16 0.00 16.00
SDL_Surface 3141 1 16 0.00 16.00
SystemResolver 1146 1 16 0.00 16.00
SDL_Window 3099 1 16 0.00 16.00
MacStore 270 1 16 0.00 16.00
SpLayoutDirectionVertical 461 1 16 0.00 16.00
SDL_Event 516 1 16 0.00 16.00
MCInstanceVariableDefinition 114 1 16 0.00 16.00
SpLayoutDirectionHorizontal 461 1 16 0.00 16.00
SDL_Renderer 2329 1 16 0.00 16.00
ClyClosedBrowserCursor 355 1 16 0.00 16.00
ClyBrowseBreakpointsCommand 516 1 16 0.00 16.00
IceMetacelloLoadSessionContext 0 1 16 0.00 16.00
ReClassNotReferencedRule 624 1 16 0.00 16.00
ReClassNotCategorizedRule 719 1 16 0.00 16.00
ReClassNameInSelectorRule 948 1 16 0.00 16.00
ReClassVariableCapitalizationRule 511 1 16 0.00 16.00
ReThemeAccessRule 487 1 16 0.00 16.00
ReClassVariableNeitherReadNorWrittenRule 427 1 16 0.00 16.00
ReAddRemoveDependentsRule 473 1 16 0.00 16.00
ReEquivalentSuperclassMethodsRule 698 1 16 0.00 16.00
ReDefinesEqualNotHashRule 412 1 16 0.00 16.00
ReDefineEntityComplianceCheckRule 714 1 16 0.00 16.00
RePackageManifestShouldBePackagedInManifestTagRule 667 1 16 0.00 16.00
ReCollectionCopyEmptyRule 513 1 16 0.00 16.00
ReReturnMethodRule 408 1 16 0.00 16.00
ReDefineBasicCheckRule 455 1 16 0.00 16.00
UnixEnvironment 2207 1 16 0.00 16.00
CairoBackendCache 732 1 16 0.00 16.00
RSCairoMetricsProvider 138 1 16 0.00 16.00
RSDirectLayoutTranslator 117 1 16 0.00 16.00
CairoLibrary 427 1 16 0.00 16.00
ReCriticEngine 848 1 16 0.00 16.00
RSDraggable 136 1 16 0.00 16.00
ReRuleManager 3418 1 16 0.00 16.00
ReNoNilAssignationInInitializeRule 465 1 16 0.00 16.00
ReInspectorPresentationsNonlazyCodeRule 483 1 16 0.00 16.00
ReInspectorPresentationsNonBlockSetupRule 479 1 16 0.00 16.00
ReNoPrintStringInPrintOnRule 725 1 16 0.00 16.00
ClyProjectManagerRegistry 471 1 16 0.00 16.00
ClyBackgroundProcessingTag 0 1 16 0.00 16.00
ClyInstantEnvironmentUpdateStrategy 116 1 16 0.00 16.00
ReExcessiveArgumentsRule 649 1 16 0.00 16.00
IdentityTransform 1111 1 16 0.00 16.00
Author 2358 1 16 0.00 16.00
ZnConnectionTimeout 0 1 16 0.00 16.00
BorderStyle 3389 1 16 0.00 16.00
ZnDefaultCharacterEncoder 70 1 16 0.00 16.00
DefaultExternalDropHandler 572 1 16 0.00 16.00
ZnSignalProgress 70 1 16 0.00 16.00
ShortIntegerArray 1898 1 16 0.00 16.00
FreeTypeSubPixelAntiAliasedGlyphRenderer 2065 1 16 0.00 16.00
MorphicRenderLoop 238 1 16 0.00 16.00
UIManagerSessionHandler 431 1 16 0.00 16.00
MorphicEventDispatcher 1966 1 16 0.00 16.00
ZnMaximumNumberOfDictionaryEntries 61 1 16 0.00 16.00
FLPharo7Platform 571 1 16 0.00 16.00
LogicalFontManager 1003 1 16 0.00 16.00
DefaultExecutionEnvironment 470 1 16 0.00 16.00
CurrentExecutionEnvironment 521 1 16 0.00 16.00
ChangesLog 1689 1 16 0.00 16.00
VirtualMachine 10306 1 16 0.00 16.00
False 876 1 16 0.00 16.00
EmptyLayout 880 1 16 0.00 16.00
True 907 1 16 0.00 16.00
DelayMicrosecondTicker 429 1 16 0.00 16.00
PharoFilesOpener 2716 1 16 0.00 16.00
UnresolvedVariable 743 1 16 0.00 16.00
CollectionElement 543 1 16 0.00 16.00
LayoutEmptyScope 626 1 16 0.00 16.00
FT2Library 1283 1 16 0.00 16.00
CurrentJob 0 1 16 0.00 16.00
ReExcessiveInheritanceRule 598 1 16 0.00 16.00
StDebuggerSpecSelector 979 1 16 0.00 16.00
LGitLibrary 2756 1 16 0.00 16.00
EpPlatform 191 1 16 0.00 16.00
TKTServiceManager 498 1 16 0.00 16.00
KMShortcutHandler 63 1 16 0.00 16.00
IceNoCommit 1466 1 16 0.00 16.00
OmCurrentGlobalName 0 1 16 0.00 16.00
LocalTimeZone 430 1 16 0.00 16.00
FFIMethodRegistry 1069 1 16 0.00 16.00
MacOSXPlatform 298 1 16 0.00 16.00
OmNullReference 425 1 16 0.00 16.00
IceUnbornProject 190 1 16 0.00 16.00
KMPragmaKeymapBuilder 1311 1 16 0.00 16.00
NullSoundTheme 135 1 16 0.00 16.00
OldFFIBackend 817 1 16 0.00 16.00
ReSystemAnnouncer 396 1 16 0.00 16.00
RFReflectivityASTCacheStrategy 114 1 16 0.00 16.00
FFI_x86_64_SystemV 390 1 16 0.00 16.00
DefaultSortFunction 125 1 16 0.00 16.00
FFIExternalResourceManager 641 1 16 0.00 16.00
NullAnnotationContext 120 1 16 0.00 16.00
LibC 1672 1 16 0.00 16.00
GLMWestDirection 271 1 16 0.00 16.00
GLMSouthDirection 262 1 16 0.00 16.00
GLMNorthDirection 271 1 16 0.00 16.00
OmRandomSuffixStrategy 70 1 16 0.00 16.00
GLMNullLogger 0 1 16 0.00 16.00
FT2FFILibrary 5320 1 16 0.00 16.00
GLMEastDirection 258 1 16 0.00 16.00
UndefinedObject 4547 1 16 0.00 16.00
ReEmptyExceptionHandlerRule 609 1 16 0.00 16.00
ReDetectContainsRule 391 1 16 0.00 16.00
ReConsistencyCheckRule 379 1 16 0.00 16.00
ReFileBlocksRule 558 1 16 0.00 16.00
ReCollectionMessagesToExternalObjectRule 728 1 16 0.00 16.00
ReFloatEqualityComparisonRule 459 1 16 0.00 16.00
ReCollectionProtocolRule 382 1 16 0.00 16.00
ReSearchingLiteralRule 775 1 16 0.00 16.00
ReReturnsIfTrueRule 388 1 16 0.00 16.00
ReReturnInEnsureRule 456 1 16 0.00 16.00
ReBooleanPrecedenceRule 449 1 16 0.00 16.00
ReModifiesCollectionRule 721 1 16 0.00 16.00
ReCollectionAtCollectionSizeRule 409 1 16 0.00 16.00
RePlatformDependentUserInteractionRule 601 1 16 0.00 16.00
ReSizeCheckRule 584 1 16 0.00 16.00
SendsDeprecatedMethodToGlobalRule 504 1 16 0.00 16.00
FloatReferencesRule 561 1 16 0.00 16.00
ReYourselfNotUsedRule 385 1 16 0.00 16.00
ReProperMethodProtocolNameForConvertingRule 107 1 16 0.00 16.00
ReUsesAddRule 383 1 16 0.00 16.00
ReProperMethodProtocolNameForInstanceCreationRule 118 1 16 0.00 16.00
ReUsesWorldGlobalRule 424 1 16 0.00 16.00
ReAssignmentInBlockRule 393 1 16 0.00 16.00
ReAnySatisfyRule 556 1 16 0.00 16.00
ReGuardingClauseRule 897 1 16 0.00 16.00
ReAssignmentWithoutEffectRule 422 1 16 0.00 16.00
ReProperMethodProtocolNameForUtilitiesRule 106 1 16 0.00 16.00
ReStringConcatenationRule 644 1 16 0.00 16.00
ReEndTrueFalseRule 747 1 16 0.00 16.00
ReUnnecessaryAssignmentRule 462 1 16 0.00 16.00
ReGuardClauseRule 960 1 16 0.00 16.00
ReEqualNilRule 536 1 16 0.00 16.00
ReDoNotSendSuperInitializeInClassSideRule 580 1 16 0.00 16.00
ReIfNotNilDoRule 729 1 16 0.00 16.00
ReDeprecateWithFirstCharacterDownshiftedRule 452 1 16 0.00 16.00
ReIsNilAndConditionalRule 1062 1 16 0.00 16.00
ReDetectIfNoneRule 1314 1 16 0.00 16.00
ReShouldntRaiseErrorRule 637 1 16 0.00 16.00
ReRemoveAssignmentWithoutEffectRule 522 1 16 0.00 16.00
ReNotEliminationRule 2202 1 16 0.00 16.00
ReCascadedNextPutAllsRule 735 1 16 0.00 16.00
ReKeysDoRule 641 1 16 0.00 16.00
ReCodeCruftLeftInMethodsRule 1628 1 16 0.00 16.00
ReMinMaxRule 1923 1 16 0.00 16.00
ReUndeclaredVariableRule 404 1 16 0.00 16.00
ReUnoptimizedAndOrRule 386 1 16 0.00 16.00
ReUnconditionalRecursionRule 590 1 16 0.00 16.00
ReToDoWithIncrementRule 517 1 16 0.00 16.00
ReUnoptimizedToDoRule 370 1 16 0.00 16.00
ReToDoCollectRule 361 1 16 0.00 16.00
ReWhileTrueRule 501 1 16 0.00 16.00
ReToDoRule 609 1 16 0.00 16.00
ReAtIfAbsentRule 910 1 16 0.00 16.00
ReAssignmentInIfTrueRule 855 1 16 0.00 16.00
ReAsOrderedCollectionNotNeededRule 387 1 16 0.00 16.00
ReBetweenAndRule 1186 1 16 0.00 16.00
ReAllAnyNoneSatisfyRule 1720 1 16 0.00 16.00
ReSuperSendsNewRule 427 1 16 0.00 16.00
ReAsClassRule 616 1 16 0.00 16.00
ReSmalltalkGlobalsRule 944 1 16 0.00 16.00
ReSelfSentNotImplementedRule 796 1 16 0.00 16.00
ReReturnsBooleanAndOtherRule 720 1 16 0.00 16.00
ReRefersToClassRule 633 1 16 0.00 16.00
ReSendsDifferentSuperRule 528 1 16 0.00 16.00
ReNoClassCommentRule 614 1 16 0.00 16.00
ReSendsMethodDictRule 769 1 16 0.00 16.00
ReOverridesSpecialMessageRule 1147 1 16 0.00 16.00
ReTestCaseShouldNotUseInitializeRule 347 1 16 0.00 16.00
ReTempsReadBeforeWrittenRule 418 1 16 0.00 16.00
ReTempVarOverridesInstVarRule 642 1 16 0.00 16.00
ReMissingSuperSendsRule 669 1 16 0.00 16.00
ReSentNotImplementedRule 726 1 16 0.00 16.00
ReMultiplePeriodsTerminatingStatementRule 624 1 16 0.00 16.00
ReSubclassResponsibilityNotDefinedRule 670 1 16 0.00 16.00
ReUnaryAccessingMethodWithoutReturnRule 537 1 16 0.00 16.00
ReInstVarInSubclassesRule 812 1 16 0.00 16.00
ReInconsistentMethodClassificationRule 915 1 16 0.00 16.00
ReGlobalVariablesUsageRule 3538 1 16 0.00 16.00
ReInstanceVariableCapitalizationRule 461 1 16 0.00 16.00
ReExcessiveVariablesRule 718 1 16 0.00 16.00
ReIvarNeitherReadNorWrittenRule 430 1 16 0.00 16.00
ReExplicitRequirementMethodsRule 503 1 16 0.00 16.00
ReMethodSourceContainsLinefeedsRule 486 1 16 0.00 16.00
ReMethodHasSyntaxErrorRule 425 1 16 0.00 16.00
ReLongMethodsRule 1583 1 16 0.00 16.00
ReMissingSubclassResponsibilityRule 513 1 16 0.00 16.00
ReJustSendsSuperRule 690 1 16 0.00 16.00
ReUnclassifiedMethodsRule 380 1 16 0.00 16.00
ReLocalMethodsSameThanTraitRule 461 1 16 0.00 16.00
ReExcessiveMethodsRule 584 1 16 0.00 16.00
ReLiteralArrayContainsCommaRule 439 1 16 0.00 16.00
ReLiteralArrayCharactersRule 388 1 16 0.00 16.00
ReExtraBlockRule 573 1 16 0.00 16.00
ReLiteralArrayContainsSuspiciousTrueFalseOrNilRule 486 1 16 0.00 16.00
ReEqualNotUsedRule 426 1 16 0.00 16.00
RePrecedenceRule 441 1 16 0.00 16.00
ReEqualsTrueRule 485 1 16 0.00 16.00
ReTemporaryVariableCapitalizationRule 478 1 16 0.00 16.00
ReTemporaryNeitherReadNorWrittenRule 312 1 16 0.00 16.00
ReSuperWithoutSend 320 1 16 0.00 16.00
ReCollectSelectNotUsedRule 414 1 16 0.00 16.00
ReReferencesObsoleteClassRule 424 1 16 0.00 16.00
ReDeadBlockRule 596 1 16 0.00 16.00
ReSendsUnknownMessageToGlobalRule 490 1 16 0.00 16.00
ReThreeElementPointRule 579 1 16 0.00 16.00
ReVariableReferencedOnceRule 495 1 16 0.00 16.00
ReVariableAssignedLiteralRule 426 1 16 0.00 16.00
ReUtilityMethodsRule 590 1 16 0.00 16.00
OverridesDeprecatedMethodRule 417 1 16 0.00 16.00
ReUnpackagedCodeRule 445 1 16 0.00 16.00
PharoBootstrapRule 998 1 16 0.00 16.00
ReUsesTrueRule 472 1 16 0.00 16.00
ReTestClassNotInPackageWithTestEndingNameRule 3621 1 16 0.00 16.00
ReTestClassNameShouldNotEndWithTests 3598 1 16 0.00 16.00
ReTestClassNameShouldEndWithTestRule 3583 1 16 0.00 16.00
ReBadMessageRule 694 1 16 0.00 16.00
ReShouldSendSuperSetUpAsFirstMessage 3609 1 16 0.00 16.00
ReUncommonMessageSendRule 496 1 16 0.00 16.00
ReShouldSendSuperTearDownAsLastMessage 3614 1 16 0.00 16.00
Total 2324467 1021155 7770101698.80000000000001 16.00
ReThemeAPIUpdateRule 493 1 16 0.00 16.00
ReTestClassNameShouldEndWithTestRule 3583 1 16 0.00 16.00
ReShouldSendSuperTearDownAsLastMessage 3614 1 16 0.00 16.00
ReTestClassNameShouldNotEndWithTests 3598 1 16 0.00 16.00
Total 2342011 1021078 7769916898.80000000000001
> On 23 Dec 2020, at 18:27, Dario Romano Trussardi <dario.trussardi65(a)gmail.com> wrote:
>
> Ciao,
>
>
>> Hello
>>
>>
>> did you try the SpaceTally to get more information?
>
> yes, but it's not that I have clarified the situationâ¦.
>
> Here is what was found by: WASpaceStatus
>
>
> Class code space # instances inst space percent
> Array 4280 572944 74716632 31.80 %
> ByteString 2942 359040 32288104 13.80 %
> CompiledMethod 25860 152506 14457352 6.20 %
> Association 1583 486570 11677680 5.00 %
> WeakArray 1840 75151 9605160 4.10 %
> ByteArray 14932 1066 9317528 4.00 %
> Bitmap 4637 9794 8178584 3.50 %
> WeakFinalizerItem 922 113763 4550520 1.90 %
> ByteSymbol 1920 117402 4019072 1.70 %
> MethodDictionary 3460 24188 3978168 1.70 %
> WeakKeyAssociation 1404 114080 2737920 1.20 %
> Point 10095 112123 2690952 1.10 %
> OrderedCollection 7202 77766 2488512 1.10 %
> IdentitySet 408 99525 2388600 1.00 %
> WeakOrderedCollection 61 69063 2210016 0.90 %
> OmReference 1018 91812 2203488 0.90 %
> MorphExtension 4141 15672 2006016 0.90 %
> ExternalAddress 4195 113064 1809024 0.80 %
> RGMethodDefinition 10471 27318 1748352 0.70 %
> Dictionary 10055 71603 1718472 0.70 %
> DateAndTime 16976 38843 1553720 0.70 %
> IdentityDictionary 381 54273 1302552 0.60 %
> Set 3439 53877 1293048 0.60 %
> ScaledDecimal 4318 36765 1176480 0.50 %
> MCMethodDefinition 5085 17919 1146816 0.50 %
> Protocol 3226 45742 1097808 0.50 %
> Context 29456 16704 1074488 0.50 %
> Duration 6626 42444 1018656 0.40 %
> BlockClosure 14186 30815 1006304 0.40 %
> ClassOrganization 5502 22422 896880 0.40 %
> MorphEventSubscription 1207 22256 890240 0.40 %
> Rectangle 12732 36139 867336 0.40 %
> TableLayoutProperties 1626 5631 765816 0.30 %
> RBMessageNode 8768 11663 746432 0.30 %
> OmEntry 707 30681 736344 0.30 %
> AllProtocol 689 22422 717504 0.30 %
> SpValueHolder 857 22005 704160 0.30 %
> MethodChangeRecord 431 28325 679800 0.30 %
> Metaclass 6486 10340 579040 0.20 %
> InstanceVariableSlot 971 14344 573760 0.20 %
> ProtocolOrganizer 3018 22422 538128 0.20 %
> FixedLayout 271 22359 536616 0.20 %
> MessageSend 2647 16721 535072 0.20 %
>
> I noticed that the saved image is now always the size of: 280245832
>
> Strange â¦.?
>
> Thanks,
>
> Dario
>
>>
>> I'm responsible to help getting information about system space usage. The information I compute is represented by a spaceTallyItem
>>
>> try something like:
>>
>> ((SpaceTally new spaceTally: (Array with: TextMorph with: Point))
>> asSortedCollection: [:a :b | a spaceForInstances > b spaceForInstances])
>>
>> SpaceTally new systemWideSpaceTally
>>
>>
>> This class has been created from a part of SystemDictionary. It still deserves a nice
>> clean, such as using object instead of array having 4 slots.
>>
>> sd-20 June 2003
>>
>> Stef
>>
>>
>>> On 23 Dec 2020, at 14:01, Dario Romano Trussardi <dario.trussardi65(a)gmail.com <mailto:dario.trussardi65@gmail.com>> wrote:
>>>
>>> Ciao,
>>>
>>> I am developing a seaside based application in pharo
>>>
>>> Pharo 8.0.0
>>> Build information: Pharo-8.0.0+build.1141.sha.1b7a8d8203fce2a57794451f555bba4222614081 (64 Bit)
>>>
>>> Seaside version 3.4.3
>>> Grease Version 1.6.1
>>> Iceberg 1.6.7
>>>
>>> The Pharo image size increases continuously and now we are at:
>>>
>>> 15213731 Dec 23 13:20 Pharo80041-201223D.changes
>>> 280245832 Dec 23 13:20 Pharo80041-201223D.image
>>>
>>>
>>> The system begins to be unstable.
>>>
>>> Until a few days ago,
>>> closing all the System Browser windows and saving the image the system resized itself.
>>>
>>> But now this trick doesn't work either.
>>>
>>> Any suggestions on how to solve, manage this question?
>>>
>>> Thanks,
>>>
>>> Dario
>>
>> --------------------------------------------
>> Stéphane Ducasse
>> http://stephane.ducasse.free.fr <http://stephane.ducasse.free.fr/> / http://www.pharo.org <http://www.pharo.org/>
>> 03 59 35 87 52
>> Assistant: Aurore Dalle
>> 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
>>
>
--------------------------------------------
Stéphane Ducasse
http://stephane.ducasse.free.fr / http://www.pharo.org
03 59 35 87 52
Assistant: Aurore Dalle
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
Dec. 23, 2020
Re: Pharo image size increases continuously
by Dario Romano Trussardi
Ciao,
> Hello
>
>
> did you try the SpaceTally to get more information?
yes, but it's not that I have clarified the situationâ¦.
Here is what was found by: WASpaceStatus
Class code space # instances inst space percent
Array 4280 572944 74716632 31.80 %
ByteString 2942 359040 32288104 13.80 %
CompiledMethod 25860 152506 14457352 6.20 %
Association 1583 486570 11677680 5.00 %
WeakArray 1840 75151 9605160 4.10 %
ByteArray 14932 1066 9317528 4.00 %
Bitmap 4637 9794 8178584 3.50 %
WeakFinalizerItem 922 113763 4550520 1.90 %
ByteSymbol 1920 117402 4019072 1.70 %
MethodDictionary 3460 24188 3978168 1.70 %
WeakKeyAssociation 1404 114080 2737920 1.20 %
Point 10095 112123 2690952 1.10 %
OrderedCollection 7202 77766 2488512 1.10 %
IdentitySet 408 99525 2388600 1.00 %
WeakOrderedCollection 61 69063 2210016 0.90 %
OmReference 1018 91812 2203488 0.90 %
MorphExtension 4141 15672 2006016 0.90 %
ExternalAddress 4195 113064 1809024 0.80 %
RGMethodDefinition 10471 27318 1748352 0.70 %
Dictionary 10055 71603 1718472 0.70 %
DateAndTime 16976 38843 1553720 0.70 %
IdentityDictionary 381 54273 1302552 0.60 %
Set 3439 53877 1293048 0.60 %
ScaledDecimal 4318 36765 1176480 0.50 %
MCMethodDefinition 5085 17919 1146816 0.50 %
Protocol 3226 45742 1097808 0.50 %
Context 29456 16704 1074488 0.50 %
Duration 6626 42444 1018656 0.40 %
BlockClosure 14186 30815 1006304 0.40 %
ClassOrganization 5502 22422 896880 0.40 %
MorphEventSubscription 1207 22256 890240 0.40 %
Rectangle 12732 36139 867336 0.40 %
TableLayoutProperties 1626 5631 765816 0.30 %
RBMessageNode 8768 11663 746432 0.30 %
OmEntry 707 30681 736344 0.30 %
AllProtocol 689 22422 717504 0.30 %
SpValueHolder 857 22005 704160 0.30 %
MethodChangeRecord 431 28325 679800 0.30 %
Metaclass 6486 10340 579040 0.20 %
InstanceVariableSlot 971 14344 573760 0.20 %
ProtocolOrganizer 3018 22422 538128 0.20 %
FixedLayout 271 22359 536616 0.20 %
MessageSend 2647 16721 535072 0.20 %
I noticed that the saved image is now always the size of: 280245832
Strange â¦.?
Thanks,
Dario
>
> I'm responsible to help getting information about system space usage. The information I compute is represented by a spaceTallyItem
>
> try something like:
>
> ((SpaceTally new spaceTally: (Array with: TextMorph with: Point))
> asSortedCollection: [:a :b | a spaceForInstances > b spaceForInstances])
>
> SpaceTally new systemWideSpaceTally
>
>
> This class has been created from a part of SystemDictionary. It still deserves a nice
> clean, such as using object instead of array having 4 slots.
>
> sd-20 June 2003
>
> Stef
>
>
>> On 23 Dec 2020, at 14:01, Dario Romano Trussardi <dario.trussardi65(a)gmail.com <mailto:dario.trussardi65@gmail.com>> wrote:
>>
>> Ciao,
>>
>> I am developing a seaside based application in pharo
>>
>> Pharo 8.0.0
>> Build information: Pharo-8.0.0+build.1141.sha.1b7a8d8203fce2a57794451f555bba4222614081 (64 Bit)
>>
>> Seaside version 3.4.3
>> Grease Version 1.6.1
>> Iceberg 1.6.7
>>
>> The Pharo image size increases continuously and now we are at:
>>
>> 15213731 Dec 23 13:20 Pharo80041-201223D.changes
>> 280245832 Dec 23 13:20 Pharo80041-201223D.image
>>
>>
>> The system begins to be unstable.
>>
>> Until a few days ago,
>> closing all the System Browser windows and saving the image the system resized itself.
>>
>> But now this trick doesn't work either.
>>
>> Any suggestions on how to solve, manage this question?
>>
>> Thanks,
>>
>> Dario
>
> --------------------------------------------
> Stéphane Ducasse
> http://stephane.ducasse.free.fr <http://stephane.ducasse.free.fr/> / http://www.pharo.org <http://www.pharo.org/>
> 03 59 35 87 52
> Assistant: Aurore Dalle
> 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
>
Dec. 23, 2020
Re: About BitBlt for non graphical problems
by Stéphane Ducasse
I do not have your answer but I see that you are having fun⦠:)
Continue.
Iâm playing with VM implementation for the exact same reason :)
> On 21 Dec 2020, at 10:56, Rafael Luque <rafael.luque.leiva(a)gmail.com> wrote:
>
> Hi all,
>
> I remember to read in the Blue Book about a Game Of Life solution based on the BitBlt operation. I wondered if it was only a smart and elegant demonstration or it may be a useful tool in the case you need parallelism, even in non-graphical contexts. I've never seen BitBlt used to solve non-graphical problems, but I don't have experience with BitBlt in my everyday work, so maybe I'm biased.
>
> I've found a paper by Leo J. Guibas and Jorge Stolfi (https://www.cs.tufts.edu/~nr/cs257/archive/leo-guibas/language-bitmap.pdf <https://www.cs.tufts.edu/~nr/cs257/archive/leo-guibas/language-bitmap.pdf>) about a "calculus of bitmap operations" including an specific language called MUMBLE, but I suspect it is not a common use case.
>
> Anyway, I've experimented with this option to solve the Advent of Code's Day 3 challenge. The puzzle consists of counting the number of trees you will encounter traversing a given map with open squares and trees, starting at the top-left corner and following a certain slope ((https://adventofcode.com/2020/day/3 <https://adventofcode.com/2020/day/3>).
>
> After implementing the straight-forward and iterative solution, I tried using Form instances representing the map and the slope and a BitBlt operation for ANDing both forms in order to leave only bits where you encounter a tree (see attached image). In this alternative solution I like how the iteration is replaced by only one "BitBlt>>copyBits" operation. Additionally, I understand that BitBlt operations are native primitives that could be hardware optimized.
>
> However, I didn't know how to count the resulting bits without recurring again to the iteration of the Form's bits. This is my current implementation:
>
> AoCBitBltForestMap>>countTreesOnPath
> | mapForm |
> mapForm := self form.
> (BitBlt toForm: mapForm)
> copyForm: self slopeMaskForm
> to: 0 @ 0
> rule: Form and.
>
> ^ mapForm bits count: [ :bit |
> (Color colorFromPixelValue: bit depth: 32) green
> closeTo: 1
> precision: 0.1 ]
>
> You can find all the sources at the following repository: https://github.com/luque/AdventOfCode2020 <https://github.com/luque/AdventOfCode2020>
>
> Any comments about BitBlt use cases or this specific puzzle will be of interest for me.
>
> Thank you.
>
>
>
>
> <Captura de pantalla 2020-12-21 a las 10.50.26.png>
--------------------------------------------
Stéphane Ducasse
http://stephane.ducasse.free.fr / http://www.pharo.org
03 59 35 87 52
Assistant: Aurore Dalle
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
Dec. 23, 2020
Re: Pharo image size increases continuously
by Stéphane Ducasse
Hello
did you try the SpaceTally to get more information?
I'm responsible to help getting information about system space usage. The information I compute is represented by a spaceTallyItem
try something like:
((SpaceTally new spaceTally: (Array with: TextMorph with: Point))
asSortedCollection: [:a :b | a spaceForInstances > b spaceForInstances])
SpaceTally new systemWideSpaceTally
This class has been created from a part of SystemDictionary. It still deserves a nice
clean, such as using object instead of array having 4 slots.
sd-20 June 2003
Stef
> On 23 Dec 2020, at 14:01, Dario Romano Trussardi <dario.trussardi65(a)gmail.com> wrote:
>
> Ciao,
>
> I am developing a seaside based application in pharo
>
> Pharo 8.0.0
> Build information: Pharo-8.0.0+build.1141.sha.1b7a8d8203fce2a57794451f555bba4222614081 (64 Bit)
>
> Seaside version 3.4.3
> Grease Version 1.6.1
> Iceberg 1.6.7
>
> The Pharo image size increases continuously and now we are at:
>
> 15213731 Dec 23 13:20 Pharo80041-201223D.changes
> 280245832 Dec 23 13:20 Pharo80041-201223D.image
>
>
> The system begins to be unstable.
>
> Until a few days ago,
> closing all the System Browser windows and saving the image the system resized itself.
>
> But now this trick doesn't work either.
>
> Any suggestions on how to solve, manage this question?
>
> Thanks,
>
> Dario
--------------------------------------------
Stéphane Ducasse
http://stephane.ducasse.free.fr / http://www.pharo.org
03 59 35 87 52
Assistant: Aurore Dalle
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
Dec. 23, 2020
Re: subclassResponsibility
by Jimmie Houchin
I didn't thinks so, but was not sure.
I have not done much with Abstract classes. I will have to think about
that and its design implications.
Thanks for the suggestion.
Jimmie
On 12/22/20 8:01 PM, Richard Sargent wrote:
> Is there a way force allSubclasses to implement the method?
>
> No. Pretty much, you need to avoid subclassing concrete classes.
> i.e. if A has subclasses B and C, refactor to create an abstract A' and move
> A to be a leaf subclass of A'.
>
> -----Original Message-----
> From: Jimmie Houchin [mailto:jlhouchin@gmail.com]
> Sent: December 22, 2020 15:08
> To: Any question about pharo is welcome
> Subject: [Pharo-users] subclassResponsibility
>
> Hello,
>
> I have created a class which will have many subclasses some of which will
> have subclasses of their own.
>
> I want every single class to implement a class method #shortName which will
> provide a short string as a human readable short identifier to the object.
>
> I have in the highest superClass
>
>
> shortName
>
> Â Â Â self subclassResponsibility
>
>
> But the moment I implement it in a subclass which has subclasses. Those
> subclasses are now using their closest superClasses implementation.
>
> Is there a way force allSubclasses to implement the method?
>
>
> Thanks.
>
>
> Jimmie
Dec. 23, 2020
Pharo image size increases continuously
by Dario Romano Trussardi
Ciao,
I am developing a seaside based application in pharo
Pharo 8.0.0
Build information: Pharo-8.0.0+build.1141.sha.1b7a8d8203fce2a57794451f555bba4222614081 (64 Bit)
Seaside version 3.4.3
Grease Version 1.6.1
Iceberg 1.6.7
The Pharo image size increases continuously and now we are at:
15213731 Dec 23 13:20 Pharo80041-201223D.changes
280245832 Dec 23 13:20 Pharo80041-201223D.image
The system begins to be unstable.
Until a few days ago,
closing all the System Browser windows and saving the image the system resized itself.
But now this trick doesn't work either.
Any suggestions on how to solve, manage this question?
Thanks,
Dario
Dec. 23, 2020
Re: subclassResponsibility
by Richard Sargent
Is there a way force allSubclasses to implement the method?
No. Pretty much, you need to avoid subclassing concrete classes.
i.e. if A has subclasses B and C, refactor to create an abstract A' and move
A to be a leaf subclass of A'.
-----Original Message-----
From: Jimmie Houchin [mailto:jlhouchin@gmail.com]
Sent: December 22, 2020 15:08
To: Any question about pharo is welcome
Subject: [Pharo-users] subclassResponsibility
Hello,
I have created a class which will have many subclasses some of which will
have subclasses of their own.
I want every single class to implement a class method #shortName which will
provide a short string as a human readable short identifier to the object.
I have in the highest superClass
shortName
   self subclassResponsibility
But the moment I implement it in a subclass which has subclasses. Those
subclasses are now using their closest superClasses implementation.
Is there a way force allSubclasses to implement the method?
Thanks.
Jimmie
Dec. 23, 2020
Re: [exercism bowling challenge] Is there a better way to do this
by Richard O'Keefe
Yes, there is a better way to do it.
I found this particular problem at the Programming Praxis
web site, which took it from
http://butunclebob.com/ArticleS.UncleBob.TheBowlingGameKata
This is a superb example of how an informal specification
and a set of test cases can diverge.
The specification says to score a bowling game according
to a particular set of rules. Here is exactly the algorithm
called for, written in the functional programming language
Haskell:
score (10:b:c:xs) = b+10+c+(if null xs then 0 else score (b:c:xs))
score (a:b:c:xs) | a+b = 10 = 10+c+(if null xs then 0 else score (c:xs))
score (a:b:xs) = a+b+(if null xs then 0 else score xs)
That's *it*. Explanation, (10:b:c:xs) means "a sequence starting
with 10, followed by something (call it b), followed by something
(call it c), followed by the rest of the sequence (call that xs).
This is actually strictly statically typed as well.
And it shows the while the data are *provided* from first to
last, the score is most easily *computed* from last to first.
Let's remind ourselves of Kent Beck's four rules of good code:
1. Runs all the tests
2. Contains no duplication
3. Expresses all the important design intentions
4. Minimizes entities (e.g. classes and methods).
Hence the Extreme Programming slogan
"You Ain't Gonna Need It."
Now we come to the divergence between the specification
(which calls for #roll: and #score methods)
and the tests (which call for a #scoreAfterRolling: method
and then in test 15 calls for #scoreRolling:after:).
There are two kind of test case for this exercise.
+ check that the result is correct in a good case
- check that the right error is raised given bad data.
Now the second kind go far beyond the informal
specification and require not only that certain errors
be detected but *when* they are detected.
And this is something you have to bear in mind when
writing down your test cases: you have to prevent ideas
you may have about *how* the code might work creeping into
your test cases and forcing the code to work that way.
Most of my code, and most of the trouble I had writing the
code, was about these "does it report the right error at
the right time and oh yeah I made up these 'right' definitions
with no warrant in the customer's requirements" test cases.
I mean, seriously, NO methods in common between the specifications
and tests?
Returning to Kent Beck's maxims. How many classes do we need?
The test code calls for ONE class, "Bowling".
There are no tests for any Frame pr Roll classes,
and no need for any.
How many methods does it need?
The test code checks #scoreAfterRolling and #scoreRolling:after:
There are not tests for any others.
What state should the instances of the class hold?
There is hint
You will need to store some game state.
but that applies to the #roll:/#score interface,
NOT to the interface that's actually tested.
Use as many classes and methods as you NEED,
but remember that you need a lot fewer than you think,
On Mon, 21 Dec 2020 at 23:05, r.wobben--- via Pharo-users <
pharo-users(a)lists.pharo.org> wrote:
> Hello,
>
>
> To come back at this one.
>
> I made a class Bowling and a class Frame which contains two instance
> variables named firstThrow and secondThrow.
>
>
> but I still wonder how do I know which one to fill in.
>
> I can do ` (firstThrow nil?) ` but that feels not right.
>
>
> Is there a more idiomatic solution for this ?
>
>
> Roelof
>
>
>
Dec. 23, 2020
subclassResponsibility
by Jimmie Houchin
Hello,
I have created a class which will have many subclasses some of which
will have subclasses of their own.
I want every single class to implement a class method #shortName which
will provide a short string as a human readable short identifier to the
object.
I have in the highest superClass
shortName
   self subclassResponsibility
But the moment I implement it in a subclass which has subclasses. Those
subclasses are now using their closest superClasses implementation.
Is there a way force allSubclasses to implement the method?
Thanks.
Jimmie
Dec. 22, 2020
Re: How coverage is computed with SmalltalkCI and coverall
by Gabriel Cotelli
Just in case you don't find out, the wrapping is done in
*SCICoverageWrapper* in SmalltalkCI-Coverage-Core package.
If Pharo provides some native facility to calculate code coverage it should
be pretty easy to adapt smalltalkCI to use it (if it will work at the
method level). In case the coverage strategy is more focused like branch or
statement based it will require a bit of change on smaltalkCI reporting
support.
On Sun, Dec 20, 2020 at 3:52 PM Stéphane Ducasse <stephane.ducasse(a)inria.fr>
wrote:
> Ok I could not see the MW or methods as object use but now I get it.
> So the granularity is already good.
>
> I would really like the support for coverage in Pharo ecosystem and not
> only on build system.
> I would really like that we push tests to the next level :).
>
> S
>
> On 20 Dec 2020, at 19:08, Benoît Verhaeghe <badetitou(a)gmail.com> wrote:
>
> First, configuration looks for classes and packages ( look at
> .smalltalk.ston file )
> Second, you take all the methods inside the classes and packages.
> If a method is an extension ( for instance, method A of class C is under
> package P. But class C is under package P2), then select all the methods of
> the class of the method ( this logic is under discussion in two issues of
> SmallTalkCI.
>
> Third, SmallTalkCI wraps each method ( install a wrapper in the method's
> class that is called instead of the real method ).
> When a wrapper is called, marks a Boolean to true, and calls the original
> method.
>
> Finally, the coverage is the number of covered methods marked as true
> compare to the total number of covered method.
>
> ( Note : the wrapping is not done using reflectivity whereas it can be a
> good idea ? )
>
>
>
> Le dim. 20 déc. 2020 à 18:29, Stéphane Ducasse <stephane.ducasse(a)inria.fr>
> a écrit :
>
>> Thanks I could not find it.
>> I read the code and it is still unclear what is the logic. I could not
>> figure out what we get lines here.
>>
>> I would like to resurrect the AST interpreter to get some information on
>> AST level coverage.
>> What is see is that so far this is a heuristic that is used in
>> SmalltalkCI.
>>
>> S.
>>
>> On 20 Dec 2020, at 13:27, Gabriel Cotelli <g.cotelli(a)gmail.com> wrote:
>>
>> AFAIR is implemented in
>> https://github.com/hpi-swa/smalltalkCI/tree/master/repository/SmalltalkCI-P…
>> and it's superclass.
>>
>> On Sun, Dec 20, 2020, 05:44 Stéphane Ducasse <stephane.ducasse(a)inria.fr>
>> wrote:
>>
>>> Hi
>>>
>>> I would like to know exactly how the test coverage is computed.
>>> I read all the code of SmalltalkCi and I could not find it.
>>>
>>> S.
>>> --------------------------------------------
>>> Stéphane Ducasse
>>> http://stephane.ducasse.free.fr / http://www.pharo.org
>>> 03 59 35 87 52
>>> Assistant: Aurore Dalle
>>> 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
>>>
>>>
>> --------------------------------------------
>> Stéphane Ducasse
>> http://stephane.ducasse.free.fr / http://www.pharo.org
>> 03 59 35 87 52
>> Assistant: Aurore Dalle
>> 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
>>
>>
> --------------------------------------------
> Stéphane Ducasse
> http://stephane.ducasse.free.fr / http://www.pharo.org
> 03 59 35 87 52
> Assistant: Aurore Dalle
> 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
>
>
Dec. 21, 2020
Re: [exercism bowling challenge] Is there a better way to do this
by Roelof Wobben
Op 21-12-2020 om 13:56 schreef Russ Whaley:
> I had a lot of fun putting my bowling game together back when you
> first brought this up.
>
> I have a Bowling (Game) class, a Frame class, aThrow class and a
> Score(ing) class. I made the Throws a class that I put in an
> OrderedCollection - but instVars would work as well... the rest of
> your game should be oblivious to your 'underpinnings' anyway.
>
> The Bowling class controls the game and cycles through 10 frames,
> which I create then house in an OrderedCollection at the start of the
> game. Frame has a subclass called Frame10 that is instantiated for
> the 10th frame of the game.
>
> Bowling processes each Frame, starting at 1, from the collection, and
> does a runFrame (or whatever action name you want). A Frame consists
> of throws, 1, 2, or 3 - depending on the frame and the result of the
> first throw.
>
That is also the way I can work.
But I do not see how I can convert the given collection to frames
Roelof
Dec. 21, 2020
Re: [exercism bowling challenge] Is there a better way to do this
by Russ Whaley
I had a lot of fun putting my bowling game together back when you first
brought this up.
I have a Bowling (Game) class, a Frame class, aThrow class and a Score(ing)
class. I made the Throws a class that I put in an OrderedCollection - but
instVars would work as well... the rest of your game should be oblivious to
your 'underpinnings' anyway.
The Bowling class controls the game and cycles through 10 frames, which I
create then house in an OrderedCollection at the start of the game. Frame
has a subclass called Frame10 that is instantiated for the 10th frame of
the game.
Bowling processes each Frame, starting at 1, from the collection, and does
a runFrame (or whatever action name you want). A Frame consists of throws,
1, 2, or 3 - depending on the frame and the result of the first throw.
A throw returns a random number of 'knocked down pins' between 0 (gutter
ball) and the number of pins remaining in the frame (results of a previous
throw). So my Frame always knows -pinsCleared and -pinsRemaining - but it
asks the Throws what they cleared to calculate that info.
After each throw, the Score class runs through the frames to see if
anything additional can be scored...
- i.e. the first throw on frame3 would be added to the 'spare' of frame2
plus the score of frame 1 - to get the frame 2 score. But frame3 cannot
yet be scored.
Then when the frame does the 2nd throw, (as long as it's not a spare), the
3rd frame can also be scored. Scoring was certainly the most
challenging/fun part for me as there are a number of variables to
consider. Scoring would start at frame1 each time it is called and find
the first frame without a score (the running score is stored on the frame),
a frame can be asked what its score is, but it's kindof irrelevant as this
is not shown on a scorecard, and it can't be done it a vacuum... i.e. if I
have a strike or a spare in a frame, what is the frame score? You have to
get the next two throws to figure that out... so I let the Score class do
that and simply update the Frame score instVar once the calculation has
been made.
As soon as Scoreing hits a frame it cannot score, it stops and the Frame
goes on to the next throw, or if it has hit maxThrows for the frame
(frame1-9, maxThrows=2, frame10 maxThrows=3)... some folks call the third
ball a bonus ball, I decided not to.
So, when you get to frame10, we are allowed to have 3 throws if certain
conditions are met -
- your first throw is a strike, or
- your second throw is a spare
... and of course scoring is a bit different for frame10, as well.
I created a simulator with a traceCr output to show my frames and throws.
Frame 1, 8 pins
Throw 1, 6 pins
Throw 2, 2 pins
Score: 8
Frame 2, 9 pins
Throw 1, 0 pins
Throw 2, 9 pins
Score: 17
Frame 3, 7 pins
Throw 1, 5 pins
Throw 2, 2 pins
Score: 24
Frame 4, 9 pins
Throw 1, 8 pins
Throw 2, 1 pins
Score: 33
Frame 5, 5 pins
Throw 1, 3 pins
Throw 2, 2 pins
Score: 38
Frame 6, 6 pins
Throw 1, 5 pins
Throw 2, 1 pins
Score: 44
Frame 7, 9 pins
Throw 1, 4 pins
Throw 2, 5 pins
Score: 53
Frame 8, 8 pins
Throw 1, 1 pins
Throw 2, 7 pins
Score: 61
Frame 9, 3 pins
Throw 1, 3 pins
Throw 2, 0 pins
Score: 64
Frame 10, 15 pins
Throw 1, 4 pins
Throw 2, 6 pins
Throw 3, 5 pins
Score: 79
Final score: 79
Strikes: 0
Spares: 1
Gutters: 2
Timer >> 24.933ms Bowling-runTestGame
I then tried my hand at a GUI - creating a BowlingPresenter, a
ScorecardPresenter, a FramePresenter and a Frame10Presenter, resulting in...
[image: image.png]
I plan to add multi-player (or at least playing against the computer), but
until I figure out how to make the throws be specific about which physical
pins are remaining and the percentages of the next throw clearing them
(much more complex that pure random) - there's not much else I can really
do. So if anyone has direction for me on this, I'd love to try and tackle
it sometime.
Let me know if you have any questions.
Thanks,
Russ
On Mon, Dec 21, 2020 at 5:05 AM r.wobben--- via Pharo-users <
pharo-users(a)lists.pharo.org> wrote:
> Hello,
>
>
> To come back at this one.
>
> I made a class Bowling and a class Frame which contains two instance
> variables named firstThrow and secondThrow.
>
>
> but I still wonder how do I know which one to fill in.
>
> I can do ` (firstThrow nil?) ` but that feels not right.
>
>
> Is there a more idiomatic solution for this ?
>
>
> Roelof
>
>
>
--
Russ Whaley
whaley.russ(a)gmail.com
Dec. 21, 2020
[exercism bowling challenge] Is there a better way to do this
by r.wobben@home.nl
Hello,
To come back at this one.
I made a class Bowling and a class Frame which contains two instance variables named firstThrow and secondThrow.
but I still wonder how do I know which one to fill in.
I can do \` (firstThrow nil?) \` but that feels not right.
\
Is there a more idiomatic solution for this ?
Roelof
Dec. 21, 2020
About BitBlt for non graphical problems
by Rafael Luque
Hi all,
I remember to read in the Blue Book about a Game Of Life solution based on
the BitBlt operation. I wondered if it was only a smart and elegant
demonstration or it may be a useful tool in the case you need
parallelism, even in non-graphical contexts. I've never seen BitBlt used to
solve non-graphical problems, but I don't have experience with BitBlt in my
everyday work, so maybe I'm biased.
I've found a paper by Leo J. Guibas and Jorge Stolfi (
https://www.cs.tufts.edu/~nr/cs257/archive/leo-guibas/language-bitmap.pdf)
about a "calculus of bitmap operations" including an specific language
called MUMBLE, but I suspect it is not a common use case.
Anyway, I've experimented with this option to solve the Advent of Code's
Day 3 challenge. The puzzle consists of counting the number of trees you
will encounter traversing a given map with open squares and trees, starting
at the top-left corner and following a certain slope ((
https://adventofcode.com/2020/day/3)
After implementing the straight-forward and iterative solution, I tried
using Form instances representing the map and the slope and a BitBlt
operation for ANDing both forms in order to leave only bits where you
encounter a tree (see attached image). In this alternative solution I like
how the iteration is replaced by only one "BitBlt>>copyBits" operation.
Additionally, I understand that BitBlt operations are native primitives
that could be hardware optimized.
However, I didn't know how to count the resulting bits without recurring
again to the iteration of the Form's bits. This is my current
implementation:
AoCBitBltForestMap>>countTreesOnPath
| mapForm |
mapForm := self form.
(BitBlt toForm: mapForm)
copyForm: self slopeMaskForm
to: 0 @ 0
rule: Form and.
^ mapForm bits count: [ :bit |
(Color colorFromPixelValue: bit depth: 32) green
closeTo: 1
precision: 0.1 ]
You can find all the sources at the following repository:
https://github.com/luque/AdventOfCode2020
Any comments about BitBlt use cases or this specific puzzle will be of
interest for me.
Thank you.
Dec. 21, 2020
Re: How coverage is computed with SmalltalkCI and coverall
by Stéphane Ducasse
Ok I could not see the MW or methods as object use but now I get it.
So the granularity is already good.
I would really like the support for coverage in Pharo ecosystem and not only on build system.
I would really like that we push tests to the next level :).
S
> On 20 Dec 2020, at 19:08, Benoît Verhaeghe <badetitou(a)gmail.com> wrote:
>
> First, configuration looks for classes and packages ( look at .smalltalk.ston file )
> Second, you take all the methods inside the classes and packages.
> If a method is an extension ( for instance, method A of class C is under package P. But class C is under package P2), then select all the methods of the class of the method ( this logic is under discussion in two issues of SmallTalkCI.
>
> Third, SmallTalkCI wraps each method ( install a wrapper in the method's class that is called instead of the real method ).
> When a wrapper is called, marks a Boolean to true, and calls the original method.
>
> Finally, the coverage is the number of covered methods marked as true compare to the total number of covered method.
>
> ( Note : the wrapping is not done using reflectivity whereas it can be a good idea ? )
>
>
>
> Le dim. 20 déc. 2020 à 18:29, Stéphane Ducasse <stephane.ducasse(a)inria.fr <mailto:stephane.ducasse@inria.fr>> a écrit :
> Thanks I could not find it.
> I read the code and it is still unclear what is the logic. I could not figure out what we get lines here.
>
> I would like to resurrect the AST interpreter to get some information on AST level coverage.
> What is see is that so far this is a heuristic that is used in SmalltalkCI.
>
> S.
>
>> On 20 Dec 2020, at 13:27, Gabriel Cotelli <g.cotelli(a)gmail.com <mailto:g.cotelli@gmail.com>> wrote:
>>
>> AFAIR is implemented in https://github.com/hpi-swa/smalltalkCI/tree/master/repository/SmalltalkCI-P… <https://github.com/hpi-swa/smalltalkCI/tree/master/repository/SmalltalkCI-P…> and it's superclass.
>>
>> On Sun, Dec 20, 2020, 05:44 Stéphane Ducasse <stephane.ducasse(a)inria.fr <mailto:stephane.ducasse@inria.fr>> wrote:
>> Hi
>>
>> I would like to know exactly how the test coverage is computed.
>> I read all the code of SmalltalkCi and I could not find it.
>>
>> S.
>> --------------------------------------------
>> Stéphane Ducasse
>> http://stephane.ducasse.free.fr <http://stephane.ducasse.free.fr/> / http://www.pharo.org <http://www.pharo.org/>
>> 03 59 35 87 52
>> Assistant: Aurore Dalle
>> 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
>>
>
> --------------------------------------------
> Stéphane Ducasse
> http://stephane.ducasse.free.fr <http://stephane.ducasse.free.fr/> / http://www.pharo.org <http://www.pharo.org/>
> 03 59 35 87 52
> Assistant: Aurore Dalle
> 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
>
--------------------------------------------
Stéphane Ducasse
http://stephane.ducasse.free.fr / http://www.pharo.org
03 59 35 87 52
Assistant: Aurore Dalle
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
Dec. 20, 2020
Re: How coverage is computed with SmalltalkCI and coverall
by Benoît Verhaeghe
First, configuration looks for classes and packages ( look at
.smalltalk.ston file )
Second, you take all the methods inside the classes and packages.
If a method is an extension ( for instance, method A of class C is under
package P. But class C is under package P2), then select all the methods of
the class of the method ( this logic is under discussion in two issues of
SmallTalkCI.
Third, SmallTalkCI wraps each method ( install a wrapper in the method's
class that is called instead of the real method ).
When a wrapper is called, marks a Boolean to true, and calls the original
method.
Finally, the coverage is the number of covered methods marked as true
compare to the total number of covered method.
( Note : the wrapping is not done using reflectivity whereas it can be a
good idea ? )
Le dim. 20 déc. 2020 à 18:29, Stéphane Ducasse <stephane.ducasse(a)inria.fr>
a écrit :
> Thanks I could not find it.
> I read the code and it is still unclear what is the logic. I could not
> figure out what we get lines here.
>
> I would like to resurrect the AST interpreter to get some information on
> AST level coverage.
> What is see is that so far this is a heuristic that is used in
> SmalltalkCI.
>
> S.
>
> On 20 Dec 2020, at 13:27, Gabriel Cotelli <g.cotelli(a)gmail.com> wrote:
>
> AFAIR is implemented in
> https://github.com/hpi-swa/smalltalkCI/tree/master/repository/SmalltalkCI-P…
> and it's superclass.
>
> On Sun, Dec 20, 2020, 05:44 Stéphane Ducasse <stephane.ducasse(a)inria.fr>
> wrote:
>
>> Hi
>>
>> I would like to know exactly how the test coverage is computed.
>> I read all the code of SmalltalkCi and I could not find it.
>>
>> S.
>> --------------------------------------------
>> Stéphane Ducasse
>> http://stephane.ducasse.free.fr / http://www.pharo.org
>> 03 59 35 87 52
>> Assistant: Aurore Dalle
>> 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
>>
>>
> --------------------------------------------
> Stéphane Ducasse
> http://stephane.ducasse.free.fr / http://www.pharo.org
> 03 59 35 87 52
> Assistant: Aurore Dalle
> 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
>
>
Dec. 20, 2020
Re: How coverage is computed with SmalltalkCI and coverall
by Gabriel Cotelli
I think the coverage is done by method using something like method
wrappers. And the whole method is marked as covered if hit, nothing fancy
like branch or statement coverage.
On Sun, Dec 20, 2020, 14:28 Stéphane Ducasse <stephane.ducasse(a)inria.fr>
wrote:
> Thanks I could not find it.
> I read the code and it is still unclear what is the logic. I could not
> figure out what we get lines here.
>
> I would like to resurrect the AST interpreter to get some information on
> AST level coverage.
> What is see is that so far this is a heuristic that is used in
> SmalltalkCI.
>
> S.
>
> On 20 Dec 2020, at 13:27, Gabriel Cotelli <g.cotelli(a)gmail.com> wrote:
>
> AFAIR is implemented in
> https://github.com/hpi-swa/smalltalkCI/tree/master/repository/SmalltalkCI-P…
> and it's superclass.
>
> On Sun, Dec 20, 2020, 05:44 Stéphane Ducasse <stephane.ducasse(a)inria.fr>
> wrote:
>
>> Hi
>>
>> I would like to know exactly how the test coverage is computed.
>> I read all the code of SmalltalkCi and I could not find it.
>>
>> S.
>> --------------------------------------------
>> Stéphane Ducasse
>> http://stephane.ducasse.free.fr / http://www.pharo.org
>> 03 59 35 87 52
>> Assistant: Aurore Dalle
>> 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
>>
>>
> --------------------------------------------
> Stéphane Ducasse
> http://stephane.ducasse.free.fr / http://www.pharo.org
> 03 59 35 87 52
> Assistant: Aurore Dalle
> 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
>
>
Dec. 20, 2020
Re: How coverage is computed with SmalltalkCI and coverall
by Stéphane Ducasse
Thanks I could not find it.
I read the code and it is still unclear what is the logic. I could not figure out what we get lines here.
I would like to resurrect the AST interpreter to get some information on AST level coverage.
What is see is that so far this is a heuristic that is used in SmalltalkCI.
S.
> On 20 Dec 2020, at 13:27, Gabriel Cotelli <g.cotelli(a)gmail.com> wrote:
>
> AFAIR is implemented in https://github.com/hpi-swa/smalltalkCI/tree/master/repository/SmalltalkCI-P… <https://github.com/hpi-swa/smalltalkCI/tree/master/repository/SmalltalkCI-P…> and it's superclass.
>
> On Sun, Dec 20, 2020, 05:44 Stéphane Ducasse <stephane.ducasse(a)inria.fr <mailto:stephane.ducasse@inria.fr>> wrote:
> Hi
>
> I would like to know exactly how the test coverage is computed.
> I read all the code of SmalltalkCi and I could not find it.
>
> S.
> --------------------------------------------
> Stéphane Ducasse
> http://stephane.ducasse.free.fr <http://stephane.ducasse.free.fr/> / http://www.pharo.org <http://www.pharo.org/>
> 03 59 35 87 52
> Assistant: Aurore Dalle
> 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
>
--------------------------------------------
Stéphane Ducasse
http://stephane.ducasse.free.fr / http://www.pharo.org
03 59 35 87 52
Assistant: Aurore Dalle
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
Dec. 20, 2020
Re: How coverage is computed with SmalltalkCI and coverall
by Gabriel Cotelli
AFAIR is implemented in
https://github.com/hpi-swa/smalltalkCI/tree/master/repository/SmalltalkCI-P…
and it's superclass.
On Sun, Dec 20, 2020, 05:44 Stéphane Ducasse <stephane.ducasse(a)inria.fr>
wrote:
> Hi
>
> I would like to know exactly how the test coverage is computed.
> I read all the code of SmalltalkCi and I could not find it.
>
> S.
> --------------------------------------------
> Stéphane Ducasse
> http://stephane.ducasse.free.fr / http://www.pharo.org
> 03 59 35 87 52
> Assistant: Aurore Dalle
> 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
>
>
Dec. 20, 2020
How coverage is computed with SmalltalkCI and coverall
by Stéphane Ducasse
Hi
I would like to know exactly how the test coverage is computed.
I read all the code of SmalltalkCi and I could not find it.
S.
--------------------------------------------
Stéphane Ducasse
http://stephane.ducasse.free.fr / http://www.pharo.org
03 59 35 87 52
Assistant: Aurore Dalle
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
Dec. 20, 2020
Re: Monticello
by Guillermo Polito
Hi Ramón,
I donât know exactly what you are looking for, but maybe you could take a look at Peterâs monticello->git migration tool.
https://github.com/peteruhnak/git-migration <https://github.com/peteruhnak/git-migration>
Cheers,
G
> El 15 dic 2020, a las 18:39, Ramon Leon <ramon.leon(a)allresnet.com> escribió:
>
> Hi, I wonder if anyone is familiar enough with Monticello to know how to code up a quick commit history report showing all commits and comments for a given date range?
>
> --
> Ramón León
> http://onsmalltalk.com
Dec. 16, 2020
[ Article ] Understanding Base58 Encoding - It is all about integers
by Sven Van Caekenberghe
Hi,
I wrote and published another article in Concerning Pharo:
Understanding Base58 Encoding
It is all about integers
https://medium.com/concerning-pharo/understanding-base58-encoding-23e673e37…
This introductory article shows a bit how easy and how much fun it is to do integer and binary encoding and decoding as well as printing and parsing in Pharo. It also tries to explain Base58 Encoding from a first principles point of view.
Sven
Dec. 15, 2020
Monticello
by Ramon Leon
Hi, I wonder if anyone is familiar enough with Monticello to know how to code up a quick commit history report showing all commits and comments for a given date range?
--
Ramón León
http://onsmalltalk.com
Dec. 15, 2020
Re: Pharo Mars still not working on Ubuntu
by kmo
The bug does not appear to be because I'm using an old version of Gtk.
if I type dpkg -l libgtk2.0-0 libgtk-3-0
I get :
+++-=================-================-============-===========================>
ii libgtk-3-0:amd64 3.24.20-0ubuntu1 amd64 GTK graphical user
interfac>
ii libgtk2.0-0:amd64 2.24.32-4ubuntu4 amd64 GTK graphical user
interfac>
lines 1-7/7 (END)
So I'm using 3.24.20 - which should be OK.
I have added the above comment to the relevant issue on github:
https://github.com/pharo-spec/gtk-bindings/issues/1
I think the issues log is perhaps the better place to discuss the issue
rather than this message list.
--
Sent from: http://forum.world.st/Pharo-Smalltalk-Users-f1310670.html
Dec. 14, 2020
[ANN] Next Pharo Sprint: Dec 18
by Marcus Denker
We will organize a Pharo sprint / Moose dojo Dec 18 (this Friday).
This is a bit earlier due to Christmas times.
Goals of this sprint:
- Fix issues from tracker https://github.com/pharo-project/pharo/issues
This is a Remote Sprint, it happens on Discord.
http://pharo.org/contribute-events
We have added a Board to coordinate the work:
https://github.com/orgs/pharo-project/projects/9
A list of all Pharo Event of the year an be found here: https://association.pharo.org/events
Dec. 14, 2020
Re: Pharo Mars still not working on Ubuntu
by Marcus Denker
> On 12 Dec 2020, at 17:08, Santiago Bragagnolo <santiagobragagnolo(a)gmail.com> wrote:
>
> It is a bug when you have a lot of budget. Luckily we have the monthly sprints :).
> Participants are always more than welcome. You can join and participate to fix these things the last friday of each month!
> I can sit with you and pair program.
> I am not sure if this month we have sprint, since it is by the christmas dates probably.
> Marcus, do we have sprint in december?
This friday⦠I will send the announce mail.
> Anyway, as soon as I know i'll let you know. If it is not this this month it can be in january! It seems far but time pass really fast :).
>
And I will check the next 6 month sprint planning.
Marcus
Dec. 14, 2020
Re: Pharo Mars still not working on Ubuntu
by Stéphane Ducasse
Esteban is trying to understand why he cannot register to this mailing-list and he asked me to past the following
so I do it.
"first, as Stef says we cannot do magic and SpecGtk relies on Gtk3. More specific, it relies in a specific version of Gtk3, in this case you need Gtk 3.24 or newer.
if you have an older linux version, is likely you also have an older Gtk3 version... hence the crash.
this is not a bug
but I agree we need to add a version validation
to not crash but instead show a messageâ
Stef
Dec. 14, 2020
Re: [Pharo-dev] Call for Beta-testers Pharo ARM64 JIT
by Sven Van Caekenberghe
Hi,
This is fantastic news on several levels - the new JIT itself, but even more the new approach, process, infrastructure and tests.
(Sorry, but this is a long/techncal mail).
A week ago I was one of the first people outside the development team to be able to test the new ARM64 JIT VM on hardware they did not even test on.
In particular I used an Amazon AWS EC2 T4g.micro instance (1 GB) with Ubuntu Server 20.04.1 LTS.
These machines use an ARM64 CPU (AWS Graviton2, Neoverse N1, Cortex-A76, ARM v8).
https://aws.amazon.com/ec2/graviton/
https://aws.amazon.com/ec2/instance-types/t4/
https://en.wikipedia.org/wiki/Annapurna_Labs#AWS_Graviton2
ubuntu@ip-172-30-0-23:~/test$ uname -a
Linux ip-172-30-0-23 5.4.0-1030-aws #31-Ubuntu SMP Fri Nov 13 11:42:04 UTC 2020 aarch64 aarch64 aarch64 GNU/Linux
ubuntu@ip-172-30-0-23:~/test$ lscpu
Architecture: aarch64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 2
On-line CPU(s) list: 0,1
Thread(s) per core: 1
Core(s) per socket: 2
Socket(s): 1
NUMA node(s): 1
Vendor ID: ARM
Model: 1
Model name: Neoverse-N1
Stepping: r3p1
BogoMIPS: 243.75
L1d cache: 128 KiB
L1i cache: 128 KiB
L2 cache: 2 MiB
L3 cache: 32 MiB
NUMA node0 CPU(s): 0,1
Vulnerability Itlb multihit: Not affected
Vulnerability L1tf: Not affected
Vulnerability Mds: Not affected
Vulnerability Meltdown: Not affected
Vulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1: Mitigation; __user pointer sanitization
Vulnerability Spectre v2: Not affected
Vulnerability Srbds: Not affected
Vulnerability Tsx async abort: Not affected
Flags: fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm lrcpc dcpop asimddp ssbs
My reaction after one hour ?
Wow, wow, wow, this is incredible. It all just works and it seems pretty fast as well. I played with the vm/image for a couple of minutes and so far everything worked as expected and I had no crashes at all.
The order of magnitude of 1 tinyBenchmarks is very similar to other (server) machines:
"'1894542090 bytecodes/sec; 146296146 sends/sec'" "arm64"
"'2767567567 bytecodes/sec; 258718969 sends/sec'" "macOS"
"'1227082085 bytecodes/sec; 109422120 sends/sec'" "aws"
"'2101590559 bytecodes/sec; 166532391 sends/sec'" "t3 lxd"
Here is a benchmark in the HTTP space, how fast can ZnServer respond to multiple concurrent requests over the local network:
$ ./pharo Pharo.image eval --no-quit 'ZnServer startDefaultOn: 1701' &
$ ab -k -n 1024 -c 8 http://localhost:1701/small
This is ApacheBench, Version 2.3 <$Revision: 1843412 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Server Software: Zinc
Server Hostname: localhost
Server Port: 1701
Document Path: /small
Document Length: 124 bytes
Concurrency Level: 8
Time taken for tests: 0.268 seconds
Complete requests: 1024
Failed requests: 0
Keep-Alive requests: 1024
Total transferred: 317440 bytes
HTML transferred: 126976 bytes
Requests per second: 3814.45 [#/sec] (mean)
Time per request: 2.097 [ms] (mean)
Time per request: 0.262 [ms] (mean, across all concurrent requests)
Transfer rate: 1154.76 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.0 0 0
Processing: 0 2 19.0 0 267
Waiting: 0 2 19.0 0 267
Total: 0 2 19.0 0 267
Percentage of the requests served within a certain time (ms)
50% 0
66% 0
75% 0
80% 0
90% 0
95% 0
98% 0
99% 42
100% 267 (longest request)
That is 3800 req/s with 8 concurrent threads, each response 124 bytes. And the output document is dynamically generated each time !
Now a cached static binary document, first a small one (64 bytes):
$ ab -k -n 1024 -c 8 http://localhost:1701/bytes
This is ApacheBench, Version 2.3 <$Revision: 1843412 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Server Software: Zinc
Server Hostname: localhost
Server Port: 1701
Document Path: /bytes
Document Length: 64 bytes
Concurrency Level: 8
Time taken for tests: 0.214 seconds
Complete requests: 1024
Failed requests: 0
Keep-Alive requests: 1024
Total transferred: 256000 bytes
HTML transferred: 65536 bytes
Requests per second: 4778.62 [#/sec] (mean)
Time per request: 1.674 [ms] (mean)
Time per request: 0.209 [ms] (mean, across all concurrent requests)
Transfer rate: 1166.65 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.0 0 0
Processing: 0 2 12.3 0 207
Waiting: 0 2 12.3 0 207
Total: 0 2 12.3 0 207
Percentage of the requests served within a certain time (ms)
50% 0
66% 0
75% 0
80% 0
90% 0
95% 0
98% 5
99% 64
100% 207 (longest request)
That is 4700 req/s
Now a larger one, 1024 bytes:
$ ab -k -n 1024 -c 8 http://localhost:1701/bytes/1024
This is ApacheBench, Version 2.3 <$Revision: 1843412 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Server Software: Zinc
Server Hostname: localhost
Server Port: 1701
Document Path: /bytes/1024
Document Length: 1024 bytes
Concurrency Level: 8
Time taken for tests: 0.228 seconds
Complete requests: 1024
Failed requests: 0
Keep-Alive requests: 1024
Total transferred: 1241088 bytes
HTML transferred: 1048576 bytes
Requests per second: 4484.93 [#/sec] (mean)
Time per request: 1.784 [ms] (mean)
Time per request: 0.223 [ms] (mean, across all concurrent requests)
Transfer rate: 5308.34 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.0 0 0
Processing: 0 2 16.2 0 227
Waiting: 0 2 16.2 0 227
Total: 0 2 16.2 0 227
Percentage of the requests served within a certain time (ms)
50% 0
66% 0
75% 0
80% 0
90% 0
95% 0
98% 0
99% 41
100% 227 (longest request)
Still 4400 req/s - 1024 requests finished in about 0.25 seconds, transferring 1Mb.
These are really good numbers !
Of course, with an actual network between the client and the server, the numbers are much lower, but this localhost benchmark gives you an idea of the maximum speed that is theoretically possible.
And under this load, the image+vm remained totally stable.
Since then I started a public Zn HTTP server, Pharo 9 live on an ARM64 JIT VM:
http://34.245.183.130:1701
http://34.245.183.130:1701/status
http://34.245.183.130:1701/help
I want to see how long it keeps running. You can test this for yourself.
Idle load of the VM is also excellent: 0.3% CPU. Overall machine load is 0.00 !
I fiddled around a bit more the next day. Everything kept on going smooth, nothing unexpected happened.
I could use the command line tools to save a new image, load several of my packages using metacello from github using a baseline and tonel, I could run all test suites just fine. Everything was just *fast*.
I installed NeoConsole so that I could use telnet to get a REPL into a running image.
A week later, the server Pharo image was still running fine.
In summary:
Great, great work and thanks again everyone for the effort. You (in particular Pablo, Guille, Esteban and the whole Pharo community) can be very proud of this achievement.
Sven
> On 12 Dec 2020, at 17:31, Stéphane Ducasse <stephane.ducasse(a)inria.fr> wrote:
>
> Dear happy Pharoers and others,
>
> Over the last months we have been working on the implementation of a MIT-licensed ARMv8 Just-In-Time compiler for Pharo VM.
> We are very happy with the advance on this subject, as we have not only implemented a new backend but we have added more than 2500
> tests to the JIT, the primitives, code generation, plugins and the VM in general. In the process we fixed many problems.
> It shows that following the roadmap that was decided during General assembly of PharoDays, we have been investing in the Pharo VM and that
> our efforts are greatly paying off.
> Also, we are generating a lot of documentation and improving the process to really democratize the development of the VM.
> So Pharo is a better shape than ever on such matter and this opens a lot of possibility for the future.
>
> ## Call for Beta-Testers
>
> We would like to announce that a first version of our JIT backend is available for beta-testing for ARM Linux machines using Ubuntu.
> We are now entering into a beta testing stage of the VM and the image in Ubuntu ARM 64.
> We would like to invite you to our beta testing phase for the VM. If you're interested in participating,
> please contact pablo.tesone(a)inria.fr.
>
> The following sections give more details of the current status, and the following steps including Apple Silicon, Windows ARM64 and Linux Open Build System support.
>
> ## Current Status
>
> Our objective is to have a running JIT for the new aarch64 architecture (ARM 64bits). This task includes not only a new backend for the JIT compiler but also adding support for external libraries, dependencies and the build process.
> This means having a working VM with comparable features as the one existing in Intel X64. We are targeting all the major operating systems running in this platform (Linux, OSX, Windows).
> Each of them present different restrictions and conditions.
>
> This is the current status:
>
> - We implemented a full backend for the JIT compiler targeting aarch64.
> - All the image side was adapted to run on it, tested on Ubuntu ARM 64 bits.
> - We added support for: Iceberg (Libgit) / Athens (Cairo) / SDL / GTK
> - We implemented a LibFFI-based FFI backend as the default one for Pharo 9 in aarch64 (next to come in all platforms).
> This opens the door to ease port the features to other platforms and OSes.
>
> ## Following Steps and Open Betas: Linux Open Build System (OBS), Windows ARM64 and Apple Silicon
>
> Linux Systems: In the following days, we will also support Raspbian (Debian) and Manjaro on ARM64. For doing so, we are pushing the last details in having a single Linux build system through OBS. So, if you want to start doing beta-testing of these versions please contact us. A public beta will be open in around two weeks.
>
> Windows Systems: We have extended the build process to fully support Microsoft Visual Studio compilers and more flexibility to select the targets, also we are building it to run in Windows ARM. To correctly run the VM in Windows it is needed to build all dependencies for aarch64. In the following weeks, we expect to have a working Non-JIT version and a JIT version. The remaining points to have a JIT version are related with the build process as the API of the operating system has not changed from X64 to aarch64.
>
> OSX Systems: Our third target is to have a working version for the newest Apple silicon. We are acquiring the corresponding hardware to test and to address the differences in the API exposed to JIT applications. As it is the case of the Windows VM, there is not need to change the machine code generation backend; but to compile external libraries, and particularities of the new OS version.
>
> Thanks for your support, and again, if you like to start beta testing the VM please contact us. In the meantime, we will continue giving you news about the current state and where are we going.
>
> The consortium would like to particularly thank Schmidt Buro and Lifeware for their contracts.
>
> Regards,
>
> Pablo in behalf of the Pharo Consortium Engineers
> --------------------------------------------
> Stéphane Ducasse
> http://stephane.ducasse.free.fr / http://www.pharo.org
> 03 59 35 87 52
> Assistant: Aurore Dalle
> 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
>
--
Sven Van Caekenberghe
Proudly supporting Pharo
http://pharo.org
http://association.pharo.org
http://consortium.pharo.org
Dec. 13, 2020
Re: Please explain self
by Stéphane Ducasse
Hello
All this is explained in the Mooc (with mutliple videos and gradually)
and Pharo by Example chapter.
Pay attention you do not need to understand the metaclass core to program in Pharo.
This is just for fun and a bonus. This is why in general I do not show this diagram directly.
Check the mooc videos we designed based on more than 10 years of experience
teaching Pharo to people.
S
> On 12 Dec 2020, at 20:20, g_patrickb--- via Pharo-users <pharo-users(a)lists.pharo.org> wrote:
>
> I understand if you have Class A with methods p and q that you can call q from p doing:
>
> self q
>
> But there are some cases where a method doesnât exist but self is still used. I found a tutorial on creating a Reddit type app and it had a .mcz which I loaded.
>
> Here is an example from Class StLoggedInComponent and method refreshReport:
>
> self report rows: (self session user tasks select: self filterBlock).
>
> There is a method âreportâ so I understand that, but there is no method named âsessionâ so what is the use of self?
>
> And Class StDatabase has method âupdateTask:â has:
>
> self subclassResponsibility.
>
> But no method called âsubclassResponsibilityâ exists in the Class.
>
> Also, Class StLoggedInComponents has method âtestTasksâ with this:
>
> ^ self class testTasks
>
> What is âself classâ?
>
> Thank you.
>
--------------------------------------------
Stéphane Ducasse
http://stephane.ducasse.free.fr / http://www.pharo.org
03 59 35 87 52
Assistant: Aurore Dalle
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
Dec. 13, 2020
Re: Please explain self
by Richard O'Keefe
#subclassResponsibility is defined in Object.
A good way to find this out is to
- select 'subclassResponsibility' with the mouse
- type Control-M
Control-M asks for a list of the iMplementors of the method.
Control-N asks for a list of the seNders of the message.
This particular method just raises an exception.
It is how you define what some languages call an "abstract method";
a method whose *interface* is defined in the current class
but whose *implementation* is deferred to subclasses.
I can't help you with #session except to suggest that it is
probably defined in some superclass. In the browser button bar
between the upper and lower panes you may see
(*) Flat ( ) Hier
Clicking on Hier will change the class pane (2nd from the left,
upper level) to an indented list, making it easy to see what
the superclass chain is.
On Sun, 13 Dec 2020 at 08:21, g_patrickb--- via Pharo-users <
pharo-users(a)lists.pharo.org> wrote:
> I understand if you have Class A with methods p and q that you can call q
> from p doing:
>
> self q
>
> But there are some cases where a method doesnât exist but self is still
> used. I found a tutorial on creating a Reddit type app and it had a .mcz
> which I loaded.
>
> Here is an example from Class StLoggedInComponent and method refreshReport:
>
> self report rows: (self session user tasks select: self filterBlock).
>
> There is a method âreportâ so I understand that, but there is no method
> named âsessionâ so what is the use of self?
>
> And Class StDatabase has method âupdateTask:â has:
>
> self subclassResponsibility.
>
> But no method called âsubclassResponsibilityâ exists in the Class.
>
> Also, Class StLoggedInComponents has method âtestTasksâ with this:
>
> ^ self class testTasks
>
> What is âself classâ?
>
> Thank you.
>
Dec. 13, 2020
Re: Please explain self
by Richard Sargent
I'll add a small bit to Davide's excellent answer, by way of connecting
some of the dots. In particular, the browser makes a class look like one
thing and we talk about instance side and class side.
The reality is that the browser presents either the class' behaviours or
the metaclass' behaviours, depending on whether we have chosen to see "the
instance side" or "the class side". Admittedly, the names we use for the
sides add to the possible confusion.
On Sat, Dec 12, 2020, 12:20 Davide Grandi <davide.grandi(a)email.it> wrote:
> Objects are instances of a class.
> Classes are objects, so they have methods.
> 'self class' returns the class of self.
>
> If a class doesn't have a methods ...
> ... the search continues in the superclass.
> (every class has a superclass ... apart from Object).
>
> If you download the Blue Book - "Smalltalk-80 - The language and it's
> implementation",
> it's free on the net, you'll find an AWSOME explanation and diagram from
> page 270 on, until ...
> ... the final map : classes and metaclass.
>
> but you've to read it these pages, before. There's a 'metaclass' concept
> to acquire.
>
> Bon voyage !
>
> Davide
> On 12/12/2020 20:20, g_patrickb--- via Pharo-users wrote:
>
> I understand if you have Class A with methods p and q that you can call q
> from p doing:
>
> self q
>
> But there are some cases where a method doesnât exist but self is still
> used. I found a tutorial on creating a Reddit type app and it had a .mcz
> which I loaded.
>
> Here is an example from Class StLoggedInComponent and method refreshReport:
>
> self report rows: (self session user tasks select: self filterBlock).
>
> There is a method âreportâ so I understand that, but there is no method
> named âsessionâ so what is the use of self?
>
> And Class StDatabase has method âupdateTask:â has:
>
> self subclassResponsibility.
>
> But no method called âsubclassResponsibilityâ exists in the Class.
>
> Also, Class StLoggedInComponents has method âtestTasksâ with this:
>
> ^ self class testTasks
>
> What is âself classâ?
>
> Thank you.
>
> --
> Ing. Davide Grandi
> linkedin : http://linkedin.com/in/davidegrandi
>
>
Dec. 12, 2020
Re: Please explain self
by Davide Grandi
Objects are instances of a class.
Classes are objects, so they have methods.
'self class' returns the class of self.
If a class doesn't have a methods ...
... the search continues in the superclass.
(every class has a superclass ... apart from Object).
If you download the Blue Book - "Smalltalk-80 - The language and it's
implementation",
it's free on the net, you'll find an AWSOME explanation and diagram from
page 270 on, until ...
... the final map : classes and metaclass.
but you've to read it these pages, before. There's a 'metaclass' concept
to acquire.
Bon voyage !
   Davide
On 12/12/2020 20:20, g_patrickb--- via Pharo-users wrote:
>
> I understand if you have Class A with methods p and q that you can
> call q from p doing:
>
> self q
>
> But there are some cases where a method doesnât exist but self is
> still used. I found a tutorial on creating a Reddit type app and it
> had a .mcz which I loaded.
>
> Here is an example from Class StLoggedInComponent and method
> refreshReport:
>
> self report rows: (self session user tasks select: self filterBlock).
>
> There is a method âreportâ so I understand that, but there is no
> method named âsessionâ so what is the use of self?
>
> And Class StDatabase has method âupdateTask:â has:
>
> self subclassResponsibility.
>
> But no method called âsubclassResponsibilityâ exists in the Class.
>
> Also, Class StLoggedInComponents has method âtestTasksâ with this:
>
> ^ self class testTasks
>
> What is âself classâ?
>
> Thank you.
>
--
Ing. Davide Grandi
linkedin : http://linkedin.com/in/davidegrandi
Dec. 12, 2020
Please explain self
by g_patrickb@yahoo.com
I understand if you have Class A with methods p and q that you can call q from p doing:
self q
But there are some cases where a method doesnât exist but self is still used. I found a tutorial on creating a Reddit type app and it had a .mcz which I loaded.
Here is an example from Class StLoggedInComponent and method refreshReport:
self report rows: (self session user tasks select: self filterBlock).
There is a method âreportâ so I understand that, but there is no method named âsessionâ so what is the use of self?
And Class StDatabase has method âupdateTask:â has:
self subclassResponsibility.
But no method called âsubclassResponsibilityâ exists in the Class.
Also, Class StLoggedInComponents has method âtestTasksâ with this:
^ self class testTasks
What is âself classâ?
Thank you.
Dec. 12, 2020
Re: Pharo Mars still not working on Ubuntu
by Stéphane Ducasse
tx offray
Lua is an inspiration from that perspective.
Now we play the game because publishing is also a nice way to understand what we are doing
and because this is important to play the game else we would be considered as losers.
S.
> On 12 Dec 2020, at 19:20, Offray Vladimir Luna Cárdenas <offray.luna(a)mutabit.com> wrote:
>
> Hi,
>
> Just to add a little bit to Tim's remark, I'm pretty happy that Pharo academicians, starting with Stéphane, value more making a real difference in the world, via delivering working and improving software, that talking about the theoretical possible changes when paper's "conclusions further possibilities and studies" will be applied, developed and widely understood (it's also a pretty uncommon path followed by Lua academician's at Rio University.)
>
> In a world of mostly self-serving academia trapped in the game of papers publishing and metrics only valuable inside academia, is good to have academicians breaking the novelty fetiche spell and preferring _being_ smarter and empathic with continuous delivery, improvements and broad community building, instead just _looking_ smarter, via papers publishing and ego inflation inside the Ivory Tower.
>
> Thanks again Stephan and other Pharo academicians to show us a glimpse of what academia could be when priorities are put in proper places.
>
> Offray
>
> On 12/12/20 5:05 a. m., Tim Mackinnon wrote:
>> Just to chip in here - the work demonstrated on Pharo development is inspirational. Rather than throwing everything away, it shows the alternative - incrementally improving a running platform - and practicing what we preach in industry by refactoring a large elderly code base bit by bit - it's remarkable.
>>
>> While its true we donât always immediately get things fixed that we might personally want, but then again we are relying on the free personal time of others. But collectively, the most important things do get fixed/improved, and if there is something that really bothers you, then the over arching lesson is that you have to roll up your sleaves and try and fix it yourself and in showing willingness you normally find that others will help you.
>>
>> So Steph et al, I am glad that you love this platform (and have for many years), but more startlingly - i heard you all talk about a vision of improvements back in Lugano many years ago⦠and gosh we are seeing those improvements roll out year after year. Even more - we are slowly getting the kind of development/experiment workbench platform that good developers should have. Its being invented under our eyes, and that is exciting.
>>
>> So I hope you dont feel dispondent - I think history viewed over a longer period will actually show a more positive picture.
>>
>> Tim
>>
>>
>>
>> On Fri, 11 Dec 2020, at 9:20 PM, Stéphane Ducasse wrote:
>>> It depends how old.
>>> We cannot do magic.
>>> In particular, if more people would help fixing simple things in Pharo we would then have the time for more boring and challenging issues.
>>> Because in my personal case, Iâm not paid to develop and lead Pharo dev.
>>> My own carrer and CV do not depend on Pharo and in fact I could publish much more
>>> and look much smarter without it.
>>>
>>> S.
>>>
>>>
>>>
>>>> But if it doesn't work on older machines (if that is the case) then that's
>>>> still a bug, isn't it?
>>>>
>>>>
>>>>
>>>> --
>>>> Sent from: http://forum.world.st/Pharo-Smalltalk-Users-f1310670.html <http://forum.world.st/Pharo-Smalltalk-Users-f1310670.html>
>>>
>>>
>>> --------------------------------------------
>>> Stéphane Ducasse
>>> http://stephane.ducasse.free.fr <http://stephane.ducasse.free.fr/> / http://www.pharo.org <http://www.pharo.org/>
>>> 03 59 35 87 52
>>> Assistant: Aurore Dalle
>>> 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
--------------------------------------------
Stéphane Ducasse
http://stephane.ducasse.free.fr / http://www.pharo.org
03 59 35 87 52
Assistant: Aurore Dalle
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
Dec. 12, 2020
Re: Pharo Mars still not working on Ubuntu
by Offray Vladimir Luna Cárdenas
Hi,
Just to add a little bit to Tim's remark, I'm pretty happy that Pharo
academicians, starting with Stéphane, value more making a real
difference in the world, via delivering working and improving software,
that talking about the theoretical possible changes when paper's
"conclusions further possibilities and studies" will be applied,
developed and widely understood (it's also a pretty uncommon path
followed by Lua academician's at Rio University.)
In a world of mostly self-serving academia trapped in the game of papers
publishing and metrics only valuable inside academia, is good to have
academicians breaking the novelty fetiche spell and preferring _being_
smarter and empathic with continuous delivery, improvements and broad
community building, instead just _looking_ smarter, via papers
publishing and ego inflation inside the Ivory Tower.
Thanks again Stephan and other Pharo academicians to show us a glimpse
of what academia could be when priorities are put in proper places.
Offray
On 12/12/20 5:05 a. m., Tim Mackinnon wrote:
> Just to chip in here - the work demonstrated on Pharo development is
> inspirational. Rather than throwing everything away, it shows the
> alternative - incrementally improving a running platform - and
> practicing what we preach in industry by refactoring a large elderly
> code base bit by bit - it's remarkable.
>
> While its true we donât always immediately get things fixed that we
> might personally want, but then again we are relying on the free
> personal time of others. But collectively, the most important things
> do get fixed/improved, and if there is something that really bothers
> you, then the over arching lesson is that you have to roll up your
> sleaves and try and fix it yourself and in showing willingness you
> normally find that others will help you.
>
> So Steph et al, I am glad that you love this platform (and have for
> many years), but more startlingly - i heard you all talk about a
> vision of improvements back in Lugano many years ago⦠and gosh we are
> seeing those improvements roll out year after year. Even more - we are
> slowly getting the kind of development/experiment workbench platform
> that good developers should have. Its being invented under our eyes,
> and that is exciting.
>
> So I hope you dont feel dispondent - I think history viewed over a
> longer period will actually show a more positive picture.
>
> Tim
>
>
>
> On Fri, 11 Dec 2020, at 9:20 PM, Stéphane Ducasse wrote:
>> It depends how old.Â
>> We cannot do magic.Â
>> In particular, if more people would help fixing simple things in
>> Pharo we would then have the time for more boring and challenging issues.
>> Because in my personal case, Iâm not paid to develop and lead Pharo dev.Â
>> My own carrer and CV do not depend on Pharo and in fact I could
>> publish much moreÂ
>> and look much smarter without it.Â
>>
>> S.Â
>>
>>
>>
>>> But if it doesn't work on older machines (if that is the case) then
>>> that's
>>> still a bug, isn't it?
>>>
>>>
>>>
>>> --
>>> Sent from: http://forum.world.st/Pharo-Smalltalk-Users-f1310670.html
>>> <http://forum.world.st/Pharo-Smalltalk-Users-f1310670.html>
>>
>> --------------------------------------------
>> Stéphane Ducasse
>> http://stephane.ducasse.free.fr <http://stephane.ducasse.free.fr> /
>> http://www.pharo.org <http://www.pharo.org>Â
>> 03 59 35 87 52
>> Assistant: Aurore DalleÂ
>> 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
>
Dec. 12, 2020