Compiling C

Die ersten Compiler stammen aus den 1950er Jahren und haben sich, wie die Informatik, stark weiter entwickelt. Im Alltag werden Compiler wie eine Blackbox gesehen, die aus Programmcode Binärcode erzeugt. In den letzten 65 Jahre Entwicklung haben sich verschiedene Eigenheiten und Feinheiten in Compilern ergeben, die zu Problemen führen können. In diesem Talk werden wir die Blackbox öffnen und uns die Compiler GCC und clang genauer ansehen.

Um diese Blackbox etwas besser zu verstehen, werden wir uns zuerst ansehen, wie ein Compiler grob funktioniert und aufgebaut ist. Außerdem werden wir einige Open-Source C-Compiler gemeinsam vergleichen und über ihre Vor- und Nachteile sprechen. Nach einer Pause werden wir uns überblicksmäßig und anhand von Beispielen ansehen, wie optimierende Compiler funktionieren und warum ihre Algorithmen nicht immer korrekt funktionieren. Dies wird anhand des LLVM Optimizers erklärt werden, bei dem wir auch genauer auf einige Sanitizer und undefiniertes Verhalten eingehen werden.

The first compilers were built in 1950 and have been developed ever since, similarily to the rest of computing. Mostly, they are viewed as blackboxes, which transform code into binaries. During the last 65 years, several subtleties and some quirks occured, which lead to the modern compilers we know. During the talk, we will look at some of the black boxes, namely GCC and clang.

First, we will look at the structure of a compiler. Then, we will compare some compilers and discuss the advantages and disadvantages of their approaches. After a break we are going to analyze some examples of optimizing compilers and find out why they are not always working flawlessly, as well as the workarounds and current research. Most of this part will revolve around the LLVM Optimizer, as well as some sanitizers found in LLVM and GCC.

Was: Compiling C
Wann: 12. April 2018, 19:00
Wo: HS4, FH2
Wer: Lena Heimberger

Updates, Slides und den ganzen Rest gibts unter http://fhLUG.at.


Die Slides zum Vortrag sind nun als PDF online.