Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Abstrakte Programmierung mittels Skripting: Untersuchung von geeigneten Implementierungen dynamischer Sprachen für die HSP Braunschweig, 18. September.

Ähnliche Präsentationen


Präsentation zum Thema: "Abstrakte Programmierung mittels Skripting: Untersuchung von geeigneten Implementierungen dynamischer Sprachen für die HSP Braunschweig, 18. September."—  Präsentation transkript:

1 Abstrakte Programmierung mittels Skripting: Untersuchung von geeigneten Implementierungen dynamischer Sprachen für die HSP Braunschweig, 18. September 2007 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 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 Motivation: Gründe für diese Studienarbeit Dann folgt eine Kurze Definition, Eigenschaften von Skriptsprachen Anschließend gebe ich einen historischen Überblick, Einordnung von Skripting in die Geschichte von Programmiersprachen Schließe diesen Teil ab mit einem Vergleich, was bringen Skriptsprachen im Vergleich zu Hochsprachen, wie zB C, C++ Teil der Evaluation, die ich gemacht habe, von geeigneten Skriptsprachen für die HSP Danach ziehe ich ein Fazit, biete etwas Ausblick auf die Zukunft Und als Ausklang, ein Beispiel auf der HSP, dazu habe ich hier den PDA mitgebracht 1min

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) Warum wollen wir Skripting in der HSP? Programmierung für die HSP verläuft im wesentl. Durch Implementierung in Java als Xlet und kompilierung desselben Das ist langwierig für ein schnelles ausprobieren einer Idee, oder Integration einer kleinen Funktionalität Daher das Ziel: eine Erleichterung der Entwicklung für die HSP, unter... beibehaltung des gegenwärtigen Applikationsmodel das wird erreicht durch Rhino Interpreter Xlet Schneller für den Entwickler durch die Möglichkeit, das Skript im Editor offen zu halten und direkte neu-interpretierung Desweiteren besteht die Möglichkeit der Integration von Skripten direkt in XML-basierte Sprachen (SVG,HTML) 2min

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 Damit alle wissen, wovon ich eigentlich rede, wenn ich skriptsprache sage, hier eine kurze Zusammenstellung der wichtigsten Eigenschaften von Skr. -Umgangssprachlich wird häufig gesagt, dass Skriptspr. Interpretiert (was heisst das eigentlich? - dazu komme ich gleich) -VM (PFunabh., Fehler, GC) -duck typing bezeichnet lockeren Umgang mit Typen -Sigils sind bei einigen Sprachen den Variablenbezeichnern vorangestellte Prefixe, zB. $ ist sehr verbreitet 3min

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 Ich fange an mit assembler, denn das ist so die erste möglickeit der Programmierung von Rechnern, direkt in Maschinensprache Nach ca. 30 Jahren setzten sich Hochsprachen langsam durch Nächste große Idee VM Und dann das eigentliche Thema dieser SA: die Skriptssprachen 3,5min

6 Betriebssystem, Plattform
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 Assembler bezeichnet sowohl die Sprache als auch den Übersetzer der Sprache, der von Code nach CPUCode übersetzt Bekommen an PF,OS schon angepassten Code mit Maschinenbefehlen, kurze lex. Analyse für Schlüsselwörter und dann OpCode Erzeugung Vorteile Nachteile 5min

7 Hoch (Systemlevel-)sprachen
Lexik., Syntaktische, Semantische Analyse Linker, Optimizer Code Object Code Maschinen Code Code generation Lexing, Parse tree, Symbol table (OS) OS, Plattform 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 Nur noch bedingt auf ein best. OS geschrieben, dadurch übersetzung in 2 phasen (länger) Wird in 3 Schritten in ZwischenCode übersetzt und dann durch Linker, Optimizer angepasst Vorteile Von Assembler gelernt, dass strikte Typisierung fehler vermeidet Nachteile 7min

8 Virtuelle Maschinen Abstrakte Hardware- Beschreibung Lexik., Syntakt., Semant. Analalyse JIT, Optimizer Code Zwischen Code VM Lexing, parse tree, symbol table Code gen. OS, Plattform HD 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 Idee: Verfrachte komplettes Programm in eine “Sandbox” ein Programm drumherum, was sich um Fehler und Speicher kümmert Ausserdem übersetzt die VM den Code noch einmal auf OS,PF und abstrahiert dadurch davon Vorteile Erkauft durch 8min

