Wie Foglio gebaut ist – und warum es dadurch klein und schnell ist

Die meisten modernen Desktop-Apps bringen eine Kopie eines Webbrowsers, eine Java-Laufzeitumgebung oder ein großes plattformübergreifendes Framework mit. Foglio bringt nichts davon mit. Es ist eine native Mac-App in Swift und AppKit; die Tabellen-Engine ist in Rust geschrieben und direkt in die App eingebunden.

Diese Seite erklärt die Architektur zweimal: zuerst in einfachen Worten, dann so genau, dass sich Entwickler im Quellcode zurechtfinden.

Die Kurzfassung

Stell dir Foglio als zwei Teile vor. Der sichtbare Teil (Fenster, Menüs, das Zellraster) ist mit Apples eigenen Werkzeugen geschrieben und sieht deshalb aus und verhält sich wie jede andere Mac-App. Der Teil, der rechnet (Dateien lesen, Formeln verstehen, neu berechnen), ist eine eigene Engine in Rust, einer Sprache, die sehr schnelle, kompakte Programme erzeugt.

Die beiden Teile sprechen über eine kleine, schlichte Schnittstelle miteinander. Dazwischen liegt nichts: kein versteckter Browser, keine virtuelle Maschine, keine Laufzeitumgebung zum Nachladen. Darum ist die ganze App nur 7,5 MB groß, startet in 0,24 s und braucht mit leerem Blatt rund 58 MB Arbeitsspeicher.

Die Mac-App: Swift und AppKit

Die Oberfläche ist in Swift auf AppKit geschrieben, dem Framework hinter dem Finder und den meisten Apps von Apple. Dokumente sind echte macOS-Dokumente, daher funktionieren Zuletzt benutzt, Sichern unter, Zurücksetzen, Duplizieren, Fenster-Tabs, Vollbild, Dunkelmodus, Drucken und PDF-Export wie gewohnt.

Das Blatt selbst ist ein eigenes NSView-Raster, kein Tabellen-Steuerelement. Es fragt die Engine nur nach den sichtbaren Zellen, gebündelt und fertig zum Zeichnen. So bleibt das Scrollen auch bei Hunderttausenden Zeilen flüssig. Diagramme, Bilder und die Bearbeitungsleiste zeichnet die App ebenfalls selbst.

Foglio enthält außerdem einen eigenen Player für EMF- und WMF-Metadateien, das Vektorbildformat älterer Office-Dokumente (ClipArts, MathType-Formeln, eingefügte Visio-Diagramme). Bilder, die andere Mac-Apps als leere Kästen zeigen, werden korrekt gezeichnet und unverändert zurückgespeichert.

Die Engine: Rust und ein gepatchtes IronCalc

Formeln werden von IronCalc geparst und ausgewertet, einer Open-Source-Tabellen-Engine in Rust. Foglio nutzt einen gepatchten Fork von IronCalc 0.9.1, in dem jede Änderung im Repository markiert und dokumentiert ist.

Der Fork ergänzt eine inkrementelle Neuberechnung: Wenn du eine Zelle änderst, werden nur die davon abhängigen Formeln neu berechnet statt der ganzen Arbeitsmappe. In einer Mappe mit 100.000 Zeilen und 300.000 Formeln dauert eine Änderung 16 ms, eine vollständige Neuberechnung 64 ms.

Außerdem ergänzt er indizierte Suchen. Der erste SVERWEIS (VLOOKUP), VERGLEICH oder XVERWEIS auf einen Bereich liest ihn einmal und baut einen Hash-Index auf; jede weitere Suche ist nur noch ein einziger Zugriff. 1.000 exakte SVERWEIS über 10.000 Zeilen brauchten im ursprünglichen IronCalc 1.703 ms, im Fork von Foglio 1,3 ms. Der Fork korrigiert zudem ein Dutzend Funktionen, sodass 191 der 195 Funktionen aus Foglios Kompatibilitätsprüfung in jedem Testfall mit Excel übereinstimmen.

  • Ältere .xls-, binäre .xlsb- und LibreOffice-.ods-Dateien werden mit calamine gelesen, einem schnellen Rust-Reader.
  • CSV- und TSV-Dateien laufen durch einen Rust-Importer, der Zeichensatz, Trennzeichen und Dezimaltrennzeichen erkennt.
  • Formeln, die auf Deutsch, Italienisch, Spanisch oder Französisch eingegeben werden, werden vor dem Speichern in die englische Standardform von Excel übersetzt.

