Abstrakte Programmierung mittels Skripting: Untersuchung von geeigneten Implementierungen...

21
Abstrakte Programmierung mittels Skripting: Untersuchung von geeigneten Implementierungen dynamischer Sprachen für die HSP Vitus Lorenz-Meyer schlusspräsentation zur Studienarbeit Braunschweig, 18. September 2007

Transcript of Abstrakte Programmierung mittels Skripting: Untersuchung von geeigneten Implementierungen...

Page 1: Abstrakte Programmierung mittels Skripting: Untersuchung von geeigneten Implementierungen dynamischer Sprachen für die HSP Vitus Lorenz-Meyer Abschlusspräsentation.

Abstrakte Programmierung mittels Skripting:Untersuchung von geeigneten Implementierungen dynamischer Sprachen für die HSP

Vitus Lorenz-Meyer

Abschlusspräsentation zur Studienarbeit

Braunschweig, 18. September 2007

Page 2: Abstrakte Programmierung mittels Skripting: Untersuchung von geeigneten Implementierungen dynamischer Sprachen für die HSP Vitus Lorenz-Meyer Abschlusspräsentation.

Vitus Lorenz-Meyer · Institut für Nachrichtentechnik · Technische Universität Braunschweig

S.2/21

Gliederung des Vortrags

1. Motivation

2. Was ist Skripting?

3. Skripting im historischen Überblick

4. Hochsprachen vs. Skriptsprachen

5. Evaluation

6. Fazit, Ausblick

7. Integration in die HSP

Page 3: Abstrakte Programmierung mittels Skripting: Untersuchung von geeigneten Implementierungen dynamischer Sprachen für die HSP Vitus Lorenz-Meyer Abschlusspräsentation.

Vitus Lorenz-Meyer · Institut für Nachrichtentechnik · Technische Universität Braunschweig

S.3/21

Motivation

• Status-quo der Programmierung der HSP: Java-Code (+ grafische Beschreibungssprachen)

• Ist zu umständlich für kurze Programme oder schnelles Ausprobieren von Funktionalität– Java Programmierung des Xlets– Kompilieren des Xlet in eine .class-Datei

• Ziel: Vereinfachung der Programmierbarkeit– Beibehaltung des Xlet-Applikationsmodells– Xlet mit zusätzlich integriertem Skript-Interpreter– Muss nicht kompiliert werden, direktes Bearbeiten im Text-Editor

und sofortige Neu-Interpretierung möglich– Möglichkeit der Integration mit XML-basierten

Beschreibunsgsprachen (SVG)

Page 4: Abstrakte Programmierung mittels Skripting: Untersuchung von geeigneten Implementierungen dynamischer Sprachen für die HSP Vitus Lorenz-Meyer Abschlusspräsentation.

Vitus Lorenz-Meyer · Institut für Nachrichtentechnik · Technische Universität Braunschweig

S.4/21

Was macht eine Skriptsprache aus?

• Interpretiert statt Kompiliert• Virtuelle Maschine

– Plattformunabhängigkeit– Fehlerbehandlung– Speicherverwaltung (Garbage Collection)

• Keine strikten Typen (duck typing)– Static vs. dynamic typing (Bezeichnung)– Strong vs. weak typing (Behandlung)

• Sigils (“$”) typisch

Page 5: Abstrakte Programmierung mittels Skripting: Untersuchung von geeigneten Implementierungen dynamischer Sprachen für die HSP Vitus Lorenz-Meyer Abschlusspräsentation.

Vitus Lorenz-Meyer · Institut für Nachrichtentechnik · Technische Universität Braunschweig

S.5/21

Übersicht

1. Motivation2. Was ist Skripting?3. Skripting im historischen Überblick

a) Assemblerb) Hochsprachenc) Virtuelle Maschinend) Dynamische Sprachen

4. Hochsprachen vs. Skriptsprachen5. Evaluation6. Fazit, Ausblick 7. Integration in die HSP

Page 6: Abstrakte Programmierung mittels Skripting: Untersuchung von geeigneten Implementierungen dynamischer Sprachen für die HSP Vitus Lorenz-Meyer Abschlusspräsentation.

Vitus Lorenz-Meyer · Institut für Nachrichtentechnik · Technische Universität Braunschweig

S.6/21

Assembler

• Vorteile– Schnelle Ausführung– Möglichkeit der Optimierung von Hand (volle Kontrolle)

• Nachteile– Kennt keine Typen (-> viele Fehler)– Ist kompliziert zu schreiben– Ist plattformabhängig

Code

Betriebssystem, Plattform

Maschinen Code

Lexikalische Analyse,Code generation

HD CPU

OpCode generation,Symbol resolving

