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

Ähnliche Dokumente
Institut für Programmierung und Reaktive Systeme. Java 1. Markus Reschke

Vorkurs Informatik WiSe 16/17

Vorkurs Informatik WiSe 17/18

Vorlesung Programmieren

Vorlesung Programmieren. Programmiersprachen-Paradigmen. Programmierparadigmen. Eine Programmiersprache dient dem Aufschreiben von Algorithmen

MODULARITÄT. Levi Bautz. 1/19 Levi Bautz

Programmübersetzung & modulare Programme INE2 M. Thaler, Office TG208

Einführung in die Programmierung mit Java

Klassenvariablen, Klassenmethoden

III.1 Prinzipien der funktionalen Programmierung - 1 -

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

Objektorientierte Programmierung

Programmieren in Java -Eingangstest-

Programmierung und Angewandte Mathematik

2. JAVA-Programmierung. Informatik II für Verkehrsingenieure

Ein Design Tool für objektorientierte portable Programmierschnittstellen

Ergebnisse der Untersuchung zur Eignung einer Programmiersprache für die schnelle Softwareentwicklung kann der Informatikunterricht davon profitieren?

Beuth Hochschule Parameter-Übergabe-Mechanismen WS17/18, S. 1

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

Einstieg in die Informatik mit Java

Objekte. Theorieteil. Inhaltsverzeichnis. Begriffe. Programmieren mit Java Modul 5. 1 Modulübersicht 3

Einführung Sprachfeatures Hinweise, Tipps und Styleguide Informationen. Einführung in C. Patrick Schulz

n 1. Der Begriff Informatik n 2. Syntax und Semantik von Programmiersprachen - 1 -

Allgemeines. Verschiedene Sprachkonzepte C-Sprachfamilie C-ähnliche Programmiersprachen Allgemeines zu C. #include <stdio.h>

2. Programmierung in C

Organisatorisches. Übungsleiter: Karsten Otto Homepage: Aufgaben

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 2. Teil

Objekte und Klassen. INE2 M. Thaler, Office TG ZHAW, M. Thaler, K. Rege, G. Burkert, E.

Java-Einführungskurs Informatik II (D-ITET) Vincent Becker,

2. Programmierung in C

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

Systempraktikum im Wintersemester 2009/2010 (LMU): Vorlesung vom Foliensatz 2

Java-Einführungskurs Informatik II (D-ITET) Vincent Becker,

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen - 1 -

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen - 1 -

Vorlesung Programmieren

Objektorientierte Programmierung Studiengang Medieninformatik

Kurzeinführung in C/C++ Informationsquellen: - Webseite zur Vorlesung, Abschnitt Informationen zu C und C++ Einleitung

Vorlesung C-Kurs 9:15-10:45 Mathe 11:15-12:45 1. Woche Hörsaal 1 2. Woche Hörsaal 7

Einführung in die Programmierung 1

Historische Innovationen von Niklaus Wirth

Java: Kapitel 1. Überblick. Programmentwicklung WS 2008/2009. Holger Röder Holger Röder

Teil 3 - Java. Grundlagen Klassen, Attribute Methoden

2. Programmierung in C

Internetanwendungstechnik (Übung)

II.1.1. Erste Schritte - 1 -

Vorkurs Informatik WiSe 15/16

Java Einführung Methoden. Kapitel 6

Programmierung mit C Modularisierung von Programmen. Präprozessor-Anweisungen nutzen.

Methoden und Wrapperklassen

II.1.1. Erste Schritte - 1 -

7. Objektorientierung. Informatik II für Verkehrsingenieure

C++ - Einführung in die Programmiersprache Header-Dateien und Funktionen. Leibniz Universität IT Services Anja Aue

Objektorientierte Programmierung (OOP)

Die verschiedenen Programmierparadigmen von C++ Software-Technik: Vom Programmierer zur erfolgreichen

Outline. 1 Einleitung. 2 Einführung in C. 3 Fortgeschrittenes in C. 4 Einführung in Emacs Lisp. 5 Einführung in Prolog. 6 Formale Semantik

Programmierung für Mathematik HS11

