Pharo-dev
By thread
pharo-dev@lists.pharo.org
By month
Messages by month
- ----- 2026 -----
- July
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
May 2014
- 1104 messages
Build failed in Jenkins: Pharo-2.0 #366
by no-reply@ci.inria.fr
See <https://ci.inria.fr/pharo/job/Pharo-2.0/366/>
------------------------------------------
[...truncated 18 lines...]
Downloading PharoV10.sources:
http://files.pharo.org/sources//PharoV10.sources.zip
Downloading PharoV20.sources:
http://files.pharo.org/sources//PharoV20.sources.zip
Downloading PharoV30.sources:
http://files.pharo.org/sources//PharoV30.sources.zip
Creating starter scripts pharo and pharo-ui
+ ./pharo Pharo.image update
[31m[33m
===============================================================================
Notice: 0 new update file(s) processed.
===============================================================================
[0m[0m+ zip Pharo.zip Pharo.image Pharo.changes
adding: Pharo.image (deflated 58%)
adding: Pharo.changes (deflated 89%)
+ ./pharo Pharo.image printVersion
[version] 2.0 #20628
++ ./pharo Pharo.image printVersion
++ grep --only-matching '[0-9]\{5\}'
+ VERSION=20628
+ ./pharo Pharo.image save Pharo-20628
+ zip 20628.zip Pharo-20628.image Pharo-20628.changes
adding: Pharo-20628.image (deflated 58%)
adding: Pharo-20628.changes (deflated 89%)
+ cp 20628.zip latest.zip
+ cp 20628.zip Pharo-Image-2.0-latest.zip
+ mkdir One
+ cp Pharo.image Pharo.changes pharo-vm/PharoV20.sources One
+ bash build-oneclick.sh -i One/Pharo -o Pharo2.0-portable -v 2.0 -t Pharo
chmod: illegal option -- -
usage: chmod [-fhv] [-R [-H | -L | -P]] [-a | +a | =a [i][# [ n]]] mode|entry file ...
chmod [-fhv] [-R [-H | -L | -P]] [-E | -C | -N | -i | -I] file ...
chmod: illegal option -- -
usage: chmod [-fhv] [-R [-H | -L | -P]] [-a | +a | =a [i][# [ n]]] mode|entry file ...
chmod [-fhv] [-R [-H | -L | -P]] [-E | -C | -N | -i | -I] file ...
chmod: illegal option -- -
usage: chmod [-fhv] [-R [-H | -L | -P]] [-a | +a | =a [i][# [ n]]] mode|entry file ...
chmod [-fhv] [-R [-H | -L | -P]] [-E | -C | -N | -i | -I] file ...
chmod: illegal option -- -
usage: chmod [-fhv] [-R [-H | -L | -P]] [-a | +a | =a [i][# [ n]]] mode|entry file ...
chmod [-fhv] [-R [-H | -L | -P]] [-E | -C | -N | -i | -I] file ...
chmod: illegal option -- -
usage: chmod [-fhv] [-R [-H | -L | -P]] [-a | +a | =a [i][# [ n]]] mode|entry file ...
chmod [-fhv] [-R [-H | -L | -P]] [-E | -C | -N | -i | -I] file ...
--2014-05-30 11:43:06-- http://files.pharo.org/vm/pharo/linux/Pharo-VM-linux-stable.zip
Resolving files.pharo.org... 128.93.162.72
Connecting to files.pharo.org|128.93.162.72|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1715972 (1.6M) [application/zip]
Saving to: âPharo-VM-linux-stable.zipâ
0K .......... .......... .......... .......... .......... 2% 4.06M 0s
50K .......... .......... .......... .......... .......... 5% 7.61M 0s
100K .......... .......... .......... .......... .......... 8% 8.53M 0s
150K .......... .......... .......... .......... .......... 11% 8.01M 0s
200K .......... .......... .......... .......... .......... 14% 116M 0s
250K .......... .......... .......... .......... .......... 17% 8.10M 0s
300K .......... .......... .......... .......... .......... 20% 110M 0s
350K .......... .......... .......... .......... .......... 23% 9.17M 0s
400K .......... .......... .......... .......... .......... 26% 83.5M 0s
450K .......... .......... .......... .......... .......... 29% 9.37M 0s
500K .......... .......... .......... .......... .......... 32% 99.6M 0s
550K .......... .......... .......... .......... .......... 35% 67.6M 0s
600K .......... .......... .......... .......... .......... 38% 9.11M 0s
650K .......... .......... .......... .......... .......... 41% 112M 0s
700K .......... .......... .......... .......... .......... 44% 9.22M 0s
750K .......... .......... .......... .......... .......... 47% 111M 0s
800K .......... .......... .......... .......... .......... 50% 73.6M 0s
850K .......... .......... .......... .......... .......... 53% 9.25M 0s
900K .......... .......... .......... .......... .......... 56% 165M 0s
950K .......... .......... .......... .......... .......... 59% 9.03M 0s
1000K .......... .......... .......... .......... .......... 62% 98.0M 0s
1050K .......... .......... .......... .......... .......... 65% 84.3M 0s
1100K .......... .......... .......... .......... .......... 68% 6.80M 0s
1150K .......... .......... .......... .......... .......... 71% 62.8M 0s
1200K .......... .......... .......... .......... .......... 74% 163M 0s
1250K .......... .......... .......... .......... .......... 77% 7.13M 0s
1300K .......... .......... .......... .......... .......... 80% 169M 0s
1350K .......... .......... .......... .......... .......... 83% 36.3M 0s
1400K .......... .......... .......... .......... .......... 86% 16.7M 0s
1450K .......... .......... .......... .......... .......... 89% 30.9M 0s
1500K .......... .......... .......... .......... .......... 92% 26.0M 0s
1550K .......... .......... .......... .......... .......... 95% 17.5M 0s
1600K .......... .......... .......... .......... .......... 98% 101M 0s
1650K .......... .......... ..... 100% 47.1M=0.1s
2014-05-30 11:43:07 (16.3 MB/s) - âPharo-VM-linux-stable.zipâ saved [1715972/1715972]
--2014-05-30 11:43:07-- http://files.pharo.org/vm/pharo/mac/Pharo-VM-mac-stable.zip
Resolving files.pharo.org... 128.93.162.72
Connecting to files.pharo.org|128.93.162.72|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 2897528 (2.8M) [application/zip]
Saving to: âPharo-VM-mac-stable.zipâ
0K .......... .......... .......... .......... .......... 1% 4.16M 1s
50K .......... .......... .......... .......... .......... 3% 7.64M 0s
100K .......... .......... .......... .......... .......... 5% 8.18M 0s
150K .......... .......... .......... .......... .......... 7% 7.71M 0s
200K .......... .......... .......... .......... .......... 8% 111M 0s
250K .......... .......... .......... .......... .......... 10% 9.41M 0s
300K .......... .......... .......... .......... .......... 12% 76.8M 0s
350K .......... .......... .......... .......... .......... 14% 9.21M 0s
400K .......... .......... .......... .......... .......... 15% 106M 0s
450K .......... .......... .......... .......... .......... 17% 9.39M 0s
500K .......... .......... .......... .......... .......... 19% 74.7M 0s
550K .......... .......... .......... .......... .......... 21% 84.8M 0s
600K .......... .......... .......... .......... .......... 22% 8.99M 0s
650K .......... .......... .......... .......... .......... 24% 114M 0s
700K .......... .......... .......... .......... .......... 26% 9.81M 0s
750K .......... .......... .......... .......... .......... 28% 91.1M 0s
800K .......... .......... .......... .......... .......... 30% 99.2M 0s
850K .......... .......... .......... .......... .......... 31% 9.73M 0s
900K .......... .......... .......... .......... .......... 33% 50.1M 0s
950K .......... .......... .......... .......... .......... 35% 10.2M 0s
1000K .......... .......... .......... .......... .......... 37% 73.9M 0s
1050K .......... .......... .......... .......... .......... 38% 67.3M 0s
1100K .......... .......... .......... .......... .......... 40% 10.7M 0s
1150K .......... .......... .......... .......... .......... 42% 39.4M 0s
1200K .......... .......... .......... .......... .......... 44% 114M 0s
1250K .......... .......... .......... .......... .......... 45% 10.8M 0s
1300K .......... .......... .......... .......... .......... 47% 45.5M 0s
1350K .......... .......... .......... .......... .......... 49% 10.1M 0s
1400K .......... .......... .......... .......... .......... 51% 75.8M 0s
1450K .......... .......... .......... .......... .......... 53% 67.3M 0s
1500K .......... .......... .......... .......... .......... 54% 10.6M 0s
1550K .......... .......... .......... .......... .......... 56% 64.4M 0s
1600K .......... .......... .......... .......... .......... 58% 9.66M 0s
1650K .......... .......... .......... .......... .......... 60% 89.9M 0s
1700K .......... .......... .......... .......... .......... 61% 176M 0s
1750K .......... .......... .......... .......... .......... 63% 10.1M 0s
1800K .......... .......... .......... .......... .......... 65% 113M 0s
1850K .......... .......... .......... .......... .......... 67% 86.7M 0s
1900K .......... .......... .......... .......... .......... 68% 110M 0s
1950K .......... .......... .......... .......... .......... 70% 9.61M 0s
2000K .......... .......... .......... .......... .......... 72% 109M 0s
2050K .......... .......... .......... .......... .......... 74% 81.0M 0s
2100K .......... .......... .......... .......... .......... 75% 9.96M 0s
2150K .......... .......... .......... .......... .......... 77% 115M 0s
2200K .......... .......... .......... .......... .......... 79% 171M 0s
2250K .......... .......... .......... .......... .......... 81% 41.3M 0s
2300K .......... .......... .......... .......... .......... 83% 10.9M 0s
2350K .......... .......... .......... .......... .......... 84% 70.6M 0s
2400K .......... .......... .......... .......... .......... 86% 124M 0s
2450K .......... .......... .......... .......... .......... 88% 138M 0s
2500K .......... .......... .......... .......... .......... 90% 10.8M 0s
2550K .......... .......... .......... .......... .......... 91% 67.9M 0s
2600K .......... .......... .......... .......... .......... 93% 102M 0s
2650K .......... .......... .......... .......... .......... 95% 77.8M 0s
2700K .......... .......... .......... .......... .......... 97% 11.9M 0s
2750K .......... .......... .......... .......... .......... 98% 113M 0s
2800K .......... .......... ......... 100% 151M=0.1s
2014-05-30 11:43:07 (20.0 MB/s) - âPharo-VM-mac-stable.zipâ saved [2897528/2897528]
--2014-05-30 11:43:07-- http://files.pharo.org/vm/pharo/win/Pharo-VM-win-stable.zip
Resolving files.pharo.org... 128.93.162.72
Connecting to files.pharo.org|128.93.162.72|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 3970113 (3.8M) [application/zip]
Saving to: âPharo-VM-win-stable.zipâ
0K .......... .......... .......... .......... .......... 1% 4.21M 1s
50K .......... .......... .......... .......... .......... 2% 7.75M 1s
100K .......... .......... .......... .......... .......... 3% 3.32M 1s
150K .......... .......... .......... .......... .......... 5% 115M 1s
200K .......... .......... .......... .......... .......... 6% 25.9M 1s
250K .......... .......... .......... .......... .......... 7% 7.71M 0s
300K .......... .......... .......... .......... .......... 9% 114M 0s
350K .......... .......... .......... .......... .......... 10% 150M 0s
400K .......... .......... .......... .......... .......... 11% 6.59M 0s
450K .......... .......... .......... .......... .......... 12% 145M 0s
500K .......... .......... .......... .......... .......... 14% 7.67M 0s
550K .......... .......... .......... .......... .......... 15% 146M 0s
600K .......... .......... .......... .......... .......... 16% 146M 0s
650K .......... .......... .......... .......... .......... 18% 9.17M 0s
700K .......... .......... .......... .......... .......... 19% 55.4M 0s
750K .......... .......... .......... .......... .......... 20% 11.2M 0s
800K .......... .......... .......... .......... .......... 21% 33.3M 0s
850K .......... .......... .......... .......... .......... 23% 131M 0s
900K .......... .......... .......... .......... .......... 24% 11.5M 0s
950K .......... .......... .......... .......... .......... 25% 30.9M 0s
1000K .......... .......... .......... .......... .......... 27% 12.1M 0s
1050K .......... .......... .......... .......... .......... 28% 145M 0s
1100K .......... .......... .......... .......... .......... 29% 27.2M 0s
1150K .......... .......... .......... .......... .......... 30% 12.6M 0s
1200K .......... .......... .......... .......... .......... 32% 22.8M 0s
1250K .......... .......... .......... .......... .......... 33% 13.7M 0s
1300K .......... .......... .......... .......... .......... 34% 93.7M 0s
1350K .......... .......... .......... .......... .......... 36% 25.2M 0s
1400K .......... .......... .......... .......... .......... 37% 13.5M 0s
1450K .......... .......... .......... .......... .......... 38% 25.3M 0s
1500K .......... .......... .......... .......... .......... 39% 13.5M 0s
1550K .......... .......... .......... .......... .......... 41% 111M 0s
1600K .......... .......... .......... .......... .......... 42% 24.3M 0s
1650K .......... .......... .......... .......... .......... 43% 13.7M 0s
1700K .......... .......... .......... .......... .......... 45% 22.6M 0s
1750K .......... .......... .......... .......... .......... 46% 80.0M 0s
1800K .......... .......... .......... .......... .......... 47% 15.0M 0s
1850K .......... .......... .......... .......... .......... 49% 86.1M 0s
1900K .......... .......... .......... .......... .......... 50% 9.26M 0s
1950K .......... .......... .......... .......... .......... 51% 161M 0s
2000K .......... .......... .......... .......... .......... 52% 85.4M 0s
2050K .......... .......... .......... .......... .......... 54% 149M 0s
2100K .......... .......... .......... .......... .......... 55% 10.4M 0s
2150K .......... .......... .......... .......... .......... 56% 64.0M 0s
2200K .......... .......... .......... .......... .......... 58% 132M 0s
2250K .......... .......... .......... .......... .......... 59% 136M 0s
2300K .......... .......... .......... .......... .......... 60% 9.79M 0s
2350K .......... .......... .......... .......... .......... 61% 97.5M 0s
2400K .......... .......... .......... .......... .......... 63% 68.5M 0s
2450K .......... .......... .......... .......... .......... 64% 133M 0s
2500K .......... .......... .......... .......... .......... 65% 11.3M 0s
2550K .......... .......... .......... .......... .......... 67% 51.3M 0s
2600K .......... .......... .......... .......... .......... 68% 57.9M 0s
2650K .......... .......... .......... .......... .......... 69% 12.7M 0s
2700K .......... .......... .......... .......... .......... 70% 63.0M 0s
2750K .......... .......... .......... .......... .......... 72% 51.4M 0s
2800K .......... .......... .......... .......... .......... 73% 174M 0s
2850K .......... .......... .......... .......... .......... 74% 11.8M 0s
2900K .......... .......... .......... .......... .......... 76% 50.2M 0s
2950K .......... .......... .......... .......... .......... 77% 134M 0s
3000K .......... .......... .......... .......... .......... 78% 114M 0s
3050K .......... .......... .......... .......... .......... 79% 11.7M 0s
3100K .......... .......... .......... .......... .......... 81% 48.3M 0s
3150K .......... .......... .......... .......... .......... 82% 106M 0s
3200K .......... .......... .......... .......... .......... 83% 85.2M 0s
3250K .......... .......... .......... .......... .......... 85% 11.2M 0s
3300K .......... .......... .......... .......... .......... 86% 141M 0s
3350K .......... .......... .......... .......... .......... 87% 67.3M 0s
3400K .......... .......... .......... .......... .......... 88% 120M 0s
3450K .......... .......... .......... .......... .......... 90% 91.4M 0s
3500K .......... .......... .......... .......... .......... 91% 11.5M 0s
3550K .......... .......... .......... .......... .......... 92% 110M 0s
3600K .......... .......... .......... .......... .......... 94% 138M 0s
3650K .......... .......... .......... .......... .......... 95% 94.4M 0s
3700K .......... .......... .......... .......... .......... 96% 87.2M 0s
3750K .......... .......... .......... .......... .......... 98% 11.7M 0s
3800K .......... .......... .......... .......... .......... 99% 86.4M 0s
3850K .......... .......... ....... 100% 85.5M=0.2s
2014-05-30 11:43:07 (21.5 MB/s) - âPharo-VM-win-stable.zipâ saved [3970113/3970113]
+ bash build-platform.sh -i One/Pharo -o Pharo2.0 -v 2.0 -t Pharo -p mac
build-platform.sh: sources file not found (<https://ci.inria.fr/pharo/job/Pharo-2.0/ws/One/PharoV30.sources)>
Build step 'Execute shell' marked build as failure
Archiving artifacts
Description set:
SSH: Current build result is [FAILURE], not going to run.
May 30, 2014
Re: [Pharo-dev] String deduplication
by Sven Van Caekenberghe
Hmm, code that depends on 2 #= Strings to be not #== ?
That would either be a very special case but more likely a bug.
In any case, it won't be very common I guess.
The mutability/immutability is a way more important issue, unfixable unless we introduce a new class IMHO.
But saving 2MB is impressive.
On 30 May 2014, at 10:59, Clément Bera <bera.clement(a)gmail.com> wrote:
> Hello,
>
> I like the idea but this is not as simple.
>
> In some framework you may use different string with a same name as markers that are not equals.
>
> Typically:
>
> Object>>#string1
> ^ 'string'
>
> Object>>#string2
> ^ 'string'
>
> Object>>#test
> self assert: self string1 == self string1. "Answers true"
> self assert: self string2 == self string2. "Answers true"
> self assert: self string1 == self string2 "Answers false"
>
> Frameworks relying on that will not work any more.
>
> And this kind of bugs is not easy to spot, it typically crashes identity collections in a non deterministic fashion.
>
> Regards
>
>
> 2014-05-30 9:39 GMT+02:00 Philippe Marschall <philippe.marschall(a)netcetera.ch>:
> Hi
>
> This is an idea I stole from somebody else. The assumption is that you have a lot of Strings in the image that are equal. We could therefore remove the duplicates and make all the objects refer to the same instance.
>
> However it's not a simple as that. The main issue is that String has two responsibilities. The first is as an immutable value object. The second is as a mutable character buffer for building immutable value objects. We must not deduplicate the second kind. Unfortunately it's not straight forward to figure out which kind a string is. The approach I took is looking at whether it contains any 0 characters. An other option would be to check whether any WirteStreams are referring to it.
> Also, since there are behavioral differences between String and Symbol besides #= we must exclude Symbols (eg. there is #'hello' and 'hello' in the heap and they compare #= true but we must not make anybody who refers to 'hello' suddenly refer to #'hello').
>
> Anyway here's the code, this saves about 2 MB in a fairly stock Pharo 3 image. Sorry for the bad variable names.
>
> | b d m |
> b := Bag new.
> d := OrderedCollection new.
> m := Dictionary new.
> "count all string instances"
> String allSubInstancesDo: [ :s |
> s isSymbol ifFalse: [
> b add: s ] ].
> "find the ones that have no duplicates or are likely buffers"
> b doWithOccurrences: [ :s :i |
> (i = 1 or: [ s anySatisfy: [ :c | c codePoint = 0 ] ]) ifTrue: [
> d add: s -> i ] ].
> "remove the ones that have no duplicates or are likely buffers"
> d do: [ :a |
> a value timesRepeat: [
> b remove: a key ] ].
> "map all duplicate strings to their duplicates"
> String allSubInstancesDo: [ :s |
> s isSymbol ifFalse: [
> (b includes: s) ifTrue: [
> | l |
> l := m at: s ifAbsentPut: [ OrderedCollection new ].
> l add: s ] ].
> "remove the duplicates"
> m keysAndValues do [ :k :v |
> | f |
> f := v at: 1.
> 2 to: v size do: [ :i |
> (v at: i) becomeForward: f ] ]
>
> Cheers
> Philippe
>
>
>
May 30, 2014
Re: [Pharo-dev] String deduplication
by Clément Bera
Hello,
I like the idea but this is not as simple.
In some framework you may use different string with a same name as markers
that are not equals.
Typically:
Object>>#string1
^ 'string'
Object>>#string2
^ 'string'
Object>>#test
self assert: self string1 == self string1. "Answers true"
self assert: self string2 == self string2. "Answers true"
self assert: self string1 == self string2 "Answers false"
Frameworks relying on that will not work any more.
And this kind of bugs is not easy to spot, it typically crashes identity
collections in a non deterministic fashion.
Regards
2014-05-30 9:39 GMT+02:00 Philippe Marschall <
philippe.marschall(a)netcetera.ch>:
> Hi
>
> This is an idea I stole from somebody else. The assumption is that you
> have a lot of Strings in the image that are equal. We could therefore
> remove the duplicates and make all the objects refer to the same instance.
>
> However it's not a simple as that. The main issue is that String has two
> responsibilities. The first is as an immutable value object. The second is
> as a mutable character buffer for building immutable value objects. We must
> not deduplicate the second kind. Unfortunately it's not straight forward to
> figure out which kind a string is. The approach I took is looking at
> whether it contains any 0 characters. An other option would be to check
> whether any WirteStreams are referring to it.
> Also, since there are behavioral differences between String and Symbol
> besides #= we must exclude Symbols (eg. there is #'hello' and 'hello' in
> the heap and they compare #= true but we must not make anybody who refers
> to 'hello' suddenly refer to #'hello').
>
> Anyway here's the code, this saves about 2 MB in a fairly stock Pharo 3
> image. Sorry for the bad variable names.
>
> | b d m |
> b := Bag new.
> d := OrderedCollection new.
> m := Dictionary new.
> "count all string instances"
> String allSubInstancesDo: [ :s |
> s isSymbol ifFalse: [
> b add: s ] ].
> "find the ones that have no duplicates or are likely buffers"
> b doWithOccurrences: [ :s :i |
> (i = 1 or: [ s anySatisfy: [ :c | c codePoint = 0 ] ]) ifTrue: [
> d add: s -> i ] ].
> "remove the ones that have no duplicates or are likely buffers"
> d do: [ :a |
> a value timesRepeat: [
> b remove: a key ] ].
> "map all duplicate strings to their duplicates"
> String allSubInstancesDo: [ :s |
> s isSymbol ifFalse: [
> (b includes: s) ifTrue: [
> | l |
> l := m at: s ifAbsentPut: [ OrderedCollection new ].
> l add: s ] ].
> "remove the duplicates"
> m keysAndValues do [ :k :v |
> | f |
> f := v at: 1.
> 2 to: v size do: [ :i |
> (v at: i) becomeForward: f ] ]
>
> Cheers
> Philippe
>
>
>
May 30, 2014
Re: [Pharo-dev] [squeak-dev] Re: String >> #=
by Philippe Marschall
On 28.05.14 22:24, Andres Valloud wrote:
> Hey Philippe,
>
>> Yes but #= is blissfully unaware of normalization in Squeak/Pharo. In
>> fact AFAIK Squeak/Pharo is unaware of normalization. Having a short look
>> at it doesn't even look as if case insensitivity worked in Squeak/Pharo
>> outside of Latin-1 (I could be wrong though).
>
> Yes, that's what I am thinking about. To be more explicit, suppose
> "Unicode" series of characters got into the image via the keyboard, a
> file, a socket... once decoded, what could one do with them? Are all
> types of decoded character series going to be represented as instances
> of a single class, although they have inherently different behavior?
I don't understand the question.
>> In addition you probably don't want #= to do normalization "because
>> performance". And even if you did you probably still want a fast path
>> for ByteString receiver and ByteString argument in which case #size is
>> safe.
>
> Assuming all fixed width representation strings (e.g. byte strings) will
> always have the same encoding (e.g. same code page), then the size check
> for those seems ok to me.
All Strings are fixed width in Pharo/Squeak. If you have a single
non-Latin1 character (code point) in a String all characters in the
String are promoted from a byte to an OOP. #size then answers the number
of OOPs instead of the number of bytes. So #size always answers the
number of characters (code points) non-normalized (because there is no
way to do normalization in Pharo/Squeak).
> Just to make sure, I am not celebrating all this complexity in the
> world... however, given that it's there, how are we going to deal with
> it? I'm concerned about the long term consequences of making things
> more complex than they are by reinterpreting them. The problem I see is
> that ultimately programs just won't Work(TM).
This seems to me a more general discussion than the problem at hand.
Again at the moment Pharo/Squeak is largely unaware of Unicode. It
supports very large code points but without any semantics (similar to
let's say Erlang with doesn't even have a String type). What
Pharo/Squeak however does know about is encodings for mapping the
Strings to and from bytes.
And quite honestly doing normalization in #= may cause things to just
won't Work(TM). Consider for example an HTTP request with a query string
with two different query fields that are normalized equal. Would you
want the values to be stored under one dictionary key?
Cheers
Philippe
May 30, 2014
Re: [Pharo-dev] String deduplication
by Marcus Denker
On 30 May 2014, at 09:39, Philippe Marschall <philippe.marschall(a)netcetera.ch> wrote:
> Hi
>
> This is an idea I stole from somebody else. The assumption is that you have a lot of Strings in the image that are equal. We could therefore remove the duplicates and make all the objects refer to the same instance.
>
> However it's not a simple as that. The main issue is that String has two responsibilities. The first is as an immutable value object. The second is as a mutable character buffer for building immutable value objects. We must not deduplicate the second kind. Unfortunately it's not straight forward to figure out which kind a string is. The approach I took is looking at whether it contains any 0 characters. An other option would be to check whether any WirteStreams are referring to it.
One idea could be to have an explicit immutable string literal class (or to set the immutability for literals in the compiler when we have support for it for literals).
These then would be save to de-duplicate, would be interesting to now how large the percentage is of literals among all your de-douplicated strings.
When playing with first class references (that can in addition override behavior) we had the idea that one could use that for realising a general âcopy on writeâ for any kind of object and even
whole object graphs⦠the idea would be to search for object graphs that are the same and replace the all pointers with just pointer-objects that trap all writes to one singe
copy.
In a second step one could combine that with âcrystallisingâ unused subgraphs (that is, serialise and compress them in memory, with references to the graph on-demand and transparently
decompress). Combined, this would save a lot of space.
But the devil is in the detail: how to find unused and equal subgraphs efficiently.
> Also, since there are behavioral differences between String and Symbol besides #= we must exclude Symbols (eg. there is #'hello' and 'hello' in the heap and they compare #= true but we must not make anybody who refers to 'hello' suddenly refer to #'hello').
>
> Anyway here's the code, this saves about 2 MB in a fairly stock Pharo 3 image. Sorry for the bad variable names.
>
Nice!
Marcus
May 30, 2014
[pharo-project/pharo-core]
by GitHub
Branch: refs/tags/40008
Home: https://github.com/pharo-project/pharo-core
May 30, 2014
[pharo-project/pharo-core] 482e24: 40008
by GitHub
Branch: refs/heads/4.0
Home: https://github.com/pharo-project/pharo-core
Commit: 482e248cc700b2346d9c53f98bcad91dc0fbe805
https://github.com/pharo-project/pharo-core/commit/482e248cc700b2346d9c53f9…
Author: Jenkins Build Server <board(a)pharo-project.org>
Date: 2014-05-30 (Fri, 30 May 2014)
Changed paths:
A Graphics-Primitives.package/Color.class/instance/recategorized/fillRectangle_on_.st
A Morphic-Base.package/extension/BorderStyle/class/complexAltFramed.st
A Morphic-Base.package/extension/BorderStyle/class/complexAltInset.st
A Morphic-Base.package/extension/BorderStyle/class/complexAltRaised.st
A Morphic-Base.package/extension/BorderStyle/class/complexFramed.st
A Morphic-Base.package/extension/BorderStyle/class/complexInset.st
A Morphic-Base.package/extension/BorderStyle/class/complexRaised.st
A Morphic-Base.package/extension/BorderStyle/class/inset.st
A Morphic-Base.package/extension/BorderStyle/class/raised.st
A Morphic-Base.package/extension/BorderStyle/class/simple.st
A Morphic-Base.package/extension/BorderStyle/class/width_color_.st
A Morphic-Base.package/extension/BorderedMorph/class/exampleGradient.st
A Morphic-Base.package/extension/BorderedMorph/instance/addCornerGrips.st
A Morphic-Base.package/extension/BorderedMorph/instance/addPaneSplitters.st
A Morphic-Base.package/extension/BorderedMorph/instance/addPaneVSplitterBetween_and_.st
A Morphic-Base.package/extension/BorderedMorph/instance/changeBorderWidth_.st
A Morphic-Base.package/extension/BorderedMorph/instance/removeCornerGrips.st
A Morphic-Base.package/extension/BorderedMorph/instance/splitters.st
A Morphic-Base.package/extension/Canvas/instance/asAlphaBlendingCanvas_.st
A Morphic-Base.package/extension/Canvas/instance/copyClipRect_.st
A Morphic-Base.package/extension/FormCanvas/instance/asBalloonCanvas.st
A Morphic-Base.package/extension/FormCanvas/instance/drawString_from_to_autoBoundAt_font_color_.st
A Morphic-Base.package/extension/FormCanvas/instance/roundCornersOf_in_during_.st
A Morphic-Base.package/extension/FormCanvas/instance/roundShadowCornersOf_in_during_.st
A Morphic-Base.package/extension/GrafPort/instance/displayScannerFor_foreground_background_ignoreColorChanges_.st
A Morphic-Base.package/extension/HandMorph/instance/generateDropFilesEvent_.st
A Morphic-Base.package/extension/HandMorph/instance/waitForClicksOrDrag_event_selectors_threshold_.st
A Morphic-Base.package/extension/Morph/instance/addHalo_.st
A Morphic-Base.package/extension/Morph/instance/addHandlesTo_box_.st
A Morphic-Base.package/extension/Morph/instance/addWorldHandlesTo_box_.st
A Morphic-Base.package/extension/Morph/instance/assureLayoutProperties.st
A Morphic-Base.package/extension/Morph/instance/assureTableProperties.st
A Morphic-Base.package/extension/Morph/instance/borderColor_.st
A Morphic-Base.package/extension/Morph/instance/borderWidth_.st
A Morphic-Base.package/extension/Morph/instance/changeCellInset_.st
A Morphic-Base.package/extension/Morph/instance/changeColor.st
A Morphic-Base.package/extension/Morph/instance/changeLayoutInset_.st
A Morphic-Base.package/extension/Morph/instance/changeMaxCellSize_.st
A Morphic-Base.package/extension/Morph/instance/changeMinCellSize_.st
A Morphic-Base.package/extension/Morph/instance/changeProportionalLayout.st
A Morphic-Base.package/extension/Morph/instance/changeTableLayout.st
A Morphic-Base.package/extension/Morph/instance/collapse.st
A Morphic-Base.package/extension/Morph/instance/containingWindow.st
A Morphic-Base.package/extension/Morph/instance/defaultBalloonColor.st
A Morphic-Base.package/extension/Morph/instance/defaultBalloonFont.st
A Morphic-Base.package/extension/Morph/instance/defaultBitmapFillForm.st
A Morphic-Base.package/extension/Morph/instance/embedInWindow.st
A Morphic-Base.package/extension/Morph/instance/embeddedInMorphicWindowLabeled_.st
A Morphic-Base.package/extension/Morph/instance/exportAsGIF.st
A Morphic-Base.package/extension/Morph/instance/exportAsPNG.st
A Morphic-Base.package/extension/Morph/instance/fillWithRamp_oriented_.st
A Morphic-Base.package/extension/Morph/instance/justDroppedInto_event_.st
A Morphic-Base.package/extension/Morph/instance/newTransformationMorph.st
A Morphic-Base.package/extension/Morph/instance/on_send_to_.st
A Morphic-Base.package/extension/Morph/instance/on_send_to_withValue_.st
A Morphic-Base.package/extension/Morph/instance/resizeMorph_.st
A Morphic-Base.package/extension/Morph/instance/rowMorphForNode_inColumn_.st
A Morphic-Base.package/extension/Morph/instance/setArrowheads.st
A Morphic-Base.package/extension/Morph/instance/setShadowOffset_.st
A Morphic-Base.package/extension/Morph/instance/useBitmapFill.st
A Morphic-Base.package/extension/Morph/instance/useGradientFill.st
A Morphic-Base.package/extension/PasteUpMorph/instance/acceptDroppingMorph_event_.st
A Morphic-Base.package/extension/PasteUpMorph/instance/createTaskbarIfNecessary.st
A Morphic-Base.package/extension/PasteUpMorph/instance/dragThroughOnDesktop_.st
A Morphic-Base.package/extension/PasteUpMorph/instance/drawingClass.st
A Morphic-Base.package/extension/PasteUpMorph/instance/fitAll.st
A Morphic-Base.package/extension/PasteUpMorph/instance/grabLassoFromScreen_.st
A Morphic-Base.package/extension/PasteUpMorph/instance/grabRubberBandFromScreen_.st
A Morphic-Base.package/extension/PasteUpMorph/instance/keystrokeInWorld_.st
A Morphic-Base.package/extension/PasteUpMorph/instance/makeAScreenshot.st
A Morphic-Base.package/extension/PasteUpMorph/instance/modelWakeUp.st
A Morphic-Base.package/extension/PasteUpMorph/instance/mouseDown_.st
A Morphic-Base.package/extension/PasteUpMorph/instance/windowsSatisfying_.st
A Morphic-Base.package/extension/WorldMorph/class/installNewWorld.st
A Morphic-Base.package/extension/WorldMorph/instance/acceptDroppingMorph_event_.st
A Morphic-Base.package/extension/WorldMorph/instance/dispatchKeystroke_.st
A Morphic-Base.package/extension/WorldMorph/instance/install.st
A Morphic-Base.package/extension/WorldMorph/instance/installForUIProcessReinstall.st
A Morphic-Base.package/extension/WorldState/class/startMessageTally.st
A Morphic-Base.package/extension/WorldState/class/startThenBrowseMessageTally.st
A Morphic-Base.package/extension/WorldState/class/systemOn_.st
A Morphic-Base.package/extension/WorldState/class/windowsOn_.st
A Morphic-Base.package/extension/WorldState/instance/addAlarm_withArguments_for_at_.st
A Morphic-Base.package/extension/WorldState/instance/convertStepList.st
A Morphic-Base.package/extension/WorldState/instance/menuBuilder.st
A Morphic-Base.package/extension/WorldState/instance/startStepping_at_selector_arguments_stepTime_.st
R Morphic-Core.package/BorderStyle.class/class/instance creation/complexAltFramed.st
R Morphic-Core.package/BorderStyle.class/class/instance creation/complexAltInset.st
R Morphic-Core.package/BorderStyle.class/class/instance creation/complexAltRaised.st
R Morphic-Core.package/BorderStyle.class/class/instance creation/complexFramed.st
R Morphic-Core.package/BorderStyle.class/class/instance creation/complexInset.st
R Morphic-Core.package/BorderStyle.class/class/instance creation/complexRaised.st
R Morphic-Core.package/BorderStyle.class/class/instance creation/inset.st
R Morphic-Core.package/BorderStyle.class/class/instance creation/raised.st
R Morphic-Core.package/BorderStyle.class/class/instance creation/simple.st
R Morphic-Core.package/BorderStyle.class/class/instance creation/width_color_.st
R Morphic-Core.package/BorderedMorph.class/class/examples/exampleGradient.st
R Morphic-Core.package/BorderedMorph.class/instance/lookenhancements/addCornerGrips.st
R Morphic-Core.package/BorderedMorph.class/instance/lookenhancements/addPaneSplitters.st
R Morphic-Core.package/BorderedMorph.class/instance/lookenhancements/addPaneVSplitterBetween_and_.st
R Morphic-Core.package/BorderedMorph.class/instance/lookenhancements/removeCornerGrips.st
R Morphic-Core.package/BorderedMorph.class/instance/lookenhancements/splitters.st
R Morphic-Core.package/BorderedMorph.class/instance/menu/changeBorderWidth_.st
R Morphic-Core.package/Canvas.class/instance/converting/asAlphaBlendingCanvas_.st
R Morphic-Core.package/Canvas.class/instance/copying/copyClipRect_.st
R Morphic-Core.package/FormCanvas.class/instance/Morphic-Base-Balloon/asBalloonCanvas.st
R Morphic-Core.package/FormCanvas.class/instance/drawing-general/roundCornersOf_in_during_.st
R Morphic-Core.package/FormCanvas.class/instance/drawing-general/roundShadowCornersOf_in_during_.st
R Morphic-Core.package/FormCanvas.class/instance/drawing-text/drawString_from_to_autoBoundAt_font_color_.st
R Morphic-Core.package/GrafPort.class/instance/accessing/displayScannerFor_foreground_background_ignoreColorChanges_.st
R Morphic-Core.package/HandMorph.class/instance/double click support/waitForClicksOrDrag_event_selectors_threshold_.st
R Morphic-Core.package/HandMorph.class/instance/private events/generateDropFilesEvent_.st
A Morphic-Core.package/HandMorph.class/instance/recategorized/fullDrawOn_.st
R Morphic-Core.package/Morph.class/instance/Morphic-Base-MorphTreeWidget/rowMorphForNode_inColumn_.st
R Morphic-Core.package/Morph.class/instance/accessing/borderColor_.st
R Morphic-Core.package/Morph.class/instance/accessing/borderWidth_.st
R Morphic-Core.package/Morph.class/instance/drop shadows/setShadowOffset_.st
R Morphic-Core.package/Morph.class/instance/dropping%2Fgrabbing/justDroppedInto_event_.st
R Morphic-Core.package/Morph.class/instance/event handling/on_send_to_.st
R Morphic-Core.package/Morph.class/instance/event handling/on_send_to_withValue_.st
A Morphic-Core.package/Morph.class/instance/events-processing/handleMouseWheel_.st
A Morphic-Core.package/Morph.class/instance/events-processing/handlesMouseWheel_.st
R Morphic-Core.package/Morph.class/instance/halos and balloon help/addHalo_.st
R Morphic-Core.package/Morph.class/instance/halos and balloon help/addHandlesTo_box_.st
R Morphic-Core.package/Morph.class/instance/halos and balloon help/addWorldHandlesTo_box_.st
R Morphic-Core.package/Morph.class/instance/halos and balloon help/defaultBalloonColor.st
R Morphic-Core.package/Morph.class/instance/halos and balloon help/defaultBalloonFont.st
R Morphic-Core.package/Morph.class/instance/layout-menu/changeCellInset_.st
R Morphic-Core.package/Morph.class/instance/layout-menu/changeLayoutInset_.st
R Morphic-Core.package/Morph.class/instance/layout-menu/changeMaxCellSize_.st
R Morphic-Core.package/Morph.class/instance/layout-menu/changeMinCellSize_.st
R Morphic-Core.package/Morph.class/instance/layout-menu/changeProportionalLayout.st
R Morphic-Core.package/Morph.class/instance/layout-menu/changeTableLayout.st
R Morphic-Core.package/Morph.class/instance/layout-properties/assureLayoutProperties.st
R Morphic-Core.package/Morph.class/instance/layout-properties/assureTableProperties.st
R Morphic-Core.package/Morph.class/instance/menus/changeColor.st
R Morphic-Core.package/Morph.class/instance/menus/collapse.st
R Morphic-Core.package/Morph.class/instance/menus/exportAsGIF.st
R Morphic-Core.package/Morph.class/instance/menus/exportAsPNG.st
R Morphic-Core.package/Morph.class/instance/menus/setArrowheads.st
R Morphic-Core.package/Morph.class/instance/meta-actions/resizeMorph_.st
A Morphic-Core.package/Morph.class/instance/recategorized/changed.st
A Morphic-Core.package/Morph.class/instance/recategorized/handlesDropShadowInHand.st
A Morphic-Core.package/Morph.class/instance/recategorized/handlesMouseOver_.st
A Morphic-Core.package/Morph.class/instance/recategorized/layoutChanged.st
A Morphic-Core.package/Morph.class/instance/recategorized/morphicLayerNumberWithin_.st
A Morphic-Core.package/Morph.class/instance/recategorized/privateMoveBy_.st
A Morphic-Core.package/Morph.class/instance/recategorized/rejectsEvent_.st
R Morphic-Core.package/Morph.class/instance/rotate scale and flex/newTransformationMorph.st
R Morphic-Core.package/Morph.class/instance/structure/containingWindow.st
R Morphic-Core.package/Morph.class/instance/utilities/embedInWindow.st
R Morphic-Core.package/Morph.class/instance/utilities/embeddedInMorphicWindowLabeled_.st
R Morphic-Core.package/Morph.class/instance/visual properties/defaultBitmapFillForm.st
R Morphic-Core.package/Morph.class/instance/visual properties/fillWithRamp_oriented_.st
R Morphic-Core.package/Morph.class/instance/visual properties/useBitmapFill.st
R Morphic-Core.package/Morph.class/instance/visual properties/useGradientFill.st
R Morphic-Core.package/PasteUpMorph.class/instance/Morphic-Base-Windows/fitAll.st
R Morphic-Core.package/PasteUpMorph.class/instance/Morphic-Base-Windows/windowsSatisfying_.st
R Morphic-Core.package/PasteUpMorph.class/instance/dropping%2Fgrabbing/acceptDroppingMorph_event_.st
R Morphic-Core.package/PasteUpMorph.class/instance/dropping%2Fgrabbing/mouseDown_.st
A Morphic-Core.package/PasteUpMorph.class/instance/recategorized/backgroundMorph.st
A Morphic-Core.package/PasteUpMorph.class/instance/recategorized/handlerForMouseDown_.st
A Morphic-Core.package/PasteUpMorph.class/instance/recategorized/resizeBackgroundMorph.st
R Morphic-Core.package/PasteUpMorph.class/instance/taskbar/createTaskbarIfNecessary.st
R Morphic-Core.package/PasteUpMorph.class/instance/user interface/modelWakeUp.st
R Morphic-Core.package/PasteUpMorph.class/instance/world menu/drawingClass.st
R Morphic-Core.package/PasteUpMorph.class/instance/world menu/grabLassoFromScreen_.st
R Morphic-Core.package/PasteUpMorph.class/instance/world menu/grabRubberBandFromScreen_.st
R Morphic-Core.package/PasteUpMorph.class/instance/world menu/keystrokeInWorld_.st
R Morphic-Core.package/PasteUpMorph.class/instance/world menu/makeAScreenshot.st
R Morphic-Core.package/PasteUpMorph.class/instance/world state/dragThroughOnDesktop_.st
R Morphic-Core.package/WorldMorph.class/class/world creation/installNewWorld.st
R Morphic-Core.package/WorldMorph.class/instance/initialization/installForUIProcessReinstall.st
R Morphic-Core.package/WorldMorph.class/instance/menu %26 halo/dispatchKeystroke_.st
R Morphic-Core.package/WorldMorph.class/instance/submorphs-add%2Fremove/acceptDroppingMorph_event_.st
R Morphic-Core.package/WorldMorph.class/instance/world state/install.st
R Morphic-Core.package/WorldState.class/class/world menu items/startMessageTally.st
R Morphic-Core.package/WorldState.class/class/world menu items/startThenBrowseMessageTally.st
R Morphic-Core.package/WorldState.class/class/world menu items/systemOn_.st
R Morphic-Core.package/WorldState.class/class/world menu items/windowsOn_.st
R Morphic-Core.package/WorldState.class/instance/alarms/addAlarm_withArguments_for_at_.st
R Morphic-Core.package/WorldState.class/instance/object filein/convertStepList.st
R Morphic-Core.package/WorldState.class/instance/stepping/startStepping_at_selector_arguments_stepTime_.st
R Morphic-Core.package/WorldState.class/instance/worldmenu building/menuBuilder.st
R Polymorph-Widgets.package/extension/Color/instance/fillRectangle_on_.st
R Polymorph-Widgets.package/extension/HandMorph/instance/fullDrawOn_.st
R Polymorph-Widgets.package/extension/Morph/instance/changed.st
R Polymorph-Widgets.package/extension/Morph/instance/handleMouseWheel_.st
R Polymorph-Widgets.package/extension/Morph/instance/handlesDropShadowInHand.st
R Polymorph-Widgets.package/extension/Morph/instance/handlesMouseOver_.st
R Polymorph-Widgets.package/extension/Morph/instance/handlesMouseWheel_.st
R Polymorph-Widgets.package/extension/Morph/instance/layoutChanged.st
R Polymorph-Widgets.package/extension/Morph/instance/morphicLayerNumberWithin_.st
R Polymorph-Widgets.package/extension/Morph/instance/privateMoveBy_.st
R Polymorph-Widgets.package/extension/Morph/instance/rejectsEvent_.st
R Polymorph-Widgets.package/extension/PasteUpMorph/instance/backgroundMorph.st
R Polymorph-Widgets.package/extension/PasteUpMorph/instance/handlerForMouseDown_.st
R Polymorph-Widgets.package/extension/PasteUpMorph/instance/resizeBackgroundMorph.st
M ScriptLoader40.package/ScriptLoader.class/README.md
A ScriptLoader40.package/ScriptLoader.class/instance/pharo - scripts/script7.st
A ScriptLoader40.package/ScriptLoader.class/instance/pharo - scripts/script8.st
A ScriptLoader40.package/ScriptLoader.class/instance/pharo - updates/update40008.st
M ScriptLoader40.package/ScriptLoader.class/instance/public/commentForCurrentUpdate.st
Log Message:
-----------
40008
fourth trial
https://pharo.fogbugz.com/f/cases/13263/Morphic-Core-methods-recategorizati…
http://files.pharo.org/image/40/40008.zip
May 30, 2014
String deduplication
by Philippe Marschall
Hi
This is an idea I stole from somebody else. The assumption is that you
have a lot of Strings in the image that are equal. We could therefore
remove the duplicates and make all the objects refer to the same instance.
However it's not a simple as that. The main issue is that String has two
responsibilities. The first is as an immutable value object. The second
is as a mutable character buffer for building immutable value objects.
We must not deduplicate the second kind. Unfortunately it's not straight
forward to figure out which kind a string is. The approach I took is
looking at whether it contains any 0 characters. An other option would
be to check whether any WirteStreams are referring to it.
Also, since there are behavioral differences between String and Symbol
besides #= we must exclude Symbols (eg. there is #'hello' and 'hello' in
the heap and they compare #= true but we must not make anybody who
refers to 'hello' suddenly refer to #'hello').
Anyway here's the code, this saves about 2 MB in a fairly stock Pharo 3
image. Sorry for the bad variable names.
| b d m |
b := Bag new.
d := OrderedCollection new.
m := Dictionary new.
"count all string instances"
String allSubInstancesDo: [ :s |
s isSymbol ifFalse: [
b add: s ] ].
"find the ones that have no duplicates or are likely buffers"
b doWithOccurrences: [ :s :i |
(i = 1 or: [ s anySatisfy: [ :c | c codePoint = 0 ] ]) ifTrue: [
d add: s -> i ] ].
"remove the ones that have no duplicates or are likely buffers"
d do: [ :a |
a value timesRepeat: [
b remove: a key ] ].
"map all duplicate strings to their duplicates"
String allSubInstancesDo: [ :s |
s isSymbol ifFalse: [
(b includes: s) ifTrue: [
| l |
l := m at: s ifAbsentPut: [ OrderedCollection new ].
l add: s ] ].
"remove the duplicates"
m keysAndValues do [ :k :v |
| f |
f := v at: 1.
2 to: v size do: [ :i |
(v at: i) becomeForward: f ] ]
Cheers
Philippe
May 30, 2014
Re: [Pharo-dev] Welcome norizzk.com
by Johan Brichau
On 29 May 2014, at 22:42, stepharo <stepharo(a)free.fr> wrote:
> I would love so much that the deployment is also using Pharo. :)
> May be with Mongo it will also be possible in the future.
I can understand you want that and I think it is a healthy desire.
But I would love the Pharo ecosystem to embrace Gemstone far more than it does today. Such power at your fingertips...
Johan
May 30, 2014
TilingWindowManager -- WorldManager? [Pharo3.0]
by H. Hirzel
Hello
I installed TilingWindowManager through the
MetacelloConfigurationBrowser in Pharo 3.0.
The class comment of TWMWorldManager says
I provide an unlimited number of blank canvases on which to create...
"Add a world:"
WorldManager instance createOrSwitchToWorldNamed: 'JustAnotherWorld'.
"Return to the default world:"
WorldManager instance createOrSwitchToWorldNamed: 'Pharo'.
However the global WorldManager is not known anymore. What do I need
to use instead?
Thank you for the answer in advance
Hannes
May 30, 2014