PRAGMA

PRAGMA

Ein PRAGMA ist eine Sonderanweisung in einem Programm oder einer Datenbank, die nicht das eigentliche Ergebnis beschreibt, sondern das Verhalten des ausführenden Systems einstellt. Man findet Pragmas vor allem in Programmiersprachen wie C und C++ sowie in der Datenbank SQLite.

Ein Programm besteht aus Anweisungen, die beschreiben, was der Computer tun soll. Ein PRAGMA gehört zu einer anderen Sorte von Anweisungen. Es sagt nicht, was gerechnet werden soll, sondern wie das Programm behandelt werden soll. Es richtet sich also an das Werkzeug, das den Programmtext in ausführbaren Code übersetzt, oder an das Programm, das ihn ausführt. Der Name kommt vom griechischen Wort für „Handlung“ oder „Sache“. Man kann sich ein PRAGMA als Randnotiz an den Handwerker vorstellen: Der Bauplan bleibt gleich, aber es steht dabei, welches Werkzeug er benutzen soll.

Warum Programmierer solche Randnotizen brauchen

Ein Übersetzungsprogramm, der sogenannte Compiler, trifft viele Entscheidungen selbst. Es entscheidet zum Beispiel, wie es Rechenschritte umsortiert, damit das Ergebnis schneller vorliegt. Meistens ist das gut. Manchmal weiß der Mensch aber mehr über das Problem als das Werkzeug. Genau dann braucht er einen Weg, seine Entscheidung durchzusetzen.

Ein häufiger Fall ist das Rechnen auf mehreren Prozessorkernen gleichzeitig. Mit einer einzigen Pragma-Zeile kann ein Programmierer eine Schleife auf acht Kerne verteilen. Der eigentliche Programmtext bleibt dabei unverändert lesbar. Ohne dieses Mittel müsste er den Code komplett umschreiben. Bei rechenintensiven Aufgaben wie Wettersimulationen oder KI-Training macht das einen Unterschied von Stunden.

Ein zweiter Grund sind Warnungen. Compiler melden verdächtige Stellen im Code, und das ist meistens hilfreich. Wenn ein Programmierer aber genau weiß, dass eine Stelle in Ordnung ist, kann er die Warnung mit einem PRAGMA gezielt für diese eine Zeile abschalten. Das ist besser, als alle Warnungen im ganzen Projekt zu ignorieren.

Was passiert, wenn das System das PRAGMA nicht kennt

In der Sprache C schreibt man ein PRAGMA mit einem Doppelkreuz davor, also etwa als Zeile mit „#pragma“. Danach folgt ein Stichwort, das die gewünschte Einstellung benennt. Welche Stichwörter es gibt, legt jedoch nicht die Sprache fest, sondern der jeweilige Hersteller des Compilers. Deshalb versteht ein Werkzeug oft Pragmas, die ein anderes nicht kennt.

Genau hier liegt die entscheidende Eigenschaft. Ein unbekanntes PRAGMA führt nicht zu einem Fehler. Das Werkzeug überliest die Zeile einfach und übersetzt den Rest ganz normal. Das Programm läuft also weiter, nur eben ohne die gewünschte Einstellung. Bei einem gewöhnlichen Befehl wäre das anders: Ein unbekannter Befehl bricht die Übersetzung ab.

Diese Nachsicht ist praktisch und gefährlich zugleich. Praktisch, weil derselbe Programmtext auf vielen Systemen funktioniert. Gefährlich, weil ein Tippfehler im PRAGMA stillschweigend ignoriert wird. Der Programmierer glaubt dann, sein Code laufe parallel auf acht Kernen, tatsächlich rechnet aber nur einer. Solche Fehler fallen erst auf, wenn jemand die Laufzeit misst.

Von SQLite-Datenbanken bis zu Sicherheitslücken in KI-Systemen

Am sichtbarsten sind Pragmas heute in SQLite. Das ist eine kleine Datenbank, die in praktisch jedem Smartphone und Browser steckt. Dort stellt man mit Befehlen wie „PRAGMA journal_mode“ ein, wie die Datenbank ihre Daten sichert. Solche Zeilen sieht man häufig in Anleitungen für App-Entwickler. Sie sehen aus wie Datenbankabfragen, liefern aber keine Daten, sondern verändern Einstellungen.

In der KI-Welt taucht der Begriff aus einem anderen Grund auf. Sprachmodelle schreiben inzwischen selbst Programmcode, auch Datenbankbefehle. Wenn ein Angreifer ein Modell dazu bringt, ein bestimmtes PRAGMA einzufügen, kann er Schutzmechanismen der Datenbank abschalten. Sicherheitsforscher prüfen deshalb, welche Pragmas ein KI-Assistent überhaupt erzeugen darf.

Ein verbreiteter Irrtum ist, PRAGMA sei ein eigenes Kommando mit fester Bedeutung. Tatsächlich ist es nur ein Rahmen. Was drinsteht, bedeutet in jeder Sprache und in jedem Werkzeug etwas anderes. Wer eine Pragma-Zeile in fremdem Code sieht, muss also in der Dokumentation des jeweiligen Systems nachschlagen.

Produkte dazu

Subscribe free. Unsubscribe the second it sucks.

High-signal news across AI, business, UX, and tech. Every morning.