Hier noch ne umsetzung des FC übersetzers. Da sie etwas anders als Falo's
dem ganzen zu verstehen.
Hier ist die fünfte Betafreigabe der bevorstehenden 4,20 Version von PureBasic. Es wird länger, wie erwartet, und wir möchten einige Zeit verbringen, warum zu erklären. Schnellen Sie nicht aus, es wird wahrscheinlich das letzte Beta sein, wenn alles gut geht. Hier ist die Geschichte:
Zuerst wurde 4,20 dazu bestimmt zu sein ein und nur Befehl EW ' freigeben. Also wurden keine großen Probleme vorausgesehen, wie wir nicht am Compiler oder Debugger arbeiten. Besser wurden die meisten neuen Bibliotheken schon geschrieben, wie wir oft zusätzliche interresting Arbeit machen, wenn wir Fehler in Ordnung bringen, wird zu langweilig (wir beziehen die neue Bibliothek nicht in den Freigabebaum ein, so die Bibliothek kann maturate pacefully). So gut, dass so weit 2 Monate nach der 4,10 Freigabe ein neues Beta die Erde schlug. Und jetzt wurden Dinge ein bisschen komplexer.
Wir stoßen wieder ein LccWin32 weist Fehler auf/Beschränkung so wir entschieden, dass es Zeit war, in VisualC ++ 2005 umzustellen. Diese Auswahl wurde für serveral zu Gründen gemacht:
1) es ist der 'offizielle' C/C++ Compiler auf Windows
2) es ist frei (wir verwenden die ausgezeichnete 'ausdrückliche' Auflage)
3) es produzieren sehr guten Code (viel besser als lcc - manche, in denen libs 50-100 % gewann, sausen gerade und tauschen den Compiler)
4) es hat eine X64 Version auch, so dass wir trinken einen direkten Anschluss zu 64 Bits Fenster ohne zu viel Theater (wenigstens für die Bibliotheken)
5) aufweisen Fehler frei (wenigstens auf der Compilerseite)
So dass wir begannen so mit Migration all der Bibliotheken und Compilerbibliotheken (SystemBase, StringManager, usw..) Einige von ihnen verwendeten lcc Inline-ASM, so brauchten eine ziemliche Arbeit, um sie zur Arbeit zu haben. VC ++ ist auch pingeliger und Tonnen von Achtung erscheint und brauchte eine Korrektur. Außerdem aktivierten wir die 64 Bits Übertragbarkeitsprüfung und unsere Konsole wurden bestimmt überflutet. Denken Sie, als, wenn wir die ganze commandset, es Auswirkung tousand von Dateien alle umstellen, die das makefiles braucht, um usw. bearbeitet zu werden, außer, wie Sie können, zu verstehen, es für die Besten ist. Wir brachten mehrere Wochen später alles dazu, gut aufzubauen, und, da Sie es rieten, waren die 64 kompilierenden Bits (fast), auch arbeitend. Es war die Basis, die Arbeit für den berühmten X64 Compiler zu beginnen.
Wir, obwohl wir, waren mit diesem fertig, aber eine fremde VC8 Optimierung beeinflusste die Art, wie PureBasic Zeichenfolgenfunktionen aufrief, (PureBasic nahm an, als die auf dem Stapel für die Funktionen übermittelten Argumente nie von einer Funktion C modifiziert würden (und es der Fall mit lcc und gcc ist). Aber es keine klaren Informationen über dieses gibt, und VC8 verwenden die Stapelparameter tatsächlich als Aushilfssekretärinnenbereich, wenn erforderlich). So wurde eine Compileränderung gebraucht, um das in Ordnung zu bringen, nach vielen investiigation (wir bekamen wahlfreie Systemabstürze auf einigen Funktionen).
Ein zwischen, wir sahen uns mit einigen Regressionen konfrontiert, so dass wir viel mehr einheitliche Tests geschrieben haben, um das commandset zu Änderungen robuster zu machen. Diese laufen mit Hilfe des 'PureUnit' von Timo (Fr34k) entwickelten Hilfsprogramms, das wird, bald zu seinem Weg im offiziellen PB Paket gemacht, da es wirklich eine große Hilfe ist, sicherzustellen, dass sich ein Modul verhält, wie auf jedem plateform erwartet.
Nun, da all die Bibliotheken und Hilfeprogramme mit VC8 kompiliert wurden, konnten wir den Compiler selbst nicht mit Hilfe von Lcc lassen. Also begannen wir mit der Migration auch. Die Gewinne für das kompilieren Zeit war gut (10-30%ig), aber wir mussten ein bisschen hereinlegen VC8, um eine alte VC Laufzeit dll (MSVCRT.dll) statt die neuen VC8 eins zu verwenden, da ihm die Box nicht ausgehen würde, ohne die VC8 Laufzeiten auszuliefern. Google half hier.
Auf einem anderen Thema färbt CVS und ersetzte überall durch SVN. Wir stellten das libs Repository vor einiger Zeit um, aber der Compiler und interne Hilfsprogramme verwendeten immer noch dieses alte alte CVS. Die Migration war nicht sehr glatt, da das CVS Repository auf einem NT war, basierter Computer, während das Script die Migration machen musste, war auf Linux. Nach einigen Drehungen funktionierte es schließlich. So SVN überall. Und es ist Weg besser ehrlich.
Timo wollte dem IDE einen Porträtierer hinzufügen, so dass er es tat. Und er machte es gut. So es remainded ich, als ich es nicht tat, porträtierte den Compiler, da eine Weile und es ziemlich lustig sein konnten, zu tun. Ich versuchte, einen guten Porträtierer auf Windows (irgendjemandem) zu finden, aber nur die Kostspieligen zu gründen, quantifizieren (und die Demoversion zeigte sogar nur API-Aufruf mit VC8 ablauffähig, dunno wenn es auf Absicht ist oder wenn es ein Fehler ist). So dass ich es schoss meine Linux Box und mein gebrauchtes gprof und der Linux Compiler. Ich verwendete den IDE Quellencode als Vergleichspunkt (60 000 Zeilen.) Und hier, die Katastrophe: 23 millions stricmp Aufruf, der beim Suchen eines Tokens (wie Konstante, Struktur, Prozedur, Funktionen, Makrousw.) aufgerufen wird. Scheint, wie meine alten Suchtabellen hier leiden. Sicher die Bewohner haben fast 8000 Konstanten, und die Suchtabelle war Weg zu klein. Ich beschloss, das mit wirklicher Hashübersicht zu ändern. Der Gewinn war beeindruckend, jetzt sind nur 500 000 Aufrufe zu stricmp gemacht. Die ganze Verarbeitungszeit des Quellencodefalls von 3500 ms zu 500 ms auf meinem Computer herunter. Diese Optimierung ist verfügbar im Beta 5, so wenn Sie ein großes Projekt haben, Sie können den Differenzoperator fühlen.
Wir wollten die meisten wichtigen übrigen Fehler auch seit der letzten 4,10 Version (und sogar zuvor) angehen, so dass wir verbringen einige ziemliche Zeit, auf diese Art (auf den 3 OSes) festzumachen. Dies führte mich dazu, das 'QuadUnit' zu überarbeiten, welches wird verwendet, um basierten Innenhof zu manipulieren und auszuführen, Betrieb. Die für PB 4,00 entwickelte war gut, aber Weg zu komplex, und ein Fall war wirklich schwer zu bearbeiten. So dass ich das ganze Design vereinfachte und wieder codierte einzeln gibt Teil ein. Diese Änderung ist auch in Beta 5, so zögert nicht, Fehler aufzulisten, wenn vorhanden. Wenigstens werden Fehler alle, von denen der Innenhof berichtete, jetzt in Ordnung gebracht. Es sollte Nein haben oder sehr wenig Regression, wie alle fixierten Fehler sind, Teil der Compilereinheit testet (jed in Ordnung gebrachte Compilerfehler bekommen einen neuen Eintrag in der Regressionstestsuite).
In der Tat fügten wir hinzu, dass zu viel für einen Alleinstehenden Version, aber hey befiehlt, wir sind Größenwahnsinnige. Auf diese Art wir bekommenes plently macht fehlerhaft Berichte über diese (logisch da diese neuen Bibliotheken nicht trivials waren). Dank an Sie an alle für die Berichte und die Geduld.
Wie wir nicht aufhören können, wenn wir an einigen frischen Materialien arbeiten müssen, begannen wir mit den 64 Bits Version von PureBasic und die MacOS X x86 Version. Man konnte denken, als die MacOS X x86 Version nur eine Angelegenheit wäre, ein Kompilieren, aber Sie konnten nicht so falsch haben. OS X x86 ABI ist einfach fürchterlich und muss eigentliches strick alignement überall in den Puffer stellen (auf 16 Byte Grenzen) welchem die Windows/Linux Version tut nicht requiers. Wenn der Stapel falsch ausgerichtet ist, es manchmal arbeitet, manchmal nicht, sehr schwer führen, um Fehler zu verfolgen. So ist der Compiler überarbeitet worden, um Stapelausrichtung alles über dem Code zu bearbeiten. Außerdem ist FASM nicht auf OS X x86 verfügbar, so dass wir beschlossen, all die Baugruppenbibliotheken (verbundene Liste, misc usw.) auf NASM umzustellen. Wirklich ist der Compiler modifiziert worden, um NASM kompatiblen Code statt FASM auszugeben. Auf die x64 Seite, die Arbeit ist noch härter gewesen, da die Baugruppe selbst nicht das Gleiche ist. Nun, sind beide, ziemlich gut zu kommen, und der öffentliche Test kommen bald.
Die Letzten, aber nicht die wenigsten, vielsten neuesten Befehle bedeutet viel Dokument zu schreiben. Dies braucht viel Zeit, wie wir es in 3 Sprachen tun, wie Sie wissen. Das Beta 5 kommt mit dem Dokument in 3 langages für alle neuen Befehle.
Genehmigt, so dass Sie das Beta 5 auf Ihrem Konto ergreifen und es testen können. Das Beta für Linux und OS X sind bereit auch, aber wir warten ein bisschen, bevor wir sie veröffentlichen, (zu sehen, ob es keine größeren Marotten gibt. Und btw überprüfen, wenn Sie das Beta 4 verwendeten, Ihr 'Aushilfssekretärin' Verzeichnis, wie ein böser Fehler nicht die ganze PB Aushilfssekretärin entfernte, die dirs und es einer Stelle nehmen konnten.