Compilerbau für die Common Language Runtime



Ähnliche Dokumente
Compilerbau mit Phoenix

Vorkurs Informatik WiSe 15/16

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

schnell und portofrei erhältlich bei beck-shop.de DIE FACHBUCHHANDLUNG mitp/bhv

Diplomarbeit Antrittsvortrag

Anleitung zum Arbeiten mit Microsoft Visual Studio 2008 im Softwarepraktikum ET/IT

Zum Abschluss wird gezeigt, wie aus einem C++ Quell-Programm ein ausführbares Programm erzeugt wird. 1. Installation von NetBeans...

LEHRSTUHL FÜR DATENBANKEN

Version 0.3. Installation von MinGW und Eclipse CDT

CLR CIL MCS ECMA-335. Linux.Ne t Albrecht Liebscher, Erlanger Linux Tage

4D Server v12 64-bit Version BETA VERSION

JAVA als erste Programmiersprache Semesterkurs

Java: Vererbung. Teil 3: super()

Java Einführung Programmcode

Applications Applets (eingeschränkte Rechte)

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Gforth EC auf dem NXT Brick

Cross-Platform Mobile mit.net

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

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

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

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.

Ein mobiler Electronic Program Guide für Android

Die ersten C#- Programme erstellen

Entwicklung einer echtzeitfähigen CLI-Laufzeitumgebung für den Einsatz in der Automatisierungstechnik

Installation von NetBeans inkl. Glassfish Anwendungs-Server

Java Virtual Machine (JVM) Bytecode

C++ mit Eclipse & GCC unter Windows

CADEMIA: Einrichtung Ihres Computers unter Windows

Proseminar Technische Informatik A survey of virtualization technologies

Internet Explorer Version 6

Anpassung einer freien SSL/TLS Implementierung an die Kertasarie VM

MOBILE ON POWER MACHEN SIE IHRE ANWENDUNGEN MOBIL?!

Grundlagen der Programmierung UE

The ToolChain.com. Grafisches Debugging mit der QtCreator Entwicklungsumgebung

Windows Presentation Foundation (WPF) -Grundlagen -Steuerelemente. Dr. Beatrice Amrhein

Applets I. Grundlagen der g Applet-Programmierung

Begleitendes Praktikum zur Vorlesung Künstliche Intelligenz

Grundlagen der Programmierung UE

Vorlesung Objektorientierte Softwareentwicklung. Kapitel 0. Java-Überblick

JDBC. Allgemeines ODBC. java.sql. Beispiele

Eclipse Plugins für die komfortablere Verwendung von ibatis SQLMaps

Application Layer Active Network

Code wiederverwenden: Objektorientierte Programmierung (OOP) sinnvoll nutzen Roland Wagner Automatisierungstreff IT & Automation 2015

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005

Anleitung zur Nutzung des SharePort Plus

Software-Engineering und Optimierungsanwendungen in der Thermodynamik

Softwaretests in Visual Studio 2010 Ultimate Vergleich mit Java-Testwerkzeugen. Alexander Schunk Marcel Teuber Henry Trobisch

Kurzanleitung zu XML2DB

Programmieren in Java

Einstieg in die Informatik mit Java

Robot Karol für Delphi

Einführung zu den Übungen aus Softwareentwicklung 1

Objektorientierte Programmierung

LEGO-Mindstorms-Roboter im Informatikunterricht 1 - mit Java-

Abacus Formula Compiler (AFC)

Client-Systemanforderungen für Brainloop Secure Dataroom ab Version 8.30

Grundlagen für den erfolgreichen Einstieg in das Business Process Management SHD Professional Service

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

Software Entwicklung II (SS12)

Prof. Dr. Uwe Schmidt. 21. August Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (IA 252)

Einsatzbedingungen FAMOS 3.10

Informatik Sommercamp 2012

Trace- und Zeit-Zusicherungen beim Programmieren mit Vertrag

Debian <

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 22

Softwareentwicklung für Weltraumanwendungen

Windows Server 2008 (R2): Anwendungsplattform

Prinzipien Objektorientierter Programmierung

Übung: Verwendung von Java-Threads

J.5 Die Java Virtual Machine

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

Lejos LEGO-Mindstorms-Roboter in Java programmieren

WebService in Java SE und EE

SEP 114. Design by Contract

