Anatomie eines Compilers am Beispiel von Pugs

Ähnliche Dokumente
Linux-Info-Tag. Perl Eine Free Software-Kultur. Pugs - Eine Perl6-Implementierung

Perl 6, genau jetzt!

TypeScript JavaScript mit ohne Kopfschmerzen. Veit Weber 3. JUG Saxony Day Radebeul

Einführung in die Programmierung mit VBA

Typisierung. Prüfungen zur Übersetzungszeit Type Test und Type Cast Bedingte Zuweisung Nil Übergangsparameter Grade der Typisierung. 3.

Threads. Netzwerk - Programmierung. Alexander Sczyrba Jan Krüger

Programmieren in Java -Eingangstest-

LT 56 - NODE.JS ES GIBT AUCH SCHÖNE MOMENTE. Ralf Enderle

Mixed Language Programming POLINA RAJKO - MIXED LANGUAGE PROGRAMMING 1/35

Inhalt. n Algorithmus. n Euklidscher Algorithmus. n Sortieren. n Programmiersprachen. n Entwicklungsschritte eines Programms.

Gliederung. n Teil I: Einleitung und Grundbegriffe. n Teil II: Imperative und objektorientierte Programmierung

VAADIN, SPRING BOOT & REST

Die Klasse Vertiefung

III.1 Prinzipien der funktionalen Programmierung - 1 -

javascript Coding-Guidelines 2. Ausgabe Februar 2015 Der Guideline beschreibt den verwendeten Coding-Stil von javascript als eigene Richtline.

JavaScript clientseitige Programmiersprache zur Dynamisierung von Internetseiten

Grundlagen Internet-Technologien. Clientseitige Web-Programmierung

Programmierbüchlein Grundlagen der Programmierung. Rootgames

Überblick. Klassen Optionale Typen DOM. Optionale Parameter Klassen. Einführung. 2 Motivation 3 Werkzeuge 4 Demonstration 5 Dart

Waitomo. Compilerbaupraktikum Wintersemester 2006/2007. Stefan Wehr. 24. Oktober 2006

Languages and Tools for Object-Oriented Development Klausur Wintersemester 2007/2008

Programming 101. Carl Herrmann IPMB & DKFZ

Einführung in Perl 6. Referent : Gerd Pokorra Am Eicher Hang Freudenberg. (dienstlich): /

Ein Überblick über KDevelop

Organisatorisches/Einstieg

Kompendium der Web-Programmierung

OCP Java SE 8. Lambda

DOM Document Object Model

Google s JavaScript Engine: V8

OCP Java SE 8. Lambda

Modern Perl. Florian Ragwitz Maik Hentsche

REXX. Was ist REXX. Scriptsprache für viele Plattformen Erste Schritte F. Hodel os2.a-net.ch

schließensiespäterwieder.dasistzwarsehreinfachzuverstehen,ingrößerenprojektenjedochnichtganzeinfachkorrektumzusetzen.einwrapper,derdasobenerwähnte

Software Engineering I (IB) Node.js. Prof. Dr. Oliver Braun. Fakultät für Informatik und Mathematik Hochschule München

Informatik I Übung, Woche 40

Fachhochschule Wiesbaden - Fachbereich DCSM. Skriptsprachen. Moderne, objekt-orientierte Skriptsprachen mit Betonung auf Ruby

Perl-Praxis. Subroutinen. Jörn Clausen

Web-Techniken Einführung in JavaScript

Informatik II Übung, Woche 10

Grundlagen. Felix Döring, Felix Wittwer 24. April Python-Kurs

JavaScript ohne Schrecken?

Perl-Praxis. Subroutinen. Jörn Clausen, Jan Krüger Jens Reeder, Alex Sczyrba. AG Praktische Informatik Technische Fakultät Universität Bielefeld

Ursprünge. Die Syntax von Java. Das Wichtigste in Kürze. Konsequenzen. Weiteres Vorgehen. Rund um Java

Lehrstuhl 1 / Fakultät für Informatik. Haskell. Karsten Lettow

Kamelbuch

Babeș-Bolyai Universität Cluj Napoca Fakultät für Mathematik und Informatik Grundlagen der Programmierung MLG5005. Testing

Übungsserie Nr. 6. Ausgabe: 1. April 2015 Abgabe: 15. April Hinweise

