1 / 21

Vitus Lorenz-Meyer

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. Motivation Was ist Skripting?

rea
Download Presentation

Vitus Lorenz-Meyer

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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

  2. Gliederung des Vortrags • Motivation • Was ist Skripting? • Skripting im historischen Überblick • Hochsprachen vs. Skriptsprachen • Evaluation • Fazit, Ausblick • Integration in die HSP

  3. 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)

  4. 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

  5. Übersicht • Motivation • Was ist Skripting? • Skripting im historischen Überblick • Assembler • Hochsprachen • Virtuelle Maschinen • Dynamische Sprachen • Hochsprachen vs. Skriptsprachen • Evaluation • Fazit, Ausblick • Integration in die HSP

  6. Assembler Lexikalische Analyse, Code generation Maschinen Code Code • 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 OpCode generation, Symbol resolving Betriebssystem, Plattform CPU HD

  7. Hoch (Systemlevel-)sprachen Lexik., Syntaktische, Semantische Analyse Linker, Optimizer Code Object Code Maschinen Code • 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 generation Lexing, Parse tree, Symbol table (OS) CPU OS, Plattform HD

  8. Virtuelle Maschinen Abstrakte Hardware- Beschreibung Lexik., Syntakt., Semant. Analalyse JIT, Optimizer Code Zwischen Code VM Lexing, parse tree, symbol table • 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 gen. OS, Plattform CPU HD

  9. Dynamische (Skript-) Sprachen Lexik., Syntakt., Semant. Analyse Optimizer Code VM • 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 generation Lexing, parse tree, symbol table CPU HD OS, Plattform

  10. 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

  11. Übersicht • Motivation • Was ist Skripting? • Skripting im historischen Überblick • Hochsprachen vs. Skriptsprachen • Evaluation • 5 bekannte Skriptsprachen • Schritte der Evaluation • Evaluierte Sprachen • Ergebnisse der Tests • Zusammenfassung • Fazit, Ausblick • Integration in die HSP

  12. Die 5 bekanntesten Skriptsprachen • Perl: “Practical Extraction and Reporting Language” • 1987, Ersatz für Unixshell Tools, text-processing, “tainting” while (<>){ if (/Perl/){ print }} • 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 • PHP: “PHP Hypertext Preprocessor” • 1994, zuerst HTTPCGI daher <?php … ?>, beliebteste Websprache <?php while ($line = fgets(STDIN)){ if (preg_match(“Perl”, $line)) echo $line; } ?>

  13. 5 Skriptsprachen (2) • Ruby • 1995, starke Typisierung, Vermeidung von Inkonsistenzen von Perl (chop() vs. chop!()) • “Ruby on Rails” ARGF.each { |line| print line if line =~ /Perl/ } • 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

  14. Evaluationsschritte • Suche von geeigneten Skriptsprachen-Implementationen • Kriterien: • Implementiert in Java • Vielseitig verwendbar (“general-purpose” Skriptsprache) • Ergebnis:18 relevante Implementationen • 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) • Performance-Tests anhand von 5 Testcases • Auswahl der Tests folgt Beispiel aus der Literatur • Reine Ladezeit des Interpreters • CPU, I/O, Hash, String-Performance • Auswahl und Empfehlung • Kriterien:Performance, gute Standardbibliothek, große Community, einfach zu erlernende Syntax

  15. Wichtigste Implementierungen • 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 JSR: Java Specification Request

  16. 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:

  17. Standardbibliothek, Community • JavaScript • Genießt eine große Verbreitung durch client-seitigdynamischeWebseiten, 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)

  18. 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

  19. Auswahl einer Skripting-Engine für die HSP • Performance • DynamicJava • JavaScript (Rhino) • BeanShell • JavaFX Script (Open-JFX), ... • Standardbibliothek • Besitzt keine der Sprachen, alle verlassen sich auf Java • Community • 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)

  20. 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

  21. Fragen?

More Related