ecaros-update 8.2 Update 8.2 procar informatik AG 1 Stand: DP 02/2014 Eschenweg Weiterstadt

Innere Klassen in Java

Software Ecosystems. Tobias Schrade

Das Handbuch zu KNetAttach. Orville Bennett Übersetzung: Thomas Bögel

MOBILE ENTERPRISE APPLICATION PLATFORM (MEAP)

Installation einer C++ Entwicklungsumgebung unter Windows --- TDM-GCC und Eclipse installieren

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

Ein Blick voraus. des Autors von C++: Bjarne Stroustrup Conrad Kobsch

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

HMS. Statistiken mit SAS ins Internet. HMS Analytical Software GmbH - Johannes Lang

Tacx Trainer-Software Version 3.6 Bedienung

C# im Vergleich zu Java

Java Entwicklung für Embedded Devices Best & Worst Practices!

Installationsanleitung

Programmieren I. Administratives / Java Installation. Thomas Vetter, Brian Amberg, Andreas Forster. 21. September 2010 UNIVERSITÄT BASEL

Korrekturen von Hand ausgeführt, per Post oder als Scan an Sie übermittelt.

Kompilieren und Linken

Spline Morphing. Softwarepraktikum im IWR. Carl Friedrich Bolz. Carl Friedrich Bolz

Copyright 2014 Delta Software Technology GmbH. All Rights reserved.

Design Patterns 2. Model-View-Controller in der Praxis

Java Web Services Metadata JSR-181

Client-Server-Beziehungen

Kapitel 10: Datenbankzugriff & Pufferung 2

eclips Handheld Remote Control Software Updater

Cross-Platform Apps mit HTML5/JS/CSS/PhoneGap

Transkript:

für die Common Language Runtime Übersicht

