This is documentation for Mathematica 4, which was
based on an earlier version of the Wolfram Language.
View current documentation (Version 11.2)

 Documentation /  Mathematica /  Das Mathematica Buch /  Die Prinzipien von Mathematica /  Evaluierung von Ausdrücken /

Kompilieren von Mathematica-AusdrückenInhalt

2.5.15 Fortgeschrittenes Thema: Manipulation des kompilierten Codes

Wenn Sie den von Compile erzeugten Code nur innerhalb von Mathematica selber verwenden, dann besteht keine Notwendigkeit, die Einzelheiten seiner internen Form zu kennen. Trotzdem kann der kompilierte Code durch einen gewöhnlichen Mathematica-Ausdruck dargestellt werden, und mitunter macht es Sinn, diesen zu manipulieren.

Zum Beispiel können Sie den von Compile erzeugten Code in externe Programme oder Geräte einspeisen. Sie können auch selber CompiledFunction-Objekte erzeugen und sie dann in Mathematica ausführen.

In all diesen Fällen müssen Sie die interne Form von CompiledFunction-Objekten kennen. Das erste Element eines CompiledFunction-Objektes ist immer eine Liste mit Mustern, welche die Argumenttypen spezifiziert, die vom Objekt akzeptiert werden. Das fünfte Element eines CompiledFunction-Objektes ist eine reine Funktion in Mathematica, die dann benutzt wird, wenn der Anweisungsstrom des kompilierten Codes aus irgendeinem Grund kein Ergebnis liefert.

Die Struktur eines kompilierten Code-Objekts

Dies zeigt die explizite Form des kompilierten Codes, der durch Compile erzeugt wurde.

In[1]:= Compile[{x}, x^2] // InputForm

Out[1]//InputForm= CompiledFunction[{_Real}, {{3, 0, 0}}, {0, 0, 3, 0, 0}, {{1, 3}, {15, 0, 1}, {34, 1, 1, 2}, {4, 2}}, Function[{x}, x^2]]

Der Anweisungsstrom in einem CompiledFunction-Objekt besteht aus einer Anweisungsliste für einen einfachen idealisierten Computer. Es wird angenommen, daß der Computer numerierte „Register" hat, mit denen Operationen ausgeführt werden können. Es gibt fünf elementare Registertypen: logische, ganzzahlige, reelle, komplexe und tensorielle. Es kann dann für jeden dieser elementaren Typen ein einzelnes skalares Register oder einen Register-Array beliebigen Ranges geben. Als zweites Element des Objektes wird eine Liste angegeben, die die Gesamtanzahlen der Register jeden Typs enthält, die zur Evaluierung eines bestimmten CompiledFunction-Objektes benötigt werden.

Die eigentlichen Anweisungen im kompilierten Code-Objekt werden als Listen angegeben. Das erste Element ist ein ganzzahliger „Opcode", der angibt, welche Operation ausgeführt werden soll. Die dann folgenden Elemente sind entweder die Nummern bestimmter Registertypen oder literale Konstanten. In der Regel ist das letzte Element der Liste die Nummer eines „Zielregisters", in das das Ergebnis der Operation eingetragen werden sollte.

Kompilieren von Mathematica-AusdrückenInhalt