Masterarbeit…


Eigentlich bin ich ja hier, um meine Masterarbeit zu schreiben. Daher war ich diese Woche auch schon jeden Tag an der Uni, habe meinen Betreuer getroffen und einige Vorträge besucht. Da ich Dave, meinen Betreuer, vorher nicht persönlich kannte, bin ich sehr froh, dass er so sympathisch ist.

In meiner Masterarbeit werde ich mich mit Lifetime-Analyse für die Programmiersprache Whiley beschäftigen. Whiley ist eine Sprache, die es dem Programmierer erlaubt, alle Programmteile mit Spezifikationen zu versehen, die genau angeben, was hier passieren darf und was nicht. Die Programmiersprache selbst stellt dann sicher, dass diese Spezifikationen eingehalten werden und auch die sonst üblichen Fehler (für die Spezialisten: Nullpointer-Dereferenzierung und OutOfBounds Zugriffe) nicht auftreten können. Fehlerhafte Programme werden als solche erkannt und der Compiler gibt eine entsprechende Fehlermeldung aus, noch bevor das Programm zum Beispiel beim Kunden zum Einsatz kommt.

Das ist vor allem in Sicherheitsrelevanten Bereichen sinnvoll, beispielsweise in der Steuerungssoftware für Flugzeuge, Züge aber auch bei medizinischen Geräten, die mit Strahlung arbeiten. Hier können solche Fehler fatale Folgen haben.

In der Lifetime-Analyse wird ermittelt, wann ein Objekt nicht mehr benötigt wird, d.h. wann der Speicher für dieses Objekt wieder freigegeben und für etwas anderes verwendet werden kann. Manche Programmiersprachen wie z.B. Java machen eine Analyse, während das Programm ausgeführt wird, und löschen dann die nicht mehr benötigten Speicherstellen (Garbage-Collector). Das kostet aber wertvolle Zeit und Rechenleistung bei der Ausführung. Zudem wird das Programm kurz angehalten, um eine solche Analyse durchführen zu können. Das könnte heißen, dass der Autopilot eines Flugzeuges für kurze Zeit keine neuen Daten verarbeiten und entsprechende Befehle an die Steuerung senden kann. Kann man nicht genau vorhersagen, wie lange eine solche Unterbrechung maximal dauert, kann auch dies fatale Folgen haben. Deshalb möchte man das in der Regel nicht während der Programmausführung analysieren, sondern bereits vorher ins Programm schreiben: An dieser Stelle kann der Speicher von Objekt x wieder freigegeben werden. Dann entfällt die Analyse. Hat der Programmierer aber nicht richtig nachgedacht und der Speicher wird doch noch benötigt, dann erfolgt ein künftiger Zugriff auf eine Speicherstelle, wo etwas ganz anderes steht als erwartet. Im besten Fall stürzt das Programm ab. Es kann aber auch passieren, dass falsche Daten verarbeitet werden, ohne dass das Programm es direkt merken würde.

Ziel meiner Arbeit ist es, die Stellen, wo Speicher freigegeben werden darf, automatisiert herauszufinden, ohne dass ein Programmierer dabei Fehler machen kann. Das erlaubt es dann zum Einen, Whiley ohne Garbage Collector auszuführen (im Moment werden Whiley-Programme in Java übersetzt, wo bekanntlich ein Garbage-Collector zum Einsatz kommt). Das ist vor allem für kleine Microprozessoren praktisch. Andererseits wäre es die Grundlage zur Einführung von Nebenläufigkeit, wie es durch Channels in Rust möglich ist. Informatiker dürfen sich gerne hier einlesen, alle anderen dürfen mir glauben, dass es nützlich ist 🙂 .

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.