Various use of continuations in Kahua - Application in practical web programming experience

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    Favorites, Groups & Events

    Various use of continuations in Kahua - Application in practical web programming experience - Presentation Transcript

    1. Various use of continuations in Kahua Applications in practical web programming experience
        • Katsutohi Itoh
        • Kahua Project
    2. Higher-Level APIs for web-applications
    3. Continuation for web-application
      • Continuation passing style is easy to write control flow on web programming.
      • But to write practical web applications, we want to deal with:
        • Individual components (like widgets)‏
    4. Continuation of components How continuations of components work? component page -> page component -> component? component -> page? component HTML HTML HTML HTML click here click here Hello,Mr.
    5. Start from this issue by “Take THE Arc Challenge” http://www.paulgraham.com/arcchallenge.html Write a program:
      • Produce a page with an input field & a submit button.
      • When input text is submitted, display an anchor link saying “click here”.
      • When the link is clicked, display the text posted to the first page.
    6. Easy to write control flow ;; said ( define-entry (said)‏ ( page (form/cont/ (@@/ ( cont ( lambda ()‏ (let1 say (kahua-context-ref "say" )‏ ( page (a/cont/ (@@/ ( cont ( lambda ()‏ ( page (p/ "you said: " say)))))‏ "click here" ))))))‏ (readln/ "say" )‏ (submit/))))‏ Call continuation procedure Generate page
    7. Individual component
      • In practical web applications
      • Many components co-exist in most web pages
      • Want some kind of components to work individually
        • ex. Something to redraw a part of page – login box embedded in page like as reddit.com, calendar as date selector at any blog site ...
      • Not want a component's continuation to have the whole next page
    8. Motivation We want to write like this: The “said5” has 5 individual “said” components. ;; using individual “said” (define-entry (said5)‏ ( page (map/ said '( ”Alf” “Willie” “Kate” “Lynn” “Brian” ))))‏
    9. How about this? ;; Does this “said” works individually? ( define (said id)‏ (form/cont/ (@@/ ( cont ( lambda ()‏ (let1 say (kahua-context-ref id)‏ (a/cont/ (@@/ ( cont ( lambda ()‏ (p/ id " said: " say))))‏ "click here" )))))‏ (readln/ id)‏ (submit/)))‏ ;;http://localhost/app/said5 (define-entry (said5)‏ ( page (map/ said '(“ Alf” “Willie” “Kate” “Lynn” “Brian” ))))‏ Call continuation procedure Generate page
    10. Diff : Said application ( define-entry (said)‏ ( page (form/cont/ (@@/ ( cont ( lambda ()‏ (let1 say (kahua-context-ref "say" )‏ ( page (a/cont/ (@@/ ( cont ( lambda ()‏ ( page (p/ "you said: " say)))))‏ "click here" ))))))‏ (readln/ "say" )‏ (submit/))))‏
    11. ( define-entry (said id )‏ (form/cont/ (@@/ ( cont ( lambda ()‏ (let1 say (kahua-context-ref "say" )‏ (a/cont/ (@@/ ( cont ( lambda ()‏ (p/ id " said: " say))))‏ "click here" )))))‏ (readln/ "say" )‏ (submit/)))‏ Diff : Said component(?)‏
    12. The problem Continuation generates the whole page Each component to be independent from the others Expected Happened Continuation must know the others Continuation does not have to know the others
    13. Solution : parts-cont
      • ;; this “said” works as we expected
      • ( define (said person)‏
      • (form/cont/ (@/ (id person))‏ ;; 3.form has the target id
      • (@@/ (target person) ‏ ;; 2.update a target-id's node
      • ( parts-cont ;; 1.generate new node
      • ( lambda ()‏
      • (let1 say (kahua-context-ref person)‏
      • (div/ (@/ (id person))‏
      • (a/cont/ (@@/ (target person) ‏
      • ( parts-cont
              • ( lambda ()‏
      • (p/ person " said: " say))))‏
      • "click here" )))))‏)‏
      • (readln/ person)‏
      • (submit/)))‏
    14. Diff : buggy said component
      • ( define (said person)‏
      • (form/cont/
      • (@@/
      • ( cont
      • ( lambda ()‏
      • (let1 say (kahua-context-ref person)‏
      • (a/cont/ (@@/
      • ( cont
              • ( lambda ()‏
      • (p/ person " said: " say))))‏
      • "click here" )))))‏
      • (readln/ person)‏
      • (submit/)))‏
      • ( define (said person)‏
      • (form/cont/ (@/ (id person))‏
      • (@@/ (target person) ‏
      • ( parts-cont
      • ( lambda ()‏
      • (let1 say (kahua-context-ref person)‏
      • (div/ (@/ (id person))‏
      • (a/cont/ (@@/ (target person) ‏
      • ( parts-cont
              • ( lambda ()‏
      • (p/ person " said: " say))))‏
      • "click here" )))))‏)‏
      • (readln/ person)‏
      • (submit/)))‏
      Diff : parts-cont version
    15. What “parts-cont” does Alf Willie Brian Lynn Kate Input form Anchor link Show text submit! click! form link Text form form form link link link Text Text Text Make each “said” to work individually
    16. What “parts-cont” does body link text form link link html link Generate the whole html tree by the continuation of Brian's “said” Alf Willie Kate Lynn Brian head
    17. Mechanism : the key idea Create continuation that generate next page by replace target node with a new node which return from “parts-cont” clause
    18. Design of the mechanism create continuation that generate next page by replace target node with a new node which return from “parts-cont” clause Server interpreter Continuation to generate page Continuation to generate node HTML tree
    19. More ... The “parts-cont” mechanism highlights a new need to keep client-side context
    20. Keep client-side context
      • ;; “said” with “keep”
      • ( define (said id)‏
      • (form/cont/ (@/ (id id))‏
      • (@@/ (target id)‏ (keep #t)‏ ;; only add keep clause
      • ( parts-cont
      • ( lambda ()‏
      • (let1 say (kahua-context-ref id)‏
      • (div/ (@/ (id id))‏
      • (a/cont/ (@@/ (target id) (keep #t)‏
      • ( parts-cont
              • ( lambda ()‏
      • (p/ id " said: " say))))‏
      • "click here" )))))‏)‏
      • (readln/ id)‏
      • (submit/)))‏
    21. A more interesting sample ;; this “calendar/” function works as a widget of date selector. (define-entry (plan)‏ (page (form/cont/ (@@/ (cont (entry-lambda (:keyword from to memo)‏ (make <plan> :from from :to to :memo memo)‏ (plan))))‏ ( calendar/ ”from” ”Start” (current-date) )‏ ( calendar/ ”to” ”End” (current-date) )‏ (readtext/ ”memo” )‏ (submit/))‏ (map/ display/ (sort (coerce-to <list> (make-kahua-collection <plan>)) plan>=?))))‏
    22. Design of the mechanism client-side context Server interpreter Continuation to generate page with keeping client-side context Continuation to generate node HTML tree
    23. Now, we have ... The “parts-cont” mechanism, which supports individual components. We can write web application in smart way.
    24. What next? Refine the design of “parts-cont” mechanism. Challenge this by using partial continuation technique.
    25. What next? Of course, Fix some known bugs of parts-cont...
    26. Thank you

    + guestfb597cguestfb597c, 2 years ago

    custom

    330 views, 0 favs, 0 embeds more stats

    Kahua is a continuation passing style (CPS) applica more

    More info about this document

    © All Rights Reserved

    Go to text version

    • Total Views 330
      • 330 on SlideShare
      • 0 from embeds
    • Comments 0
    • Favorites 0
    • Downloads 5
    Most viewed embeds

    more

    All embeds

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as inappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel
    File a copyright complaint
    Having problems? Go to our helpdesk?

    Categories