>>165033Der Typ vom Schimmel-Linker hat es auch nicht leicht. Er wollte seinen Linker zuvor tatsächlich als Kaufware anbieten. Jeder hat ihm gesagt, dass das scheitern wird, und so kam es auch, aber er wollte nicht hören.
Von einem Linker erwartet Felix zwei Dinge:
*Im Debug-Build (auch inkrementell) rasend schnell die ausführbare Datei zusammenkloppen.
*Im Release-Build für eine saubere, minimale, möglichst optimierte ausführbare Datei sorgen.
Letzteres bedeutet allen voran LTO/ThinLTO, d.h. dass es gar keine Objektdateien mehr gibt, sondern in den "Objektdateien" nur GCC/LLVM-IR drin ist. GCC/LLVM kann dann alles wie ein einziges Modul, mit Durchblick in jede Funktion und mit allen Referenzen auf Daten, durchoptimieren und Inlining und unreferenzierte COMDAT-Entfernung machen. Besonders gut mit statischem Linken von allem. Die Hauptlast liegt da natürlich auf GCC/LLVM, nicht auf dem Linker. Dazu kommen dann neben PGO noch so Dinge wie BOLT, welche die Funktionen besonders nach Aufrufs-Lokalität besonders cache-effizient in die Binärdatei einsortiert.
Mit LTO/ThinLTO dominiert das vom Linker aufgerufene LTO/ThinLTO-Plugin alles andere beim Linken und der Linker bekommt (zumindest bei LTO) eine einzige Objekt-Datei (wenn man nicht noch Assembler-Routinen irgendwo hat, die in eigenen Objekt-Dateien resultieren). Da kann der Linker dann noch so optimiert sein, wenn man 1 Minute fürs LTO braucht und 1 Sekunde zum Linken, ist es egal, ob der letztere Teil nun in 0,1 Sekunden läuft (kennt man von Amdahl's law).
Problem ist, dass der Typ für Debug-Builds immer noch nicht inkrementelles Linken implementiert hat. Dabei wäre gerade das für die schnelle Schreiben-Kompilieren-Linken-Ausführen-Schleife, wie beim Programmieren üblich, extrem wichtig. Und für Release-Builds ist ein schneller Linker zwar nett, aber bei weitem nicht so wichtig wie bei Debug-Builds (sagt Felix als Gentoo-User).
Felix hat aus informierten Kreisen erfahren, dass Epic gerade an einem ultra-schnellen Linker für Debug-Builds arbeitet.
Die Luft wird damit noch dünner.