Alice Server Pages

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

description

Alice Server Pages. Funktionale Programmierung und das Web. Gliederung. Anforderungen Entwurf Architektur Syntax Cookies Beispiel Implementierung Compileserver Word Sequences verwandte Projekte Zusammenfassung Fazit Ausblick Demo. Anforderungen. - PowerPoint PPT Presentation

Transcript of Alice Server Pages

Page 1: Alice Server Pages

Simon Georg Pinkel, Betreuer: Guido Tack & Thorsten Brunklaus

Alice Server Pages

Funktionale Programmierung und das

Web

Page 2: Alice Server Pages

2

Gliederung1. Anforderungen2. Entwurf

1. Architektur2. Syntax3. Cookies

3. Beispiel4. Implementierung

1. Compileserver2. Word Sequences

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

Page 3: Alice Server Pages

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

4

Architektur

DatenbankCompiler index.asp

Http Server

Page 5: Alice Server Pages

5

Architektur : ML Server Pages

DatenbankMsp-Compiler

index.msp

Http Server

Cache

index.cgi

CGI

Page 6: Alice Server Pages

6

Architektur : Alice Server Pages

DatenbankCompileserver (Alice)

index.amsp

Http Server

Interfaceclient (C)Cache

index.stc

CGI

Page 7: Alice Server Pages

7

Syntax• Alice lässt sich folgendermassen einbetten:

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

Page 8: Alice Server Pages

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

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

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

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

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

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

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

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

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

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

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

19

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

datatype wseq =$ of string

| && of wseq * wseq | ...

Page 20: Alice Server Pages

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

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

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

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

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

25

Ausblick

Compile Server noch nicht nebenläufig Anzeige von Kompilierungsfehlern im

Browser High-level Bibliothek für Sitzungs-

management Mehr Datenbank-schnittstellen (ODBC?)