• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
IfN Studienarbeit Abschlusspres 18.9.2007
 

IfN Studienarbeit Abschlusspres 18.9.2007

on

  • 802 views

Anschlusspräsentation für die Studienarbeit, 2007

Anschlusspräsentation für die Studienarbeit, 2007

Statistics

Views

Total Views
802
Views on SlideShare
802
Embed Views
0

Actions

Likes
1
Downloads
2
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • 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 IfN Studienarbeit Abschlusspres 18.9.2007 Presentation 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
  • Gliederung des Vortrags
    • Motivation
    • Was ist Skripting?
    • Skripting im historischen Überblick
    • Hochsprachen vs. Skriptsprachen
    • Evaluation
    • Fazit, Ausblick
    • Integration in die HSP
  • 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)
  • 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
  • Ü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
  • 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
  • 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
  • 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 Code JIT, Optimizer OS, Plattform Code gen. Abstrakte Hardware- Beschreibung
  • 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, parse tree, symbol table Optimizer OS, Plattform Code generation
  • 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
  • Ü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
  • 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 HTTP CGI daher <?php … ?>, beliebteste Websprache
    • <?php
    • while ($line = fgets(STDIN)){
    • if (preg_match(“Perl”, $line))
    • echo $line;
    • } ?>
  • 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
  • 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
  • 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
  • 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:
  • 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)
  • 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
  • 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)
  • 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
    • Fragen?
  • Zusammenfassung der Ergebnisse
    • JavaScript langsamer als DJava, aber schneller als BeanShell
      • native Regular Expression und Hash Syntax und lockerer Umgang mit OO (Prototype)
      • große Community und bekannte Syntax ( DHTML , Ajax), daher viel Code verfügbar
    • BeanShell im Mittelfeld
      • einfach zu programmieren dank Kombination von loose und strictly typed Syntax, aber anders als Java
      • noch keine große Verbreitung (könnte sich mit JSR-274 und Aufnahme in die Java Spezifikation ändern)
    • DJava ist im vorgenommenen Vergleich am Schnellsten
      • Interpretiert Java-Syntax fast ohne Änderungen (niedrige Lernschwelle)
    • JavaFX Script ist am Langsamsten
      • Syntax ist stellenweise nicht intuitiv
      • Frühe beta Version:
        • Geschwindigkeit könnte sich noch verbessern, keine Community