Programmieren was ist das genau?

SWIG Simplified Wrapper and Interface Generator. Christian Claus

jambit academy: Selbsttest Programmierkenntnisse

CS1005 Objektorientierte Programmierung

Die Klasse Vertiefung

Einführung in die Programmierung I. 1.0 EBNF 2.0 Einfache Java Programme. Thomas R. Gross. Department Informatik ETH Zürich

Profiling in Python. Seminar: Effiziente Programmierung. Jan Pohlmann. November Jan Pohlmann Profiling in Python November / 32

II.1.1. Erste Schritte - 1 -

C-Grundlagen. Einführung von Tronje Krabbe 1/21

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

Objektorientierte Programmierung Studiengang Medieninformatik

C++ - Variablen: Gültigkeit - Sichtbarkeit

Grundlagen der Informatik für Ingenieure I

Propädeutikum Programmiersprache C und Mathematik 2014

Konzepte der Programmiersprachen

Einführung in die C-Programmierung

Verwendung Vereinbarung Wert einer Funktion Aufruf einer Funktion Parameter Rekursion. Programmieren in C

Informatik. Studiengang Chemische Technologie. Michael Roth Hochschule Darmstadt -Fachbereich Informatik- WS 2012/2013.

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen

Crashkurs C++ Wiederholung

7. Programmierungs- Phase Software Engineering (FB EIT) Wintersemester 2007 / 2008 Prof. Dr. Bernhard Humm Hochschule Darmstadt, FB Informatik

Guile Die Erweiterungssprache des GNU-Projekts

Informatik II. Woche 13, Giuseppe Accaputo

10. Programmierungs-Phase: Objektorientierung Software Engineering

Inhaltsverzeichnis. Grundlagen und Einführung (1. Band) 1

Repetitorium Informatik (Java)

Programmiersprache. Emily & rica

2 Eine einfache Programmiersprache

pue13 January 28, 2017

2 Eine einfache Programmiersprache. Variablen. Operationen Zuweisung. Variablen

Algorithmen und Programmierung II

Ziele. C und C++ Was ist C? Übersicht. Überblick. C und C++ im Vergleich zu anderen Programmiersprachen einordnen können

Modulare Programmierung und Bibliotheken

C-Crashkurs. Praktikum Systemmanagement und Sicherheit

Umsetzung einer Klassenkarte in einer Programmiersprache

Einleitung Grundlagen Erweiterte Grundlagen Zusammenfassung Literatur. C: Funktionen. Philip Gawehn

Einleitung Typsystem Typisierung Zusammenfassung Literatur. Typisierung. Effiziente Programmierung. Thomas Schnieders

Wiederholung JAVA. 1. (Vorbereitung)

2 Eine einfache Programmiersprache

Institut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke

Erste Java-Programme (Scopes und Rekursion)

Transkript:

Mixed Language Programming PROSEMINAR EFFIZIENTE PROGRAMMIERUNG SOSE 2018 POLINA RAJKO POLINA RAJKO - MIXED LANGUAGE PROGRAMMING 1/35

Einführung Java public class Main { public static int quadrat(int i) { return i*i; } public static void main(string[] args) { for ( i = 1; i<=10; i++ ) { System.out.println( i + + quadrat(i)); } } } POLINA RAJKO - MIXED LANGUAGE PROGRAMMING 2/35

Einführung C #include<stdio.h> int quadrat(int i) { return i*i; } int main(void) { int i; for (i = 1; i<=10; i++) { printf( %d %d \ n, i, quadrat(i)) } return 0; } POLINA RAJKO - MIXED LANGUAGE PROGRAMMING 3/35

Einführung Haskell quadrat x = x*x main = putstr $ concatmap ( \i -> show i ++ ++ show ( quadrat i ) ++ \n ) [1..10] Python def quadrat (i): return (i*i) for i in range(1,11): print( i, quadrat(i)) POLINA RAJKO - MIXED LANGUAGE PROGRAMMING 4/35

