using contize for web applications
play

Using Contize for Web Applications Part I: Continuation-based Web - PowerPoint PPT Presentation

Using Contize for Web Applications Part I: Continuation-based Web Programming Part II: Contize Part III: Example Application Part I: Continuation-based Web Programming What is a continuation? goto where I came from coderef


  1. Using Contize for Web Applications Part I: Continuation-based Web Programming Part II: Contize Part III: Example Application

  2. Part I: Continuation-based Web Programming ● What is a continuation? – “goto where I came from” – “coderef for where I came from”

  3. Part I: Continuation-based Web Programming ● What is a continuation? – “goto where I came from” – “coderef for where I came from” ● Example: sub a { print “a”} sub b { print “b”} a(); b(); print “ done.”;

  4. Part I: Continuation-based Web Programming ● What is a continuation? – “goto where I came from” – “coderef for where I came from” ● Example: sub a { print “a”; goto L1; } sub b { print “b”; sub a { print “a”} goto L2; sub b { print “b”} } a(); a(); b(); L1: b(); print “ done.”; L2: print “ done.”;

  5. Part I: Continuation-based Web Programming ● What is a continuation? – “goto where I came from” – “coderef for where I came from” sub a { ● Example: $next = shift; print “a”; &$next; sub a { } print “a”; sub b { goto L1; $next = shift; } print “b”; sub b { &$next; print “b”; } sub a { print “a”} goto L2; a(sub { sub b { print “b”} } b( sub { a(); a(); print “ done.”; b(); L1: b(); }) print “ done.”; L2: print “ done.”; })

  6. ...Continuations ● First Class Continuations – Continuations are built into the language, like 'this' in C++ or 'self' in smalltalk... except referring to the current continuation instead of the current object – Languages: Scheme, Ruby, StacklessPython, SML – Not Perl! ... well.... except for Coro::Cont :)

  7. Web Programming ● Stateless HTTP / CGI – Application must maintain its own state – CGI programs are re-started all the time ● Other Things – Model-View-Controller – Model: Database layer, such as Class::DBI – View: Template layer, such as Embperl – Controller: Business logic... and state management

  8. Using Continuations ● Output to browser ● Save continuation (to disk) ● Exit program ● ... they fill out form, send result to application ... ● Load continuation (from disk) ● Pick up right where we left off!

  9. The Result sub addTwo { my $a = input(“Enter first number”); my $b = input(“Enter second number”); output(“First + Second = “ . ($a + $b)); }

  10. Part II: Contize ● So we want continuations in Perl – Coro::Cont, XS magic to save stack state, etc – Could set up our own HTTP server with a managing agent. Match incoming input with suspended continuation – I want CGI through Apache, not my own server – Can't make Coro::Cont dump to disk (yet!) – So what is to be done?

  11. Contize.pm ● The Hack – While running a method, cache all method invocations – At some point the object suspends (itself), save cache – To resume the object, run its code. If a method has already been invoked, return its previous value ● The Worries – Too much cached? – Too much re-executed, expecially DB operations?

  12. Contize.pm ● The Implementation – Inheritance isn't enough... no way to catch existing methods – Contize wraps the target object, then uses AUTOLOAD to intercept and cache method calls – my $obj = new Contize(new Object); – Also adds 'suspend' and 'resume' methods ● Current Issues – Only works on hash-based objects – Ugly wrapper to manage the application

  13. Show me the Code! ● Contize itself ● WebGuess ● (Part III) Panel application At this point we switched to VIM and Firefox viewing for a demo. See http://thelackthereof.org/wiki.pl/Contize for more information.

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend