<?xml version="1.0" encoding="utf-8"?>
<!-- generator="FeedCreator 1.7.2-ppt DokuWiki" -->
<?xml-stylesheet href="http://runtime-basic.net/lib/exe/css.php?s=feed" type="text/css"?>
<rdf:RDF
    xmlns="http://purl.org/rss/1.0/"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
    xmlns:dc="http://purl.org/dc/elements/1.1/">
    <channel rdf:about="http://runtime-basic.net/feed.php">
        <title>Runtime-Basic Compiler</title>
        <description></description>
        <link>http://runtime-basic.net/</link>
        <image rdf:resource="http://runtime-basic.net/lib/images/favicon.ico" />
       <dc:date>2010-09-08T12:52:02+02:00</dc:date>
        <items>
            <rdf:Seq>
                <rdf:li rdf:resource="http://runtime-basic.net/Compiler:Aufbau?rev=1234710230&amp;do=diff"/>
                <rdf:li rdf:resource="http://runtime-basic.net/Compiler:Codebaum?rev=1283347865&amp;do=diff"/>
                <rdf:li rdf:resource="http://runtime-basic.net/Compiler:Compiler?rev=1209649194&amp;do=diff"/>
                <rdf:li rdf:resource="http://runtime-basic.net/Compiler:Optimierung?rev=1180810210&amp;do=diff"/>
                <rdf:li rdf:resource="http://runtime-basic.net/Compiler:Planung?rev=1219012344&amp;do=diff"/>
            </rdf:Seq>
        </items>
    </channel>
    <image rdf:about="http://runtime-basic.net/lib/images/favicon.ico">
        <title>Runtime-Basic</title>
        <link>http://runtime-basic.net/</link>
        <url>http://runtime-basic.net/lib/images/favicon.ico</url>
    </image>
    <item rdf:about="http://runtime-basic.net/Compiler:Aufbau?rev=1234710230&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2009-02-15T16:03:50+02:00</dc:date>
        <title>Compiler:Aufbau</title>
        <link>http://runtime-basic.net/Compiler:Aufbau?rev=1234710230&amp;do=diff</link>
        <description>&lt;table&gt;&lt;tr&gt;&lt;th colspan=&quot;2&quot; width=&quot;50%&quot;&gt;&lt;/th&gt;&lt;th colspan=&quot;2&quot; width=&quot;50%&quot;&gt;aktuell&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;diff-blockheader&quot; colspan=&quot;2&quot;&gt;Zeile 1:&lt;/td&gt;
&lt;td class=&quot;diff-blockheader&quot; colspan=&quot;2&quot;&gt;Zeile 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;+&lt;/td&gt;&lt;td class=&quot;diff-addedline&quot;&gt;====== Aufbau ======&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;+&lt;/td&gt;&lt;td class=&quot;diff-addedline&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;+&lt;/td&gt;&lt;td class=&quot;diff-addedline&quot;&gt;Eine grobe Skizze wie ein Compiler Prinzipiell funktioniert:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;+&lt;/td&gt;&lt;td class=&quot;diff-addedline&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;+&lt;/td&gt;&lt;td class=&quot;diff-addedline&quot;&gt;^QuellText &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |Enthält den Code in einer Sprache oder Hochsprache als Text. &amp;nbsp;|&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;+&lt;/td&gt;&lt;td class=&quot;diff-addedline&quot;&gt;| &amp;nbsp;| &amp;nbsp;|&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;+&lt;/td&gt;&lt;td class=&quot;diff-addedline&quot;&gt;^__Frontend__ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |Diese Compilerteile gehören zur Code-Analyse. Es können an verschiedenen stellen Codeoptimierungen durchgeführt werden um den Ausführbaren Code zu beschleunigen zB kann X %%^%% 2 durch X * X ersetzt werden da Multiplikationen viel schneller ausgeführt werden als Potenzen. &amp;nbsp;^&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;+&lt;/td&gt;&lt;td class=&quot;diff-addedline&quot;&gt;^Scanner, Lexer &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |Schneidet den Code in Worte (Tokens) auf, und führt bereits eine einfache Syntaxprüfung durch. &amp;nbsp;|&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;+&lt;/td&gt;&lt;td class=&quot;diff-addedline&quot;&gt;^Parser, Syntaxanalyse &amp;nbsp; &amp;nbsp;|Analysiert die Tokens und Ermittelt die Bedeutung jedes Wortes.\\ Dabei wird eine gründliche Syntaxprüfung durchgeführt, und es werden __Codebäume__ erzeugt und eine __Namensliste__ (Symboltable) erstellt welche Namen Typen und Namensräume (Namespace) enthält. &amp;nbsp;|&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;+&lt;/td&gt;&lt;td class=&quot;diff-addedline&quot;&gt;^Zwischencode Generator &amp;nbsp; |Erstellt aus dem Codebaum ein vorcompilierten Code vorzugsweise als eine Liste welcher bereits die gesamte Codestruktur enthält. Dieser Code ist interpretierbar ist aber noch nicht auf eine bestimmte Maschine compiliert. Ein Interpreter könnte den gleichen Zwischencode für verschiedene Hardware ausführen, da die Maschinencodes im Interpreter enthalten sind und nicht im Zwischencode. &amp;nbsp;|&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;+&lt;/td&gt;&lt;td class=&quot;diff-addedline&quot;&gt;| &amp;nbsp;| &amp;nbsp;|&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;+&lt;/td&gt;&lt;td class=&quot;diff-addedline&quot;&gt;^__Backend__ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|Diese Compilerteile gehören zur Code-Generierung. Auch hier lassen sich Optimierungen durchführen durch Berücksichtigung der Lade- und Laufzeiten von Prozessorbefehlen. &amp;nbsp;|&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;+&lt;/td&gt;&lt;td class=&quot;diff-addedline&quot;&gt;^Maschinencode Generator &amp;nbsp;|Es wird ein Maschinencode erzeugt der von der Hardware ausgeführt werden kann. Vorzugsweise ist das ein Assembler Code (ASM) der die Prozessorbefehle als Text darstellt (Mnemonic). &amp;nbsp;|&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;+&lt;/td&gt;&lt;td class=&quot;diff-addedline&quot;&gt;^ASM Compiler &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |Compiliert den ASM Code in ein Maschinenverständliches Binärformat um zB. OBJ Dateien. Für jedes Modul wird eine eigene OBJ Datei erzeugt. &amp;nbsp;|&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;+&lt;/td&gt;&lt;td class=&quot;diff-addedline&quot;&gt;^Linker &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |Der Linker verbindet die OBJ Dateien dann zu einem Ausführbaren Binärformat welches vom Betriebssystem ausgeführt werden kann zB. EXE/DLL. &amp;nbsp;|&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;+&lt;/td&gt;&lt;td class=&quot;diff-addedline&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;+&lt;/td&gt;&lt;td class=&quot;diff-addedline&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</description>
    </item>
    <item rdf:about="http://runtime-basic.net/Compiler:Codebaum?rev=1283347865&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2010-09-01T15:31:05+02:00</dc:date>
        <title>Compiler:Codebaum</title>
        <link>http://runtime-basic.net/Compiler:Codebaum?rev=1283347865&amp;do=diff</link>
        <description>&lt;table&gt;&lt;tr&gt;&lt;th colspan=&quot;2&quot; width=&quot;50%&quot;&gt;1283347865&lt;/th&gt;&lt;th colspan=&quot;2&quot; width=&quot;50%&quot;&gt;aktuell&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;diff-blockheader&quot; colspan=&quot;2&quot;&gt;Zeile 157:&lt;/td&gt;