Unterschiede Im Bezug auf: Programmierparadigma (prozedural, objektorientiert, funktional) Performance und Speicherverwendung (intuitive) Verwendbarkeit, und die benötigte Zeit zum Lernen oft sehr spezielle Aufgaben Viele Arten der Implementation einer Funktion, jedoch keine direkte Codeübernahme möglich POLINA RAJKO - MIXED LANGUAGE PROGRAMMING 5/35

Mixed Language Programming Programmieren mit mehr als einer Programmiersprache Kombination von Programmiersprachen Wiederverwendung von bereits geschriebenem Code möglich Einbinden von Modulen anderer Programmiersprachen Eignung für große Projekte Informationsymmetrie nicht benötigt Hypothetisch: Gute Basis zur Entwicklung neuer Programmiersprachen D POLINA RAJKO - MIXED LANGUAGE PROGRAMMING 6/35

D Entwickelt durch Andrej Alexandrescu, Walter Bright (2001/2007) Schwerpunktlegung auf Performance, Mächtigkeit, schnelle Erlernbarkeit Orientierung an C++, Python, Ruby und PHP Nutzer: Facebook, Netflix, Ebay import std.stdio; void main() { writeln( Hello! ); } POLINA RAJKO - MIXED LANGUAGE PROGRAMMING 7/35

Mögliche Problemstellungen Fundamentale Unterschiede zwischen Programmiersprachen Abweichende Implementationsweisen Verlust von Übersichtlichtkeit Probleme zwischen Interfaces (fehlerhafte/undurchdachte Implementationen) POLINA RAJKO - MIXED LANGUAGE PROGRAMMING 8/35

Mögliche Problemstellungen Benötigtes Hintergrundwissen Einschränkung der Benutzerumgebungen Große Software- und Compilernutzung benötigen Wartung fehlende Ästhetik POLINA RAJKO - MIXED LANGUAGE PROGRAMMING 9/35

Wie programmiert man mit mehr als einer Programmiersprache? Grundsätzliche Vorraussetzung: Aufteilung des Systems in Unterprogramme, Herstellung von Interface Benutzer Verhätnissen zwischen diesen Unterschiede in den Vorgehensweisen durch ihre Verwendung: 1. eines automatischen Systems 2. einer Virtual Program Library 3. einer Bindung von Subroutine Libraries 4. von Datentypen einer der Programmiersprachen 5. einer Kombinierung bereits vollständiger Programme 6. von Tools POLINA RAJKO - MIXED LANGUAGE PROGRAMMING 10/35

1. Durch die Verwendung eines automatischen Systems System (Compiler, Linker, Loader) für die Kompilierung, Interpretation und Zusammensetzen der entstehenden Unterprogramme verantwortlich Gleichbehandlung aller Sprachen Vorteile: - Übernahme aller Aufgaben durch das System, Nutzer nur für die Verwendung von erlaubten Sprachen verantwortlich Nachteile: - Einschränkungen durch die Vorgabe bestimmter Sprachkombinationen POLINA RAJKO - MIXED LANGUAGE PROGRAMMING 11/35

1. Durch die Verwendung eines automatischen Systems Grundidee: Abb. 1 POLINA RAJKO - MIXED LANGUAGE PROGRAMMING 12/35

2. Durch die Verwendung einer Virtual Program Library Virtual Program Library: Library, in einer computernahen, für verschiedene Programmierumgebungen geeigneten, Programmiersprache Möglichkeit des Aufrufs dieser über nutzernahe Programmiersprachen Vorteile: - Aufrufe durch verschiedene Sprachen möglich - Wiederverwendung von Code Nachteile: - genaue, spezifische Angaben des Programmierers zur Nutzung benötigt POLINA RAJKO - MIXED LANGUAGE PROGRAMMING 13/35

2. Durch die Verwendung einer Virtual Program Library Grundidee: Programm 1 Programm 2 Virtual Program Library Programm 3 POLINA RAJKO - MIXED LANGUAGE PROGRAMMING 14/35

3. Durch die Verwendung einer Bindung von Subroutine Libraries Unterprogramm oder Subroutine Library wird an ein vorhandes Programm gebunden Verwendung von Wrapper Libraries erleichtern Funktionalität Vorteile: - Erfolgreiche Übertragung von Daten zwischen den Programmteilen - Bei entsprechender Implementation Aufrufe durch verschiedene Sprachen erlaubt Nachteile: - Erzeugung eines zwei-ebenen Interface keine Rekursion möglich POLINA RAJKO - MIXED LANGUAGE PROGRAMMING 15/35

