Wie die Teile zusammenpassen

Drei Wege zur selben Engine. Zwischen zwei Kästen gibt es immer zwei Pfeile: Der erste sagt, was verlangt wird, der zweite, was zurückkommt.

1. Der Kunde geht über uns

Der Kunde erzeugt sein Dokument auf einer Seite dieser Website und erhält das fertige PDF zurück. Er installiert nichts und schreibt kein Programm: Alles zwischen dem Editor und den erzeugten Seiten läuft hier.

  1. Der Kunde im Webbrowser des Kunden
  2. Der Online-Editor eine Seite dieser Website: Legen Sie ein Konto an, und Sie können sie nutzen
  3. Die Website läuft bei HQF Development
  4. Der Server läuft bei HQF Development
  5. Die Bibliothek im Server

Was der Kunde bezahlt: ein Abonnement, monatlich.

2. Der Kunde hat Server und Bibliothek gekauft

Der Kunde schreibt das JSON selbst und sendet es an den Server, der bei ihm läuft. Es gibt keinen Editor und keine Website davor: Die Kette beginnt in seinem eigenen Programm und verlässt nie seine Maschinen.

  1. Das eigene Programm des Kunden läuft beim Kunden
  2. Der Server läuft beim Kunden
  3. Die Bibliothek im Server

Was der Kunde bezahlt: Server und Bibliothek, einmalig gekauft.

3. Die Bibliothek allein

Ein Entwicklungsteam schreibt Rust oder Python und ruft die Bibliothek direkt aus seinem Programm auf. Kein JSON reist irgendwohin, und es gibt keinen Server: Die Bibliothek ist Teil dessen, was es gebaut hat.

  1. Ein Entwicklungsteam schreibt Rust oder Python
  2. Die Bibliothek in dem Programm, das sie geschrieben haben

Was der Kunde bezahlt: die Bibliothek, einmalig gekauft.

Dasselbe Dokument, auf drei Arten verlangt: was sich unterscheidet und warum

Rust und Python sind derselbe Code. Das Modul, das ein Python-Programm aufruft, ist eine dünne Hülle um die Bibliothek selbst, also gibt es zwischen beiden nichts, was sich unterscheiden könnte, und nichts tut es: Jedes hier veröffentlichte Dokument kommt aus beiden Byte für Byte identisch heraus. Der dritte Weg ist überhaupt kein Aufruf. Er ist eine über das Netz gesendete Beschreibung, die der Server liest und selbst setzt — und dort trennen sich die Bytes.

  • Jedes ausgearbeitete Beispiel dieser Website ist zweimal geschrieben, einmal in Rust und einmal in Python. Führen Sie beide aus, und heraus kommt exakt dieselbe Datei. 908 fertige Dokumente werden daran gemessen, und jedes Mal erneut, wenn sich irgendetwas ändert.
  • 120 dieser Dokumente werden zusätzlich auf einem dritten Weg verlangt, als über das Netz an den Server gesendete Anfrage. Bei 6 davon kommt streng dieselbe Datei zurück.
  • Bei den anderen 114 kommt für das Auge dasselbe Dokument zurück: Jede Seite stimmt Punkt für Punkt überein, und der Text, den Sie markieren und kopieren können, ist Wort für Wort derselbe. Die Dateien selbst unterscheiden sich, und zwar nur, weil die beiden Arten der Anfrage dieselben Zeichenanweisungen in anderer Reihenfolge schreiben.
  • Jedes dieser Paare trägt eine eigene Datei, die angibt, an welche der beiden es sich hält und warum es die strengere nicht einhalten kann. Jeder Unterschied wird benannt und erklärt.

Was sich unterscheidet

  • Ein ausgearbeitetes Beispiel ruft die Bibliothek von Hand auf: Es nennt die Schrift, dann den Punkt, an dem die Zeile beginnt, und zeigt die ganze Zeile in einem einzigen Textoperator. Ein über das Netz beschriebener Textblock nennt zuerst seinen Punkt, dann seine Farbe, und zeigt jeweils ein Wort — denn der Server bricht die Zeile um und verteilt die Wörter, und er muss frei sein, jedes Wort dorthin zu setzen, wohin der Umbruch es setzt.
  • Ein Rechteck, das die Bibliothek zeichnet, ist ein einziger Rechteckoperator. Dasselbe Rechteck, über das Netz beschrieben, sind seine vier Ecken, als geschlossener Pfad abgelaufen.
  • Eine Reihe von Strichen, die die Bibliothek zeichnet, ist ein einziger Pfad. Über das Netz beschrieben, ist jeder Strich ein eigenes Element.

Was woran gemessen wird

In allen drei Fällen landet die Farbe an denselben Punkten. Verglichen wird nicht der Wortlaut der Anweisungen, sondern was sie zeichnen: Beide Dateien werden Seite für Seite gerendert und Punkt für Punkt miteinander verglichen, beide werden an den Schriften gemessen, mit denen ihre Seiten tatsächlich zeichnen, und jedes Wort an dem Kasten, den es einnimmt.

Was dieser Vergleich nicht liest: die Bytes eines Streams, ein Objekt, das keine Seite zeigt, und einen Farbunterschied, der zu klein ist, um einen Punkt zu verschieben. Ein Paar, das am Bild statt an den Bytes gemessen wird, trägt eine eigene Datei, neben seiner Anfrage veröffentlicht, die nennt, was zwischen ihm und der strengeren Übereinstimmung steht.