BeanShell

Werbung
Abstrakte Programmierung mittels
Skripting:
Untersuchung von geeigneten Implementierungen
dynamischer Sprachen für die HSP
Braunschweig, 18. September 2007
Abschlusspräsentation zur Studienarbeit
Vitus Lorenz-Meyer
Gliederung des Vortrags
1.
2.
3.
4.
5.
6.
7.
Motivation
Was ist Skripting?
Skripting im historischen Überblick
Hochsprachen vs. Skriptsprachen
Evaluation
Fazit, Ausblick
Integration in die HSP
Vitus Lorenz-Meyer · Institut für Nachrichtentechnik · Technische Universität Braunschweig
S.2/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.3/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.4/21
Übersicht
1. Motivation
2. Was ist Skripting?
3. Skripting im historischen Überblick
a)
b)
c)
d)
4.
5.
6.
7.
Assembler
Hochsprachen
Virtuelle Maschinen
Dynamische Sprachen
Hochsprachen vs. Skriptsprachen
Evaluation
Fazit, Ausblick
Integration in die HSP
Vitus Lorenz-Meyer · Institut für Nachrichtentechnik · Technische Universität Braunschweig
S.5/21
Assembler
Lexikalische Analyse,
Code generation
Code
Maschinen Code
OpCode generation,
Symbol resolving
Betriebssystem, Plattform
HD
CPU
• 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
Vitus Lorenz-Meyer · Institut für Nachrichtentechnik · Technische Universität Braunschweig
S.6/21
Hoch (Systemlevel-)sprachen
Code
Lexik., Syntaktische,
Semantische Analyse
Lexing, Parse tree,
Symbol table
(OS)
Object Code
Linker,
Optimizer
Code generation
OS, Plattform
Maschinen Code
HD
CPU
• 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
Vitus Lorenz-Meyer · Institut für Nachrichtentechnik · Technische Universität Braunschweig
S.7/21
Virtuelle Maschinen
Code
Lexik., Syntakt.,
Semant. Analalyse
Lexing, parse tree,
symbol table
Abstrakte HardwareBeschreibung
Zwischen Code
JIT, Optimizer
VM
Code gen.
HD
OS, Plattform
CPU
• 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
Vitus Lorenz-Meyer · Institut für Nachrichtentechnik · Technische Universität Braunschweig
S.8/21
Dynamische (Skript-) Sprachen
Code
HD
Lexik., Syntakt.,
Semant. Analyse
Lexing, parse
tree, symbol table
Optimizer
Code generation
OS, Plattform
VM
CPU
• 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
Vitus Lorenz-Meyer · Institut für Nachrichtentechnik · Technische Universität Braunschweig
S.9/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.10/21
Übersicht
1.
2.
3.
4.
5.
Motivation
Was ist Skripting?
Skripting im historischen Überblick
Hochsprachen vs. Skriptsprachen
Evaluation
a)
b)
c)
d)
e)
5 bekannte Skriptsprachen
Schritte der Evaluation
Evaluierte Sprachen
Ergebnisse der Tests
Zusammenfassung
6. Fazit, Ausblick
7. Integration in die HSP
Vitus Lorenz-Meyer · Institut für Nachrichtentechnik · Technische Universität Braunschweig
S.11/21
Die 5 bekanntesten Skriptsprachen
1. 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
Standardbibliothek
for line in sys.stdin.readlines():
if re.search(“Perl”, line):
print line
3. PHP: “PHP Hypertext Preprocessor”
–
1994, zuerst HTTP CGI daher <?php … ?>, beliebteste Websprache
<?php
while ($line = fgets(STDIN)){
if (preg_match(“Perl”, $line))
echo $line;
} ?>
Vitus Lorenz-Meyer · Institut für Nachrichtentechnik · Technische Universität Braunschweig
S.12/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);
Vitus Lorenz-Meyer · Institut für Nachrichtentechnik · Technische Universität Braunschweig
ECMA: European Computer Manufacturers Association
S.13/21
Evaluationsschritte
1. Suche von geeigneten Skriptsprachen-Implementationen
– Kriterien:
•
•
Implementiert in Java
Vielseitig verwendbar (“general-purpose” Skriptsprache)
– Ergebnis: 18 relevante Implementationen
2. 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 Testcases
–
Auswahl der Tests folgt Beispiel aus der Literatur
•
•
Reine Ladezeit des Interpreters
CPU, I/O, Hash, String-Performance
4. Auswahl und Empfehlung
– Kriterien: Performance, gute Standardbibliothek, große Community,
einfach zu erlernende Syntax
Vitus Lorenz-Meyer · Institut für Nachrichtentechnik · Technische Universität Braunschweig
S.14/21
Wichtigste Implementierungen
1.
2.
3.
4.
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
BeanShell
•
JSR-274 (BeanShell)
•
Kombination von Standard-Java mit “loosely typed” Java Syntax möglich,
trotzdem starke Typisierung wie in Java
DynamicJava
•
Ist Teil des Koala-Projekts von ILOG Software (am INRIA/W3C Standort
Sophia Antipolis)
•
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
Vitus Lorenz-Meyer · Institut für Nachrichtentechnik · Technische Universität Braunschweig
JSR: Java Specification Request
S.15/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):
Pseudo-Code des I/O Skripts in Python:
f.write(str(i))
f.close()
Vitus Lorenz-Meyer · Institut für Nachrichtentechnik · Technische Universität Braunschweig
S.16/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.17/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.18/21
Auswahl einer Skripting-Engine für die HSP
•
Performance
1.
2.
3.
4.
–
Standardbibliothek
–
•
Besitzt keine der Sprachen, alle verlassen sich auf Java
Community
–
•
DynamicJava
JavaScript (Rhino)
BeanShell
JavaFX Script (Open-JFX), ...
JavaScript hat einzige nennenswerte Nutzerbasis
Syntax
–
–
–
–
DJava am nächsten an Java, keine zusätzlichen Features
BeanShell nahe an Java, einige syntaktische Add-ons
JavaScript weist native Syntax für RegEx und Hashes auf
JavaFX Script hat “eigenwillige” Syntax
Auswahl von JavaScript (Rhino)
Vitus Lorenz-Meyer · Institut für Nachrichtentechnik · Technische Universität Braunschweig
S.19/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.20/21
Fragen?
Vitus Lorenz-Meyer · Institut für Nachrichtentechnik · Technische Universität Braunschweig
S.21/21
Herunterladen