Page 7: Abstrakte Programmierung mittels Skripting: Untersuchung von geeigneten Implementierungen dynamischer Sprachen für die HSP Vitus Lorenz-Meyer Abschlusspräsentation.

Vitus Lorenz-Meyer · Institut für Nachrichtentechnik · Technische Universität Braunschweig

S.7/21

Hoch (Systemlevel-)sprachen

• Kompiler übersetzt Quelltext in Maschinencode• Vorteile

– Strikte Typisierung erkennt Fehler während der Übersetzung

– Schnelle Ausführung, da auf Plattform optimiert• Nachteile

– Keine Fehlerbehandlung– Kein automatisches Speichermanagement

Code

(OS)

Maschinen Code

Lexik., Syntaktische,Semantische Analyse

HD CPU

Lexing, Parse tree,Symbol table

Object Code

Linker,Optimizer

OS, Plattform

Code generation

Page 8: Abstrakte Programmierung mittels Skripting: Untersuchung von geeigneten Implementierungen dynamischer Sprachen für die HSP Vitus Lorenz-Meyer Abschlusspräsentation.

Vitus Lorenz-Meyer · Institut für Nachrichtentechnik · Technische Universität Braunschweig

S.8/21

Virtuelle Maschinen

• Virtuelle Maschine: Abstrakte, nicht-reale Hardware-Plattform• Vorteile

– Speichermanagement– Fehlererkennung + Behandlung während der Ausführung– Abstrahiert Betriebssystem und Plattform

• Nachteile– Zusätzlicher Aufwand– Verschiebung der Code Generation auf Ausführungszeitpunkt– Höherer Speicherverbrauch– Weniger Flexibilität

Code VM

Lexik., Syntakt.,Semant. Analalyse

HD CPU

Lexing, parse tree,symbol table

Zwischen CodeJIT, Optimizer

OS, Plattform

Code gen.

Abstrakte Hardware-Beschreibung

Page 9: Abstrakte Programmierung mittels Skripting: Untersuchung von geeigneten Implementierungen dynamischer Sprachen für die HSP Vitus Lorenz-Meyer Abschlusspräsentation.

Vitus Lorenz-Meyer · Institut für Nachrichtentechnik · Technische Universität Braunschweig

S.9/21

Dynamische (Skript-) Sprachen

• Interpreter: Kompiler und Code Genenerator (Optimierer) kombiniert

• Vorteile– Virtuelle Maschine– Lockerer Umgang mit Typen (da genaue

Fehlererkennung+Behandlung durch VM)– Einfacher anpassbar, da Skripte als Quelltext ausgeliefert werden

• Nachteile– Langsamer, da komplette Übersetzung zum Ausführungszeitpunkt

Code VM

Lexik., Syntakt.,Semant. Analyse

HD CPU

Lexing, parsetree, symbol table

Optimizer

OS, Plattform

Code generation

Page 10: Abstrakte Programmierung mittels Skripting: Untersuchung von geeigneten Implementierungen dynamischer Sprachen für die HSP Vitus Lorenz-Meyer Abschlusspräsentation.

Vitus Lorenz-Meyer · Institut für Nachrichtentechnik · Technische Universität Braunschweig

S.10/21

Hochsprachen vs. dynamische Sprachen

• Compiler vs. Interpreter ist Merkmal von Implementation– Weder bestimmt durch Spracheigenschaften noch Syntax

• Hochsprachen– Größere Kontrolle, mehr Flexibilität erfordert Planung

• Dynamische Sprachen– Einfacher dank stärkerer Abstraktion– Mehr Tools (Standardbibliothek, Datenstrukturen)– Rapid Prototyping (“Sketchen in Code”), “Proof-of-Concept”

• Edit-interpret-debug cycle vs. edit-compile-run-debug cycle• Resultiert in Verschiebung des Aufwands vom Programmierer zur

CPU– Fällt wegen schnellerer CPUs zunehmend weniger ins Gewicht

Page 11: Abstrakte Programmierung mittels Skripting: Untersuchung von geeigneten Implementierungen dynamischer Sprachen für die HSP Vitus Lorenz-Meyer Abschlusspräsentation.

Vitus Lorenz-Meyer · Institut für Nachrichtentechnik · Technische Universität Braunschweig

S.11/21

Übersicht

1. Motivation2. Was ist Skripting?3. Skripting im historischen Überblick4. Hochsprachen vs. Skriptsprachen5. Evaluation

a) 5 bekannte Skriptsprachenb) Schritte der Evaluationc) Evaluierte Sprachend) Ergebnisse der Testse) Zusammenfassung

6. Fazit, Ausblick 7. Integration in die HSP

Page 12: Abstrakte Programmierung mittels Skripting: Untersuchung von geeigneten Implementierungen dynamischer Sprachen für die HSP Vitus Lorenz-Meyer Abschlusspräsentation.

