Du befindest dich hier: FSI Informatik » Prüfungsfragen und Altklausuren » Hauptstudiumsprüfungen » Lehrstuhl 2 » Übersetzerbau 2 7.5 ECTS Prüfung 2025-04-10

Übersetzerbau 2 7.5 ECTS Prüfung 2025-04-10

Meta Information

  • Subject: Übersetzerbau 2 7.5, WS25
  • Date: 25-04-10
  • Type of Exam: oral
  • Examiner: Prof Philippsen, Tobias Heineken
  • Grade: 1.0
  • Protokoll ist selbsterklärender Weise aus meinem sehr löchrigen Kurzzeitgedächtis entsprungen und ist daher vermutlich weder vollständig, noch 100%ig genaue Wiedergabe des Prüfungsgesprächs.
  • Fragen kamen hauptsächlich von Tobias

Exam

Praktikum (etwa Hälfte der Prüfungszeit)

(Habe initial einen Zettel mit TVM-Code bekommen, später noch den e2 dazu)

  • Können sie mir mal ein bisschen den TVM-Code erklären?

Einmal Format am Blatt durchgegangen

  • Womit haben wir denn angefangen?

Loader erklärt

  • Was kam dann?

Naiven Interpreter mit Switch-Case erklärt, zweiter Stack für interpretierten Code

  • Wozu brauchen wir einen zweiten Stack

Den „vom System“ braucht der Interpreter/C++ Code selber

  • Wie funktioniert da ein Call?

Entweder nativer Code vorhanden, dann einmal Argumente übersetzen zu nativer ABI und call absetzen oder direkt wieder in den Interpreter

  • Wie schaut dann so ein Call-Stack aus?

Wusst ich nicht, hab stattdessen den nativen Call-Stack von e2 erklärt, war falsch

  • Dann kam der JIT1, was haben wir da gemacht?

Direkte Übersetzung der Instruktionen, Variablen auf dem Stack, Trampolinfunktion

  • Könnten sie auf die Trampolinfunktion näher eingehen?

Varargs erklärt, FFI erklärt (nach Rückfrage), JIT-Entscheidung erklärt

  • Jetzt wollten wir ja vom Interpreter in den JIT springen können und andersrum, was ist da wichtig?

JIT → Interpreter: Entscheidung im Trampolin, Interpreter → JIT: Entscheidung beim Call im Interpreter, ob wieder ins Trampolin gesprungen werden soll

  • Joa kann man so machen
  • Dann kam der JIT2, was war die Neuerung?

Vergabe der Register mittels Linear Scan

  • Was hat man dazu gebraucht?

Starke Zusammenhangskomponente berechnen, Variablen leben für gesamte Komponente

  • Was ist bei den Zusammenhangskomponenten wichtig?

Topologische Sortierung (hier stand ich kurz auf dem Schlauch, war aber kein Problem)

  • Was hat der JIT3 dann neues gebracht und worauf musste man achten?

Inlining; Sprünge im Caller und Callee anpassen, Unendliches Rekursives Inlining vermeiden, pusharg, call und ret patchen

Vorlesung (zweite Hälfte der Prüfungszeit)

Watermarks

  • Welche Kriterien kennen wir, um Watermarks zu bewerten?

Performance, Zerstörbarkeit, Glaubwürdigkeit

  • Nennen sie zwei Beispiele für Watermarks.

Habe ein statisches Beispiel (Symbole einfügen) und ein dynamisches (Eastereggs genannt)

Exceptions

  • Warum nicht einfach If-Else?

Performance

  • Wo?

An der Stelle vom „try“

  • Was gibt es dann für Möglichkeiten?

Stack-Cutting und Stack-Unwinding

  • Können sie Stack-Cutting einmal erklären und Vor- und Nachteile nennen?

Zustand vor betreten des Blocks speichern (setjmp). Das bringt Performance-Overhead mit sich, ist aber dafür recht einfach und das Werfen der Exception ist billig.

  • Warum würden wir dann Stack-Unwinding verwenden wollen?

Performance-Overhead in Erfolgreichen Fällen vermeiden

GC

  • Was wären denn so Vor- und Nachteile wenn wir keinen GC verwenden.

Besser Vorhersagbare Laufzeiten von einzelnen Prozeduren, manuelles Management ist allerdings fehleranfällig und bei statischem Management (a la Rust) ist es schwer Zyklen zu verwalten. (Einwurf P.: Es gibt auch Echtzeit-GCs)

  • Können sie einmal Mark-And-Sweep erklären und die Vor- und Nachteile nennen?

Mark-And-Sweep erklärt; Vorteile: Keine Zeigeranpassung nötig; Nachteile: Fragmentierung, Laufzeit abhängig von Stackgröße

  • Was gäb es dann für eine Alternative?

Copy-Basiertes GC

  • Können sie das einmal erklären und Vorteile/Nachteile nennen?

Copy-GC erklärt; Vorteile: Wenig Fragmentierung, Laufzeit nicht abhängig von toten Elementen; Nachteile: viele Seiten werden invalidiert, Zeigeranpassung notwendig

  • Auf eins von beiden haben Zyklen auch eine Auswirkung, können sie das erklären?

Mark-And-Sweep: Tiefensuche bei Zyklen abbrechen, Copy: Erst Kopieren, dabei neue Position in alten Elementen vermerken, dann Referenzen über alten Heap anpassen

  • Warum lohnt sich ein Generations-Basierter GC?

Die meisten Variablen sterben jung oder leben sehr lang; Oft sinkt die Sterblichkeit mit dem Alter einer Variable; → Öftere GC bei jungen Objekten