string: Beispiele: Test, test, `Seitentitel: ${document.title}`

Programmieren in Haskell Einführung

JUnit. Software-Tests

Informatik I Übung, Woche 40

Vorstellung e.solutions

Programmiersprachenkonzepte

Automatisierte Akzeptanztests und TDD für ios

Erste Schritte der Programmierung in C

Stratego/XT und ASF+SDF Meta-Environment. Paul Weder Seminar Transformationen Datum:

Objektorientierte Programmierung II

JavaScript in Drupal

Modul Entscheidungsunterstützung in der Logistik. Einführung in die Programmierung mit C++ Übung 1

Short Introduction to C# C# (C SHARP) Microsofts Antwort auf Java

1. Grundkonzepte der logischen Programmierung 2. Syntax von Prolog 3. Rechnen in Prolog. IV.1 Grundkonzepte der logischen Programmierung - 1 -

Es gibt immer einen Schlüssel und einen zugehörigen Wert,

Guile Die Erweiterungssprache des GNU-Projekts

PHP JavaScript Kapitel 4. Kommentare

Organisatorisches. Folien (u.a.) auf der Lva-Homepage Skriptum über MU Online

n 1. Grundkonzepte der logischen Programmierung n 2. Syntax von Prolog n 3. Rechnen in Prolog IV.1 Grundkonzepte der logischen Programmierung - 1 -

Skriptsprachen: Python

Parsing SystemVerilog 2012

Python VS Perl. Storage Monitoring per API statt SNMP. Björn Müller Marcel Denia. comnet GmbH

JavaScript: Von einfachen Scripten zu komplexen Anwendungen. MMT Dezember 2011

Ersetzbarkeit und Verhalten

Probeklausur: Programmierung WS04/05

Übungsblatt 1. Java Vorkurs (WS 2017)

Versionskontrolle mit SVK

Klassen und Objekte. Klassen und Objekte

Programmiersprachen Pascal, Modula-2, Oberon. Charlotte Prieß

Task Force - Profound UI Suite Newsletter für die Version (Stand )

Grundlagen Internet-Technologien. Ajax und Cookies&Sessions Version 1.00

Programmieren in C. Eine Einführung in die Programmiersprache C. Prof. Dr. Nikolaus Wulff

Formale Spezifikation mit Java Modeling Language

SQLcl Quo vadis SQL*Plus? Das neue SQL*Plus in der Praxis. Gunther Pippèrr GPI Consult München

Informatik II Übung 6 Gruppe 7

Grundlagen Internet-Technologien INF3171

C++ im Web mit Tntnet

Definitionen/Vorarbeit zum Thema Java

Wiederholung: Listen, Referenzen

MIT3 Serverseitige Programmierung. Claudius Coenen

EINFÜHRUNG IN DIE PROGRAMMIERUNG

PERL HACKS. chromatic, Damian Conway und Curtis»Ovid«Poe O'REILLY 8. Deutsche Übersetzung von Jörgen W. Lang

Funktionen nur wenn dann

Datenaustausch mit JSON

Angewandte Mathematik und Programmierung

! können default arguments haben: ein Endstück der Argumentliste einer Deklaration mit Wertevorgaben

Mail: Web: juergen-schuster-it.de

Alles außer Java! JVM-Sprachen sagen Happy Birthday

THE GO PROGRAMMING LANGUAGE. Michael Karnutsch & Marko Sulejic

Grundlagen. Felix Döring, Felix Wittwer 24. April Python-Kurs

Dynamische Programmiersprachen. David Schneider STUPS

Die Syntax von Java. Ursprünge. Konsequenzen. Das Wichtigste in Kürze. Weiteres Vorgehen. Rund um Java. Sun Microsystems. Borland Software Corp

Introduction to Python. Introduction. First Steps in Python. pseudo random numbers. May 2016

Transkript:

Ingo Blechschmidt <iblech@web.de> LUGA 3. August 2005

Inhalt Pugs 1 Pugs Übersicht Entwicklung Pläne Beteiligungsmöglichkeiten 2 Arbeitsschritte Beispiel: - 3 Perl 6 PIL PIL JavaScript Probleme 4