&lt;td class=&quot;diff-blockheader&quot; colspan=&quot;2&quot;&gt;Zeile 157:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;-&lt;/td&gt;&lt;td class=&quot;diff-deletedline&quot;&gt;Temp = &lt;strong&gt;COMPARE&lt;/strong&gt;(A, B&lt;strong&gt;, C&lt;/strong&gt;)&lt;/td&gt;&lt;td&gt;+&lt;/td&gt;&lt;td class=&quot;diff-addedline&quot;&gt;Temp = &lt;strong&gt;TEST&lt;/strong&gt;(A, B)&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;IF NOT Temp THEN GOTO J_False&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;IF NOT Temp THEN GOTO J_False&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;J_True:&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;J_True:&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</description>
    </item>
    <item rdf:about="http://runtime-basic.net/Compiler:Compiler?rev=1209649194&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2008-05-01T15:39:54+02:00</dc:date>
        <title>Compiler:Compiler</title>
        <link>http://runtime-basic.net/Compiler:Compiler?rev=1209649194&amp;do=diff</link>
        <description>&lt;table&gt;&lt;tr&gt;&lt;th colspan=&quot;2&quot; width=&quot;50%&quot;&gt;1209649194&lt;/th&gt;&lt;th colspan=&quot;2&quot; width=&quot;50%&quot;&gt;aktuell&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;diff-blockheader&quot; colspan=&quot;2&quot;&gt;Zeile 1:&lt;/td&gt;
