Post on 05-Apr-2015
transcript
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
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
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)
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
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
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
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
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
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
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
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
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;
} ?>
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
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
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
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:
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)
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
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)
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
Vitus Lorenz-Meyer · Institut für Nachrichtentechnik · Technische Universität Braunschweig
S.21/21
Fragen?