{"id":185671,"date":"2023-09-18T15:09:42","date_gmt":"2023-09-18T14:09:42","guid":{"rendered":"https:\/\/liora.io\/de\/?p=185671"},"modified":"2026-02-06T06:16:11","modified_gmt":"2026-02-06T05:16:11","slug":"llvm-alles-ueber-diesen-compiler","status":"publish","type":"post","link":"https:\/\/liora.io\/de\/llvm-alles-ueber-diesen-compiler","title":{"rendered":"LLVM: Alles \u00fcber diesen Compiler"},"content":{"rendered":"<p><strong>Obwohl es f\u00fcr Entwickler \u00fcblich ist, Programme in einer &#8222;Hochsprache&#8220; wie Python oder Java zu erstellen, m\u00fcssen diese Programme kompiliert werden, um die F\u00e4higkeiten des Mikroprozessors direkt zu nutzen. LLVM ist in diesem Bereich sehr innovativ, da es Aspekte wie Modularit\u00e4t und Echtzeitkompilierung f\u00f6rdert.<\/strong><\/p>\nEntwickler wissen es&#8230; Das Schreiben einer Reihe von Anweisungen in einer Sprache wie <a href=\"https:\/\/liora.io\/de\/pyinstaller-alles-was-man-wissen-muss\">Python<\/a>, Java oder C++ ist nur ein Schritt in dem Prozess, der zu einem ausf\u00fchrbaren Programm f\u00fchrt. Der Prozess, der den &#8222;Quellcode&#8220; (das, was der Entwickler schreibt) in einen Code umwandelt, der von einem Mikroprozessor verarbeitet werden kann, wird Kompilieren genannt.\n\nSprachen wie Python oder Java werden als Hochsprachen bezeichnet. Sie enthalten Anweisungen, die f\u00fcr einen Menschen leicht verst\u00e4ndlich sind, wie z. B. das ber\u00fchmte IF, das zum Testen einer Bedingung verwendet wird und in den meisten Sprachen vorkommt. Die Entwicklung eines Programms in Maschinencode ist \u00e4u\u00dferst schwierig, daher werden die in einer Hochsprache geschriebenen Anweisungen beim Kompilieren in Maschinencode umgewandelt.\n\nLLVM wurde von dem Informatiker Chris Lattner um 2002 an der Universit\u00e4t von Illinois im Rahmen seiner Doktorarbeit entwickelt und sollte den Ansatz des Kompilierens erneuern und seine Verwendung optimieren.\n<h3>Optimierung des Kompilierungsprozesses<\/h3>\nDas Bestreben, Compiler zu optimieren, ist nicht neu. Der GCC-Compiler &#8211; ein Teil des <a href=\"https:\/\/liora.io\/de\/linux-betriebssystem-warum-ist-es-das-beliebteste-os-fuer-entwickler\">GNU-Betriebssystems (f\u00fcr Linux),<\/a> der 1984 von Richard Stallman eingef\u00fchrt wurde &#8211; hat im Laufe der Zeit viele Optimierungsoptionen eingebaut, um die Effizienz des erzeugten Codes zu verbessern.\n\nLLVM wurde Anfang der 2000er Jahre entwickelt, als Multi-Core-Mikroprozessor-Architekturen und GPUs oder Grafikprozessoren in Computern \u00fcblich wurden.\n\nLLVM ist die Abk\u00fcrzung f\u00fcr Low Level Virtual Machine, und dieser Name ist ein Teil dessen, was es tut: virtuelle Maschinen (die das Verhalten bestimmter Prozessoren emulieren k\u00f6nnen) auf einer niedrigen Ebene (und damit nahe am Prozessor) zu erstellen.\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"900\" height=\"500\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/09\/llvm1.jpg\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/09\/llvm1.jpg 900w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/09\/llvm1-300x167.jpg 300w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/09\/llvm1-768x427.jpg 768w\" sizes=\"(max-width: 900px) 100vw, 900px\"><figcaption><\/figcaption><\/figure>\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex is-content-justification-center\"><div class=\"wp-block-button \"><a class=\"wp-block-button__link wp-element-button \" href=\"https:\/\/liora.io\/de\/unsere-aus-und-weiterbildungen\">Lerne alles \u00fcber LLVM<\/a><\/div><\/div>\n\n<h3>Der innovative Ansatz von LLVM<\/h3>\nLLVM hat daher verschiedene innovative Ans\u00e4tze vorgeschlagen:\n<ul>\n \t<li>eine modulare Architektur ;<\/li>\n \t<li>die JIT-Kompilierung ;<\/li>\n \t<li>eine Intermedi\u00e4re Darstellung IR ;<\/li>\n \t<li>ein ganzes \u00d6kosystem von wiederverwendbaren Werkzeugen.<\/li>\n<\/ul>\nWir werden diese verschiedenen Punkte durchgehen.\n<h3>Modulare Architektur<\/h3>\nTraditionell bestanden die meisten Compiler aus einem einzigen Programm, was es schwierig machte, sie zu optimieren oder ihre F\u00e4higkeiten zu erweitern.\n\nEines der Hauptziele <strong>f\u00fcr LLVM<\/strong> war es, eine modulare <strong>Compiler-Architektur<\/strong> zu schaffen, d. h. verschiedene Komponenten dazu zu bringen, harmonisch zusammenzuarbeiten. Daraus ergaben sich zahlreiche Vorteile.\n\nDie Entwicklung des Compilers kann von verschiedenen Teams durchgef\u00fchrt werden, die jeweils ein oder mehrere bestimmte Module erstellen. Dadurch wird die Entwicklungszeit verk\u00fcrzt und die Gesamteffizienz gesteigert. Der von einem Team erstellte <strong>Code ist in der Regel<\/strong> sauberer und f\u00fcr diejenigen, die ihn warten sollen, leichter zu verstehen.\nWenn ein Compiler aus einer Reihe von Modulen besteht, k\u00f6nnen einzelne Module separat optimiert werden. Und da die Wartung auf diesem isolierten Modul durchgef\u00fchrt werden kann. Daraus ergibt sich eine gr\u00f6\u00dfere Flexibilit\u00e4t.\nWenn sich im <strong>Laufe der Monate herausstellt, dass dem Compiler eine wichtige Funktion<\/strong> fehlt, kann diese hinzugef\u00fcgt werden, sei es durch Eingriffe in eines der bestehenden Module oder durch die Erstellung eines neuen Moduls. Die modulare Struktur f\u00f6rdert somit das Experimentieren und die Implementierung neuer F\u00e4higkeiten.\nDer modulare Aufbau erleichtert die Integration externer Tools.\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"900\" height=\"500\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/09\/llvm2.jpg\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/09\/llvm2.jpg 900w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/09\/llvm2-300x167.jpg 300w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/09\/llvm2-768x427.jpg 768w\" sizes=\"(max-width: 900px) 100vw, 900px\">\n\n<figcaption><\/figcaption><\/figure>\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex is-content-justification-center\"><div class=\"wp-block-button \"><a class=\"wp-block-button__link wp-element-button \" href=\"https:\/\/liora.io\/de\/unsere-aus-und-weiterbildungen\">Entdecke unsere Kurse<\/a><\/div><\/div>\n\n<h3>JIT-Kompilierung oder &#8222;on the fly&#8220;-Kompilierung<\/h3>\nBei der traditionellen Kompilierung wird die gesamte Umwandlung vor der Ausf\u00fchrung des Programms vorgenommen, wodurch ein endg\u00fcltiger Maschinencode entsteht, der nicht mehr ver\u00e4ndert werden kann.\n\nBei der J<strong>IT-Kompilierung (Just-In-Time) von LLVM<\/strong> wird der vom Entwickler geschriebene Quellcode zur Laufzeit in ausf\u00fchrbaren Maschinencode umgewandelt.\n\nDie JIT-Kompilierung erfolgt unmittelbar vor der Ausf\u00fchrung einer Sequenz von Maschinencode.\n\nDies wird als &#8222;selektive Kompilierung&#8220; bezeichnet. Die Optimierung erfolgt dynamisch (in Echtzeit), je nach dem Verhalten des Programms.\n\n<strong>LLVM ist nicht das einzige Werkzeug, das die JIT-Kompilierung<\/strong> verwendet. Dasselbe gilt f\u00fcr .Net (Microsoft) und viele <a href=\"https:\/\/liora.io\/de\/java-grundlagen-wir-erklaerens-dir-jdk-jre-und-jvm\">Java-Implementierungen.<\/a>\n<h3>IR oder Zwischenvertretung<\/h3>\nWie wir oben gesehen haben, <strong>steht LLVM f\u00fcr &#8222;Low Level Virtual Machines&#8220;<\/strong>. Und hier haben wir einen weiteren Schl\u00fcssel zu LLVM: Es erzeugt keinen Code, der auf einen bestimmten Mikroprozessor zugeschnitten ist, sondern einen Zwischencode, der der Maschinensprache \u00e4hnelt, aber unabh\u00e4ngig von einer bestimmten Recheneinheit ist.\n\nDiese &#8222;intermediate representation&#8220; (IR) kann an alle Arten von Prozessoren angepasst werden, egal ob es sich um Recheneinheiten oder Grafikprozessoren handelt. Auch dieser Ansatz hat wieder viele Vorteile:\n<ul>\n \t<li>IR kann unabh\u00e4ngig vom endg\u00fcltigen, prozessorspezifischen Code optimiert werden.<\/li>\n \t<li>Es ist einfacher, den IR-Code zu analysieren oder zu debuggen als die Maschinensprache.<\/li>\n \t<li>Wenn ein neuer Prozessor auf den Markt kommt, ist es einfach, den Compiler dazu zu bringen, den entsprechenden Typ von Maschinensprache zu integrieren.<\/li>\n<\/ul>\n<h3>Ein reichhaltiges \u00d6kosystem<\/h3>\n<strong>LLVM profitiert von einem breiten \u00d6kosystem<\/strong> an Tools und Erweiterungen, die seine F\u00e4higkeiten erweitern k\u00f6nnen. Dies ist zum Teil auf die Pr\u00e4senz von qualitativ hochwertigen Benutzergemeinschaften zur\u00fcckzuf\u00fchren. Zum Beispiel wird der Clang-Compiler (der auf LLVM f\u00fcr Sprachen wie C, <a href=\"https:\/\/liora.io\/de\/c-was-die-meisten-nicht-wissen\">C++<\/a> und Objective-C basiert) aktiv von Mitarbeitern von Google, Apple, Mozilla und ARM unterst\u00fctzt. Auch neue und sehr erfolgreiche Sprachen wie Rust und Swift, die ebenfalls auf LLVM basieren, verf\u00fcgen \u00fcber gro\u00dfe und engagierte Communities.\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"900\" height=\"500\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/09\/llvm3.jpg\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/09\/llvm3.jpg 900w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/09\/llvm3-300x167.jpg 300w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/09\/llvm3-768x427.jpg 768w\" sizes=\"(max-width: 900px) 100vw, 900px\">\n\n<figcaption><\/figcaption><\/figure>\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex is-content-justification-center\"><div class=\"wp-block-button \"><a class=\"wp-block-button__link wp-element-button \" href=\"https:\/\/liora.io\/de\/unsere-aus-und-weiterbildungen\">Alles \u00fcber LLVM<\/a><\/div><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Obwohl es f\u00fcr Entwickler \u00fcblich ist, Programme in einer &#8222;Hochsprache&#8220; wie Python oder Java zu erstellen, m\u00fcssen diese Programme kompiliert werden, um die F\u00e4higkeiten des Mikroprozessors direkt zu nutzen. LLVM ist in diesem Bereich sehr innovativ, da es Aspekte wie Modularit\u00e4t und Echtzeitkompilierung f\u00f6rdert. Entwickler wissen es&#8230; Das Schreiben einer Reihe von Anweisungen in einer [&hellip;]<\/p>\n","protected":false},"author":76,"featured_media":185672,"comment_status":"open","ping_status":"open","sticky":false,"template":"elementor_theme","format":"standard","meta":{"_acf_changed":false,"editor_notices":[],"footnotes":""},"categories":[2476],"class_list":["post-185671","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cloud-dev"],"acf":[],"_links":{"self":[{"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/posts\/185671","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/users\/76"}],"replies":[{"embeddable":true,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/comments?post=185671"}],"version-history":[{"count":1,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/posts\/185671\/revisions"}],"predecessor-version":[{"id":217167,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/posts\/185671\/revisions\/217167"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/media\/185672"}],"wp:attachment":[{"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/media?parent=185671"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/categories?post=185671"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}