2011/8/29 Nicolas Cellier <[email protected]> > 2011/8/29 Levente Uzonyi <[email protected]>: > > On Mon, 29 Aug 2011, Stéphane Ducasse wrote: > > > >> and we could keep all the Object method in a extension of the halt > >> packages and just some of them as forward to Halt. > >> > >> I know that there was an attempt on the inbox to do that. But I was > >> worried that people will complain. > >> Now cleaning Object would be nice. > >> > >> Stef > >> > >> On Aug 28, 2011, at 8:10 PM, Lukas Renggli wrote: > >> > >>> We have a class Halt and the class-side is empty. This seems to be the > >>> right place to hold all the code in the protocols #debugging and > >>> #debuggin-haltonce of Object. With a few renames we could get a really > >>> nice DSL: > >>> > >>> Halt now. > >>> Halt if: a = 2. > >> > >> why not > >> Halt ifTrue: [a = 2]. > >> > >> ? > >> > >> two questions in my questions :) > >> [] and True: > > > > Currently you can't send #ifTrue: to any object. If you want to enable > that, > > then you have to: > > - remove the optimization which will result in worse performance and will > > break code that assumes this method is atomic > > - or you have to change the compiler to generate extra bytecodes which > will > > perform the real message send when the receiver is not a boolean and > change > > the VM to not send the message in specialObjectsArray (currently > > #mustBeBoolean), but execute those extra bytecodes > > - or you have to change the handling of NonBooleanReceiver, use the > > decompiler to find out what has to be sent to who, etc. > > > > Btw Halt if: a = 2 is much more readable IMHO. > > > > > > Levente > > > > More exactly, you can't send #ifTrue: with a block argument. If you > use anything else but a block, the compiler will use a normal message > send (at least in Squeak, can't remember if it was ported to Pharo). >
ok, the complier applies the optimisation only is the argument is a Block. Because I tried: Foo ifTrue: a=2 " and it works perfectly" Foo ifTrue: [a=2] "but this one not. mustBeBoolean receiver" Thanks Nicolas, Luc > For example: (Halt ifTrue: [a = 2] yourself) would be possible (but > block is useless in this case as already said) > > Nicolas > > >> > >>> Halt once. > >>> > >>> Lukas > >>> > >>> > >>> On 28 August 2011 19:47, Marcus Denker <[email protected]> wrote: > >>>> > >>>> On Aug 28, 2011, at 7:24 PM, Sean P. DeNigris wrote: > >>>> > >>>>> > >>>>> 2. Using Object to halt causes bloat, and doesn't buy much (except > >>>>> that's > >>>>> how we've always done it). > >>>> > >>>> > >>>> Back in the days, we were virtually crucified for introducing the > Beeper > >>>> class along the > >>>> same reasoning... > >>>> > >>>> The Beeper actually got very depressed due to having his very > existance > >>>> being > >>>> questioned. > >>>> > >>>> "I am just the result of a random refactoring" he was complaining > "maybe > >>>> I should just > >>>> just delete myself and everyone will be happy". > >>>> > >>>> (you know, reflection *is* dangerous! There has been a lot of talk to > >>>> make reflection more > >>>> secure... for a reason!). > >>>> > >>>> To cheer him up, I gave him the lead role in a real, peer reviewed > >>>> Paper: > >>>> > >>>> http://scg.unibe.ch/archive/papers/Denk08bMetaContextLNBIP.pdf > >>>> > >>>> The Beeper thus was the first Class to be really "Meta" in the history > >>>> of > >>>> Objects. What a thrill. In an interview, the Beeper said: "You know, > >>>> being meta is hard > >>>> to decribe... Classes claim to be Meta all the time. But I doubt they > >>>> ever really are Meta. Being > >>>> Meta is special. The whole System looks different when meta!" > >>>> > >>>> ;-) > >>>> > >>>> -- > >>>> Marcus Denker -- http://marcusdenker.de > >>>> > >>>> > >>>> > >>> > >>> > >>> > >>> -- > >>> Lukas Renggli > >>> www.lukas-renggli.ch > >>> > >> > >> > > > >
