Computergrundlagen Programmiersprachen, Interpreter, Compiler

Werbung
Computergrundlagen
Programmiersprachen, Interpreter,
Compiler, Linker
Axel Arnold
Institut für Computerphysik
Universität Stuttgart
Wintersemester 2010/11
Was sind Programme?
• In dieser Vorlesung: Python, C, LATEX, bash
• Sind das alle Typen von Programmiersprachen?
Wie kann man Programmiersprachen
klassifizieren?
• Kein Prozessor versteht Python-, C- oder Shell-Befehle
• Was muss alles passieren, um ein Programm laufen zu lassen?
Wie wird aus unserem Programm etwas, dass der
Prozessor ausführen kann?
http://www.icp.uni-stuttgart.de
A. Arnold
Computergrundlagen
2/13
Programmiersprachen
Imperative Sprachen
Beispiele: Python, C, Shell, BASIC...
• Die meisten Sprachen sind imperativ
• Programme erklären, wie ein Problem gelöst werden soll
• Umsetzung des von Neumann-Rechners: Befehle und Schleifen
• prozedural heißen Sprachen, die Prozeduren kennen
Beispiele: alle außer einfachem BASIC
Deklarative Sprachen
• Keine von Neumann-artigen Befehle, kein innerer Zustand
• Rekursion anstatt Schleifen
• funktional, basierend auf Funktion im mathematischen Sinn
Beispiele: Haskell, Erlang, Scheme...
• logisch, basierend auf Fakten, Axiomen und logischer Ableitung
Beispiele: Prolog
http://www.icp.uni-stuttgart.de
A. Arnold
Computergrundlagen
3/13
Funktionale Sprachen: Haskell
• Beispiel: Berechnung der Fakultät
fakultaet :: Integer -> Integer
-- rekursive Definition
fakultaet 0 = 1
fakultaet n = n * fakultaet(n - 1)
-- oder als Produkt
fakultaet n = product [1..n]
• Rekursive Definition der Fakultät,
impliziter Abbruch durch Spezialisierung
• oder mit Hilfe eines endlichen Produkts
• Variablen im mathematischen Sinn
x = x + 1 ist daher unzulässig bzw. falsch
• Beschreibt, was berechnet wird, nicht wie
http://www.icp.uni-stuttgart.de
A. Arnold
Computergrundlagen
4/13
Logische Sprachen: Prolog
• Beispiel: Ahnentafel
ahn(X,Z) :- elter(X,Z).
ahn(X,Z) :- elter(X,Y), ahn(Y,Z).
elter(Axel,Alfred).
elter(Alfred,Alexander).
?- ahn(Axel,Alexander).
yes.
• Eingabe sind
• Fakten p(X): X hat Eigenschaft p
• Regeln p(X) :- p1(V,...,X,...), p2(W,...,X,...):
X hat Eigenschaft p, wenn es V,W,... gibt, so dass
p1(V,...,X,...) und p2(W,...,X,...) gilt.
• Entwickelt für die Forschung an künstlicher Intelligenz
http://www.icp.uni-stuttgart.de
A. Arnold
Computergrundlagen
5/13
Objektorientierte Sprachen
Person
+name: String
+getName(): String
+getTitel(): String
Student
Dozent
-vorlesungen: Liste von Vorlesungen
+halteVorlesung(vorlesung:Vorlesung)
+haltePrüfung(vorlesung:Vorlesung): Note
+getTitel(): String
+kurs: Kurs
+vorlesungen: Liste von Vorlesungen
+hoertVorlesung(vorlesung:Vorlesung)
+machePrüfung(vorlesung:Vorlesung)
+getTitel(): String
• Objektorientierung (OO) ist ein sprachunabhängiges
Programmiermodell
• Ziel ist die bessere Wartbarkeit und Austauschbarkeit von
Software durch starke Isolation von Teilproblemen
• Speziell darauf ausgelegt sind z.B. C++, Java, Python,...
• UML (Unified Modelling Language) beschreibt OO-Modelle
http://www.icp.uni-stuttgart.de
A. Arnold
Computergrundlagen
6/13
Terminologie
• Klasse: beschreibt Eigenschaften und Methoden von Objekten
•
•
•
•
•
Beispiel: Klassen sind z.B. Dozent, Student, Person
Objekt: eine Instanz einer Klasse. Ein Objekt hat stets eine
Klasse, aber es kann viele Instanzen geben
Beispiel: Axel Arnold ist ein Dozent, Christian Holm auch
Eigenschaften: Datenelemente von Objekten
Beispiel: Dozent hat Name, Titel und zu haltende Vorlesungen
Methoden: Funktionen einer Klasse
Beispiel: Personen können ihren Namen sagen
Datenkapselung: Eigenschaften werden nur durch Funktionen
der Klasse verändert
Beispiel: der Name einer Person kann nicht geändert werden
Vererbung: Klassen können von anderen abgeleitet werden,
erben dadurch deren Eigenschaften und Funktionen
Beispiel: Jede Person hat einen Namen
http://www.icp.uni-stuttgart.de
A. Arnold
Computergrundlagen
7/13
Interpreter- und Compilersprachen
Python-Skript
interpretiert
Python-Interpreter
produziert
C-Quellcode
übersetzt
C-Compiler+Linker
erzeugt
Binärprogramm
produziert
Ausgabe
Ausgabe
Interpretersprachen
• Z.B. Python, Java, C#, Basic, PHP, Shellsprachen
• Das Programm wird vom Interpreter gelesen und ausgeführt
• Es wird nie in Maschinencode für den Prozessor übersetzt
• Ausnahme: Just-in-Time (JIT) Compiler
http://www.icp.uni-stuttgart.de
A. Arnold
Computergrundlagen
8/13
Interpreter- und Compilersprachen
Python-Skript
interpretiert
Python-Interpreter
C-Quellcode
übersetzt
C-Compiler+Linker
erzeugt
Binärprogramm
produziert
produziert
Ausgabe
Ausgabe
Compilersprachen
• Z.B. C/C++, Fortran, Pascal/Delphi
• Compiler übersetzt in maschinenlesbaren Code
• Nicht portabel, erschwerte Fehlersuche, deutlich schneller
• Interpreter selbst müssen compiliert werden
http://www.icp.uni-stuttgart.de
A. Arnold
Computergrundlagen
8/13
Maschinensprache
Aber was versteht nun der Prozessor?
Zahlenkolonnen, z.B.
AD 34 12 18 69 2A 8D 34
12 AD 35 12 69 00 8d 35
12
• Maschinencode für den 6502-Mikroprozessor
• Addiert 42 zur 16-bit-Zahl an Speicherstellen 1234h und 1235h
• Wie hängt das mit x += 42 zusammen?
Wie wird aus einem Programm Maschinencode?
http://www.icp.uni-stuttgart.de
A. Arnold
Computergrundlagen
9/13
Assembler
X
AD
18
69
8D
AD
69
8d
34 12
2A
34 12
35 12
00
35 12
= $1234
LDA X
CLC
ADC #42
STA X
LDA X+1
ADC #00
STA X+1
• Assembler ist die menschenlesbare Form der Maschinensprache
• Im Beispiel bezeichnet das Label X die Speicherzelle 1234h
• Assembler bezeichnet auch das Programm, das die Befehle in
Zahlen übersetzt und Labels an Speicherzellen knüpft
• Zeitkritische Anwendungen werden auch heute noch manchmal
in Assembler geschrieben
http://www.icp.uni-stuttgart.de A. Arnold Computergrundlagen 10/13
Vom Sourcecode zum Programm
programm.c
Präprozessor
Compiler Parser
Assembler
Objekt-Datei
Zwischencode-Generator
Linker
Optimierer
Binärprogramm
Code-Generator
• Ein (C-)Programm durchläuft viele Schritte bis zur fertigen
ausführbaren Datei
• Präprozessor, Compiler, Assembler und Linker
sind meist separate Programme
• meist mehrere Objektdateien aus verschiedenen
Quelltextdateien
http://www.icp.uni-stuttgart.de A. Arnold Computergrundlagen 11/13
Vom Sourcecode zum Programm
programm.c
Präprozessor
Compiler Parser
Assembler
Objekt-Datei
Zwischencode-Generator
Linker
Optimierer
Binärprogramm
Code-Generator
Präprozessor
• Im Prinzip sprachunabhängig, rein textbasiert
• Bindet weitere Quelltextdateien ein
• Erlaubt den Einsatz von Makros (Ersetzungen)
Beispiel: TEST(...) wird überall durch if (...) ersetzt
http://www.icp.uni-stuttgart.de A. Arnold Computergrundlagen 11/13
Der Compiler
• Parser übersetzt den Quellcode in einen Syntaxbaum
=
a
a=2∗b+3∗c
+
×
int 3
×
c
int 2
b
• Zwischencode-Generator erzeugt daraus Pseudocode, etwa:
r1 = b r2 = r1 × 2 r3 = c r4 = r3 × 3 r5 = r2 + r4 a = r5
• Optimierer versucht, diesen zu verbessern, z.B. durch
• Prozessorregisterzuweisung
• Einfügen kurzer Funktionen, Entrollen von Schleifen
• Suche und Nutzen von gemeinsamen Termen, ...
• Code-Generator erzeugt Assembler aus dem Zwischencode
http://www.icp.uni-stuttgart.de A. Arnold Computergrundlagen 12/13
Der Assembler
programm.c
Präprozessor
Compiler Parser
Assembler
Objekt-Datei
Zwischencode-Generator
Linker
Optimierer
Binärprogramm
Code-Generator
obj1.o:
4567 call 0000 ...
Defined:
Undefined: blupp
obj2.o:
0123 push bx ...
Defined: blupp
Undefined:
Der Assembler erzeugt eine Objektdatei mit
• Maschinencode
• den Speicherpositionen von globalen Variablen und Funktionen
• Stellen, an denen Stellen Information über solche Positionen aus
andere Objektdateien benötigt wird
http://www.icp.uni-stuttgart.de A. Arnold Computergrundlagen 13/13
Der Linker
programm.c
Präprozessor
Compiler Parser
Assembler
Objekt-Datei
Zwischencode-Generator
Linker
Optimierer
Binärprogramm
Code-Generator
obj1.o:
4567 call 0000 ...
Defined:
Undefined: blupp
obj2.o:
0123 push bx ...
Defined: blupp
Undefined:
• Verbindet mehrere solcher Objektdateien zu einer ausführbaren
Datei (Binary) oder einer Bibliothek
• Bibliotheken sind Sammlungen von Objektdateien
• Der Linker verbindet Zugriffe zwischen Objektdateien
• Nur wenn alle Zugriffe aufgelöst wurden, entsteht ein Binary
http://www.icp.uni-stuttgart.de A. Arnold Computergrundlagen 13/13
Der Linker
programm.c
Präprozessor
Compiler Parser
Assembler
Objekt-Datei
Zwischencode-Generator
Linker
Optimierer
Binärprogramm
Code-Generator
a.out:
4567 call 8123
...
8123 push bx...
Defined:
blupp
...
• Verbindet mehrere solcher Objektdateien zu einer ausführbaren
Datei (Binary) oder einer Bibliothek
• Bibliotheken sind Sammlungen von Objektdateien
• Der Linker verbindet Zugriffe zwischen Objektdateien
• Nur wenn alle Zugriffe aufgelöst wurden, entsteht ein Binary
http://www.icp.uni-stuttgart.de A. Arnold Computergrundlagen 13/13
Dynamisches Linken
programm.c
Präprozessor
Compiler Parser
Assembler
Objekt-Datei
Zwischencode-Generator
Linker
Optimierer
Binärprogramm
Code-Generator
a.out:
4321 call 0123 ...
4567 call 0000 ...
Undefined: blupp
libblupp.so:
0123 push bx ...
Defined: blupp
• Beim dynamischen Linken wird das Linken gegen die
Bibliotheken erst beim Starten des Programms erledigt.
• Dadurch können Teile des Programms geupdated werden
• Und mehrfach benutzte Bibliotheken werden nur einmal geladen
• Spezielle Formate: dynamische Bibliotheken (.so, .dylib oder .dll)
http://www.icp.uni-stuttgart.de A. Arnold Computergrundlagen 13/13
Herunterladen