Pugs Übersicht Entwicklung Pläne Beteiligungsmöglichkeiten Pugs: Prototyp des Perl 6-s Perl 6 ist ja schön und gut, aber das dauert doch noch Jahre, bis es fertig ist! Die Entwickeln doch schon seit Jahren dran! Nur tote Produkte sind fertig. Seit dem 1. Februar gibt es Pugs. Heute kann man vernünfig in Perl 6 programmieren.

Pugs Übersicht Entwicklung Pläne Beteiligungsmöglichkeiten Ursprünglich Haskell-Projekt von Autrijus Tang als Übung Projektbeginn: 1. Februar 2005 Nun 130 Entwickler Version 6.2.8: Beinahe Alles (!), mehrere Backends (direkte Ausführung, Kompilierung zu Haskell, zu Perl 5, zu JavaScript, etc.)

Entwicklung Pugs Übersicht Entwicklung Pläne Beteiligungsmöglichkeiten Test-driven development Camelfolk: Schreiben von Tests in Perl 6 für noch nicht implementierte Features is 23 + 42, 64, "Einfache Rechnungen funzen."; my @array = <a b c>; is +@array, 3, "Unser Array enthält drei Elemente."; Lambdafolk: Implementierung dieser Features Ergebnis der Zusammenarbeit: Über 7.700 funktionierende Tests

Entwicklung Pugs Übersicht Entwicklung Pläne Beteiligungsmöglichkeiten Test-driven development Camelfolk: Schreiben von Tests in Perl 6 für noch nicht implementierte Features is 23 + 42, 64, "Einfache Rechnungen funzen."; my @array = <a b c>; is +@array, 3, "Unser Array enthält drei Elemente."; Lambdafolk: Implementierung dieser Features Ergebnis der Zusammenarbeit: Über 7.700 funktionierende Tests

Pläne Pugs Übersicht Entwicklung Pläne Beteiligungsmöglichkeiten Pugs 6.0 Erstes Release Pugs 6.2 Grundlegende IO- und Kontrollflusselemente, veränderbare Variablen Pugs 6.28 Klassen Pugs 6.283 Rules und Grammars Pugs 6.2831 Rollen Pugs 6.28318 Makros Pugs 6.283185 Portierung von Pugs von Haskell nach Perl 6 Pugs 2π Vollendung

Beteiligungsmöglichkeiten Übersicht Entwicklung Pläne Beteiligungsmöglichkeiten Mailinglisten: perl6-language@perl.org, perl6-compiler@perl.org, gmane.comp.lang.perl.perl6.language, gmane.comp.lang.perl.perl6.compiler IRC: #perl6 auf Freenode Auch Newbies sehr gern gesehen! Schreiben von Tests (Perl 6), Implementierung (Haskell), Schreiben von Dokumentation, Portierung von Perl 5 Python Ruby... -Modulen nach Perl 6,... Weitere Informationen: http://www.pugscode.org/

Arbeitsschritte Pugs Arbeitsschritte Beispiel: - 1 Parsen: Umwandlung des Sourcecode in einen Parse Tree 2 Kleinere Optimierungen 3 Umwandlung des Parse Tree in einen einfacheren Tree 4 Größere Optimierungen, Argumentieren über den Code (z.b. Verbot von 3 = 4 zur Compile-Zeit) 5 Umwandlung ins Zielformat 6 Kleinere Optimierungen 7 Ausgabe

Beispiel: - Arbeitsschritte Beispiel: - PIL2JS: Spiel-Projekt von mir, Projektbeginn: 16.7.2005 4.000 Zeilen Perl 5, Perl 6 und JavaScript Perl 6 überall (Browser, PDFs, Flash,... ) 1 Einlesen und Parsen von Perl 6 durch Pugs 2 Ausgabe von Pugs Intermediate Language (PIL) durch Pugs 3 Einlesen des PIL-Trees durch PIL2JS 4 Kleinere Umwandlungen 5 Ausgabe als JavaScript

Beispiel: - Arbeitsschritte Beispiel: - PIL2JS: Spiel-Projekt von mir, Projektbeginn: 16.7.2005 4.000 Zeilen Perl 5, Perl 6 und JavaScript Perl 6 überall (Browser, PDFs, Flash,... ) 1 Einlesen und Parsen von Perl 6 durch Pugs 2 Ausgabe von Pugs Intermediate Language (PIL) durch Pugs 3 Einlesen des PIL-Trees durch PIL2JS 4 Kleinere Umwandlungen 5 Ausgabe als JavaScript