9 Dynamische (Skript-) Sprachen
Lexik., Syntakt., Semant. Analyse Optimizer Code VM Lexing, parse tree, symbol table Code generation CPU HD OS, Plattform 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 10min! Alles in einem Vorteile Erkauft durch

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 Da wir hier mit Java Vergleichen: Im Vergleich zu Java sind dyn Sprachen im Mittel um den Faktor 2 langsamer, Java muss aber wie Hochsprachen kompiliert werden und hat starke Typisierung 12m

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 Kommen wir nun zum Evaluationsteil Ich stelle die 5 bekanntesten (verbreitesten) Skriptsprachen kurz vor Danach Schritte der Evaluation, was habe ich gemacht Welche Sprachen habe ich letztendlich als relevant gefunden Ergebnisse der Tests und Zusammenfassung, empfehlung einer Skriptsprachen Implementation 5 verbreitesten nach Studie von GULP (März 07) 14m

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 HTTP CGI daher <?php … ?>, beliebteste Websprache <?php while ($line = fgets(STDIN)){ if (preg_match(“Perl”, $line)) echo $line; } ?> 17m Tainting: “beflecken”, markierung vom user eingegebene werte, die nicht an sicherheitskritische funktionen (shell) übergeben werden können Code Beispiele: immer der gleiche, liest Zeilen aus stdin, und gibt diese aus, wenn Perl dadrin vorkommt Perl: Keine Exceptions, erste Websprache, 3 Sigils %), “Write-only” Sprache Python: interaktive Shell, kein Sigil, OO, funktionale Programmierung (Lambda) PHP: (perl scripts), “$” Sigil, Funktionen für fast alles, ab 4.3 auch als Kommanozeileninterpreter, allerdingsTypsystem sehr lose, kein Namespace, keine Konsistenz der Namen und Parameter

13 ECMA: European Computer Manufacturers Association
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); 20m Ruby: Name von Geburtsstein eines Kollegen (July), Sigil für lokale Variablen Tainting, interaktive Shell (irb), Besser als Perl: totales OO (closures, continuations, reflection) JS: dynamic, weakly typed, Browserkrieg - MS: Jscript, Ecma DHTML: client-seitige dynamische Webseiten Ajax: auch client-seitig, ist die Kraft hinter allen neuen sogenannten Web 2.0 Seiten im Internet (Gmail, StudiVZ, Facebook etc.) 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 22m [Ker98]: Brian Kernigham, Christopher Wyk: Timing Trials or the trials of timing 4.1 einfache und v.a. bekannte Syntax Java.nio.charset: Klassen für transformation von byte sequenzen nach 16bit Characters

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 24m ILOG Software: Java Software z.B. eBay, MS, IBM und Vodafone Nur diese 4 hier in der presentation vorgestellt, weil meiner meinung nach die interessantesten (rest siehe SA) Es fehlen noch Pnuts (keine Besonderheiten) und Jython, lief leider nicht in der Esmertec JSR: Java Specification Request

16 Pseudo-Code des I/O Skripts in Python:
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() 25,5m Exemplarisch die IO Performance herausgegriffen, der Rest (Code, Graphen) kann in der Arbeit eingesehen werden Kurze Erklärung zum Code Was ist auf der x und y-Achse angetragen? Auf Esmertec/PDA ausgeführt, links zu sehen, ziemlich gleiche Geschwindigkeitsverhältnisse, nur etwas dichter zusammen Unterschied zwischen Kurven ist jeweils ca. 50% da logarithmische skala (50%, 65%, 65%) Pseudo-Code des I/O Skripts in Python:

17 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) 26m Haben alle keine stdlib in dem sinne, wie jython (da sie sich auf Java verlassen)

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 27m Prototype: keine Unterscheidung zwischen Definition und Instanzen einer Klasse also keine Unterscheidung zwischen Verhalten und Zustand einer Klasse Klassen werden nur geklont und erhalten automatisch alle Eigenschaften, Funtionen ihres Vaters Vereinfacht das Verändern von Klassen zur Laufzeit

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 28m 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 30m Groovy: sehr ähnlich zu BeanShell, läuft jedoch nich in CDC (wegen Fehlens von java.lang.String.split)

21 Fragen? Das wars zur Presentation von meiner Seite, gibt es noch Fragen? Wenn nicht, gehe ich jetzt über zur Demonstration der Integration in die HSP Xlet, das eine fest eingestellte Dateie einliest und den Inhalt an Rhino zur Interpretaion übergibt Innerhalb des Contextes des Skript ist HScene definiert, d.h. es ist ein Zugriff und auch grafische Darstellung aus dem Skript heraus auf dieser möglich

22 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


Herunterladen ppt "Abstrakte Programmierung mittels Skripting: Untersuchung von geeigneten Implementierungen dynamischer Sprachen für die HSP Braunschweig, 18. September."

Ähnliche Präsentationen


Google-Anzeigen