Potek predavanja
• Motivacija
• Malo teorije
• Prenašanje stanja v spletnih aplikacijah
• Continuations na pomoč
• Zaključek
Motivacija
• Prenašanje stanja
• Prenašanje stanja
• Prenašanje stanja
• Prenašanje stanja
• Prenašanje stanja
• Prenašanje stanja
• Prenašanje stanja
Malo teorije
Funkcijsko programiranje
• Funkcije so prvorazredni objekti
• Transformiranje funkcij
• Idealno brez stranskih učinkov
Lexial closure
• Funkcija s kontekstom kot objekt
Continuation
• Točka v izvajanju programa
• Različne oblike:– Stack frame (Python)– Prvorazredni objekt (Scheme)– Funkcionalnost operacijskeg sistema (Unix)– ...
• Splošnejša implementacija: lexial closure
Continuation-passing style
• Eksplicitno prenašanje kontrole
• Težave z globino izvajalnega sklada– Tail call optimisation
Vprašanja?
Prenašanje stanja v spletnih aplikacijah
Najpogostejši prijemi
• Seje
• Skrita polja
• Zahtevki (URL, GET, POST)
• Piškoti
Težave
• Nelinearnost – Vejenje navigacije (zavihki, več oken)– Skoki naprej/nazaj
• Življenski cikel seje
• Pomankljive abstrakcije
Continuations na pomoč
Temeljna ideja
• Stanje zavijemo v closure
• Vsak zahtevek je prehod kontrole
Nadgradnje
• Vmesne rezultate izračunamo šele, ko jih potrebujemo (lazy evaluation)
• Asinhronost
Primeri ogrodji
• Seaside
www.seaside.st
• UCW
common-lisp.net/project/ucw/
• PLT Scheme Web Server
www.plt-scheme.org
Zaključek
Prednosti
+ Koda odraža problem
+ Nelinearnost
+ Dodatna stopnja abstrakcije+ Postopen razvoj+ Prenosljivost (tudi onkraj spleta)
+ Za razvoj lahko uporabimo klasična orodja
+ HTTP prepustimo ogrodju
Slabosti
- HTTP prepustimo ogrodju
- Kompleksonst
- Hranjenje (kdaj, kje)
- Sporščanje sredstev
- Razumljivost
- Slaba podpora v večini popularnih jezikov
Vprašanja?
Viri
• common-lisp.net/project/ucw/docs/html/rest/rest.html• www.stackless.com/spcpaper.htm• www.interact-sw.co.uk/iangblog/2006/05/21/webcontinuations• www.double.co.nz/pdf/continuations.pdf• www.paulgraham.com/lib/paulgraham/bbnexcerpts.txt