&lt;td class=&quot;diff-blockheader&quot; colspan=&quot;2&quot;&gt;Zeile 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;====== Compiler ======&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;====== Compiler ======&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;-&lt;/td&gt;&lt;td class=&quot;diff-deletedline&quot;&gt;Die unter [[:Runtime]] entwickelten Funktionen werden benutzt um daraus ein Eigenständigen Compiler zu entwickeln. Da diese Arbeit allerdings sehr aufwendig ist, wird ein voll funktionsfähiger Compiler inklusive Editor noch eine weile auf sich warten lassen. In absehbarer Zeit werden erste Beta Versionen erscheinen die erst mal die einfachsten Scaner und Parser Funktionen demonstrieren. Codegenerierung allerdings wird noch eine Weile dauern, und ist auch abhängig von der Entwicklung der Runtime Prozeduren.&lt;/td&gt;&lt;td&gt;+&lt;/td&gt;&lt;td class=&quot;diff-addedline&quot;&gt;Die unter [[&lt;strong&gt;Runtime&lt;/strong&gt;:Runtime]] entwickelten Funktionen werden benutzt um daraus ein Eigenständigen Compiler zu entwickeln. Da diese Arbeit allerdings sehr aufwendig ist, wird ein voll funktionsfähiger Compiler inklusive Editor noch eine weile auf sich warten lassen. In absehbarer Zeit werden erste Beta Versionen erscheinen die erst mal die einfachsten Scaner und Parser Funktionen demonstrieren. Codegenerierung allerdings wird noch eine Weile dauern, und ist auch abhängig von der Entwicklung der Runtime Prozeduren.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;Das Ziel wäre es am Ende eine gute Basis zu haben auf der ein Compiler soweit entwickelt werden kann, das er Visual-Basic ersetzen könnte. Das heißt das der Compiler alle mathematischen Operationen String und Array unterstützt und Code in eigenständige EXE Dateien compilieren kann.&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;Das Ziel wäre es am Ende eine gute Basis zu haben auf der ein Compiler soweit entwickelt werden kann, das er Visual-Basic ersetzen könnte. Das heißt das der Compiler alle mathematischen Operationen String und Array unterstützt und Code in eigenständige EXE Dateien compilieren kann.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-blockheader&quot; colspan=&quot;2&quot;&gt;Zeile 14:&lt;/td&gt;
&lt;td class=&quot;diff-blockheader&quot; colspan=&quot;2&quot;&gt;Zeile 14:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;-&lt;/td&gt;&lt;td class=&quot;diff-deletedline&quot;&gt; &lt;/td&gt;&lt;td&gt;+&lt;/td&gt;&lt;td class=&quot;diff-addedline&quot;&gt;&lt;strong&gt;\\&lt;/strong&gt; &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;-&lt;/td&gt;&lt;td class=&quot;diff-deletedline&quot;&gt;{{page&amp;gt;:Start#Compiler}}&lt;/td&gt;&lt;td&gt;+&lt;/td&gt;&lt;td class=&quot;diff-addedline&quot;&gt;{{page&amp;gt;:Start#Compiler&lt;strong&gt;&amp;amp;noheader&lt;/strong&gt;}}&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</description>
    </item>
    <item rdf:about="http://runtime-basic.net/Compiler:Optimierung?rev=1180810210&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2007-06-02T20:50:10+02:00</dc:date>
        <title>Compiler:Optimierung</title>
        <link>http://runtime-basic.net/Compiler:Optimierung?rev=1180810210&amp;do=diff</link>
        <description>&lt;table&gt;&lt;tr&gt;&lt;th colspan=&quot;2&quot; width=&quot;50%&quot;&gt;1193225575&lt;/th&gt;&lt;th colspan=&quot;2&quot; width=&quot;50%&quot;&gt;aktuell&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;diff-blockheader&quot; colspan=&quot;2&quot;&gt;Zeile 3:&lt;/td&gt;
&lt;td class=&quot;diff-blockheader&quot; colspan=&quot;2&quot;&gt;Zeile 3:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;Während des Compilierens ist es möglich auf verschiedener Ebene Optimierungen durchzuführen um den erzeugten Code zu beschleunigen. Dabei gibt es verschiedene Möglichkeiten, durch Kürzen von Code, ersetzen durch schnellere arithmetische Operationen, gute Registerverwaltung, verbessern des Speichermanagement usw.&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;Während des Compilierens ist es möglich auf verschiedener Ebene Optimierungen durchzuführen um den erzeugten Code zu beschleunigen. Dabei gibt es verschiedene Möglichkeiten, durch Kürzen von Code, ersetzen durch schnellere arithmetische Operationen, gute Registerverwaltung, verbessern des Speichermanagement usw.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;Hier sind einige Optimierungen gesammelt die man in einem Compiler umsetzen sollte. Einige Optimierungen können auch in einer Compiler-Warnung als Information ausgegeben werden, zB. wenn Variabeln oder Codeteile nicht benutzt und deshalb entfernt werden.&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;Hier sind einige Optimierungen gesammelt die man in einem Compiler umsetzen sollte. Einige Optimierungen können auch in einer Compiler-Warnung als Information ausgegeben werden, zB. wenn Variabeln oder Codeteile nicht benutzt und deshalb entfernt werden.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;-&lt;/td&gt;&lt;td class=&quot;diff-deletedline&quot;&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;-&lt;/td&gt;&lt;td class=&quot;diff-deletedline&quot;&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;-&lt;/td&gt;&lt;td class=&quot;diff-deletedline&quot;&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-blockheader&quot; colspan=&quot;2&quot;&gt;Zeile 49:&lt;/td&gt;
&lt;td class=&quot;diff-blockheader&quot; colspan=&quot;2&quot;&gt;Zeile 46:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;|0 %%^%% A &amp;nbsp;|0 &amp;nbsp;| &amp;nbsp;|&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;|0 %%^%% A &amp;nbsp;|0 &amp;nbsp;| &amp;nbsp;|&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;|1 %%^%% A &amp;nbsp;|1 &amp;nbsp;| &amp;nbsp;|&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;|1 %%^%% A &amp;nbsp;|1 &amp;nbsp;| &amp;nbsp;|&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;-&lt;/td&gt;&lt;td class=&quot;diff-deletedline&quot;&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;-&lt;/td&gt;&lt;td class=&quot;diff-deletedline&quot;&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;-&lt;/td&gt;&lt;td class=&quot;diff-deletedline&quot;&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-blockheader&quot; colspan=&quot;2&quot;&gt;Zeile 67:&lt;/td&gt;
&lt;td class=&quot;diff-blockheader&quot; colspan=&quot;2&quot;&gt;Zeile 61:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;&amp;nbsp;&amp;nbsp;* **Konstantenberechnung:** Alle Konstantenberechnungen können bereist in Compiler berechnet und so zu einer Konstante zusammengefaßt werden.&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;&amp;nbsp;&amp;nbsp;* **Konstantenberechnung:** Alle Konstantenberechnungen können bereist in Compiler berechnet und so zu einer Konstante zusammengefaßt werden.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;&amp;nbsp;&amp;nbsp;* **Inlining:** Prozeduren mit nur kurzem Code können über Inline direkt in den Code eingefügt werden. Statt also alle Werte erst im Stack abzulegen und eine Prozedur über Call aufzurufen, werden die in der Prozedur enthaltenen Codes direkt in die aufrufende Prozedur kopiert. Besonders bei sehr kurzen Berechnungen wie zB. einer Pythagoras Dreiecksberechnung die im Code sehr häufig aufgerufen wird kann dies den Code erheblich beschleunigen da eine ganze Reihe Funktionen wegfallen (PUSH POP CALL RET). Inlining kann über ein Schlüsselwort Deklariert oder auch automatisch vom Compiler durchgeführt werden. Am besten beläßt man einerseits die Prozeduren, fügt sie aber da wo es möglich ist direkt in den Code ein, so können Public Prozeduren auch extern noch erreicht werden.&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;&amp;nbsp;&amp;nbsp;* **Inlining:** Prozeduren mit nur kurzem Code können über Inline direkt in den Code eingefügt werden. Statt also alle Werte erst im Stack abzulegen und eine Prozedur über Call aufzurufen, werden die in der Prozedur enthaltenen Codes direkt in die aufrufende Prozedur kopiert. Besonders bei sehr kurzen Berechnungen wie zB. einer Pythagoras Dreiecksberechnung die im Code sehr häufig aufgerufen wird kann dies den Code erheblich beschleunigen da eine ganze Reihe Funktionen wegfallen (PUSH POP CALL RET). Inlining kann über ein Schlüsselwort Deklariert oder auch automatisch vom Compiler durchgeführt werden. Am besten beläßt man einerseits die Prozeduren, fügt sie aber da wo es möglich ist direkt in den Code ein, so können Public Prozeduren auch extern noch erreicht werden.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;-&lt;/td&gt;&lt;td class=&quot;diff-deletedline&quot;&gt;&amp;nbsp;&amp;nbsp;* **Zwischenspeichern von Werten:** Der Zugriff auf einige Daten kann langsamer sein als auf &lt;strong&gt;Standart &lt;/strong&gt;Daten-&amp;gt;Typen die den Prozessor direkt ansprechen kann (zB. Arrays, besonders wenn sie mehrdimensional oder Dynamisch sind.). Wird erkannt das viele Zugriffe in Berechnungen Verwendet werden kann eine schnellere temporäre Variable verwendet werden. Die &lt;strong&gt;werte &lt;/strong&gt;werden dann zuerst in diese kopiert, de Berechnungen durchgeführt und das Resultat wenn notwendig zurück kopiert. &lt;/td&gt;&lt;td&gt;+&lt;/td&gt;&lt;td class=&quot;diff-addedline&quot;&gt;&amp;nbsp;&amp;nbsp;* **Zwischenspeichern von Werten:** Der Zugriff auf einige Daten kann langsamer sein als auf &lt;strong&gt;Standard &lt;/strong&gt;Daten-&amp;gt;Typen die den Prozessor direkt ansprechen kann (zB. Arrays, besonders wenn sie mehrdimensional oder Dynamisch sind.). Wird erkannt das viele Zugriffe in Berechnungen Verwendet werden kann eine schnellere temporäre Variable verwendet werden. Die &lt;strong&gt;Werte &lt;/strong&gt;werden dann zuerst in diese kopiert, de Berechnungen durchgeführt und das Resultat wenn notwendig zurück kopiert. &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;-&lt;/td&gt;&lt;td class=&quot;diff-deletedline&quot;&gt;&amp;nbsp;&amp;nbsp;* **Variabeln Verschiebung:** Hat der Programmierer übersehen das er innerhalb einer Schleife eine Variabel &lt;strong&gt;zuwies&lt;/strong&gt;, deren Wert sich aber nie ändert, kann diese aus der Schleife nach oben verschoben werden.&lt;/td&gt;&lt;td&gt;+&lt;/td&gt;&lt;td class=&quot;diff-addedline&quot;&gt;&amp;nbsp;&amp;nbsp;* **Variabeln Verschiebung:** Hat der Programmierer übersehen das er innerhalb einer Schleife eine Variabel &lt;strong&gt;zuweist&lt;/strong&gt;, deren Wert sich aber &lt;strong&gt;in der Schleiffe &lt;/strong&gt;nie ändert, kann diese aus der Schleife nach oben verschoben werden.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;&amp;nbsp;&amp;nbsp;* **Schleiffen Ausfalten:** Kurze Schleifen mit wenig Inhalt deren Bereich über Konstanten festgelegt wurden, können ausgefaltet werden. So fallen die Schleifenprüfungen und Sprünge weg. Es muß aber dann auch geprüft werden daß das Laden des Codes nicht mehr Zeit in Anspruch nimmt als der kürzere Schleifencode.&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;&amp;nbsp;&amp;nbsp;* **Schleiffen Ausfalten:** Kurze Schleifen mit wenig Inhalt deren Bereich über Konstanten festgelegt wurden, können ausgefaltet werden. So fallen die Schleifenprüfungen und Sprünge weg. Es muß aber dann auch geprüft werden daß das Laden des Codes nicht mehr Zeit in Anspruch nimmt als der kürzere Schleifencode.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;-&lt;/td&gt;&lt;td class=&quot;diff-deletedline&quot;&gt;&amp;nbsp;&amp;nbsp;* **Schleifenzähler Optimierung:** Wird &lt;strong&gt;festgestellt das ein Ganzzahl &lt;/strong&gt;Schleifenzähler nur &lt;strong&gt;eine Anzahl &lt;/strong&gt;mit Schrittweite=1 durchläuft, und wird der Schleifenzähler weder Innerhalb, noch nach dem verlassen der Schleife gelesen oder geschrieben &lt;strong&gt;wird&lt;/strong&gt;, kann eine simple Abzählschleife umgeformt werden die ECX auf 0 Prüft. Dies ist schneller als eine COM Prüfung. &lt;/td&gt;&lt;td&gt;+&lt;/td&gt;&lt;td class=&quot;diff-addedline&quot;&gt;&amp;nbsp;&amp;nbsp;* **Schleifenzähler Optimierung:** Wird &lt;strong&gt;der &lt;/strong&gt;Schleifenzähler nur &lt;strong&gt;mit Ganzzahlen und &lt;/strong&gt;mit Schrittweite=1 durchläuft, und wird der Schleifenzähler weder Innerhalb, noch nach dem verlassen der Schleife gelesen oder geschrieben, kann eine simple Abzählschleife &lt;strong&gt;LOOPECX &lt;/strong&gt;umgeformt werden die ECX auf 0 Prüft. Dies ist schneller als eine COM Prüfung. &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;-&lt;/td&gt;&lt;td class=&quot;diff-deletedline&quot;&gt;&amp;nbsp;&amp;nbsp;* **Verschachtelte Schleifen:** In &lt;strong&gt;verschachtelte &lt;/strong&gt;Schleifen ist die Innerste Schleifen &lt;strong&gt;deinige &lt;/strong&gt;die am häufigsten verwendet wird, Optimierung muß also von innen nach außen durch die Verschachtelung verlaufen.&lt;/td&gt;&lt;td&gt;+&lt;/td&gt;&lt;td class=&quot;diff-addedline&quot;&gt;&amp;nbsp;&amp;nbsp;* **Verschachtelte Schleifen:** In &lt;strong&gt;verschachtelten &lt;/strong&gt;Schleifen ist die Innerste Schleifen &lt;strong&gt;diejenige &lt;/strong&gt;die am häufigsten verwendet wird, Optimierung muß also von innen nach außen durch die Verschachtelung verlaufen.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;&amp;nbsp;&amp;nbsp;* **Rekursionen zu Iterationen umformen:** Rekursive Algorithmen (Prozedur ruft sich selbst auf) sind in der Regel langsamer als solche die iterativ (durch schleifen) gelöst werden können. Ein oft benutztes Beispiel ist das Berechnen einer Fakultät. Werden solche Rekursionen verwendet könnte ein Compiler diese umformen und daraus iterative Lösungen finden. Das hat mehrere forteile, da die Daten nicht über den Stack abgewickelt werden müssen kann der Speicher besser verwaltet werden, Stack-Überlauf ist nicht mehr so gefährlich, und es fallen die Sprung-Funktionen und Parameterübergaben weg. Dies ist allerdings abhängig vom Algorithmus, ein Quicksort zB. läßt sich auf diese weise nicht optimieren. (Aber eigentlich sind solche Optimierungen Sache des Programmierers, denn dies hat mit Algorithmus-Entwicklung zutun.)&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;&amp;nbsp;&amp;nbsp;* **Rekursionen zu Iterationen umformen:** Rekursive Algorithmen (Prozedur ruft sich selbst auf) sind in der Regel langsamer als solche die iterativ (durch schleifen) gelöst werden können. Ein oft benutztes Beispiel ist das Berechnen einer Fakultät. Werden solche Rekursionen verwendet könnte ein Compiler diese umformen und daraus iterative Lösungen finden. Das hat mehrere forteile, da die Daten nicht über den Stack abgewickelt werden müssen kann der Speicher besser verwaltet werden, Stack-Überlauf ist nicht mehr so gefährlich, und es fallen die Sprung-Funktionen und Parameterübergaben weg. Dies ist allerdings abhängig vom Algorithmus, ein Quicksort zB. läßt sich auf diese weise nicht optimieren. (Aber eigentlich sind solche Optimierungen Sache des Programmierers, denn dies hat mit Algorithmus-Entwicklung zutun.)&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;&amp;nbsp;&amp;nbsp;* **Daten-Typ Optimierung (und Polymorphie Auflösung):** Ist es möglich während der Compilierungszeit Datentypen aufzulösen, können diese durch Datan-Typen Änderung beschleunigt werden. ''Variant'' kann zu Standard Daten-Typ, ''Object'' kann zu Klassename, Fließpunkt kann zu Ganzzahl geändert werden usw. Dabei müssen aber bestimmte Voraussetzungen erfüllt sein.&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;&amp;nbsp;&amp;nbsp;* **Daten-Typ Optimierung (und Polymorphie Auflösung):** Ist es möglich während der Compilierungszeit Datentypen aufzulösen, können diese durch Datan-Typen Änderung beschleunigt werden. ''Variant'' kann zu Standard Daten-Typ, ''Object'' kann zu Klassename, Fließpunkt kann zu Ganzzahl geändert werden usw. Dabei müssen aber bestimmte Voraussetzungen erfüllt sein.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-blockheader&quot; colspan=&quot;2&quot;&gt;Zeile 88:&lt;/td&gt;
&lt;td class=&quot;diff-blockheader&quot; colspan=&quot;2&quot;&gt;Zeile 82:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;Bestimmte Operationen können durch Prozessor-Funktionen oder Assembler Umformungen beschleunigt werden.&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;Bestimmte Operationen können durch Prozessor-Funktionen oder Assembler Umformungen beschleunigt werden.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;Dabei müssen zwei Dinge berücksichtigt werden, nicht nur das die einzelnen Prozessor-Funktionen schneller sind, sondern auch das sie geladen werden müssen. Man kann ein Code auch überoptimieren, in dem man die einzelnen Funktionen zwar beschleunigt, aber der Code als ganzes von der Hardware trotzdem langsamer ausgeführt wird.&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;Dabei müssen zwei Dinge berücksichtigt werden, nicht nur das die einzelnen Prozessor-Funktionen schneller sind, sondern auch das sie geladen werden müssen. Man kann ein Code auch überoptimieren, in dem man die einzelnen Funktionen zwar beschleunigt, aber der Code als ganzes von der Hardware trotzdem langsamer ausgeführt wird.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;-&lt;/td&gt;&lt;td class=&quot;diff-deletedline&quot;&gt;Da sich bei einigen Optimierungen die Strukturen verändern können, kann die Fehlersuche ein Problem darstellen da die Position wo ein Fehler aufgetreten ist nicht mehr exakt festgestellt werden kann, oder die Operation selbst ist nicht mehr die selbe. Während der Entwicklung muß es also auch möglich sein alle Optimierungen auszuschalten. &lt;/td&gt;&lt;td&gt;+&lt;/td&gt;&lt;td class=&quot;diff-addedline&quot;&gt;Da sich bei einigen Optimierungen die Strukturen verändern können, kann die Fehlersuche ein Problem darstellen da die Position wo ein Fehler aufgetreten ist nicht mehr exakt festgestellt werden kann, oder die Operation selbst ist nicht mehr die selbe. Während der Entwicklung muß es also auch möglich sein alle Optimierungen auszuschalten.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;Alle Optimierungen können nur durchgeführt werden wenn der Code zur Compilierungszeit aufgelöst werden kann.&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;Alle Optimierungen können nur durchgeführt werden wenn der Code zur Compilierungszeit aufgelöst werden kann.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-blockheader&quot; colspan=&quot;2&quot;&gt;Zeile 94:&lt;/td&gt;
&lt;td class=&quot;diff-blockheader&quot; colspan=&quot;2&quot;&gt;Zeile 88:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;&amp;nbsp;&amp;nbsp;* **Register mehrfach Beschreibung:** Durch die Codegenerierung ist es möglich das Register mehrfach beschrieben werden bevor sie das erste mal gelesen werden. Alle vorangehenden Zuweisungen können gelöscht werden.&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;&amp;nbsp;&amp;nbsp;* **Register mehrfach Beschreibung:** Durch die Codegenerierung ist es möglich das Register mehrfach beschrieben werden bevor sie das erste mal gelesen werden. Alle vorangehenden Zuweisungen können gelöscht werden.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;&amp;nbsp;&amp;nbsp;* **Parameter Übergabe an Prozeduren über Register:** Normalerweise werden alle Parameter einer Prozeduren in den Stack kopiert und dieser dann so vorbereitet an die Prozedur übergeben. Es ist aber auch möglich Parameter direkt über die Register zu übergeben. Auf diese Weise kann das Umkopieren der Werte in und aus dem Stack beschleunigt werden. (Vorallem sinnvoll wenn sich Inlining nicht lohnt.)&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;&amp;nbsp;&amp;nbsp;* **Parameter Übergabe an Prozeduren über Register:** Normalerweise werden alle Parameter einer Prozeduren in den Stack kopiert und dieser dann so vorbereitet an die Prozedur übergeben. Es ist aber auch möglich Parameter direkt über die Register zu übergeben. Auf diese Weise kann das Umkopieren der Werte in und aus dem Stack beschleunigt werden. (Vorallem sinnvoll wenn sich Inlining nicht lohnt.)&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;-&lt;/td&gt;&lt;td class=&quot;diff-deletedline&quot;&gt;&amp;nbsp;&amp;nbsp;* **Register Sicherung:** Wenn durch die Operationen Register verändert werden, müssen die enthaltenen Werte die noch benötigt werden gesichert werden. Um dies zu vereinfachen wurden einige Register als flüchtig betrachtet, die aufrufende Prozedur ist also Verantwortlich diese zu sichern. Die nicht flüchtigen Register werden dann meisten in der Prozedur auf den Stack gesichert. Dies kann in die Aufrufende Prozedur verschoben werden, da nur diese weis welche Register sie noch braucht. So können überflüssige Sicherungen vermieden werden.\\ Diese Optimierung funktioniert aber nur in einem nach außen Abgeschlossenen Projekt, werden die Prozeduren zB. aus einer DLL extern abgerufen ist es nicht möglich festzustellen welche Regsiter die aufrufende Prozedur sichert, deshalb muß die Sicherung innerhalb der Prozeduren erfolgen.  &lt;/td&gt;&lt;td&gt;+&lt;/td&gt;&lt;td class=&quot;diff-addedline&quot;&gt;&amp;nbsp;&amp;nbsp;* **Register Sicherung:** Wenn durch die Operationen Register verändert werden, müssen die enthaltenen Werte die noch benötigt werden gesichert werden. Um dies zu vereinfachen wurden einige Register als flüchtig betrachtet, die aufrufende Prozedur ist also Verantwortlich diese zu sichern. Die nicht flüchtigen Register werden dann meisten in der Prozedur auf den Stack gesichert. Dies kann in die Aufrufende Prozedur verschoben werden, da nur diese weis welche Register sie noch braucht. So können überflüssige Sicherungen vermieden werden.\\ Diese Optimierung funktioniert aber nur in einem nach außen Abgeschlossenen Projekt, werden die Prozeduren zB. aus einer DLL extern abgerufen ist es nicht möglich festzustellen welche Regsiter die aufrufende Prozedur sichert, deshalb muß die Sicherung innerhalb der Prozeduren erfolgen. &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;-&lt;/td&gt;&lt;td class=&quot;diff-deletedline&quot;&gt;&amp;nbsp;&amp;nbsp;* **Stack-Rahmen:** Normalerweise wird in einer Prozedur ein Stack-Rahmen geschaffen um darin Temporäre Variabeln und Register zu sichern. Dieser kann weggelassen werden wenn weder Temp-Variablen noch Register gesichert werden müssen.  &lt;/td&gt;&lt;td&gt;+&lt;/td&gt;&lt;td class=&quot;diff-addedline&quot;&gt;&amp;nbsp;&amp;nbsp;* **Stack-Rahmen:** Normalerweise wird in einer Prozedur ein Stack-Rahmen geschaffen um darin Temporäre Variabeln und Register zu sichern. Dieser kann weggelassen werden wenn weder Temp-Variablen noch Register gesichert werden müssen. &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;-&lt;/td&gt;&lt;td class=&quot;diff-deletedline&quot;&gt;&amp;nbsp;&amp;nbsp;* **Erweiterte Funktionssätze:** Es ist möglich die neuen modernen Funktionssätze wie MMX SSE 3DNow usw. zu benutzen um Berechnungen zu beschleunigen. Dies ist aber in weites Feld und erfordert Codes an verschiedene Hardware Umgebungen anzupassen damit sie auf allen Systemen lauffähig bleiben. Es handelt sich dann meistens um Vektor-Berechnungen in welchen es möglich ist mehrere Operationen gleichzeitig parallel zu berechnen. Das lohnt sich besonders wenn man große Mengen an Daten gleichförmig berechnen muß (zB. Matrizen). Aus dem Grund werden diese Funktionen auch vorallem im Grafik und Sound Bereich benutzt (MMX -&amp;gt; Multi Media Extension). &lt;/td&gt;&lt;td&gt;+&lt;/td&gt;&lt;td class=&quot;diff-addedline&quot;&gt;&amp;nbsp;&amp;nbsp;* **Erweiterte Funktionssätze:** Es ist möglich die neuen modernen Funktionssätze wie MMX SSE 3DNow usw. zu benutzen um Berechnungen zu beschleunigen. Dies ist aber in weites Feld und erfordert Codes an verschiedene Hardware Umgebungen anzupassen damit sie auf allen Systemen lauffähig bleiben. Es handelt sich dann meistens um Vektor-Berechnungen in welchen es möglich ist mehrere Operationen gleichzeitig parallel zu berechnen. Das lohnt sich besonders wenn man große Mengen an Daten gleichförmig berechnen muß (zB. Matrizen). Aus dem Grund werden diese Funktionen auch vorallem im Grafik und Sound Bereich benutzt (MMX -&amp;gt; Multi Media Extension).&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;-&lt;/td&gt;&lt;td class=&quot;diff-deletedline&quot;&gt;&amp;nbsp;&amp;nbsp;* **Kommutative Optimirung:** Der Assembler erlaubt nur Operationen in welchen das Resultat im ersten Operator gespeichert wird. Deshalb muß eine Operation wie\\ A = B + C\\ zu\\ A = B\\ A += C\\ erweitert werden. Dadurch müssen im Codebaum Zwischenresultate in temporären Variabeln gespeichert werden. Dies kann man aber bei kommutativen (vertauschbaren) Operationen wie + * Add Mul optimieren in dem man die Operanden umkehrt und so die Temporäre Speicherung des Resultats umgeht. &amp;quot;A = C * D + B&amp;quot; ist gleich wie &amp;quot;A = B + C * D&amp;quot;. &lt;/td&gt;&lt;td&gt;+&lt;/td&gt;&lt;td class=&quot;diff-addedline&quot;&gt;&amp;nbsp;&amp;nbsp;* **Kommutative Optimirung:** Der Assembler erlaubt nur Operationen in welchen das Resultat im ersten Operator gespeichert wird. Deshalb muß eine Operation wie\\ A = B + C\\ zu\\ A = B\\ A += C\\ erweitert werden. Dadurch müssen im Codebaum Zwischenresultate in temporären Variabeln gespeichert werden. Dies kann man aber bei kommutativen (vertauschbaren) Operationen wie + * Add Mul optimieren in dem man die Operanden umkehrt und so die Temporäre Speicherung des Resultats umgeht. &amp;quot;A = C * D + B&amp;quot; ist gleich wie &amp;quot;A = B + C * D&amp;quot;.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;&amp;lt;code&amp;gt;&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;&amp;lt;code&amp;gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;-&lt;/td&gt;&lt;td class=&quot;diff-deletedline&quot;&gt;A = B + C * D &lt;/td&gt;&lt;td&gt;+&lt;/td&gt;&lt;td class=&quot;diff-addedline&quot;&gt;A = B + C * D&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;[=] +-- (A)&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;[=] +-- (A)&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-blockheader&quot; colspan=&quot;2&quot;&gt;Zeile 117:&lt;/td&gt;
&lt;td class=&quot;diff-blockheader&quot; colspan=&quot;2&quot;&gt;Zeile 111:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;-&lt;/td&gt;&lt;td class=&quot;diff-deletedline&quot;&gt;Optimieren durch &lt;/td&gt;&lt;td&gt;+&lt;/td&gt;&lt;td class=&quot;diff-addedline&quot;&gt;Optimieren durch&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;A = C * D + B&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;A = C * D + B&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-blockheader&quot; colspan=&quot;2&quot;&gt;Zeile 131:&lt;/td&gt;
&lt;td class=&quot;diff-blockheader&quot; colspan=&quot;2&quot;&gt;Zeile 125:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;A = C&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;A = C&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;A *= D&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;A *= D&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;-&lt;/td&gt;&lt;td class=&quot;diff-deletedline&quot;&gt;A += B &lt;/td&gt;&lt;td&gt;+&lt;/td&gt;&lt;td class=&quot;diff-addedline&quot;&gt;A += B&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-blockheader&quot; colspan=&quot;2&quot;&gt;Zeile 137:&lt;/td&gt;
&lt;td class=&quot;diff-blockheader&quot; colspan=&quot;2&quot;&gt;Zeile 131:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;hier funktioniert diese Optimierung nicht&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;hier funktioniert diese Optimierung nicht&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;-&lt;/td&gt;&lt;td class=&quot;diff-deletedline&quot;&gt;A = B - C * D &lt;/td&gt;&lt;td&gt;+&lt;/td&gt;&lt;td class=&quot;diff-addedline&quot;&gt;A = B - C * D&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;&amp;nbsp;&amp;nbsp;ist nicht gleich wie&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;&amp;nbsp;&amp;nbsp;ist nicht gleich wie&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;A = C * D - B&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;A = C * D - B&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;&amp;lt;/code&amp;gt;&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;&amp;lt;/code&amp;gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;-&lt;/td&gt;&lt;td class=&quot;diff-deletedline&quot;&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;-&lt;/td&gt;&lt;td class=&quot;diff-deletedline&quot;&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;-&lt;/td&gt;&lt;td class=&quot;diff-deletedline&quot;&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</description>
    </item>
    <item rdf:about="http://runtime-basic.net/Compiler:Planung?rev=1219012344&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2008-08-18T00:32:24+02:00</dc:date>
        <title>Compiler:Planung</title>
        <link>http://runtime-basic.net/Compiler:Planung?rev=1219012344&amp;do=diff</link>
        <description>&lt;table&gt;&lt;tr&gt;&lt;th colspan=&quot;2&quot; width=&quot;50%&quot;&gt;1209649452&lt;/th&gt;&lt;th colspan=&quot;2&quot; width=&quot;50%&quot;&gt;aktuell&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;diff-blockheader&quot; colspan=&quot;2&quot;&gt;Zeile 1:&lt;/td&gt;
&lt;td class=&quot;diff-blockheader&quot; colspan=&quot;2&quot;&gt;Zeile 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;-&lt;/td&gt;&lt;td class=&quot;diff-deletedline&quot;&gt;====== &lt;strong&gt;Compiler-&lt;/strong&gt;Planung ======&lt;/td&gt;&lt;td&gt;+&lt;/td&gt;&lt;td class=&quot;diff-addedline&quot;&gt;====== Planung ======&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-blockheader&quot; colspan=&quot;2&quot;&gt;Zeile 73:&lt;/td&gt;
&lt;td class=&quot;diff-blockheader&quot; colspan=&quot;2&quot;&gt;Zeile 73:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;&amp;nbsp;&amp;nbsp;* **Compiler-Tools**: Routinen die ein Compiler unbedingt braucht, also Routinen die der Compilerkern und Codegenerator benötigen, aber unabhängig vom Kern selbst entwickelt werden können.&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;&amp;nbsp;&amp;nbsp;* **Compiler-Tools**: Routinen die ein Compiler unbedingt braucht, also Routinen die der Compilerkern und Codegenerator benötigen, aber unabhängig vom Kern selbst entwickelt werden können.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;-&lt;/td&gt;&lt;td class=&quot;diff-deletedline&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;* **&lt;strong&gt;Zahlenwalnder&lt;/strong&gt;:** Dieser muß fähig sein Dec/Hex/Oct/Bin in die Binärform für Long und Float umzuwandeln und umgekehrt&lt;/td&gt;&lt;td&gt;+&lt;/td&gt;&lt;td class=&quot;diff-addedline&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;* **&lt;strong&gt;Zahlenwandler&lt;/strong&gt;:** Dieser muß fähig sein Dec/Hex/Oct/Bin in die Binärform für Long und Float umzuwandeln und umgekehrt&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;* **Sortieralgos:** Für Arrays/Listen und später auch Trees&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;* **Sortieralgos:** Für Arrays/Listen und später auch Trees&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;* **Tree-System:** Da VB kein Tree-Type kennt muß einer geschaffen werden&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td class=&quot;diff-context&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;* **Tree-System:** Da VB kein Tree-Type kennt muß einer geschaffen werden&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</description>
    </item>
</rdf:RDF>
