Abstrakte Programmierung mittels Skripting: Untersuchung von geeigneten Implementierungen dynamischer Sprachen für die HSP...
Gliederung des Vortrags <ul><li>Motivation </li></ul><ul><li>Was ist Skripting? </li></ul><ul><li>Skripting im historische...
Motivation <ul><li>Status-quo der Programmierung der HSP:  Java-Code (+ grafische Beschreibungssprachen) </li></ul><ul><li...
Was macht eine Skriptsprache aus? <ul><li>Interpretiert  statt Kompiliert </li></ul><ul><li>Virtuelle Maschine </li></ul><...
Übersicht <ul><li>Motivation </li></ul><ul><li>Was ist Skripting? </li></ul><ul><li>Skripting im historischen Überblick </...
Assembler <ul><li>Vorteile </li></ul><ul><ul><li>Schnelle Ausführung </li></ul></ul><ul><ul><li>Möglichkeit der  Optimieru...
Hoch (Systemlevel-)sprachen <ul><li>Kompiler  übersetzt  Quelltext in Maschinencode </li></ul><ul><li>Vorteile </li></ul><...
Virtuelle Maschinen <ul><li>Virtuelle Maschine : Abstrakte, nicht-reale Hardware-Plattform </li></ul><ul><li>Vorteile </li...
Dynamische (Skript-) Sprachen <ul><li>Interpreter : Kompiler und Code Genenerator (Optimierer) kombiniert </li></ul><ul><l...
Hochsprachen vs. dynamische Sprachen <ul><li>Compiler vs. Interpreter ist Merkmal von  Implementation </li></ul><ul><ul><l...
Übersicht <ul><li>Motivation </li></ul><ul><li>Was ist Skripting? </li></ul><ul><li>Skripting im historischen Überblick </...
Die 5 bekanntesten Skriptsprachen <ul><li>Perl:  “Practical Extraction and Reporting Language” </li></ul><ul><ul><li>1987,...
5 Skriptsprachen (2) <ul><li>Ruby  </li></ul><ul><ul><li>1995,  starke  Typisierung, Vermeidung von  Inkonsistenzen  von P...
Evaluationsschritte <ul><li>Suche von  geeigneten  Skriptsprachen-Implementationen </li></ul><ul><ul><li>Kriterien: </li><...
Wichtigste Implementierungen <ul><li>JavaScript - Rhino </li></ul><ul><ul><li>Interpreter  Rhino  ist Teil der  Mozilla  S...
Geschwindigkeit <ul><li>Ladezeit des Interpreters </li></ul><ul><ul><li>Leeres Skript </li></ul></ul><ul><li>Mathematische...
Standardbibliothek, Community <ul><li>JavaScript </li></ul><ul><ul><li>Genießt eine große Verbreitung durch  client-seitig...
Syntax <ul><li>JavaScript </li></ul><ul><ul><li>Prototype  Modell, Syntax näher an C als an Java </li></ul></ul><ul><ul><l...
Auswahl einer Skripting-Engine für die HSP <ul><li>Performance </li></ul><ul><ul><li>DynamicJava </li></ul></ul><ul><ul><l...
Fazit, Ausblick <ul><li>Skriptsprachen werden immer  wichtiger </li></ul><ul><ul><li>Wird verstärkt durch  Zentralisation ...
<ul><li>Fragen? </li></ul>
Zusammenfassung der Ergebnisse <ul><li>JavaScript langsamer als DJava, aber schneller als BeanShell </li></ul><ul><ul><li>...
Nächste SlideShare
Wird geladen in …5
×

IfN Studienarbeit Abschlusspres 18.9.2007

699 Aufrufe

Veröffentlicht am

Anschlusspräsentation für die Studienarbeit, 2007

Veröffentlicht in: Technologie
0 Kommentare
1 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

