elliottcable changed the topic of #Paws.Nucleus to: some freenode policy shit it's logged lol
alexgordon has quit [Quit: ["Textual IRC Client: www.textualapp.com"]]
alexgordon has joined #Paws.Nucleus
<whitequark> elliottcable: HELLO
<whitequark> LET'S DISCUSS PAWS TODAY
<micahjohnston> whitequark: HELLO
<micahjohnston> whitequark: I AM CAPABLE OF DISCUSSING PAWS
<whitequark> micahjohnston: EXPLAIN PAWS TO ME FROM THE GROUND UP THEN
<micahjohnston> ALL RIGHT I WILL WHILE I HAVE TIME
<micahjohnston> whitequark: what is your background
<whitequark> i implemented ruby and write compilers for a living
<micahjohnston> oh yeah I remember
<micahjohnston> you're a genius
<micahjohnston> ok so I will have to teach upwards to you :p
<whitequark> I'm not lol
<micahjohnston> so paws is basically about continuations
<whitequark> but you can expect me to know shit about continuations
<whitequark> yeah...
<micahjohnston> yeah
<micahjohnston> so
<micahjohnston> node.js looks ugly because you write everything in explicit cps
<micahjohnston> paws does the cps transform for you yknow
<micahjohnston> and every call is kinda like call-cc
<micahjohnston> and it's also like Lua in its object system/Io in its syntax
<micahjohnston> though there are cool things about both that are unique to paws
<micahjohnston> so for instance here is the example we always use
<micahjohnston> (elliott makes fun of me for using it so much)
<micahjohnston> print(a_list each)
<micahjohnston> print only ever sees strings
<micahjohnston> so basically it's asynchronous everywherererrerreerrere
<micahjohnston> we haven't hammered out the high-level details of the libraries that will be provided for control flow etc. so
<micahjohnston> that's up in the air
<whitequark> one thing
<whitequark> we *really* need to use delimited continuations
<whitequark> (but first figure out how exactly do they work)
<micahjohnston> yeah
<whitequark> because call/cc is shit
<micahjohnston> well yeah
<micahjohnston> that's a place where i disagree with elliott that paws is already designed
<micahjohnston> and where i think we should do a lot more discussing
<micahjohnston> and he just wants to get it working with a call/cc thing
<micahjohnston> but i want the equivalent of delimited i guess
<micahjohnston> anyway the specifications of the semantics are low-level enough that you could make the higher-level language look delimited on top of them
<micahjohnston> which I think is kinda silly because we're basically just pushing that design discussion to the future
<micahjohnston> buttttt
<whitequark> writing a compiler with nondelimited continuation is pretty much impossible
<whitequark> an optimizing one
<micahjohnston> yeah
<micahjohnston> i can see that
<micahjohnston> elliott's vision for paws is pretty uncompilable anyway :p
<micahjohnston> i disagree with him a lot
<micahjohnston> but anyway every call is a call-with-continuation
<micahjohnston> so like, returning is when you get called back
<micahjohnston> and you can get called back multiple times, as in print(a_list each)
<micahjohnston> and you can also call asynchronously in which case you spin off something without being suspended
<micahjohnston> iow delimiting the continuation, right?
<whitequark> mmm
<whitequark> not sure
<micahjohnston> and actually i wish elliott hadn't insisted on using his own terminology and we'd discussed this in terms of continuations
<micahjohnston> because an early fundamental thing I was uneasy about can be summed up exactly by non-delimited vs delimited continuations
<micahjohnston> anyway that example is basically
<micahjohnston> reset { print(shift(a_list.each)) }
<whitequark> micahjohnston: I'm not familiar with how delimited continuations work, yet, unfortunately
<micahjohnston> oh
<whitequark> I only understand that they're very important
<micahjohnston> i can explain them
<micahjohnston> they allow the contagion of continuations to be much more local and contained
<micahjohnston> "delimited" :p
<micahjohnston> so for instance scala has them, and it only applies CPS trasnform to the code inside a reset {} block
<micahjohnston> this code:
<micahjohnston> in bastardized syntax
<micahjohnston> print(reset { 3 + shift(\ c -> c(4) ) })
<micahjohnston> prints 7
<micahjohnston> I believe
<micahjohnston> reset is exactly like call/cc
<micahjohnston> except that the continuations it gives to its argument do not stretch upwards forever
<micahjohnston> they only stretch upwards to the nearest reset {} block
<micahjohnston> so it has a return value
<micahjohnston> does that make sense? or did you already know that? or what
<whitequark> hm...
<whitequark> sorry, I have to go for a while
<whitequark> I'll read articles on delimited continuations and reply later
<micahjohnston> I have to go too
<micahjohnston> so, talk to you later
<whitequark> laters
<whitequark> I need to learn haskell
elliottcable is now known as elliottcable^
micahjohnston is now known as micahjohnston^
elliottcable^ is now known as ^lliott^able
micahjohnston^ is now known as micahjohnston
^lliott^able is now known as elliottcable^
elliottcable^ is now known as elliottcable
elliottcable is now known as elliottcable^
elliottcable^ is now known as elliottcable
elliottcable is now known as elliottcable^