3. Durch die Verwendung einer Bindung von Subroutine Libraries Grundidee: Hauptprogramm Unterprogramm/ Subroutine Library Wrapper Library POLINA RAJKO - MIXED LANGUAGE PROGRAMMING 16/35

4. Durch die Verwendung von Datentypen einer der Programmiersprachen Übertragung von Werten gleichen Datentyps zwischen Unterprogrammen Voraussetzung: Gleiche Definition und Behandlung von Datentypen Vorteile: Erfolgreiche Übergabe von Werten Nachteile: Ungenauigkeiten bei der Übertragung möglich POLINA RAJKO - MIXED LANGUAGE PROGRAMMING 17/35

4. Durch die Verwendung von Datentypen einer der Programmiersprachen Grundidee: Daten Programm 1 Daten Programm 2 POLINA RAJKO - MIXED LANGUAGE PROGRAMMING 18/35

5. Durch die Verwendung einer Kombinierung bereits vollständiger Programme Meist verwendete Vorgehensweise Zusammenfügung bereits bestehender Programme Interaktion durch das Lesen und Schreiben von Daten in Files/Libraries Vorraussetzung: Sequentieller Ablauf Vorteile: Relativ einfaches Verständnis Nachteile: Zu viele Sprünge führen zur Ineffizienz POLINA RAJKO - MIXED LANGUAGE PROGRAMMING 19/35

5. Durch die Verwendung einer Kombinierung bereits vollständiger Programme Grundidee: Programm 1 Programm 2 File POLINA RAJKO - MIXED LANGUAGE PROGRAMMING 20/35

6. Durch die Verwendung von Tools Viele verschiedene Arten: - Tools zur Erzeugung von Libraries - Tools zur Verwendung von Mischsprachen - Tools zur Übersetzung von Datentypen Beispiel: SWIG Bindung von C-Code an verschiedene Skriptsprachen Möglichkeit der Erzeugung von Wrapperlibraries Erzeugung von Interfaces POLINA RAJKO - MIXED LANGUAGE PROGRAMMING 21/35

Beispiele für beliebte Sprachenkombinationen Python und C/C++ (z.b. Desktopanwendungen) PHP und Javascript (z.b. Webanwendungen) Fortran und C (hauptsächlich wissenschaftliche Programme) R und SQL (Abfrage von Daten aus Datenbanken und die statistische Auswertung dieser) POLINA RAJKO - MIXED LANGUAGE PROGRAMMING 22/35

Beispiel: Aufruf von Fortran-Funktionen in C Erstellung eines Fortran-Unterprogramms oder einer -Funktion: function HALLO() print *, Hallo! end function HALLO() Umformatierung des Funktionsaufrufs in C-Format: hallo_() Deklaration der Funktion in C: void hallo_(); POLINA RAJKO - MIXED LANGUAGE PROGRAMMING 23/35

Beispiel: Aufruf von Fortran-Funktionen in C Aufruf der Funktion in C durch beispielsweise: int main(void) { hallo_(); return 0; } Kompilieren des Fortran-Unterprogramms/-funktion gfortran -c hallo.f95 POLINA RAJKO - MIXED LANGUAGE PROGRAMMING 24/35

Beispiel: Aufruf von Fortran-Funktionen in C Kompilieren des C-Programms gcc -c main.c Zusammenfügen der beiden kompilierten Dateien gfortran -o hw main.o hallo.o POLINA RAJKO - MIXED LANGUAGE PROGRAMMING 25/35

Beispiel: Aufruf von C-Funktionen in Fortran Funktion in C wird erstellt: #include<stdio.h> int main(void) { printf( Hallo! ); return 0; } POLINA RAJKO - MIXED LANGUAGE PROGRAMMING 26/35

