Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Simon Georg Pinkel, Betreuer: Guido Tack & Thorsten Brunklaus Alice Server Pages Funktionale Programmierung und das Web.

Ähnliche Präsentationen


Präsentation zum Thema: "Simon Georg Pinkel, Betreuer: Guido Tack & Thorsten Brunklaus Alice Server Pages Funktionale Programmierung und das Web."—  Präsentation transkript:

1 Simon Georg Pinkel, Betreuer: Guido Tack & Thorsten Brunklaus Alice Server Pages Funktionale Programmierung und das Web

2 1 Gliederung 1. Anforderungen 2. Entwurf 1. Architektur 2. Syntax 3. Cookies 3. Beispiel 4. Implementierung 1. Compileserver 2. Word Sequences 5. verwandte Projekte 6. Zusammenfassung 7. Fazit 8. Ausblick 9. Demo

3 2 Anforderungen Compiler zur Bearbeitung/Interpretation von HTML-seiten mit eingebetteten Programmfragmenten Handhabung von dynamischem Input wie Formularvariablen oder Cookies Datenbankschnittstelle Niedrige Reaktionszeiten

4 3 Architektur Datenbank Compiler index.asp Http Server

5 4 Architektur : ML Server Pages Datenbank Msp-Compiler index.msp Http Server Cache index.cgi CGI

6 5 Architektur : Alice Server Pages Datenbank Compileserver (Alice) index.amsp Http Server Interfaceclient (C) Cache index.stc CGI

7 6 Syntax Alice lässt sich folgendermassen einbetten:

8 7 Syntax Alice lässt sich folgendermassen einbetten: Um auf Formularvariablen/Cookies zuzugreifen, muss ein Skript einen speziellen Typ formvar bzw. cookies nach dieser Grammatik deklarieren: start::=recordTy ty::= | primTy option | primTy eoption recordTy | ty *... * ty ( ty ) ty list | ty vector (*) recordTy::= { tyrow } tyrow::= lab : ty [, tyrow] primTy::= int | real | char | string | bool | file (*) nicht erlaubt bei cookies

9 8 Cookies Lokal(beim Browser) gespeicherte Datenpakete verteilter Zustand der Server Page Programmierer muss Typ cookies definieren Wert cookies:cookies enthält eingehende Cookiedaten können über folgende Funktionen gesendet/gelöscht werden: val setCookies : cookies -> unit val deleteCookie : string -> unit