Keine Downloads
Aufrufe
Aufrufe insgesamt
699
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
3
Aktionen
Geteilt
0
Downloads
3
Kommentare
0
Gefällt mir
1
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie
  • Herzlich willkommen zum Abschlussvortrag meiner SA, danke dass sie alle so zahlreich erschienen sind. Es geht, siehe marius, heute um skriptsprachen und deren Implementierungen für die JVM
  • IfN Studienarbeit Abschlusspres 18.9.2007

    1. 1. Abstrakte Programmierung mittels Skripting: Untersuchung von geeigneten Implementierungen dynamischer Sprachen für die HSP Vitus Lorenz-Meyer Abschlusspräsentation zur Studienarbeit <ul><ul><li>Braunschweig, 18. September 2007 </li></ul></ul>
    2. 2. Gliederung des Vortrags <ul><li>Motivation </li></ul><ul><li>Was ist Skripting? </li></ul><ul><li>Skripting im historischen Überblick </li></ul><ul><li>Hochsprachen vs. Skriptsprachen </li></ul><ul><li>Evaluation </li></ul><ul><li>Fazit, Ausblick </li></ul><ul><li>Integration in die HSP </li></ul>
    3. 3. Motivation <ul><li>Status-quo der Programmierung der HSP: Java-Code (+ grafische Beschreibungssprachen) </li></ul><ul><li>Ist zu umständlich für kurze Programme oder schnelles Ausprobieren von Funktionalität </li></ul><ul><ul><li>Java Programmierung des Xlets </li></ul></ul><ul><ul><li>Kompilieren des Xlet in eine .class -Datei </li></ul></ul><ul><li>Ziel: Vereinfachung der Programmierbarkeit </li></ul><ul><ul><li>Beibehaltung des Xlet-Applikationsmodells </li></ul></ul><ul><ul><li>Xlet mit zusätzlich integriertem Skript-Interpreter </li></ul></ul><ul><ul><li>Muss nicht kompiliert werden, direktes Bearbeiten im Text-Editor und sofortige Neu-Interpretierung möglich </li></ul></ul><ul><ul><li>Möglichkeit der Integration mit XML-basierten Beschreibunsgsprachen (SVG) </li></ul></ul>
    4. 4. Was macht eine Skriptsprache aus? <ul><li>Interpretiert statt Kompiliert </li></ul><ul><li>Virtuelle Maschine </li></ul><ul><ul><li>Plattformunabhängigkeit </li></ul></ul><ul><ul><li>Fehlerbehandlung </li></ul></ul><ul><ul><li>Speicherverwaltung (Garbage Collection) </li></ul></ul><ul><li>Keine strikten Typen ( duck typing ) </li></ul><ul><ul><li>Static vs. dynamic typing (Bezeichnung) </li></ul></ul><ul><ul><li>Strong vs. weak typing (Behandlung) </li></ul></ul><ul><li>Sigils (“$”) typisch </li></ul>
    5. 5. Übersicht <ul><li>Motivation </li></ul><ul><li>Was ist Skripting? </li></ul><ul><li>Skripting im historischen Überblick </li></ul><ul><ul><li>Assembler </li></ul></ul><ul><ul><li>Hochsprachen </li></ul></ul><ul><ul><li>Virtuelle Maschinen </li></ul></ul><ul><ul><li>Dynamische Sprachen </li></ul></ul><ul><li>Hochsprachen vs. Skriptsprachen </li></ul><ul><li>Evaluation </li></ul><ul><li>Fazit, Ausblick </li></ul><ul><li>Integration in die HSP </li></ul>
    6. 6. Assembler <ul><li>Vorteile </li></ul><ul><ul><li>Schnelle Ausführung </li></ul></ul><ul><ul><li>Möglichkeit der Optimierung von Hand (volle Kontrolle) </li></ul></ul><ul><li>Nachteile </li></ul><ul><ul><li>Kennt keine Typen (-> viele Fehler) </li></ul></ul><ul><ul><li>Ist kompliziert zu schreiben </li></ul></ul><ul><ul><li>Ist plattformabhängig </li></ul></ul>Code Betriebssystem, Plattform Maschinen Code Lexikalische Analyse, Code generation HD CPU OpCode generation, Symbol resolving
    7. 7. Hoch (Systemlevel-)sprachen <ul><li>Kompiler übersetzt Quelltext in Maschinencode </li></ul><ul><li>Vorteile </li></ul><ul><ul><li>Strikte Typisierung </li></ul></ul><ul><ul><ul><li>erkennt Fehler während der Übersetzung </li></ul></ul></ul><ul><ul><li>Schnelle Ausführung, da auf Plattform optimiert </li></ul></ul><ul><li>Nachteile </li></ul><ul><ul><li>Keine Fehlerbehandlung </li></ul></ul><ul><ul><li>Kein automatisches Speichermanagement </li></ul></ul>Code (OS) Maschinen Code Lexik., Syntaktische, Semantische Analyse HD CPU Lexing, Parse tree, Symbol table Object Code Linker, Optimizer OS, Plattform Code generation
    8. 8. Virtuelle Maschinen <ul><li>Virtuelle Maschine : Abstrakte, nicht-reale Hardware-Plattform </li></ul><ul><li>Vorteile </li></ul><ul><ul><li>Speichermanagement </li></ul></ul><ul><ul><li>Fehlererkennung + Behandlung während der Ausführung </li></ul></ul><ul><ul><li>Abstrahiert Betriebssystem und Plattform </li></ul></ul><ul><li>Nachteile </li></ul><ul><ul><li>Zusätzlicher Aufwand </li></ul></ul><ul><ul><li>Verschiebung der Code Generation auf Ausführungszeitpunkt </li></ul></ul><ul><ul><li>Höherer Speicherverbrauch </li></ul></ul><ul><ul><li>Weniger Flexibilität </li></ul></ul>Code VM Lexik., Syntakt., Semant. Analalyse HD CPU Lexing, parse tree, symbol table Zwischen Code JIT, Optimizer OS, Plattform Code gen. Abstrakte Hardware- Beschreibung
    9. 9. Dynamische (Skript-) Sprachen <ul><li>Interpreter : Kompiler und Code Genenerator (Optimierer) kombiniert </li></ul><ul><li>Vorteile </li></ul><ul><ul><li>Virtuelle Maschine </li></ul></ul><ul><ul><li>Lockerer Umgang mit Typen (da genaue Fehlererkennung +Behandlung durch VM) </li></ul></ul><ul><ul><li>Einfacher anpassbar, da Skripte als Quelltext ausgeliefert werden </li></ul></ul><ul><li>Nachteile </li></ul><ul><ul><li>Langsamer, da komplette Übersetzung zum Ausführungszeitpunkt </li></ul></ul>Code VM Lexik., Syntakt., Semant. Analyse HD CPU Lexing, parse tree, symbol table Optimizer OS, Plattform Code generation
    10. 10. Hochsprachen vs. dynamische Sprachen <ul><li>Compiler vs. Interpreter ist Merkmal von Implementation </li></ul><ul><ul><li>Weder bestimmt durch Spracheigenschaften noch Syntax </li></ul></ul><ul><li>Hochsprachen </li></ul><ul><ul><li>Größere Kontrolle , mehr Flexibilität erfordert Planung </li></ul></ul><ul><li>Dynamische Sprachen </li></ul><ul><ul><li>Einfacher dank stärkerer Abstraktion </li></ul></ul><ul><ul><li>Mehr Tools ( Standardbibliothek , Datenstrukturen) </li></ul></ul><ul><ul><li>Rapid Prototyping (“Sketchen in Code”), “ Proof-of-Concept ” </li></ul></ul><ul><li>Edit-interpret-debug cycle vs. edit-compile-run-debug cycle </li></ul><ul><li>Resultiert in Verschiebung des Aufwands vom Programmierer zur CPU </li></ul><ul><ul><li>Fällt wegen schnellerer CPUs zunehmend weniger ins Gewicht </li></ul></ul>
    11. 11. Übersicht <ul><li>Motivation </li></ul><ul><li>Was ist Skripting? </li></ul><ul><li>Skripting im historischen Überblick </li></ul><ul><li>Hochsprachen vs. Skriptsprachen </li></ul><ul><li>Evaluation </li></ul><ul><ul><li>5 bekannte Skriptsprachen </li></ul></ul><ul><ul><li>Schritte der Evaluation </li></ul></ul><ul><ul><li>Evaluierte Sprachen </li></ul></ul><ul><ul><li>Ergebnisse der Tests </li></ul></ul><ul><ul><li>Zusammenfassung </li></ul></ul><ul><li>Fazit, Ausblick </li></ul><ul><li>Integration in die HSP </li></ul>
    12. 12. Die 5 bekanntesten Skriptsprachen <ul><li>Perl: “Practical Extraction and Reporting Language” </li></ul><ul><ul><li>1987, Ersatz für Unixshell Tools, text-processing, “ tainting ” </li></ul></ul><ul><li>while (<>){ </li></ul><ul><li>if (/Perl/){ </li></ul><ul><li>print }} </li></ul><ul><li>Python </li></ul><ul><ul><li>1990, starke Typisierung, “ Pseudo-code ”, Einrückung wichtig, große Standardbibliothek </li></ul></ul><ul><li>for line in sys.stdin.readlines(): </li></ul><ul><li>if re.search(“Perl”, line): </li></ul><ul><li>print line </li></ul><ul><li>PHP: “PHP Hypertext Preprocessor” </li></ul><ul><ul><li>1994, zuerst HTTP CGI daher <?php … ?>, beliebteste Websprache </li></ul></ul><ul><li><?php </li></ul><ul><li>while ($line = fgets(STDIN)){ </li></ul><ul><li>if (preg_match(“Perl”, $line)) </li></ul><ul><li>echo $line; </li></ul><ul><li> } ?> </li></ul>
    13. 13. 5 Skriptsprachen (2) <ul><li>Ruby </li></ul><ul><ul><li>1995, starke Typisierung, Vermeidung von Inkonsistenzen von Perl (chop() vs. chop!()) </li></ul></ul><ul><ul><li>“ Ruby on Rails ” </li></ul></ul><ul><li>ARGF.each { |line| print line if line =~ /Perl/ } </li></ul><ul><li>JavaScript </li></ul><ul><ul><li>1995 Netscape Navigator (“Mocha”), Client-side Websprache (DHTML, Ajax), standarisiert durch die ECMA </li></ul></ul><ul><ul><li>var reader = new </li></ul></ul><ul><ul><li>java.io.BufferedReader(java.lang.System.in); </li></ul></ul><ul><ul><li>while (var line = reader.readLine()) </li></ul></ul><ul><li>if (/Perl/.exec(line)) </li></ul><ul><li>print(line); </li></ul>ECMA : European Computer Manufacturers Association
    14. 14. Evaluationsschritte <ul><li>Suche von geeigneten Skriptsprachen-Implementationen </li></ul><ul><ul><li>Kriterien: </li></ul></ul><ul><ul><ul><li>Implementiert in Java </li></ul></ul></ul><ul><ul><ul><li>Vielseitig verwendbar (“general-purpose” Skriptsprache) </li></ul></ul></ul><ul><ul><li>Ergebnis : 18 relevante Implementationen </li></ul></ul><ul><li>Test auf Lauffähigkeit in Java ME CDC </li></ul><ul><ul><li>Die HSP ist in Java ME CDC implementiert </li></ul></ul><ul><ul><li>Ergebnis : 6 in CDC-Umgebung ausführbar </li></ul></ul><ul><ul><ul><li>(Häufigster Fehler: Fehlen des Packets java.nio.charset in Java ME) </li></ul></ul></ul><ul><li>Performance -Tests anhand von 5 Testcases </li></ul><ul><ul><li>Auswahl der Tests folgt Beispiel aus der Literatur </li></ul></ul><ul><ul><ul><li>Reine Ladezeit des Interpreters </li></ul></ul></ul><ul><ul><ul><li>CPU, I/O, Hash, String-Performance </li></ul></ul></ul><ul><li>Auswahl und Empfehlung </li></ul><ul><ul><li>Kriterien: Performance, gute Standardbibliothek , große Community , einfach zu erlernende Syntax </li></ul></ul>
    15. 15. Wichtigste Implementierungen <ul><li>JavaScript - Rhino </li></ul><ul><ul><li>Interpreter Rhino ist Teil der Mozilla Suite </li></ul></ul><ul><ul><li>Standarisiert durch die Ecma als ECMAScript (ECMA-262, ISO/IEC-16262) </li></ul></ul><ul><ul><li>Wird in HTML und SVG verwendet </li></ul></ul><ul><li>BeanShell </li></ul><ul><ul><li>JSR-274 (BeanShell) </li></ul></ul><ul><ul><li>Kombination von Standard-Java mit “ loosely typed ” Java Syntax möglich, trotzdem starke Typisierung wie in Java </li></ul></ul><ul><li>DynamicJava </li></ul><ul><ul><li>Ist Teil des Koala -Projekts von ILOG Software (am INRIA/W3C Standort Sophia Antipolis ) </li></ul></ul><ul><ul><li>Unterstützt auch loosely typed Java Syntax </li></ul></ul><ul><li>JavaFX Script - OpenJFX (ehemals Sun Projekt “F3”) </li></ul><ul><ul><li>Ist Teil der neuen JavaFX-Familie von Sun </li></ul></ul><ul><ul><li>Bietet platzsparende “ deklarative ” Syntax zum Initialisieren großer Objekte </li></ul></ul>JSR : Java Specification Request
    16. 16. Geschwindigkeit <ul><li>Ladezeit des Interpreters </li></ul><ul><ul><li>Leeres Skript </li></ul></ul><ul><li>Mathematische Simulation </li></ul><ul><ul><li>CPU Performance </li></ul></ul><ul><li>I/O-Performance </li></ul><ul><ul><li>Schreibt Schleifenvariable in Datei </li></ul></ul><ul><li>Hash-Performance </li></ul><ul><ul><li>Erzeugung eines und Zugriff auf ein assoziatives Array </li></ul></ul><ul><li>String-Performance </li></ul><ul><ul><li>Dynamische Erzeugung und Durchsuchen eines Strings </li></ul></ul>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. 17. Standardbibliothek, Community <ul><li>JavaScript </li></ul><ul><ul><li>Genießt eine große Verbreitung durch client-seitig dynamische Webseiten , dadurch viel vorhandener Code </li></ul></ul><ul><li>BeanShell </li></ul><ul><ul><li>JSR-274 hat den voting Prozess überstanden </li></ul></ul><ul><ul><ul><li>Möglichkeit der Aufnahme in die Java Language Specification </li></ul></ul></ul><ul><ul><li>Verwendet in NetBeans, jEdit, JMeter, EclipseShelll, OpenOffice... </li></ul></ul><ul><li>DJava </li></ul><ul><ul><li>Hat sehr geringe Verbreitung, wurde für einzelnes Projekt entwickelt </li></ul></ul><ul><li>JavaFX Script </li></ul><ul><ul><li>Alpha Status, daher noch keine Community </li></ul></ul><ul><ul><li>Hat aber den Vorteil der Entwicklung durch Sun </li></ul></ul><ul><ul><ul><li>Wird in allen JVMs von Sun laufen (Handy bis Set-top Box und PC) </li></ul></ul></ul>
    18. 18. Syntax <ul><li>JavaScript </li></ul><ul><ul><li>Prototype Modell, Syntax näher an C als an Java </li></ul></ul><ul><ul><li>Native Hash und Regular-Expression Syntax </li></ul></ul><ul><li>BeanShell </li></ul><ul><ul><li>Untermenge von Java mit Skripting Zusätzen (Klassensyntax anders als Java) </li></ul></ul><ul><ul><li>Syntax für einfachen Umgang mit JavaBeans </li></ul></ul><ul><li>DynamicJava </li></ul><ul><ul><li>Obermenge von Java (kann Java Code mit wenigen Änderungen interpretieren) </li></ul></ul><ul><li>JavaFX Script </li></ul><ul><ul><li>Deklarative Syntax für schnelles erstellen Grafischer Oberflächen und Animationen </li></ul></ul><ul><ul><li>Teilweise nicht-intuitive Syntax </li></ul></ul>
    19. 19. Auswahl einer Skripting-Engine für die HSP <ul><li>Performance </li></ul><ul><ul><li>DynamicJava </li></ul></ul><ul><ul><li>JavaScript (Rhino) </li></ul></ul><ul><ul><li>BeanShell </li></ul></ul><ul><ul><li>JavaFX Script (Open-JFX), ... </li></ul></ul><ul><li>Standardbibliothek </li></ul><ul><ul><li>Besitzt keine der Sprachen, alle verlassen sich auf Java </li></ul></ul><ul><li>Community </li></ul><ul><ul><li>JavaScript hat einzige nennenswerte Nutzerbasis </li></ul></ul><ul><li>Syntax </li></ul><ul><ul><li>DJava am nächsten an Java, keine zusätzlichen Features </li></ul></ul><ul><ul><li>BeanShell nahe an Java, einige syntaktische Add-ons </li></ul></ul><ul><ul><li>JavaScript weist native Syntax für RegEx und Hashes auf </li></ul></ul><ul><ul><li>JavaFX Script hat “eigenwillige” Syntax </li></ul></ul>Auswahl von JavaScript (Rhino)
    20. 20. Fazit, Ausblick <ul><li>Skriptsprachen werden immer wichtiger </li></ul><ul><ul><li>Wird verstärkt durch Zentralisation von Software, die nur noch per Browser-Interface benutzbar ist </li></ul></ul><ul><li>Es bestehen 5 Ansätze, Java skripting-freundlicher zu gestalten: </li></ul><ul><ul><li>JavaFX Script </li></ul></ul><ul><ul><li>BeanShell (JSR-274) </li></ul></ul><ul><ul><li>Groovy (JSR-241) </li></ul></ul><ul><ul><li>Java Skripting API (JSR-223) </li></ul></ul><ul><ul><li>Neuer Bytecode für “loosely typed” Variablen (JSR-292) </li></ul></ul><ul><li>Skriptsprachen sind praktisch für schnelles Ausprobieren in Code </li></ul><ul><li>Sicherheit und formale Verifikation sind wichtiges Forschungsthema </li></ul><ul><li>Die Zukunft gehört Sprachen, die einen Kompromiss zwischen Entwicklungsaufwand und Verifizierbarkeit (Sicherheit) bieten </li></ul>
    21. 21. <ul><li>Fragen? </li></ul>
    22. 22. Zusammenfassung der Ergebnisse <ul><li>JavaScript langsamer als DJava, aber schneller als BeanShell </li></ul><ul><ul><li>native Regular Expression und Hash Syntax und lockerer Umgang mit OO (Prototype) </li></ul></ul><ul><ul><li>große Community und bekannte Syntax ( DHTML , Ajax), daher viel Code verfügbar </li></ul></ul><ul><li>BeanShell im Mittelfeld </li></ul><ul><ul><li>einfach zu programmieren dank Kombination von loose und strictly typed Syntax, aber anders als Java </li></ul></ul><ul><ul><li>noch keine große Verbreitung (könnte sich mit JSR-274 und Aufnahme in die Java Spezifikation ändern) </li></ul></ul><ul><li>DJava ist im vorgenommenen Vergleich am Schnellsten </li></ul><ul><ul><li>Interpretiert Java-Syntax fast ohne Änderungen (niedrige Lernschwelle) </li></ul></ul><ul><li>JavaFX Script ist am Langsamsten </li></ul><ul><ul><li>Syntax ist stellenweise nicht intuitiv </li></ul></ul><ul><ul><li>Frühe beta Version: </li></ul></ul><ul><ul><ul><li>Geschwindigkeit könnte sich noch verbessern, keine Community </li></ul></ul></ul>

    ×