Compilerbau mit Phoenix



Ähnliche Dokumente
Einführung in die Systemprogrammierung

Static-Single-Assignment-Form

Compilerbau für die Common Language Runtime

Kapitel 4. Einführung in den Scannergenerator Flex. Einführung in den Scannergenerator Flex Wintersemester 2008/09 1 / 9

Diplomarbeit Antrittsvortrag

Praktikum Compilerbau

Übungen zu Übersetzerbau 2

Einführung. (Compiler) Prof. Dr. Oliver Braun. Letzte Änderung: :49. Einführung 1/26

Propädeutikum. Dipl.-Inf. Frank Güttler

Compiler. Einführung. Prof. Dr. Oliver Braun. Fakultät für Informatik und Mathematik Hochschule München. Letzte Änderung:

Compiler: Einführung

Was ist ein Compiler?

Compiler für Eingebettete Systeme

360.NET. Jan Schenk Developer Evangelist Web/Live Microsoft Deutschland

Kapitel 17 Code-Erzeuger und Laufzeitübersetzer

Einführung in die Systemprogrammierung

Übersetzergenerierung mit lex und yacc

Anpassung einer freien SSL/TLS Implementierung an die Kertasarie VM

Session Beans & Servlet Integration. Ralf Gitzel ralf_gitzel@hotmail.de

Übersetzung objektorientierter Programmiersprachen

Rhapsody in J Modellierung von Echtzeitsystemen

Äquivalente Grammatiken / attributierte Grammatik

den Einsatz von generierenden Werkzeugen und Theorien und von Software-Engineering-Methoden

Definition von domänenspezifischen Sprachen mit Xtext: Einführung. 19. November 2014

Brainfuck. 1 Brainfuck. 1.1 Brainfuck Geschichte und Umfeld. 1.2 Esoterische Programmiersprachen

Version 0.3. Installation von MinGW und Eclipse CDT

Forschungsprojekt SS 2009

Software Engineering. Zur Architektur der Applikation Data Repository. Franz-Josef Elmer, Universität Basel, HS 2015

Quellcode-Repräsentation in Eclipse. Seminarvortrag PG Reclipse Jan Rieke

Algorithmen und Datenstrukturen

Automatisches Parallelisieren

Fassade. Objektbasiertes Strukturmuster. C. Restorff & M. Rohlfing

Abacus Formula Compiler (AFC)

Neues aus dem 52 North WPS Projekt. Benjamin Proß, FOSSGIS,

Pass by Value Pass by Reference Defaults, Overloading, variable Parameteranzahl

Internet Explorer Version 6

Programmieren Formulierung eines Algorithmus in einer Programmiersprache

Compilerbau für die Common Language Run-Time

Modellgetriebene Service-Entwicklung

Programmiertechnik II

DIE ALCHEMISTEN WAREN GETRIEBEN VON DEM GEDANKEN, AUS STOFFLICHEM GOLD ZU GEWINNEN UND SIND DAMIT GESCHEITERT. TROI IST DER ALCHEMIST DER ZUKUNFT,

Ausführungszeiten. Worst-Case Execution-Time. Übung zur Vorlesung EZS. Zeitgeber Oszilloskop Diskussion

Language Workbench. Aktuelle Themen der Softwaretechnologie. Vortrag von: Arthur Rehm Steven Cardoso. Betreut von: Prof. Dr.

Pragmatik von Programmiersprachen

Java Einführung Programmcode

Eclipse Equinox als Basis für Smart Client Anwendungen. Christian Campo, compeople AG, Java Forum Stuttgart 2007

C++ Grundlagen. ++ bedeutet Erweiterung zum Ansi C Standard. Hier wird eine Funktion eingeleitet

Vorstellung SimpliVity. Tristan P. Andres Senior IT Consultant

Mikrocontroller Grundlagen. Markus Koch April 2011

.NET Framework. 3. Das.NET Framework

Mathematik für Studierende der Wirtschaftswissenschaften und Gesundheitsökonomie

Informatik II SS Der Kompilationsprozess (-phasen) Schreiben des Programms. Die Organisation eines typischen Compilers