10 9 Beispiel ../index.amsp?n=6... print(" " ^ Int.toString x) List.tabulate(#n formvar,fak) ?>

11 10 Beispiel ../index.amsp?n=6... print(" " ^ Int.toString x) List.tabulate(#n formvar,fak) ?> type formvar = { n : int option } val _ = print ( ") val _ = List.app... val _ = print ( ")../amspcache/.aml val formvar =......

12 11 Beispiel HTML-output ../index.amsp?n=6... print(" " ^ Int.toString x) List.tabulate(#n formvar,fak) ?> type formvar = { n : int option } val _ = print ( ") val _ = List.app... val _ = print ( ")../amspcache/.aml val formvar =......

13 12 Implementierung: Compileserver Anfrage auf index.amsp: 1. mit.amsp assoziiertes CGI-Programm(Interfaceclient) wird aufgerufen Compileserver (Alice) Interfaceclient (C) Cache.stc index.amsp CGI

14 13 Implementierung: Compileserver Anfrage auf index.amsp: 1. mit.amsp assoziiertes CGI-Programm(Interfaceclient) wird aufgerufen 2. Interfaceclient sammelt Daten und sendet sie an Compileserver Compileserver (Alice) Interfaceclient (C) Cache.stc index.amsp CGI Socket - Kommunikation

15 14 Implementierung: Compileserver Anfrage auf index.amsp: 1. mit.amsp assoziiertes CGI-Programm(Interfaceclient) wird aufgerufen 2. Interfaceclient sammelt Daten und sendet sie an Compileserver 3. Compileserver checkt, ob Cache Eintrag (MD5-summe vom lokalen Pfad der Source) vorhanden bzw. up-to-date und kompiliert gegebenenfalls Compileserver (Alice) Interfaceclient (C) Cache.stc index.amsp CGI Socket - Kommunikation

16 15 Implementierung: Compileserver Anfrage auf index.amsp: 1. mit.amsp assoziiertes CGI-Programm(Interfaceclient) wird aufgerufen 2. Interfaceclient sammelt Daten und sendet sie an Compileserver 3. Compileserver checkt, ob Cache Eintrag (MD5-summe vom lokalen Pfad der Source) vorhanden bzw. up-to-date und kompiliert gegebenenfalls 4. Compileserver ruft über ComponentManager.Eval das Kompilat auf Compileserver (Alice) Interfaceclient (C) Cache.stc index.amsp CGI Socket - Kommunikation Struktur mit Zustand

17 16 Implementierung: Compileserver Anfrage auf index.amsp: 1. mit.amsp assoziiertes CGI-Programm(Interfaceclient) wird aufgerufen 2. Interfaceclient sammelt Daten und sendet sie an Compileserver 3. Compileserver checkt, ob Cache Eintrag (MD5-summe vom lokalen Pfad der Source) vorhanden bzw. up-to-date und kompiliert gegebenenfalls 4. Compileserver ruft über ComponentManager.Eval das Kompilat auf 5. gesammeltes HTML/Cookiedaten werden an Interfaceclient geschickt Compileserver (Alice) Interfaceclient (C) Cache.stc index.amsp CGI Socket - Kommunikation Struktur mit Zustand

18 17 Implementierung: Compileserver Anfrage auf index.amsp: 1. mit.amsp assoziiertes CGI-Programm(Interfaceclient) wird aufgerufen 2. Interfaceclient sammelt Daten und sendet sie an Compileserver 3. Compileserver checkt, ob Cache Eintrag (MD5-summe vom lokalen Pfad der Source) vorhanden bzw. up-to-date und kompiliert gegebenenfalls 4. Compileserver ruft über ComponentManager.Eval das Kompilat auf 5. gesammeltes HTML/Cookiedaten werden an Interfaceclient geschickt 6. Interfaceclient sendet Daten an http Server Compileserver (Alice) Interfaceclient (C) Cache.stc index.amsp CGI Socket - Kommunikation Struktur mit Zustand

19 18 Implementierung: Word Sequences Von den ML Server Pages übernommen: datatype wseq = $ of string | && of wseq * wseq |...

20 19 Implementierung: Word Sequences Von den ML Server Pages übernommen: datatype wseq = $ of string | && of wseq * wseq |... Einsparung von string-Konkatenationen: Konkatenation ist Baumkonstruktion Projektion des Baums ist der dargestellte string Bei Versendung wird der Baum traversiert und die Blätter sequenziell versendet

21 20 verwandte Projekte Alice Server PagesML Server Pages + High-level Interface zum Zugriff auf Formulardaten/Cookies mit statischer Typprüfung - low-level Interface - Cookies müssen im Header deklariert werden - Effizienz erkauft durch Tricks(Compileserver, Caching) + auch ohne Tricks schnell + Architektur portabel bezüglich Http Server-Interface - nur CGI

22 21 verwandte Projekte Alice Server PagesPHP + High-level Interface zum Zugriff auf Formulardaten/Cookies mit statischer Typprüfung + dynamische Daten werden in PHP-Datenstrukturen konvertiert - setzt Kenntnis von HTTP voraus - Effizienz erkauft durch Tricks(Compileserver, Caching) + auch ohne Tricks schnell - nur MySQL-API + reiche Bibliothek mit vielen Datenbank-APIs + Typsystem mit statischer Typprüfung - keine Typen

23 22 Zusammenfassung Compileserver kompiliert Skripte Formulardaten/Cookies werden geparst und in Alice-record konvertiert Niedrige Reaktionszeiten dank: Compile Server Umgehung der Startup-zeiten von Alice Von Skripten importierte Komponenten werden im Arbeitsspeicher gecacht Kann unabhängig vom Http Server betrieben werden Caching MySQL-API Aufwand: z 4500 Zeilen Kern + z 2000 Zeilen Beispielanwendung & Demos

24 23 Fazit Alice bietet einige Features, die sich zur Erstellung von Server Pages nutzen lassen: Statische Typprüfung für Formulardaten/Cookies frühe Fehlerlokalisierung Höherstufige Funktionen bei der Erzeugung der Formulardaten/Cookies First-class compiler zur Skriptkompilierung Component Manager zur Ausführung von Skripten und Caching importierter Komponenten

25 24 Ausblick Compile Server noch nicht nebenläufig Anzeige von Kompilierungsfehlern im Browser High-level Bibliothek für Sitzungs- management Mehr Datenbank-schnittstellen (ODBC?)


Herunterladen ppt "Simon Georg Pinkel, Betreuer: Guido Tack & Thorsten Brunklaus Alice Server Pages Funktionale Programmierung und das Web."

Ähnliche Präsentationen


Google-Anzeigen