Lalish-Menagh, Trevor on 23 Feb 2012 09:52:24 -0800 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
Re: implementing call/cc with only closures, no special forms ? |
Thanks Dustin! This is pretty cool stuff. On Wed, Feb 22, 2012 at 10:04 PM, Dustin Getz <dustin.getz@gmail.com> wrote: > i think i may have reconciled the problem - he implements callcc and > continuation-monad without generators, but the actual usage of callcc as > defined -- `return callcc(self.react)` -- self.react is itself a generator. > this generator could (i think) be re-implemented with lambdas, but now the > block passed to call/cc must conform to our interface. which means we can't > use call/cc with arbitrary code. if i chase down the implications of this, i > imagine we will end up concluding that, to turn blocking business logic into > cooperative via low level monkey patches in the style of gevent, would also > require altering the structure of the business logic itself. > > > On Wed, Feb 22, 2012 at 9:02 PM, Dustin Getz <dustin.getz@gmail.com> wrote: >> >> this came up after redsnake last night - I mentioned to someone that I had >> seen a "lambda" implementation of callcc in python. Which, if that's >> actually possible, is pretty mind-blowing - because it doesn't require >> patching the runtime/interpreter !! I'm not quite sure if its possible or >> how close we can get, but here's the link I was talking about[1]: >> >> >> [1]Âhttp://www.valuedlessons.com/2008/01/monads-in-python-with-nice-syntax.html >> >> He implements a few monads in python, including continuation monad. It >> will take me significant study to understand this code - maybe you guys >> would be interested in picking this apart at a future meetup - but here's >> the author's conclusion: >> >> So, you can use monads with elegant syntax in any language that has >> closures and any of the following: >> >> do syntax (Haskell, C#) >> call/cc (Scheme, Ruby) >> bidirectional generators (Python 2.5, a future JavaScript?) >> coroutines (Lua, Io) >> >> my question is, can you implement continuation-monad with "un-elegant" >> syntax with *only* closures, skipping the generators? I think maybe you can, >> because 1) haskell's do-notation is just syntactic sugar over the closures, >> and 2) you can at least implement one common generator pattern - lazy seqs - >> in python without generators[2], which got me wondering if you can implement >> a generalized generator using just lambdas, and now my head is spinning and >> i'm saying stupid things like "i think you might be able to implement >> call/cc with only closures" but that implies that we can do things like turn >> third party blocking code into cooperative code per gevent[3] which is >> absurd,Âthat's a ridiculous statement. I'm not even making sense anymore, so >> I'm going to stop writing and click "send" now :) >> >> Dustin Getz >> >> [2] my implementation of lazy seqs with only >> closures:Âhttps://github.com/dustingetz/sandbox/blob/master/etc/lazy.py >> [3] lightning talk slides where we use callcc to make third party code >> cooperative: https://docs.google.com/present/view?id=dv9r8sv_82cn7dngcq > > -- Trevor Lalish-Menagh trev@trevmex.com 484.868.6150 (mobile) trevmex (AIM)