
Ich verstehe, dass es zum Zeitpunkt der Entwicklung von TeX keinen einheitlichen Standard für Gleitkommaberechnungen gab. Aber heute gibt es IEEE 754. Warum wird das von keiner TeX-Variante unterstützt?
Zugegeben, es gibt LuaTeX, aber IEEE 754 war schon lange vorher populär, also ist die Frage berechtigt.
Antwort1
Die Beantwortung einer solchen Frage ist schwierig, da Aufzeichnungen für „Warum nein“ normalerweise weniger leicht zu finden sind als für „Warum“. Wir können jedoch eine vernünftige Ereigniskette rekonstruieren.
Knuth schrieb TeX, um ein bestimmtes Problem zu lösen: den SchriftsatzDie Kunst der Computerprogrammierung. Obwohl er TeX Turing-vollständig gemacht hat, ist sein Modell zur Erstellung von Dokumenten sehr darauf ausgerichtet, dass die TeX-Eingabe dem Schriftsatz sehr nahe kommt: Betrachtet man die Quelle fürDas TeXbookBeispielsweise ist klar, dass es einen Ansatz gibt, bei dem Informationen „aufgelöst“ werden. Knuths Anwendungsfälle sind außerdem größtenteils nicht diejenigen, bei denen Dinge wie eine FPU zum Einsatz kommen könnten. Es ist daher nicht überraschend, dass er TeX in diesem Bereich nicht erweitert hat.
(Dies ist ein ebenso guter Punkt wie jeder andere, um die Abwärtskompatibilität zu erwähnen. Das Hinzufügen neuer Grundelemente birgt immer das Potenzial, etwas zu beschädigen, wie einige Benutzer dies zweifellos \fpexpr
selbst definiert haben. Das größere Risiko bei einem archivstabilen Produkt wie TeX90 besteht jedoch darin, dass jede Änderung an anderer Stelle neue Fehler mit sich bringen kann: „Never change a running system“ ist hier die Leitidee.)
Alle Motorenentwickler nach Knuth hatten bestimmte Themen, die sie interessierten. Entscheidend ist, dass dies in der Regel Probleme sind, die wirkippenaußerhalb des Satzes selbst leicht zu lösen. Die Arbeit mit Gleitkommazahlen fällt nicht wirklich in diesen Bereich: Bei „ernsthaften“ Dingen kann man ohnehin davon ausgehen, dass die Vorverarbeitung in einem Spezialwerkzeug erfolgt.
Wenn wir uns die großen Anstrengungen bei der Entwicklung von Motoren ansehen, können wir feststellen, dass das Hinzufügen einer FPU als spezifisches Ziel unwahrscheinlich war. Betrachtet man die Ideen in ungefähr chronologischer Reihenfolge
- e-TeX fügt Ideen hinzu, die sehr allgemein sind und die TeX-Programmierung unterstützen (
\protected
neue Registerbereiche,usw.), die auf bestehenden Ideen in TeX90 aufbauen. Entscheidend ist hier, dass while\numexpr
und so weiter hinzugefügt wurden, sie bieten einige Operatoren (+
,-
,*
,/
,(
,)
), wobei nur Klammern nicht direkt auf bestehende Primitive abgebildet werden. Eine FPU muss viel mehr abdecken - e-TeX fügt auch Code hinzu, der dem Schriftsatz 'nahe' ist, z. B. die Erweiterung der Hurenkinder-/Schlusskinderkontrolle auf mehrere Zeilen, das Hinzufügen von
\middle
,usw.: alles sehr weit entfernt von der benötigten FPU-Unterstützung - pdfTeX hat die direkte PDF-Ausgabe hinzugefügt und obwohl es auch verschiedene Utility-Erweiterungen enthält, handelt es sich bei den meisten davon um triviale Darstellungen von Ideen aus Support-Bibliotheken (z. B. verstrichene Zeit).
- XeTeX (und frühere Projekte) erweitert TeX um die Unterstützung von Unicode: konzentriert sich auf den Zeichenbereich und enthält Ideen für den Umgang mit einer Reihe von Skripten
- XeTeX fügt auch Unterstützung für Systemschriftarten hinzu: auch hier kein Link zur FPU-Arbeit
- LuaTeX erfüllt die oben genannten Anforderungen und stellt die internen Komponenten von TeX mithilfe von Lua zur Verfügung: Das Hinzufügen einer FPU ist eine Folge der Integration der letzteren, stellt jedoch keinen Haupttreiber dieser Bemühungen dar.
Insgesamt können wir also feststellen, dass es für die Leute, die tatsächlich an der Engine arbeiten, vor LuaTeX keine offensichtliche Möglichkeit gab, eine FPU hinzuzufügen. Darüber hinaus gab es von der Benutzergemeinschaft wenig Druck. Man kann eine Reihe von ungefähren Operationen in Makros durchführen, siehe beispielsweise das trig
Paket, das die Unterstützung von Floats für den allgemeinen Schriftsatz ermöglicht. Komplexere Arbeiten werden am besten als Aufgabe eines Spezialwerkzeugs betrachtet: Das Setzen ansprechender Ergebnisse ist großartig, aber wenn Sie mehr Analysen durchführen möchten, benötigen Sie wahrscheinlich einen interaktiven Ansatz. Pakete wie pgfplots
machen es einfacher, TeX für diese Art von Arbeit zu verwenden (das ist mein Arbeitsablauf), aber im Vergleich zu den komplexen Herausforderungen beim Schriftsatz, die man ansprechen könnte, ist die FPU-Unterstützung eine ziemliche Nische.
(Ich denke, es ist auch erwähnenswert, dass die Implementierung einer vollständigen Palette von FP-Funktionen ohne Bibliotheksunterstützung nicht trivial wäre: Ich spreche aus Berufserfahrung l3fp
. Für Experten in der Engine-Entwicklung dürfte diese Arbeit nicht sehr attraktiv sein: Sie auf der Makroebene durchzuführen, ist eine interessante intellektuelle Herausforderung!)
Antwort2
Es läuft darauf hinaus, die heilige Kuh der Abwärtskompatibilität zu töten, was Donald Knuth selbst am besten in dem Video erklärt, aufDie Bedeutung der Stabilität für TeX.