Kooperativer Speicher: Schwächen und Gegenmaßnahmen

Martin Stiller, Fakultät Informatik, Institut für Technische Informatik. LLVA: Eine virtuelle Befehlssatzarchitektur

10 Erweiterung und Portierung

Verfügbarkeit von Applikationen und Failover Szenarien. Winfried Wojtenek.

BIF/SWE 1 - Übungsbeispiel

Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein.

Step by Step Webserver unter Windows Server von Christian Bartl

Kapitel 10: Datenbankzugriff & Pufferung 2

FrontDoor/Monitor mehr sehen von FrontDoor

Die Nuance-Grammatik und der Grammar Builder

Beispiel einer Übersetzung

Haskell auf der Überholspur mit LLVM. Henning Thielemann

Kompilieren und Linken

Zählen von Objekten einer bestimmten Klasse

Some Software Engineering Principles

Entwicklung einer formalen Sprache zur Modelltransformation auf Basis von UML & XMI

Einführung in Generatives Programmieren. Bastian Molkenthin

0. Einführung. C und C++ (CPP)

Algorithmen mit Python

SUB-ID- VERWALTUNG MIT GPP SETUP-GUIDE FÜR PUBLISHER

Prinzipien Objektorientierter Programmierung

ENTERPRISE 2.0 DER EINSATZ VON ENTERPRISE SOCIAL

In diesem Tutorial lernen Sie, wie Sie einen Termin erfassen und verschiedene Einstellungen zu einem Termin vornehmen können.

SAP IT Summit Österreich 21. April 2015 Einsatzplanung im Serviceumfeld mit SAP Multiresource Scheduling

TYPO3 in der Praxis. KuKo Rosenheim. 21. Oktober 2009

Jan Parthey, Christin Seifert. 22. Mai 2003

Die Programmiersprache Java. Dr. Wolfgang Süß Thorsten Schlachter

Systembeschreibung. Masterplan Kommunikationsinterface. ASEKO GmbH. Version 1.0 Status: Final

Methoden des Krafttrainings

Java Kurs für Anfänger LMU SS09 Einheit 1 Javaumgebung

Optimierung der Code-Generierung virtualisierender Ausführungsumgebungen zur Erzielung deterministischer Ausführungszeiten

J.6 Programmierung eingebetteter Systeme

Seminar Informationsintegration und Informationsqualität. Dragan Sunjka. 30. Juni 2006

Objektorientierte Programmierung. Kapitel 12: Interfaces

Systemvoraussetzungen

Nach der Anmeldung im Backend Bereich landen Sie im Kontrollzentrum, welches so aussieht:

Vorlesung Objektorientierte Softwareentwicklung. Kapitel 0. Java-Überblick

Innere Klassen in Java

Seite 1. ProSeminar Compilerbau

Übung 8: Semaphore in Java (eigene Implementierung)

Gliederung. Programmierparadigmen. Sprachmittel in SCHEME. Objekte: Motivation. Objekte in Scheme

XEN Virtualisierung und mehr

MAP CellSs Mapprakt3

Java und Grid Computing

C# im Vergleich zu Java

Copyright 2014 Delta Software Technology GmbH. All Rights reserved.

Informatik für den Satellitenbau. Toolchains und Crosscompiler

Transkript:

Übersicht

2 Was ist ein Compiler? Frontend Analyse Backend Synthese Compiler-Pässe

3 Was ist ein Compiler? Frontend (Eingabesprache) Analyse Backend (Ausgabesprache) Synthese

4 Was ist ein Compiler? Frontend (Eingabesprache) Syntaxanalyse (Parser) statische Semantik (well-formedness) "Middle-end" (interne Repräsentation) Transformationen Backend (Ausgabesprache) Codegenerierung

Was ist ein Compiler? 2008 Martin v. Löwis Frontend (Eingabesprache) Syntaxanalyse (Parser) statische Semantik (well-formedness) Namensauflösung "Middle-end" (interne Repräsentation) Transformationen: Optimierung (target-unhabhängg) Kontrollflussanalyse Datenflussanalyse Backend (Ausgabesprache) Codegenerierung Optimierung (target-abhängig) Registerallokation peep-hole optimizer spezielle Maschinenbefehle 5