Vitus Lorenz-Meyer · Institut für Nachrichtentechnik · Technische Universität Braunschweig

S.12/21

Die 5 bekanntesten Skriptsprachen1. Perl: “Practical Extraction and Reporting Language”

– 1987, Ersatz für Unixshell Tools, text-processing, “tainting”while (<>){

if (/Perl/){ print }}

2. Python– 1990, starke Typisierung, “Pseudo-code”, Einrückung wichtig, große

Standardbibliothekfor line in sys.stdin.readlines():

if re.search(“Perl”, line): print line

• PHP: “PHP Hypertext Preprocessor”1. 1994, zuerst HTTP CGI daher <?php … ?>, beliebteste Websprache

<?phpwhile ($line = fgets(STDIN)){

if (preg_match(“Perl”, $line))echo $line;

} ?>

Page 13: Abstrakte Programmierung mittels Skripting: Untersuchung von geeigneten Implementierungen dynamischer Sprachen für die HSP Vitus Lorenz-Meyer Abschlusspräsentation.

Vitus Lorenz-Meyer · Institut für Nachrichtentechnik · Technische Universität Braunschweig

S.13/21

5 Skriptsprachen (2)4. Ruby

– 1995, starke Typisierung, Vermeidung von Inkonsistenzen von Perl (chop() vs. chop!())

– “Ruby on Rails”

ARGF.each { |line| print line if line =~ /Perl/ }

5. JavaScript– 1995 Netscape Navigator (“Mocha”), Client-side Websprache (DHTML,

Ajax), standarisiert durch die ECMA

var reader = new

java.io.BufferedReader(java.lang.System.in);while (var line = reader.readLine())

if (/Perl/.exec(line)) print(line);

ECMA: European Computer Manufacturers Association

Page 14: Abstrakte Programmierung mittels Skripting: Untersuchung von geeigneten Implementierungen dynamischer Sprachen für die HSP Vitus Lorenz-Meyer Abschlusspräsentation.

Vitus Lorenz-Meyer · Institut für Nachrichtentechnik · Technische Universität Braunschweig

S.14/21

Evaluationsschritte1. Suche von geeigneten Skriptsprachen-Implementationen

– Kriterien:• Implementiert in Java• Vielseitig verwendbar (“general-purpose” Skriptsprache)

– Ergebnis: 18 relevante Implementationen2. Test auf Lauffähigkeit in Java ME CDC

– Die HSP ist in Java ME CDC implementiert– Ergebnis: 6 in CDC-Umgebung ausführbar

(Häufigster Fehler: Fehlen des Packets java.nio.charset in Java ME)

3. Performance-Tests anhand von 5 Testcases1. Auswahl der Tests folgt Beispiel aus der Literatur

• Reine Ladezeit des Interpreters• CPU, I/O, Hash, String-Performance

– Auswahl und Empfehlung1. Kriterien: Performance, gute Standardbibliothek, große Community, einfach

zu erlernende Syntax

Page 15: Abstrakte Programmierung mittels Skripting: Untersuchung von geeigneten Implementierungen dynamischer Sprachen für die HSP Vitus Lorenz-Meyer Abschlusspräsentation.

Vitus Lorenz-Meyer · Institut für Nachrichtentechnik · Technische Universität Braunschweig

S.15/21

Wichtigste Implementierungen

1. JavaScript - Rhino• Interpreter Rhino ist Teil der Mozilla Suite• Standarisiert durch die Ecma als ECMAScript (ECMA-262, ISO/IEC-16262)• Wird in HTML und SVG verwendet

2. BeanShell• JSR-274 (BeanShell)• Kombination von Standard-Java mit “loosely typed” Java Syntax möglich,

trotzdem starke Typisierung wie in Java• DynamicJava

1. Ist Teil des Koala-Projekts von ILOG Software (am INRIA/W3C Standort Sophia Antipolis)

2. Unterstützt auch loosely typed Java Syntax• JavaFX Script - OpenJFX (ehemals Sun Projekt “F3”)

• Ist Teil der neuen JavaFX-Familie von Sun• Bietet platzsparende “deklarative” Syntax zum Initialisieren großer Objekte

JSR: Java Specification Request

Page 16: Abstrakte Programmierung mittels Skripting: Untersuchung von geeigneten Implementierungen dynamischer Sprachen für die HSP Vitus Lorenz-Meyer Abschlusspräsentation.

Vitus Lorenz-Meyer · Institut für Nachrichtentechnik · Technische Universität Braunschweig

S.16/21

Geschwindigkeit• Ladezeit des Interpreters

– Leeres Skript

• Mathematische Simulation– CPU Performance

• I/O-Performance– Schreibt Schleifenvariable in

