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

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

Transcript of Simon Georg Pinkel, Betreuer: Guido Tack & Thorsten Brunklaus Alice Server Pages Funktionale...

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

Simon Georg Pinkel, Betreuer: Guido Tack & Thorsten Brunklaus

Alice Server Pages

Funktionale Programmierung und das

Web

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

2

Gliederung1. Anforderungen2. Entwurf

1. Architektur2. Syntax3. Cookies

3. Beispiel4. Implementierung

1. Compileserver2. Word Sequences

5. verwandte Projekte6. Zusammenfassung7. Fazit8. Ausblick9. Demo

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

3

Anforderungen

• Compiler zur Bearbeitung/Interpretation von HTML-seiten mit eingebetteten Programmfragmenten

• Handhabung von dynamischem Input wie Formularvariablen oder Cookies

• Datenbankschnittstelle• Niedrige Reaktionszeiten

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

4

Architektur

DatenbankCompiler index.asp

Http Server

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

5

Architektur : ML Server Pages

DatenbankMsp-Compiler

index.msp

Http Server

Cache

index.cgi

CGI

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

6

Architektur : Alice Server Pages

DatenbankCompileserver (Alice)

index.amsp

Http Server

Interfaceclient (C)Cache

index.stc

CGI

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

7

Syntax• Alice lässt sich folgendermassen einbetten:

• <?AMSP [alice-programm] ?>• <?AMSP= [alice-ausdruck beliebigen typs] ?>• <?AMSP$ [wordsequence] ?>

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

8

Syntax• Alice lässt sich folgendermassen einbetten:

• <?AMSP [alice-programm] ?>• <?AMSP= [alice-ausdruck beliebigen typs] ?>• <?AMSP$ [wordsequence] ?>

• 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

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

9

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 -> unitval deleteCookie : string -> unit

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

10

Beispiel

<?AMSP type formvar = { n : int option } ?>

../index.amsp?n=6

<html><head>...</head><body><ul>

</ul></body></html>

<?AMSP val _ = List.app (fn x=> print("<li>" ^ Int.toString x) List.tabulate(#n formvar,fak) ?>

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

11

Beispiel

<?AMSP type formvar = { n : int option } ?>

../index.amsp?n=6

<html><head>...</head><body><ul>

</ul></body></html>

<?AMSP val _ = List.app (fn x=> print("<li>" ^ Int.toString x) List.tabulate(#n formvar,fak) ?>

type formvar = { n : int option }

val _ = print („

")val _ = List.app ...val _ = print („

")

../amspcache/<md5>.aml

</ul></body></html>

val formvar = ...

<html><head>...</head><body><ul>

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

12

Beispiel

<html><head>...</head><body><ul><li>1 <li>1 <li>2 <li>6 <li>24 <li>120 </ul></body></html>

HTML-output

<?AMSP type formvar = { n : int option } ?>

../index.amsp?n=6

<html><head>...</head><body><ul>

</ul></body></html>

<?AMSP val _ = List.app (fn x=> print("<li>" ^ Int.toString x) List.tabulate(#n formvar,fak) ?>

type formvar = { n : int option }

val _ = print („

")val _ = List.app ...val _ = print („

")

../amspcache/<md5>.aml

</ul></body></html>

val formvar = ...

<html><head>...</head><body><ul>

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

13

Implementierung:CompileserverAnfrage auf index.amsp:

1. mit .amsp assoziiertes CGI-Programm(Interfaceclient) wird aufgerufen

Compileserver (Alice)

Interfaceclient (C)Cache

<md5sum>.stc

index.amsp

CGI

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

14

Implementierung:CompileserverAnfrage 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

<md5sum>.stc

index.amsp

CGI

Socket - Kommunikation

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

15

Implementierung:CompileserverAnfrage 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

<md5sum>.stc

index.amsp

CGI

Socket - Kommunikation

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

16

Implementierung:CompileserverAnfrage 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

<md5sum>.stc

index.amsp

CGI

Socket - KommunikationStruktur mit Zustand

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

17

Implementierung:CompileserverAnfrage 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

<md5sum>.stc

index.amsp

CGI

Socket - KommunikationStruktur mit Zustand

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

18

Implementierung:CompileserverAnfrage 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

<md5sum>.stc

index.amsp

CGI

Socket - KommunikationStruktur mit Zustand

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

19

Implementierung:Word Sequences• Von den ML Server Pages übernommen:

datatype wseq =$ of string

| && of wseq * wseq | ...

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

20

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

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

21

verwandte Projekte

Alice Server Pages ML 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

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

22

verwandte Projekte

Alice Server Pages PHP

+ 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

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

23

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: z4500 Zeilen Kern + z2000 Zeilen Beispielanwendung & Demos

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

24

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

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

25

Ausblick

Compile Server noch nicht nebenläufig Anzeige von Kompilierungsfehlern im

Browser High-level Bibliothek für Sitzungs-

management Mehr Datenbank-schnittstellen (ODBC?)