Common Language Runtime 2006 Martin v. Löwis Terminologie: CLR, CLI, CLS, CTS,.NET Besser: für die Common Language Infrastructure? mit.net: Formulierung von Compilern in.net-sprachen (C#) ANTLR, (Phoenix?) Compiler nach.net: Formulierung von Compilern, die.net-assemblies (MSIL) produzieren C#-Compiler,... MSIL-Backend für GCC (Google Summer of Code) Compiler von.net: Entwicklung von Compilern, die.net-assemblies konsumieren JIT, Lego.NET Fokus der Veranstaltung 2

GCC 2006 Martin v. Löwis ursprünglich: GNU C Compiler veröffentlicht 1987 flexible Architektur zur Integration verschiedener Prozessorarchitekturen (portable compiler): backends GCC 2 (1992): Renovierung mit dem Ziel, verschiedene Eingabesprachen (frontends) zu erlauben zunächst nur C++ NeXT/Apple entwickelt Objective C auf Basis von GCC, andere frontends für Ada, Fortran kommerziell erweitert u.a. durch Cygnus Solutions Streit um Entwicklungsmodell: EGCS GCC 3 (2001): GNU Compiler Collection Ergebnis des EGCS-Projekts GCC 4 (2005): Erweiterung/Umbau der Codetransformationen (middle end, sic) 3

4 Unterstützte Architekturen Alpha, ARC, ARM, AVR, Blackfin, CRIS, CRX, FRV, H8/300, HPPA, i386, AMD64, IA64, M32C, M32R/D, 68000, MCore, MIPS, MMIX, MN10300, MT, PDP-11, rs6000/powerpc, S/390+zSeries, SH, SPARC, V850, VAX, Xtensa

5 Unterstützte Frontends Ada, C, C++, Fortran 95, Java, Objective C, Objective C++ verfügbare Frontends: Pascal, Modula-2, Modula-3, Mercury, VHDL, PL/I,.NET

Lego.NET 2006 Martin v. Löwis entwickelt von Jan Möller, Martin v. Löwis ursprüngliche Zielplattform: Lego Mindstorm (RCX) Prozessor H8/300 32kiB ROM, 32kiB RAM, 16 MHz, programmierbare Ports und Timer IR-Schnittstelle zuschaltbare Sensoren (Berührung, Licht, Drehung, Temperatur) und Aktoren (Motoren) Lego bietet Entwicklungsumgebung auf Basis von Lego Bytecode NQC (Not Quite C) übersetzt NQC nach Lego Bytecode Alternative Betriebssystem: brickos (C), lejos (Java) Ziel: Ausführung von.net-code auf RCX unter brickos 6

Realtime.NET 2006 Martin v. Löwis In Entwicklung: Andreas Rasche, Martin v. Löwis Ziel: Bereitstellung von.net-hochsprachen (C#,...) für Echtzeitprogrammierung Spezifikation (API) und Implementierung Anforderungen an Implementierung: Einhaltung von Zeitgrenzen (WCET: Worst-Case Execution Time) auf Basis von IL-Anweisungen; WCET von Methoden kann daraus manchmal theoretisch abgeleitet werden Nicht-Einmischung des Garbage-Collectors Nicht-Einmischung des JIT Zugriff auf Scheduler (Prioritäten) des Betriebssystems Effizienz der Implementierung (oft auch in Bezug auf Stromverbrauch) Portierbarkeit auf verrückte Zielplattformen 7

8 Projektthemen Erweiterung des Compilers um das Interface-Konzept Erweiterung des Compilers um Ausnahmebehandlung Erweiterung des Compilers um Reflection-Information (und API) Integration in das Mono-Laufzeitsystem

Interfaces 2006 Martin v. Löwis Ziel: Das folgende Programm soll funktionieren: interface A{ int f(); class C:A{ int f(){return 42;... public static void Main(){ A a = new C(); System.Console.WriteLine(a.f()); 9

10 Interfaces (2) Herausforderung: Implementierung von Dispatch-Code für Interfaces Implementierungsstrategie in Anlehnung an Mono: Auffinden der Zielmethode in konstanter Zeit Optionale Aspekte: casts und Typtests (isinstance)

Ausnahmebehandlung 2006 Martin v. Löwis Ziel: Das folgende Programm soll funktionieren class A{ static void f(){ throw new ApplicationException( Hello, world ); public static void Main(){ try{ f(); catch(application e){ System.Console.WriteLine(e.Message); 11

12 Ausnahmebehandlung Herausforderung: Integration von Ausnahmeregionen in GCC-Datenstrukturen GCC sollte dann nötiges Unwinding generieren Optionale Aspekte: Hierarchische Ausnahmebehandlung VM-Ausnahmen (NullReferenceException, IndexOutOfRangeException) Untersuchung der Zeitkomplexität Mono-Kompatibilität

13 Reflection Ziel: Das folgende Programm soll funktionieren class A{ public static void Main(){ System.Console.WriteLine(typeof(System.Console).FullName); Herausforderung: Generierung von Mono-konformen Tabellen, die die benötigten Informationen enthalten Optional: Aufruf von Methoden über Reflection

Mono-Integration 2006 Martin v. Löwis Ziel: Das folgende Programm soll sich unter Linux Windows OSX mit einer abgerüsteten Version von Monos mscorlib.dll zu einem komplett zielabhängigen Programmimage linken lassen class A{ public static void Main(){ System.Console.WriteLine( Hello, World ); Lego.NET ist bisher teilweise mono-kompatibel Layout von System.Object, System.Array, System.String folgt Mono-Layout Kompatibilität der calling convention unbekannt bisher keine Integration von Monos VES (virtual execution system) 14

15 Mono-Integration Herausforderung: Abrüstung von Monos mscorlib so weit, dass GCC sie übersetzen und linken kann Lösungsstrategie: Schrittweiser Verzicht auf alles, was für das Testprogramm nicht zwingend erforderlich ist; Realisierung der verbleibenden fehlenden Teile im GCC

Themen der Vorlesungen 2006 Martin v. Löwis Aufbau des GCC, Arbeit mit den GCC-Quellen Aufbau der Common Language Infrastructure und des MSIL-Bytecodes Implementierung objektorienter Konzepte (in Mono) Funktionsweise des IL-Frontends weiterhin: Source Code Analyse (Parsing, semantische Analyse) Synthese von Maschinencode (GCC Machine Descriptions) Optimierungspässe (GIMPLE, SSA, peep-hole,...); Optimierungspotentiale in OO-Sprachen 16

17 Erste Schritte im Projekt Zugriff auf GCC-Quellen (https://www.dcl.hpi.unipotsdam.de/projects/gcc/trunk; anerkanntes Zertifikat erforderlich) Übersetzung des IL-Compilers für eine Zielplattform (etwa: Linux/x86)