Beispiel eines modularen Compilers: GCC 2008 Martin v. Löwis Front-Ends: C, C++, Pascal, Java, (.NET),... Interne Repräsentation 1: tree nodes (abstrakte Syntaxbäume) SSA-Form (Single Static Assignment): GENERIC und GIMPLE Middle-End-Optimierungen: dead code elimination partial redundancy elimination global value numbering sparse conditional constant propagation... Back-Ends: x86, SPARC, PPC, ARM, MIPS,... interne Repräsentation 2: RTL (Register Transfer Language) 6

Phoenix 2008 Martin v. Löwis Microsoft-Compiler-Framework,.NET-basiert für Compiler und ähnliche Werkzeuge (zur Programmanalyse, Optimierung, Test) Keine Unterstützung für Parser-Bau, gegenwärtig keine Unterstützung für Backends: Fokus auf "Middle-End) Modulare Architektur verschiedene interne Repräsentation, erweiterbare Architektur für Compilerpässe Beispielanwendungen (Quelle: Phoenix-Dokumentation): Basic Block Analysis Memory Tracing Code coverage Fault injection Ahead-of-time and Just-in-Time compilers Whole-program, post-link, and runtime optimization 7

8 Phoenix: Teilfunktionen Readers: CIL, MSIL, COFF,.exe,.pdb Writers: CIL, MSIL, COFF,.exe,.pdb Interne Repräsentationen: HIR, MIR, LIR HIR: unabhängig von Laufzeitsystem MIR: unabhängig von Zielarchitektur LIR: abhängig von Zielarchitektur zusätzlich: Symbole, Funktionen, Flussgraphen,... Pässe: Reader, TypeCheck, BuildCallGraphNodes, DeadStores, StackAllocate, Lower, Writer,...

9 Phoenix: Features Alias-Analyse Datenflussanalyse statische Analyse simulationsbasierte Analyse SSA Integration mit MSVC C Compiler (cl.exe)

10 Projektarbeit Teams von bis zu 4 Studenten zweiwöchentliche Konsultationen, Abschlussvortrag, Ausarbeitungen Thema jeweils entweder Frontend, Middleend, Backend Front-End: z.b. Java-nach-.NET-Compiler Middle-End: z.b. Whole Program Analysis Back-End: z.b. SPARC-Generator (für C-Compiler)

11 Java-Compiler Scanner, Parser: z.b. ANTLR yacc etc. auch möglich, aber: Integration mit C#/Managed C++ statische Semantik/wellformedness? Synthese: Schritt 1: Phoenix HIR Schritt 2: Phoenix macht den Rest?!?

Whole-Program-Analysis 2008 Martin v. Löwis Einlesen eines ganzen Programms (Haupt-Assembly, main) Rekursive Erkennung benutzter Teile: Problem: Virtuelle Methodenrufe statisch schwer analysierbar Löschung unbenutzter Klassen und Methoden eventuell auch Löschung sonstigen toten Codes, mit Phoenix-Hilfe Lösung: Löschung ganzer Klassen löscht u.u. auch virtuelle Funktionen; Wiederholung bis zum Fixpunkt Speichern neuer Assemblies evtl: Integration mehrerer Assemblies in eine siehe auch Masterarbeit Florian Wonneberg 12

SPARC-Generator 2008 Martin v. Löwis Phoenix: deklarative Backend-Entwicklung Deklaration von Registern, Befehlen, evtl. Funktionseinheiten auf dem Chip (für "instruction scheduling"), etc. bisher nicht öffentlich verfügbar naive Implementierung: sequentielles Traversieren von MIR/LIR Annahme: alle Variablen im Hauptspeicher Registerverwendung nur für einzelne MIR-Befehle Zielsystem: Solaris Calling Conventions Integration in MSC: Phoenix implementiert c2.dll 13

14 Literatur Aho, (Lam), Sethi, Ullman: Compilers