Die Brücke: eine schlichte C-Schnittstelle

Die Rust-Engine wird als statische Bibliothek kompiliert und bietet eine kleine C-Schnittstelle (foglio_core.h): Datei öffnen und speichern, Zelle bearbeiten, einen Block sichtbarer Zellen zurückgeben. Swift ruft sie über einen Bridging-Header direkt auf. Es gibt keine generierten Bindings, keine Frameworks und keine Nachrichten zwischen Prozessen; ein Aufruf der Engine kostet etwa so viel wie ein normaler Funktionsaufruf.

Kein Xcode-Projekt

Foglio wird mit zwei Befehlen gebaut: cargo erstellt die Rust-Bibliothek, swiftc kompiliert die App und linkt sie. Ein Shell-Skript erzeugt eine Universal-App für Apple Silicon und Intel und verpackt sie mit Apples eigenem hdiutil in ein Disk-Image. Du brauchst die Xcode Command Line Tools und Rust; das vollständige Xcode ist nicht nötig.

Weniger Schichten heißt: weniger Fehlerquellen, schnellere Builds und ein Projekt, das jeder von oben bis unten lesen kann.

Getestet mit echten Tastatur- und Mausereignissen

Foglio hat 69 UI-Tests, die die echte App mit echten Tastatur- und Mausereignissen steuern: Formeln tippen, Bereiche ausfüllen, sortieren, widerrufen, Dateien speichern und wieder öffnen. Die Datei-Importer und die Formel-Engine haben eigene Rust-Testsuiten, und ein spezieller Modus prüft jede inkrementelle Neuberechnung gegen eine vollständige.

Warum Foglio dadurch klein und schnell ist

Eine Electron-App enthält eine komplette Kopie des Chromium-Browsers, meist weit über 100 MB, bevor sie überhaupt etwas tut. Eine Java- oder plattformübergreifende Suite bringt ihre Laufzeitumgebung und ihr eigenes UI-Toolkit mit. Foglio enthält nur seinen eigenen Code und nutzt die Frameworks, die auf jedem Mac schon vorhanden sind.

Der Rust-Kern wird mit voller Link-Time-Optimierung kompiliert und ohne Debug-Symbole ausgeliefert. Das Ergebnis ist eine Universal-App mit rund 19 MB auf der Festplatte und 7,5 MB als komprimierter Download, die im Leerlauf 0 % CPU braucht.

Häufige Fragen

Ist Foglio eine Electron- oder Web-App?

Nein. Es ist eine native AppKit-App, geschrieben in Swift. Darin steckt keine Browser-Engine.

Läuft Foglio nativ auf Apple Silicon?

Ja. Foglio ist eine Universal-App mit nativem Code für Apple Silicon (arm64) und Intel (x86_64).

Kann ich Foglio selbst kompilieren?

Ja. Installiere die Xcode Command Line Tools und Rust und führe dann scripts/build.sh aus. Die genauen Befehle stehen in der README.

Fließen die Änderungen an IronCalc zurück ins Original?

Der Fork ist Open Source unter denselben Lizenzen wie IronCalc. Jede Änderung ist mit einem Kommentar Foglio fork: markiert und in third_party/README.md beschrieben, damit sie geprüft und wiederverwendet werden kann.

Probier es mit deinen eigenen Tabellen aus

7,5 MB Download, kostet nichts. Foglio 1.0 ist eine Erstversion: Behalte beim Ausprobieren Sicherungskopien wichtiger Dateien.

Für Mac herunterladenQuellcode auf GitHub ansehen

Kostenlos · macOS 14+ · Apple Silicon & Intel · 7,5 MB