Datei

• Hash-Performance – Erzeugung eines und Zugriff

auf ein assoziatives Array

• String-Performance– Dynamische Erzeugung und

Durchsuchen eines Strings n = int(sys.argv[1])f=open(’/tmp/scratch','wb')for i in xrange(n): f.write(str(i))f.close()

Pseudo-Code des I/O Skripts in Python:

Page 17: Abstrakte Programmierung mittels Skripting: Untersuchung von geeigneten Implementierungen dynamischer Sprachen für die HSP Vitus Lorenz-Meyer Abschlusspräsentation.

Vitus Lorenz-Meyer · Institut für Nachrichtentechnik · Technische Universität Braunschweig

S.17/21

Standardbibliothek, Community

• JavaScript– Genießt eine große Verbreitung durch client-seitig dynamische

Webseiten, dadurch viel vorhandener Code• BeanShell

– JSR-274 hat den voting Prozess überstanden Möglichkeit der Aufnahme in die Java Language Specification

– Verwendet in NetBeans, jEdit, JMeter, EclipseShelll, OpenOffice...• DJava

– Hat sehr geringe Verbreitung, wurde für einzelnes Projekt entwickelt• JavaFX Script

– Alpha Status, daher noch keine Community– Hat aber den Vorteil der Entwicklung durch Sun

Wird in allen JVMs von Sun laufen (Handy bis Set-top Box und PC)

Page 18: Abstrakte Programmierung mittels Skripting: Untersuchung von geeigneten Implementierungen dynamischer Sprachen für die HSP Vitus Lorenz-Meyer Abschlusspräsentation.

Vitus Lorenz-Meyer · Institut für Nachrichtentechnik · Technische Universität Braunschweig

S.18/21

Syntax• JavaScript

– Prototype Modell, Syntax näher an C als an Java– Native Hash und Regular-Expression Syntax

• BeanShell– Untermenge von Java mit Skripting Zusätzen (Klassensyntax anders

als Java)– Syntax für einfachen Umgang mit JavaBeans

• DynamicJava– Obermenge von Java (kann Java Code mit wenigen Änderungen

interpretieren) • JavaFX Script

– Deklarative Syntax für schnelles erstellen Grafischer Oberflächen und Animationen

– Teilweise nicht-intuitive Syntax

Page 19: Abstrakte Programmierung mittels Skripting: Untersuchung von geeigneten Implementierungen dynamischer Sprachen für die HSP Vitus Lorenz-Meyer Abschlusspräsentation.

Vitus Lorenz-Meyer · Institut für Nachrichtentechnik · Technische Universität Braunschweig

S.19/21

Auswahl einer Skripting-Engine für die HSP• Performance

1. DynamicJava2. JavaScript (Rhino)3. BeanShell4. JavaFX Script (Open-JFX), ...

– Standardbibliothek– Besitzt keine der Sprachen, alle verlassen sich auf Java

• Community– JavaScript hat einzige nennenswerte Nutzerbasis

• Syntax1. DJava am nächsten an Java, keine zusätzlichen Features2. BeanShell nahe an Java, einige syntaktische Add-ons3. JavaScript weist native Syntax für RegEx und Hashes auf4. JavaFX Script hat “eigenwillige” Syntax

Auswahl von JavaScript (Rhino)

Page 20: Abstrakte Programmierung mittels Skripting: Untersuchung von geeigneten Implementierungen dynamischer Sprachen für die HSP Vitus Lorenz-Meyer Abschlusspräsentation.

Vitus Lorenz-Meyer · Institut für Nachrichtentechnik · Technische Universität Braunschweig

S.20/21

Fazit, Ausblick

• Skriptsprachen werden immer wichtiger– Wird verstärkt durch Zentralisation von Software, die nur noch per

Browser-Interface benutzbar ist• Es bestehen 5 Ansätze, Java skripting-freundlicher zu gestalten:

– JavaFX Script– BeanShell (JSR-274)– Groovy (JSR-241)– Java Skripting API (JSR-223)– Neuer Bytecode für “loosely typed” Variablen (JSR-292)

• Skriptsprachen sind praktisch für schnelles Ausprobieren in Code• Sicherheit und formale Verifikation sind wichtiges

Forschungsthema• Die Zukunft gehört Sprachen, die einen Kompromiss zwischen

Entwicklungsaufwand und Verifizierbarkeit (Sicherheit) bieten

Page 21: Abstrakte Programmierung mittels Skripting: Untersuchung von geeigneten Implementierungen dynamischer Sprachen für die HSP Vitus Lorenz-Meyer Abschlusspräsentation.

Vitus Lorenz-Meyer · Institut für Nachrichtentechnik · Technische Universität Braunschweig

S.21/21

Fragen?