Wichtige Erkenntnisse
1. Emacs: Ein mächtiger, erweiterbarer Texteditor mit einer treuen Anhängerschaft
Emacs überstrahlt alle anderen Editierprogramme in etwa so, wie die Mittagssonne die Sterne. Es ist nicht nur größer und heller; es lässt einfach alles andere verschwinden.
Unvergleichliche Vielseitigkeit. Emacs ist mehr als nur ein Texteditor; es ist eine vollständige Computerumgebung. Mit über 1,1 Millionen Zeilen Emacs Lisp-Code bietet es Funktionen, die von grundlegender Textbearbeitung über das Debuggen von Programmen, das Lesen von E-Mails, das Durchsuchen von Verzeichnissen bis hin zum Lösen symbolischer Algebra-Probleme reichen.
Einzigartiges Benutzererlebnis. Im Gegensatz zu traditionellen Editoren ist Emacs darauf ausgelegt, einmal gestartet und dann dauerhaft ausgeführt zu werden. Benutzer können mehrere Dateien innerhalb einer einzigen Sitzung bearbeiten und ihre Arbeit jederzeit zugänglich halten. Die Benutzeroberfläche basiert auf drei Schlüsselkonzepten:
- Frames: Emacs' Begriff für Fenster in einer grafischen Benutzeroberfläche
- Windows: Unterteilungen von Frames zur Anzeige von Inhalten
- Buffers: Container für bearbeitbaren Text, der mit Dateien verknüpft sein kann oder nicht
Alles ist bearbeitbar. Eine der mächtigsten Funktionen von Emacs ist, dass fast alle Inhalte, einschließlich Hilfenachrichten, Suchergebnisse und Verzeichnislisten, in bearbeitbaren Buffern präsentiert werden. Dies ermöglicht es den Benutzern, Informationen flexibel zu manipulieren und wiederzuverwenden, was Emacs besonders für komplexe Textmanipulationsaufgaben geeignet macht.
2. Emacs-Architektur: Model-View-Controller-Muster mit Lisp im Kern
Die Architektur von Emacs folgt dem weit verbreiteten Model-View-Controller-Muster für interaktive Anwendungen.
Architektonische Aufschlüsselung. Die Architektur von Emacs kann in drei Hauptkomponenten unterteilt werden:
- Model: Der Buffer, der Text und zugehörige Metadaten enthält
- View: Die Redisplay-Engine, die für die Aktualisierung des Bildschirms verantwortlich ist
- Controller: Emacs Lisp-Code, der Benutzereingaben verarbeitet und das Modell manipuliert
Buffer als Modell. Das Herzstück des Emacs-Modells ist der Buffer, eine einfache flache Zeichenkette mit Zeilenumbrüchen, die Zeilenenden markieren. Buffer unterstützen verschiedene Operationen:
- Einfügen und Löschen von Text
- Extrahieren von Abschnitten als Zeichenketten
- Suchen nach exakten Zeichenketten oder regulären Ausdrücken
- Unterstützung für mehrere Zeichensätze
- Undo-Logging zum Rückgängigmachen von Änderungen
Automatische Neudarstellung. Die View-Komponente von Emacs, die Redisplay-Engine, aktualisiert die Anzeige automatisch ohne explizite Anweisungen vom Lisp-Code. Dies vereinfacht die Entwicklung von Erweiterungen, da Programmierer sich auf die Manipulation des Modells konzentrieren können, ohne sich um die Anzeigeaktualisierungen kümmern zu müssen.
3. Emacs Lisp: Der Motor, der die Erweiterbarkeit und Anpassung von Emacs antreibt
Emacs Lisp ist interaktiv. Sie können Definitionen und Ausdrücke in einen Emacs-Buffer eingeben und sofort auswerten.
Mächtige Erweiterungssprache. Emacs Lisp ist der Kern der Erweiterbarkeit von Emacs. Es bietet mehrere Schlüsselfunktionen:
- Geringe Bürokratie: Kleine Anpassungen können leicht in die .emacs-Datei eingefügt werden
- Interaktive Entwicklung: Änderungen können vorgenommen und ausgewertet werden, ohne Emacs neu zu starten
- Erstklassige Bürgerrechte: Vom Benutzer geschriebener Lisp-Code hat denselben Zugriff und dieselben Privilegien wie eingebauter Code
- Vollständige Programmiersprache: Geeignet zum Schreiben großer, komplexer Programme
- Sicherheit: Fehlerhafter Lisp-Code kann Emacs nicht zum Absturz bringen, was Experimente fördert
- Einfache Dokumentation: Funktionen können Docstrings enthalten, die sofortige Hilfe bieten
Nachteile und Kompromisse. Trotz seiner Leistungsfähigkeit hat Emacs Lisp einige Einschränkungen:
- Kein Modulsystem: Namenskonventionen werden verwendet, um Konflikte zwischen Paketen zu vermeiden
- Globale Sichtbarkeit: Alle Funktionen in einem Paket sind für andere Pakete sichtbar
- Kein Objektsystem: Dies kann bestimmte Programmierparadigmen schwieriger machen
4. Creeping Featurism: Eine Stärke, keine Schwäche im Design von Emacs
Der Creeping Featurism von Emacs ist eine direkte Folge seiner Architektur.
Feature-Wachstumszyklus. Die Architektur von Emacs fördert das organische Wachstum von Funktionen:
- Einfache Implementierung neuer Ideen aufgrund niedriger Einstiegshürden
- Persönliche Anpassungen werden in .emacs-Dateien hinzugefügt
- Beliebte Anpassungen wachsen zu teilbaren Paketen heran
- Die besten Pakete werden in die Standard-Emacs-Distribution aufgenommen
Komplexitätsmanagement. Trotz der ständigen Hinzufügung von Funktionen gelingt es Emacs, unüberschaubar zu werden:
- Die Komplexität der Benutzeroberfläche wird gemildert, indem Benutzer Funktionen nach und nach entdecken können
- Die Wartbarkeit wird erhalten, indem Emacs als Sammlung von Paketen und nicht als monolithisches Ganzes behandelt wird
- Die Lisp-Sprache fungiert als Abstraktionsgrenze, die es dem Kern-C-Code ermöglicht, sich weiterzuentwickeln, ohne die Kompatibilität zu brechen
Community-getriebene Entwicklung. Das Wachstum der Emacs-Funktionen ist weitgehend ein Basisprozess, der die Interessen und Bedürfnisse der Benutzer widerspiegelt. Dies stellt sicher, dass neue Funktionen wirklich nützlich und gut getestet sind, bevor sie Teil der Standarddistribution werden.
5. Emacs vs. andere Architekturen: Eclipse und Firefox als Vergleiche
Die Architektur von Eclipse ist nichts, wenn nicht offen, da Plug-ins nahezu alle wesentlichen Funktionen bereitstellen.
Eclipse: Mächtig, aber komplex. Eclipse bietet eine Plug-in-Architektur, die umfangreiche Funktionen bietet, aber auch Nachteile hat:
- Die Entwicklung von Plug-ins ist nicht sicher; Fehler können das gesamte System zum Absturz bringen
- Das Schreiben von Plug-ins erfordert den Umgang mit komplexen Schnittstellen
- Es ist erheblicher Boilerplate-Code erforderlich, selbst für einfache Erweiterungen
Firefox: Ein Mittelweg. Die Architektur von Firefox weist einige Ähnlichkeiten mit Emacs auf:
- Verwendet JavaScript, eine interpretierte, dynamische Sprache wie Emacs Lisp
- Bietet automatische Anzeigeverwaltung
- Ermöglicht die inkrementelle Entwicklung von Erweiterungen
Der Vorteil von Emacs. Die Architektur von Emacs bietet eine einzigartige Kombination aus Leistung und Einfachheit:
- Sichere Ausführungsumgebung für Erweiterungen
- Niedrige Einstiegshürde für einfache Anpassungen
- Fähigkeit, zu komplexen, voll funktionsfähigen Erweiterungen zu skalieren
- Konsistente Schnittstelle für sowohl eingebaute als auch benutzererstellte Funktionen
6. Die Macht der Komponierbarkeit in Benutzeroberflächen
Wie einfach ist es, die Ergebnisse eines Befehls als Eingabe für einen anderen zu verwenden? Komponieren die Befehle der Benutzeroberfläche miteinander? Oder haben die Ergebnisse eine Sackgasse erreicht, sobald sie angezeigt wurden?
Komponierbare Schnittstelle von Emacs. Emacs zeichnet sich dadurch aus, dass Benutzer Befehlsausgaben kombinieren und wiederverwenden können:
- Alle Inhalte werden in bearbeitbaren Buffern präsentiert
- Standard-Textbearbeitungsbefehle gelten für alle Arten von Inhalten
- Ergebnisse eines Befehls können leicht als Eingabe für einen anderen dienen
Vorteile der Komponierbarkeit. Dieser Ansatz bietet mehrere Vorteile:
- Erhöhte Flexibilität bei der Interaktion mit Daten
- Fähigkeit, komplexe Workflows aus einfachen Bausteinen zu erstellen
- Fördert Experimente und die Entdeckung neuer Nutzungsmöglichkeiten des Systems
Vergleich mit anderen Systemen. Viele moderne Anwendungen, wie Microsoft Visual Studio, schränken ein, wie Benutzer mit Befehlsausgaben interagieren können, was die Flexibilität und das Potenzial für kreative Problemlösungen reduziert.
7. Bewertung von Erweiterungssprachen und Plug-in-Funktionen
Ist die Erweiterungssprache der bevorzugte Weg, um die meisten neuen Funktionen für die Anwendung zu implementieren?
Schlüsselfragen zur Bewertung der Erweiterbarkeit:
- Welche Schnittstellen stehen Plug-ins zur Verfügung?
- Sind sie einfach genug, um eine schnelle Entwicklung zu ermöglichen?
- Können Entwickler auf einer hohen Abstraktionsebene arbeiten, die nahe am Problemfeld liegt?
- Wie wird die Anwendungsdaten vor fehlerhaftem Plug-in-Code geschützt?
Ansatz von Emacs. Emacs glänzt in diesen Bereichen:
- Emacs Lisp wird zur Implementierung der meisten neuen Funktionen verwendet
- Die Erweiterungssprache hat vollen Zugriff auf die interne Funktionalität von Emacs
- Die hohe Abstraktionsebene von Lisp ermöglicht eine schnelle Entwicklung
- Der Lisp-Interpreter bietet eine sichere Ausführungsumgebung
Bedeutung erstklassiger Erweiterungen. Wenn die Erweiterungssprache einer Anwendung leistungsfähig und gut integriert ist, fördert dies ein lebendiges Ökosystem benutzererstellter Funktionen. Dies kann zu unerwarteten und innovativen Anwendungen der Anwendung führen, weit über das hinaus, was ihre ursprünglichen Entwickler sich vorgestellt haben.
Zuletzt aktualisiert:
Rezensionen
Beautiful Architecture erhält gemischte Bewertungen, mit einer durchschnittlichen Bewertung von 3,41/5. Einige Leser loben die umfassende Abdeckung der Prinzipien der Softwarearchitektur und die realen Beispiele aus verschiedenen Projekten. Sie schätzen die Einblicke von Branchenexperten und die Breite der behandelten Themen. Andere hingegen kritisieren das Buch wegen seiner uneinheitlichen Qualität der Kapitel, des Mangels an Diagrammen und der teilweise veralteten Informationen. Einige finden es zu wortreich ohne ausreichende Tiefe, während andere die vielfältigen Perspektiven auf architektonische Entscheidungen und Kompromisse schätzen. Die Struktur des Buches, bestehend aus unabhängigen Essays, wird sowohl als Stärke als auch als Schwäche angesehen.