Aufgabenblatt 1 - NPP

Werbung
Prof. Dr. Th. Letschert
FB MNI
11. April 2006
Aufgabenblatt 1 - NPP
Aufgabe 1
1. Warum heißt LISP “LISP”? Warum heißt FORTRAN “FORTRAN”?
2. LISP war die erste Programmiersprache mit einem Konzept von Datenstruktur. Warum gerade
LISP? Welche Datenstruktur wurde mit LISP eingeführt?
3. Warum verwendet LISP eine so seltsame Notation mit vollständig geklammerten Ausdrücke in
Prefix–Notation? Was ist das überhaupt: vollständig geklammert und Prefix–Notation?
4. Wie heißt der Erfinder von LISP?
5. Erläutern Sie kurz und informal wie ein Ausdruck wie 2+3∗7 in einen (abstrakten) Syntaxbaum
und dann in Maschinencode übersetzt wird.
6. Ein gewisser J. W. Backus war wesentlich an der Entwicklung von FORTRAN beteiligt und
veröffentlichte 1957 die erste Beschreibung dieser Sprache. Es ist der gleiche Backus dessen
Namen in Backus–Naur–Form (kurz BNF) verewigt ist. Die Backus–Naur–Form wurde in der
Definition der Programmiersprache Algol60, einem einflussreichen Vorläufer von PASCAL,
verwendet. Was versteht man unter BNF?
7. Der gleiche J. W. Backus veröffentlichte 1978 einen viel beachteten Artikel mit dem Titel Can
Programming be liberated from the Von–Neumann style? Mit “Von–Neumann style” meint er
dabei den Programmierstil, der sich aus der Von–Neumann–Architektur ergibt? Wer war von
Neumann? Was ist die Von-Neumann–Architektur, zu welchem Programmierstil führt sie und
warum sollte irgend wer von diesem befreit werden?
8. Finden Sie mit Hilfe von Google ein Bild von McCarthy und von Backus. Leben die beiden
noch? .. und wer war von–Neumann?
Aufgabe 2
1. Starten Sie einen Browser, besuchen Sie die Seite www.python.org, sehen Sie sich dort etwas um und suchen Sie nach einem Python–Tutorium. Gibt es eine lokale Kopie des Tutoriums?
2. Welchen Namen hat der “Erfinder” von Python.
3. Stellen Sie fest, wie der Python–Interpretierer aktiviert wird und lassen Sie ihn 3 ∗ 17 + 12
berechnen.
4. Schreiben Sie folgendes Programm (“Skript”) in eine Datei:
x = input()
y = input()
p = x+y
print ’ Summe: ’, p
und führen Sie es mit dem Python–Interpretierer aus.
Welche Arten von Eingaben (Werte mit welchen Typen) kann dieses Programm verarbeiten?
5. Informieren Sie sich (Google) über PLT-Scheme.
6. Was hat PLT-Scheme mit Scheme zu tun? Was hat Scheme mit LISP zu tun?
7. Aktivieren PLT-Scheme (Kommando drscheme auf Saturn). Versuchen Sie dort die Funktion
f (x) = x + 1 zu definieren und den Wert f (3) zu berechnen.
Aufgabe 3
1. Was versteht man unter einem Gültigkeitsbereich? Wer oder was ist da gültig? Wo ist der Bereich? Hat ein Gültigkeitsbereich etwas mit Deklarationen, Definitionen, Zuweisungen zu tun?
Gibt es so etwas wie einen Gültigkeitsbereich in Python?
2. Hat Python eine dynamische oder eine statische Bindung (von Namen). Mit welchem Experiment kann diese Frage geklärt werden?
3. Kann eine Sprache mit statischer Bindung (von Namen) dynamisch typisiert sein? Wenn ja,
nennen Sie ein Beispiel.
4. Ist Scheme eine Sprache mit dynamischer Bindung oder mit statischer Bindung. Ist es dynamisch oder statisch typisiert?
5. Warum sind Sprachen mit dynamischer Bindung in der Regel interpretierte Sprachen?
6. Warum sind Sprachen mit dynamischer Bindung in der Regel ausgestorben?
Aufgabe 4
1. Was ist eine compilierte und was eine interpretierte Sprache?
2. Was versteht man unter Wert, Variable, Ausdruck und Bezeichner?
3. Python ist eine Sprache mit statischer Bindung und dynamischer Typisierung. Erläutern Sie das
Umgebungsmodell einer solchen Sprache: Gibt es so etwas wie “Variable” oder “Speicherplatz”
als (konstante) Zwischenstufe zwischen einem Namen und dem (wechselnden) aktuellen Wert,
der diesem Namen zugeordnet ist. Welche Information ist eventuell mit dieser Zwischenstufe
verbunden (Speicheradresse, Typ, ...). Welchen Sinn hat sie.
4. Was bedeutet Ein Wert, eine Variable, ein Bezeichner, ein Ausdruck hat einen Typ?
5. In statisch typisierten Sprachen hat jeder Bezeichner und jeder Ausdruck einen bestimmten Typ.
Welchen Vorteil bringt das bei der Übersetzung von Programmen solcher Sprachen?
2
6. Sprachen wie Python, bei denen Bezeichner und Ausdrücke nicht (statisch) typisiert sind, werden oft als “typfreie Sprachen” bezeichnet. Können Programme typfreier Sprachen prinzipiell
nur interpretiert werden, oder kann man sie auch übersetzen?
7. C und C++ werden übersetzt. Warum? Kann man sie nicht interpretieren, oder ist das nicht
sinnvoll? Wenn es nicht sinnvoll ist: warum nicht? Wenn es nicht möglich ist: warum nicht?
8. Was versteht man unter Typprüfung und was ist Typinferenz? Kennen Sie eine Sprache mit
Typinferenz?
9. Hat eine Python–Implementierung wohl:
• einen Scanner,
• einen Parser,
• eine semantische Analyse,
• eine Codegenerierung,
• einen Garbage–Collector?
10. Sind C++ und Java statisch typisierte Sprachen?
11. Das Wort Polymorphismus bedeutet Vielgestaltigkeit. Alle modernen OO–Sprachen, C++, Java,
etc. unterstützen Polymorphismus. Was ist das? Was ist da “vielgestaltig”, was hat das mit
Typen zu tun?
Vergleichen Sie dazu das Konzept statischer Typ vs. dynamischer Typ von Java mit dem Konzept
der dynamischen Typisierung in Python!
12. Python ist typfrei in dem Sinn, dass es nicht möglich ist, einen Typ zu definieren. Trotzdem
können in Python Klassen definiert werden. Ist das nicht ein Widerspruch?
Aufgabe 5
1. Seit etwa 30 Jahren ist die Laufzeitverwaltung von Funktionen (und später Methoden) meist
stackbasiert. Vorher war sie statisch. Warum wurde die stackbasierte Allokation eingeführt?
Was geht nicht, wenn Funktionen statisch allokiert werden?
2. Welche Vorteile hat eine stackbasierte Allokation gegenüber einer heapbasierten und welche
hat eine statische gegenüber einer stackbasierten?
3. Objekte werden stets heapbasiert allokiert, entweder “zu Fuß” oder mit Hilfe eines Garbage
Collectors. Warum werden sie nicht statisch oder stackbasiert allokiert?
4. Welche Beschränkungen ergibt sich bei Funktionen bei einer stackbasierten Alloktion gegenüber einer heapbasierten Allokation. Was könnte es bringen wenn Funktionen (Methoden)
heapbasiert allokiert werden.
3
Aufgabe 6
1. Was ist eine virtuelle Maschine?
2. Ist eine JVM, (eine virtuelle Maschine von Java), wohl in Maschinencode, in Assemblercode,
in Bytecode, in Java, in C, in C++, ... geschrieben. In welcher Form ist sie aktiv: Hardware,
Maschinencode, Objektcode, Bytecode, ...
Warum ist es so wie es ist? Welche andere Arten, Java zur Ausführung zu bringen, sind möglich?
Aufgabe 7
Was versteht man unter dem Umgebungsmodell einer Programmiersprache?
4
Herunterladen