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

Alice Server Pages

  • Upload
    aldon

  • View
    16

  • Download
    0

Embed Size (px)

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

Citation preview

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?)