On Tue, Mar 25, 2014 at 12:05 PM, Frank Shearar <[email protected]>wrote:
> On 24 March 2014 23:33, [email protected] <[email protected]> wrote: > > On Tue, Mar 25, 2014 at 12:11 AM, Eliot Miranda <[email protected] > > > > wrote: > >> > >> > >> > >> > >> On Mon, Mar 24, 2014 at 4:02 PM, [email protected] <[email protected] > > > >> wrote: > >>> > >>> I am curious. > >>> > >>> Maybe on the first one, substitute something when a DNU is encountered. > >>> Like logging undefined receivers. > >>> > >>> I wonder how the next one behaves on JITted methods. I fear that offset > >>> errors may lead to weird errors. > >> > >> > >> It *should* "just work" :-) (provided the jump distance of -12 is > >> correct). The VM traps assignments to variables of contexts, and > converts > >> them to vanilla contexts. Therefore the jump doesn't occur in JITTED > code > >> but back in normal interpreted bytecode. > >> > > > > How magical! > > > >>> > >>> On Mon, Mar 24, 2014 at 11:51 PM, Pavel Krivanek > >>> <[email protected]> wrote: > >>>> > >>>> Who can find the most useful usage of this? > >>>> > >>>> thisContext instVarNamed: #receiver put: 42. > >>>> self factorial > >>>> > >>>> GOTO statement in Pharo: > >>>> > >>>> FileStream stdout nextPutAll: 'Hello world'; lf. > >>>> thisContext jump: -12. > >>>> Let's collect the next ones :-) > >> > >> > >> this is my favourite, and would lock-up a strict blue book VM. (I once > >> locked up Allen Wirfs-Brock's 4404 with this and he wasn't best pleased > >> [forgive me Allen]) > >> > >> > >> | a | > >> a := Array with: #perform:withArguments: with: nil. > >> a at: 2 put: a. > >> a perform: a first withArguments: a > >> > >> ;-) > >> > > > > > > The infinite is near. > > > > Not as blocking, but still... (Alt-. interrupts this one) > > > > Crazy>>run > > Continuation currentDo: [ :cc | here := cc ]. > > here value: true. > > > > Crazy new run > > > > BTW, is there any support for partial continuations in Pharo? > Continuations > > like this one look like full continuations and that's *huge*. > > Yes: http://ss3.gemstone.com/ss/Control.html > > Last time I checked I did need to add a shim (see the ControlPharo > package), but it did load cleanly and pass all its own tests. > I have now loaded the SS3 version. All tests do pass. I loaded the one from SqueakSource before. > > Control not only provides a convenient way of making partial > continuations (of the shift/reset sort, if you're familiar with the > literature), Nice article of yours. Now, I have something to chew on :-) > but also _delimited_ dynamic variables. As soon as you > start stack-slicing with partial continuations, you quickly find that > standard implementations of dynamic variables fail in all sorts of > nasty ways. Fundamentally, "normal" dynamic variables _cannot_ work > cleanly with partial continuations because they either close over too > much of the dynamic environment, or too little. > > Here's some reading on the topic: > > [1] http://okmij.org/ftp/Computation/dynamic-binding.html > [2] http://www.cs.rutgers.edu/~ccshan/dynscope/DDBinding.pdf > [3] > http://www.lshift.net/blog/2012/06/27/resumable-exceptions-can-macro-express-delimited-dynamic-variables Ah, more head banging against the desk, sweet. Phil > > > frank > > >>>> Cheers, > >>>> -- Pavel > >>> > >>> > >> > >> > >> > >> -- > >> best, > >> Eliot > > > > > >