Perl 6 PIL PIL JavaScript Probleme Parsen von Perl 6-Sourcecode (Perl 6 PIL) Perl 6 ist eine umfangreiche Sprache. Wenn jedes Backend Perl 6 selbst parsen müsste, wäre das viel doppelte Arbeit. Stattdessen: Parsen von Perl 6 durch Pugs, Ausgabe des Codes in einer Zwischen-Sprache, Pugs Intermediate Language (PIL) Einlesen des PIL durch die einzelnen Backends Kümmern ums Parsen unnötig

Beispiel Pugs Perl 6 PIL PIL JavaScript Probleme # Perl 6: $foo = 19; say 4 + $foo; -- PIL (vereinfacht): PAssign (PVar "$foo") (PLit 19) PApp (PVar "&say") [ PApp (PVar "&infix:<+>") [ PLit 4, PVar "$foo" ] ]

Perl 6 PIL PIL JavaScript Probleme Kompilieren des PIL zu JavaScript Sowohl Perl 6 als auch JavaScript sind Turing-vollständig, wo also liegt das Problem? (:D) JavaScript: weniger mächtig als Perl 6 Also: Herunterkompilation vieler Features erforderlich

Perl 6 PIL PIL JavaScript Probleme Problem: Signaturen von Subroutinen Perl 6: Reiche Möglichkeiten zur Spezifikation von Signaturen (Parameter-Listen; ähnlich wie Ruby oder Python): sub foo (Grtz $grtz, Bool?$verbose = false) {...} # Ok: foo $irgendein grtz objekt; foo $irgendein grtz objekt, true; foo $irgendein grtz objekt, :verbose; foo $irgendein grtz objekt, :verbose(true); foo $irgendein grtz objekt, verbose => true; # Fehler: foo "Zu", <viele>, $parameter; foo();

Perl 6 PIL PIL JavaScript Probleme Problem: Signaturen von Subroutinen JavaScript (vor Version 2): Weit weniger umfangreiche Möglichkeiten, Ignorieren von zu vielen/zu wenigen Parametern (ähnlich wie PHP): function foo (grtz, verbose) {...} // Ok: foo(irgendein grtz objekt); foo(irgendein grtz objekt, true); // Ebenfalls ok (!): foo(); foo("zu", viele, Para.meter);

Problem: Lexikale Variablen Perl 6 PIL PIL JavaScript Probleme Perl 6: Lexikale Variablen (wie bei Ruby, Python, C und vielen anderen Sprachen): { say $a } # Fehler { my $a; say $a } # Ok { say $a; my $a } # Fehler JavaScript (ähnlich wie bei Bash oder PHP): { alert(a) } // Fehler { var a; alert(a) } // Ok { alert(a); var a } // Kein (!) Fehler Daher, leider: Durchnummerieren aller lexikalen Variablen ($a 1, $a 2,... ) und dann Deklaration als globale JavaScript-Variablen

Problem: Objekt-Metamodell Perl 6 PIL PIL JavaScript Probleme Objekt-Metamodell Was ist eine Klasse? Was ist ein Objekt? Ist eine Klasse auch ein Objekt?... Perl 6: Mächtiges Objekt-Metamodell, mit Features u.a. von Smalltalk und CLOS JavaScript: Weniger mächtiges Modell Viele Backends haben dieses Problem. Daher: Exzellente Arbeit von Stevan Little: Perl 6-Metamodell für Perl 5, Perl 6, JavaScript, Java, C#,...

Weitere Probleme Pugs Perl 6 PIL PIL JavaScript Probleme Firefox: langsame JavaScript-Ausführung Wichtiger noch: Ausführung von Seiten-JavaScripts im gleichen Thread wie die UI (Hänger!) Aber: Exzellente JavaScript-Implementation

Never do any live demos! Perl 6 PIL PIL JavaScript Probleme Hello, World! mandel.p6 Testsuite

Pugs -Schreiben ist leichter als man denkt. :D Besonders leicht wird es, wenn einem viel Arbeit abgenommen wird. :)

Pugs -Schreiben ist leichter als man denkt. :D Besonders leicht wird es, wenn einem viel Arbeit abgenommen wird. :) Join the fun! http://www.pugscode.org/