Re: [Pharo-project] About String empty and others
it is an interesting topic. I find #() more expressive than Array empty. but perhaps this is because I have learnt to recognize it deeply. Something i remember Michele Lanza talking about visualisation and the types of things (size, colour, shape) that we have a primitive recognition of http://www.se-radio.net/podcast/2009-03/episode-130-code-visualization-michele-lanza and I am sure all the Moose folks are very familiar... I am not sure if it applies in this case or not of course... Anyway I feel that I never have to 'parse' #() but when I see Array empty, i have to read it in my head. So for me it might be more expressive but it is more verbose. I am just interested in the debate from a syntax point of view, not an optimization point of view. I feel there is a correlation between #() being physically small, about 5-10mm say on the screen with Array new, or String new which is at least 5cm with a space that breaks it up. Do you see my point? I guess I don't understand why without it, Pharo does not describe itself. You would only expect a single send of Array empty in the system (from the optimzation machinery)? If people started using it generally, i would find that a shame for the reason described above that it is not compact. If all you want is the empty array defined in a single place, I guess that is fine. but then how do you mark it private? cheers, Mike On Tue, Feb 16, 2010 at 8:57 PM, Stéphane Ducasse wrote: > > On Feb 16, 2010, at 8:01 PM, Chris Muller wrote: > >> Even if you make the compiler change, I hope you will still consider >> leaving the two #empty methods in place for expressiveness. They, >> too, would answer the single canonicalized global stored in the >> compiler. However, the use of #empty makes the canonicalization >> explicit rather than implicit, and affords appreciation of a Pharo >> system that describes itself, e.g., associating the word "empty" with >> the notation that a new Pharo user might find cryptic. > > this changes was already integrated. > > Now your argument could work if the syntax #(a b c) would disappear. > Now since you have to teach/learn #(a b c), it should be clear that #() > is an empty array. The same argument holds for '' versus String empty. > So I do not see the real gain. > > Stef > > ___ > Pharo-project mailing list > Pharo-project@lists.gforge.inria.fr > http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project > ___ Pharo-project mailing list Pharo-project@lists.gforge.inria.fr http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
Re: [Pharo-project] About String empty and others
On Feb 16, 2010, at 8:01 PM, Chris Muller wrote: > Even if you make the compiler change, I hope you will still consider > leaving the two #empty methods in place for expressiveness. They, > too, would answer the single canonicalized global stored in the > compiler. However, the use of #empty makes the canonicalization > explicit rather than implicit, and affords appreciation of a Pharo > system that describes itself, e.g., associating the word "empty" with > the notation that a new Pharo user might find cryptic. this changes was already integrated. Now your argument could work if the syntax #(a b c) would disappear. Now since you have to teach/learn #(a b c), it should be clear that #() is an empty array. The same argument holds for '' versus String empty. So I do not see the real gain. Stef ___ Pharo-project mailing list Pharo-project@lists.gforge.inria.fr http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
Re: [Pharo-project] About String empty and others
On Feb 16, 2010, at 8:01 PM, Chris Muller wrote: > Even if you make the compiler change, I hope you will still consider > leaving the two #empty methods in place for expressiveness. They, > too, would answer the single canonicalized global stored in the > compiler. However, the use of #empty makes the canonicalization > explicit rather than implicit, and affords appreciation of a Pharo > system that describes itself, e.g., associating the word "empty" with > the notation that a new Pharo user might find cryptic. > You are right! So we should just add the methods for now. In the end, compiling everywhere the same #() would than be just an inlining step of a good optimizer, not special logic in the compiler. So I vote for your methods and wait for the inliner to optimize it away ;-) Marcus > > On Sat, Feb 13, 2010 at 1:06 PM, Marcus Denker wrote: >> >> On Feb 13, 2010, at 8:03 PM, Stéphane Ducasse wrote: >> >>> the only think is that the #() and '' will not be created all the time but >>> in the compile method literal frame. >>> >> Yes, right now it's created once per method... the compiler could easily >> make sure that it's shared globally. >> >>Marcus >> >> >>> Stef >>> >>> would the idea to be to rewrite every #() with Array empty? If that was the case could you get the compiler to do that as an optimization? I quite like the fact that #() is the empty array. it's nice and compact; quite aesthetic. cheers, Mike On Sat, Feb 13, 2010 at 11:06 AM, Stéphane Ducasse wrote: > Hi guys > > chris mueller proposed in squeak to have > > > Exception>>messageText > "Return an exception's message text." > + ^ messageText ifNil: [ String empty ]! > - > - ^messageText! > > - Added Array class>>#empty and String class>>#empty to provide > applications with > canonicalized instances of these oft-used objects; since they are > embedded as literals in the > CompiledMethod. > > === Diff against Collections-ar.304 === > > Item was added: > + - Method: Array class>>empty (in category 'instance creation') - > + empty > + "A canonicalized empty Array instance." > + ^ #()! > > Item was added: > + - Method: String class>>empty (in category 'instance creation') > - > + empty > + "A canonicalized empty String instance." > + ^ ''! > > Item was removed: > - - Method: String>>asDefaultDecodedString (in category 'converting') > - > - asDefaultDecodedString > - > - ^ self > > > http://code.google.com/p/pharo/issues/detail?id=1961 > ___ > Pharo-project mailing list > Pharo-project@lists.gforge.inria.fr > http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project > ___ Pharo-project mailing list Pharo-project@lists.gforge.inria.fr http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project >>> >>> >>> ___ >>> Pharo-project mailing list >>> Pharo-project@lists.gforge.inria.fr >>> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project >> >> -- >> Marcus Denker -- http://www.marcusdenker.de >> INRIA Lille -- Nord Europe. Team RMoD. >> >> >> ___ >> Pharo-project mailing list >> Pharo-project@lists.gforge.inria.fr >> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project >> > > ___ > Pharo-project mailing list > Pharo-project@lists.gforge.inria.fr > http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project -- Marcus Denker -- http://www.marcusdenker.de INRIA Lille -- Nord Europe. Team RMoD. ___ Pharo-project mailing list Pharo-project@lists.gforge.inria.fr http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
Re: [Pharo-project] About String empty and others
Even if you make the compiler change, I hope you will still consider leaving the two #empty methods in place for expressiveness. They, too, would answer the single canonicalized global stored in the compiler. However, the use of #empty makes the canonicalization explicit rather than implicit, and affords appreciation of a Pharo system that describes itself, e.g., associating the word "empty" with the notation that a new Pharo user might find cryptic. On Sat, Feb 13, 2010 at 1:06 PM, Marcus Denker wrote: > > On Feb 13, 2010, at 8:03 PM, Stéphane Ducasse wrote: > >> the only think is that the #() and '' will not be created all the time but >> in the compile method literal frame. >> > Yes, right now it's created once per method... the compiler could easily make > sure that it's shared globally. > > Marcus > > >> Stef >> >> >>> would the idea to be to rewrite every #() with Array empty? >>> >>> If that was the case could you get the compiler to do that as an >>> optimization? I quite like the fact that #() is the empty array. it's >>> nice and compact; quite aesthetic. >>> >>> cheers, >>> Mike >>> >>> On Sat, Feb 13, 2010 at 11:06 AM, Stéphane Ducasse >>> wrote: Hi guys chris mueller proposed in squeak to have Exception>>messageText "Return an exception's message text." + ^ messageText ifNil: [ String empty ]! - - ^messageText! - Added Array class>>#empty and String class>>#empty to provide applications with canonicalized instances of these oft-used objects; since they are embedded as literals in the CompiledMethod. === Diff against Collections-ar.304 === Item was added: + - Method: Array class>>empty (in category 'instance creation') - + empty + "A canonicalized empty Array instance." + ^ #()! Item was added: + - Method: String class>>empty (in category 'instance creation') - + empty + "A canonicalized empty String instance." + ^ ''! Item was removed: - - Method: String>>asDefaultDecodedString (in category 'converting') - - asDefaultDecodedString - - ^ self http://code.google.com/p/pharo/issues/detail?id=1961 ___ Pharo-project mailing list Pharo-project@lists.gforge.inria.fr http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project >>> >>> ___ >>> Pharo-project mailing list >>> Pharo-project@lists.gforge.inria.fr >>> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project >> >> >> ___ >> Pharo-project mailing list >> Pharo-project@lists.gforge.inria.fr >> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project > > -- > Marcus Denker -- http://www.marcusdenker.de > INRIA Lille -- Nord Europe. Team RMoD. > > > ___ > Pharo-project mailing list > Pharo-project@lists.gforge.inria.fr > http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project > ___ Pharo-project mailing list Pharo-project@lists.gforge.inria.fr http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
Re: [Pharo-project] About String empty and others
On Feb 13, 2010, at 8:03 PM, Stéphane Ducasse wrote: > the only think is that the #() and '' will not be created all the time but in > the compile method literal frame. > Yes, right now it's created once per method... the compiler could easily make sure that it's shared globally. Marcus > Stef > > >> would the idea to be to rewrite every #() with Array empty? >> >> If that was the case could you get the compiler to do that as an >> optimization? I quite like the fact that #() is the empty array. it's >> nice and compact; quite aesthetic. >> >> cheers, >> Mike >> >> On Sat, Feb 13, 2010 at 11:06 AM, Stéphane Ducasse >> wrote: >>> Hi guys >>> >>> chris mueller proposed in squeak to have >>> >>> >>> Exception>>messageText >>> "Return an exception's message text." >>> + ^ messageText ifNil: [ String empty ]! >>> - >>> - ^messageText! >>> >>> - Added Array class>>#empty and String class>>#empty to provide >>> applications with >>> canonicalized instances of these oft-used objects; since they are embedded >>> as literals in the >>> CompiledMethod. >>> >>> === Diff against Collections-ar.304 === >>> >>> Item was added: >>> + - Method: Array class>>empty (in category 'instance creation') - >>> + empty >>> + "A canonicalized empty Array instance." >>> + ^ #()! >>> >>> Item was added: >>> + - Method: String class>>empty (in category 'instance creation') - >>> + empty >>> + "A canonicalized empty String instance." >>> + ^ ''! >>> >>> Item was removed: >>> - - Method: String>>asDefaultDecodedString (in category 'converting') >>> - >>> - asDefaultDecodedString >>> - >>> - ^ self >>> >>> >>> http://code.google.com/p/pharo/issues/detail?id=1961 >>> ___ >>> Pharo-project mailing list >>> Pharo-project@lists.gforge.inria.fr >>> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project >>> >> >> ___ >> Pharo-project mailing list >> Pharo-project@lists.gforge.inria.fr >> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project > > > ___ > Pharo-project mailing list > Pharo-project@lists.gforge.inria.fr > http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project -- Marcus Denker -- http://www.marcusdenker.de INRIA Lille -- Nord Europe. Team RMoD. ___ Pharo-project mailing list Pharo-project@lists.gforge.inria.fr http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
Re: [Pharo-project] About String empty and others
the only think is that the #() and '' will not be created all the time but in the compile method literal frame. Stef > would the idea to be to rewrite every #() with Array empty? > > If that was the case could you get the compiler to do that as an > optimization? I quite like the fact that #() is the empty array. it's > nice and compact; quite aesthetic. > > cheers, > Mike > > On Sat, Feb 13, 2010 at 11:06 AM, Stéphane Ducasse > wrote: >> Hi guys >> >> chris mueller proposed in squeak to have >> >> >> Exception>>messageText >> "Return an exception's message text." >> + ^ messageText ifNil: [ String empty ]! >> - >> - ^messageText! >> >> - Added Array class>>#empty and String class>>#empty to provide applications >> with >> canonicalized instances of these oft-used objects; since they are embedded >> as literals in the >> CompiledMethod. >> >> === Diff against Collections-ar.304 === >> >> Item was added: >> + - Method: Array class>>empty (in category 'instance creation') - >> + empty >> + "A canonicalized empty Array instance." >> + ^ #()! >> >> Item was added: >> + - Method: String class>>empty (in category 'instance creation') - >> + empty >> + "A canonicalized empty String instance." >> + ^ ''! >> >> Item was removed: >> - - Method: String>>asDefaultDecodedString (in category 'converting') >> - >> - asDefaultDecodedString >> - >> - ^ self >> >> >> http://code.google.com/p/pharo/issues/detail?id=1961 >> ___ >> Pharo-project mailing list >> Pharo-project@lists.gforge.inria.fr >> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project >> > > ___ > Pharo-project mailing list > Pharo-project@lists.gforge.inria.fr > http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project ___ Pharo-project mailing list Pharo-project@lists.gforge.inria.fr http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
Re: [Pharo-project] About String empty and others
On Feb 13, 2010, at 7:40 PM, Michael Roberts wrote: > would the idea to be to rewrite every #() with Array empty? no and this is a good question. For now I do not see what we learn. I'm not sure that these empty messages bring anything. besides one extra message. > If that was the case could you get the compiler to do that as an > optimization? I quite like the fact that #() is the empty array. it's > nice and compact; quite aesthetic. yes I will roll back some of the changes > > cheers, > Mike > > On Sat, Feb 13, 2010 at 11:06 AM, Stéphane Ducasse > wrote: >> Hi guys >> >> chris mueller proposed in squeak to have >> >> >> Exception>>messageText >> "Return an exception's message text." >> + ^ messageText ifNil: [ String empty ]! >> - >> - ^messageText! >> >> - Added Array class>>#empty and String class>>#empty to provide applications >> with >> canonicalized instances of these oft-used objects; since they are embedded >> as literals in the >> CompiledMethod. >> >> === Diff against Collections-ar.304 === >> >> Item was added: >> + - Method: Array class>>empty (in category 'instance creation') - >> + empty >> + "A canonicalized empty Array instance." >> + ^ #()! >> >> Item was added: >> + - Method: String class>>empty (in category 'instance creation') - >> + empty >> + "A canonicalized empty String instance." >> + ^ ''! >> >> Item was removed: >> - - Method: String>>asDefaultDecodedString (in category 'converting') >> - >> - asDefaultDecodedString >> - >> - ^ self >> >> >> http://code.google.com/p/pharo/issues/detail?id=1961 >> ___ >> Pharo-project mailing list >> Pharo-project@lists.gforge.inria.fr >> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project >> > > ___ > Pharo-project mailing list > Pharo-project@lists.gforge.inria.fr > http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project ___ Pharo-project mailing list Pharo-project@lists.gforge.inria.fr http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
Re: [Pharo-project] About String empty and others
would the idea to be to rewrite every #() with Array empty? If that was the case could you get the compiler to do that as an optimization? I quite like the fact that #() is the empty array. it's nice and compact; quite aesthetic. cheers, Mike On Sat, Feb 13, 2010 at 11:06 AM, Stéphane Ducasse wrote: > Hi guys > > chris mueller proposed in squeak to have > > > Exception>>messageText > "Return an exception's message text." > + ^ messageText ifNil: [ String empty ]! > - > - ^messageText! > > - Added Array class>>#empty and String class>>#empty to provide applications > with > canonicalized instances of these oft-used objects; since they are embedded as > literals in the > CompiledMethod. > > === Diff against Collections-ar.304 === > > Item was added: > + - Method: Array class>>empty (in category 'instance creation') - > + empty > + "A canonicalized empty Array instance." > + ^ #()! > > Item was added: > + - Method: String class>>empty (in category 'instance creation') - > + empty > + "A canonicalized empty String instance." > + ^ ''! > > Item was removed: > - - Method: String>>asDefaultDecodedString (in category 'converting') > - > - asDefaultDecodedString > - > - ^ self > > > http://code.google.com/p/pharo/issues/detail?id=1961 > ___ > Pharo-project mailing list > Pharo-project@lists.gforge.inria.fr > http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project > ___ Pharo-project mailing list Pharo-project@lists.gforge.inria.fr http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
[Pharo-project] About String empty and others
Hi guys chris mueller proposed in squeak to have Exception>>messageText "Return an exception's message text." + ^ messageText ifNil: [ String empty ]! - - ^messageText! - Added Array class>>#empty and String class>>#empty to provide applications with canonicalized instances of these oft-used objects; since they are embedded as literals in the CompiledMethod. === Diff against Collections-ar.304 === Item was added: + - Method: Array class>>empty (in category 'instance creation') - + empty + "A canonicalized empty Array instance." + ^ #()! Item was added: + - Method: String class>>empty (in category 'instance creation') - + empty + "A canonicalized empty String instance." + ^ ''! Item was removed: - - Method: String>>asDefaultDecodedString (in category 'converting') - - asDefaultDecodedString - - ^ self http://code.google.com/p/pharo/issues/detail?id=1961 ___ Pharo-project mailing list Pharo-project@lists.gforge.inria.fr http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project