Beispiel: Aufruf von C-Funktionen in Fortran Die Schnittstelle von Fortran zu C muss in Fortran in einem Modul ausdrücklich als Interface definiert werden MODULE CDEMO INTERFACE SUBROUTINE main()!dec$ ATTRIBUTES C :: main END SUBROUTINE END INTERFACE END MODULE // Compiler-Direktive POLINA RAJKO - MIXED LANGUAGE PROGRAMMING 27/35

Beispiel: C-Erweiterung für Python Möglichkeit in Python C-Objekttypen und deren Funktionen zu verwenden (C-Erweiterungsmodul) Allgemeine Vorgehensweise: Von Python ausgehend soll die Funktion hallo aus dem C-Erweiterungsmodul demo aufgerufen werden: >>> import demo >>> demo.hallo() Wechseln in C und starten eines Projektes demomodule.c POLINA RAJKO - MIXED LANGUAGE PROGRAMMING 28/35

Beispiel: C-Erweiterung für Python Um C Zugriff auf die Python-API (und auf die Laufzeitumgebung) zu geben, beginnt der C-Code mit der Zeile: #include<python.h> (enthält bereits <stdio.h>, <string.h>, <errno.h>, <stdlib.h>) Alle für den Nutzer, durch Python.h definierten, Symbole besitzen das Präfix Py Definition der neuen C-Funktion: static PyObject* demo_hallo( PyObject* self, PyObject *args) { printf( Hallo! ) return 0; } POLINA RAJKO - MIXED LANGUAGE PROGRAMMING 29/35

Zusammenfassung Mixed-Language-Programming: Verwendung mehr als einer Programmiersprache Sehr viele, sehr verschiedene Möglichkeiten der Implementation Vorraussetzung: Interface Benutzer Beziehung Verbindung von sehr vielen Sprachen möglich Entstehung neuer Programmiersprachen und Tools POLINA RAJKO - MIXED LANGUAGE PROGRAMMING 30/35

Ausblick Hypothese: Private, kommerzielle Nutzer: - abnehmende Beliebtheit durch Entstehen neuer, schnell erlernbarer Programmiersprachen Wissenschaft: - konstante Beliebtheit durch gute Funktionalität bei großen Projekten, Möglichkeit der Einschätzung der Performance, des Speicherplatzes POLINA RAJKO - MIXED LANGUAGE PROGRAMMING 31/35

Quellen Abbildungen: Abb 1. The structure of Mixed Language Programming Realization (1985, B. Einarsson) D Logo https://upload.wikimedia.org/wikipedia/commons/thumb/2/24/d_programming_language_log o.svg/1013px-d_programming_language_logo.svg.png Text: The structure of Mixed Language Programming Realization (1985, B. Einarsson) POLINA RAJKO - MIXED LANGUAGE PROGRAMMING 32/35

Quellen https://www.youtube.com/watch?v=s6cvskbwg3s&t=207s https://stackoverflow.com/questions/17845931/calling-c-function-subroutine-in-fortran -code?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa https://www.heise.de/ct/ausgabe/2015-18-die-passende-programmiersprache-finden -2767703.html https://openwsn.atlassian.net/wiki/spaces/ow/pages/8978440/mixing+python+and+c https://stackoverflow.com/questions/10202306/python-bindings-how-does-it work?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa http://www.swig.org/doc1.3/introduction.html#introduction_nn2 POLINA RAJKO - MIXED LANGUAGE PROGRAMMING 33/35

Quellen https://wiki.python.org/moin/integratingpythonwithotherlanguages http://www.swig.org/exec.html https://srv.rz.uni-bayreuth.de/lehre/fortran90/vorlesung/v14/v14.html https://docs.python.org/2/extending/extending.html https://www.youtube.com/watch?v=urcy6-kxzdw https://docs.python.org/2/c-api/intro.html https://www.computerworld.com/article/2467812/internet/polyglot-programming---- development-in-multiple-languages.html https://www.wired.com/2014/07/d-programming-language/ POLINA RAJKO - MIXED LANGUAGE PROGRAMMING 34/35

Quellen https://dlang.org https://wiki.dlang.org/getting_started POLINA RAJKO - MIXED LANGUAGE PROGRAMMING 35/35