Emacs Lispeln

Emacs Lispeln ist ein Dialekt der Lispeln-Programmiersprache, die vom GNU Emacs und XEmacs Textaufbereiter verwendet ist (auf den sich dieser Artikel insgesamt als "Emacs" beziehen wird). Es wird verwendet, um den grössten Teil der Redigieren-Funktionalität durchzuführen, die in Emacs, der Rest eingebaut ist, der in C wird schreibt (wie der Lispeln-Dolmetscher selbst ist). Benutzer von Emacs schreiben allgemein Emacs-Lispeln-Code, um Emacs kundengerecht anzufertigen und zu erweitern.

Emacs Lispeln kann auch als eine scripting Sprache, viel wie die Unix Bach-Schale, Perl, Pythonschlange, scsh, oder GNU-Hinterlist fungieren. Ebenso mit jenen Sprachen kann es von der Befehl-Linie oder über eine rechtskräftige Datei genannt werden. Seine Bearbeitungsfunktionen, wie Puffer und Bewegungsbefehle, ergänzen die Eigenschaften des Lispelns und der Arbeit in der Gruppe-Weise.

Einige Menschen kennzeichnen Emacs-Lispeln als Elisp auf die Gefahr zur Verwirrung mit einem älteren Lispeln-Dialekt ohne Beziehung mit demselben Namen. In Bezug auf Eigenschaften ist es nah mit dem Dialekt von Maclisp mit etwas späterem Einfluss vom Allgemeinen Lispeln verbunden. Es unterstützt befehlende und funktionelle Programmierverfahren. Richard Stallman hat Lispeln als die Erweiterungssprache für seinen gewählt, schreibst Emacs um (das Original hat TECO als seine Erweiterungssprache verwendet) wegen seiner starken Eigenschaften, einschließlich der Fähigkeit, Funktionen als Daten zu behandeln. Verschieden vom Allgemeinen Lispeln hat Schema in der Zeit bestanden Stallman schrieb Gänschen Emacs ins GNU Emacs um, aber er hat beschlossen, es wegen seiner verhältnismäßig schlechten Leistung an Arbeitsplätzen nicht zu verwenden, und er hat einen Dialekt entwickeln wollen, den er gedacht hat, würde leichter optimiert.

Der in Emacs verwendete Dialekt von Lisp unterscheidet sich wesentlich von den moderneren Allgemeinen Lisp und für die Anwendungsprogrammierung allgemein verwendeten Schema-Dialekten. Zum Beispiel: Emacs Lisp verwendet dynamisches aber nicht lexikalisches Spielraum standardmäßig. D. h. in lokalen Variablen in einer Benennen-Funktion kann von einer genannten Funktion ohne vorübergehende Zeigestöcke oder Verweisungen, unabhängig davon Verweise angebracht werden, ob die genannte Funktion innerhalb des Anrufers definiert wurde.

Andere Methoden bestehen, um GNU Emacs abgesondert vom Schreiben des Emacs Lispelns kundengerecht anzufertigen. Seit der Version 20 GNU hat Emacs eine "Kundengerecht anfertigen" Möglichkeit eingeschlossen, die Benutzern erlaubt, allgemeine Anpassungsvariablen durch eine grafische Schnittstelle zu setzen. "Fertigen Sie" Arbeiten "Kundengerecht an", indem Sie Emacs Lispeln-Code für den Benutzer schreiben, und wird auf relativ einfache Anpassungen beschränkt. Nicht jeder Benutzer braucht den vollen Grad der von Emacs angebotenen Dehnbarkeit; diejenigen, die tun, können ihren eigenen Emacs-Lispeln-Code schreiben.

Beispiel

Hier folgt einem einfachen Beispiel einer im Emacs-Lispeln geschriebenen Erweiterung von Emacs. In Emacs kann das Redigieren-Gebiet in getrennte Gebiete genannt Fenster, jeder gespalten werden, einen verschiedenen Puffer zeigend. Ein Puffer ist ein Gebiet des ins Gedächtnis von Emacs geladenen Textes (vielleicht von einer Datei), der in ein Textdokument gespart werden kann.

Benutzer geben den "" Befehl aus, ein neues Fenster zu öffnen. Das führt die Emacs-Lispeln-Funktion. Normalerweise, wenn das neue Fenster erscheint, zeigt es denselben Puffer wie der vorherige. Nehmen Sie an, dass wir es den folgenden verfügbaren Puffer möchten zeigen lassen. Um das zu tun, schreibt der Benutzer den folgenden Emacs-Lispeln-Code, entweder in einer vorhandenen Emacs-Lispeln-Quelldatei oder in einem leeren Puffer von Emacs:

(defun mein Spalt-Fenster func

(interaktiver)

(Spalt-

Fenster vertikal

)

(Satz-Fensterpuffer (folgendes Fenster) (anderer - Puffer)))

(globaler Satz-Schlüssel "\C-x2" 'mein Spalt-Fenster func)

</Quelle>

Die erste Behauptung definiert eine neue Funktion, der (die alte fensterspaltende Funktion) ruft, dann dem neuen Fenster sagt, einen anderen Puffer zu zeigen. Die zweite Behauptung, bindet die Tastenfolge "C-x 2" zur neuen Funktion wieder.

Jedoch besteht ein leichterer Weg, um das zu schreiben. Emacs Lispeln hat eine starke Eigenschaft genannt Rat, der dem Benutzer erlaubt, Streifbänder um vorhandene Funktionen zu schaffen, anstatt ihr eigenes zu definieren. Mit dem Rat kann der obengenannte Code wie folgt wiederdurchgeführt werden:

(defadvice "Spalt-Fenster vertikal

"

(nach meinem Fensteraufspalten-Rat zuerst aktivieren)

(Satz-Fensterpuffer (folgendes Fenster) (anderer - Puffer)))</Quelle>

Das weist an, um den benutzergelieferten Code durchzuführen, wann auch immer es, vor der Durchführung des Rests der Funktion genannt wird.

Diese Änderungen wirken in der Codeeinschätzungszeit, mit (zum Beispiel) den Befehl "". Es ist nicht notwendig, sogar Emacs wiederzukompilieren oder wiederanzufangen. Wenn der Code in Emacs "init Datei" gespart wird (gewöhnlich eine Datei genannt "" im Hausverzeichnis des Benutzers), dann wird Emacs die Erweiterung das nächste Mal laden, wenn es anfängt. Sonst werden die Änderungen verloren, wenn der Benutzer über Emacs herrscht.

Quellcode

In Dateisystemen besteht Emacs Lispeln-Code als Klartext-Dateien mit der Dateinamennachsilbe "" (eine allgemeine Ausnahme, die init Datei des Benutzers, häufig erscheint oder ist als "" erschienen.), Wenn die Dateien geladen werden, liest ein Dolmetscher-Bestandteil des Programms von Emacs und analysiert die Funktionen und Variablen grammatisch, sie im Gedächtnis versorgend. Sie sind dann für andere Bearbeitungsfunktionen, und für Benutzerbefehle verfügbar. Funktionen und Variablen können frei modifiziert und umgeladen werden.

Um Zeit und Speicherraum zu sparen, lädt viel von der Funktionalität von Emacs nur nach Bedarf. Jeder Satz von optionalen Zusatzeinrichtungen wird durch eine Sammlung des Codes von Emacs genannt eine "Bibliothek" durchgeführt. Zum Beispiel gibt es eine Bibliothek, um Schlüsselwörter im Programm-Quellcode und eine Bibliothek hervorzuheben, für das Spiel von Tetris zu spielen. Jede Bibliothek wird mit einer oder mehr Emacs-Lispeln-Quelldateien durchgeführt.

Entwickler von Emacs schreiben bestimmte Funktionen in C. Das sind "Primitive", auch bekannt als "eingebaute Funktionen" oder "subrs". Obwohl Primitive aus dem Lispeln-Code genannt werden können, können sie nur modifiziert werden, indem sie die C Quelldateien und das Wiederkompilieren editieren. Im GNU Emacs sind Primitive als Außenbibliotheken nicht verfügbar; sie sind ein Teil von rechtskräftigem Emacs. In XEmacs ist das Laufzeitladen solcher Primitiven mit der Unterstützung des Betriebssystems für die dynamische Verbindung möglich. Funktionen können als Primitive geschrieben werden, weil sie zu Außendaten und Bibliotheken zugreifen müssen, die nicht sonst vom Emacs-Lispeln verfügbar sind, oder weil sie häufig genug genannt werden, dass die vergleichende Geschwindigkeit von C gegen das Emacs-Lispeln einen lohnenden Unterschied macht.

Jedoch, weil Fehler im C-Code zu Segmentationsübertretungen oder zu feineren Programmfehlern leicht führen können, die den Redakteur zertrümmern, und weil das Schreiben C Code, der richtig mit dem Emacs-Lispeln-Müllmann aufeinander wirkt, fehlbar ist, werden relativ wenige Funktionen als Primitive durchgeführt.

Byte-Code

"Byte-Kompilation" kann weiter die Leistung des Emacs-Lispeln-Codes vergrößern. Emacs enthält einen Bearbeiter, der Emacs-Lispeln-Quelldateien in eine spezielle Darstellung bekannt als bytecode übersetzen kann. Emacs Lispeln bytecode Dateien hat die Dateinamennachsilbe "". Im Vergleich zu Quelldateien, bytecode Dateien laden schneller, besetzen weniger Raum auf der Platte, verwenden weniger Gedächtnis, wenn geladen, und laufen schneller.

Bytecode läuft noch langsamer als Primitive, aber Funktionen geladen als bytecode können leicht modifiziert und umgeladen werden. Außerdem, bytecode Dateien sind mit der Plattform unabhängig. Der Emacs mit Emacs verteilte Standardlispeln-Code wird als bytecode geladen, obwohl die zusammenpassenden Quelldateien gewöhnlich für die Verweisung des Benutzers ebenso zur Verfügung gestellt werden. Benutzergelieferte Erweiterungen werden normalerweise nicht Byte-kompiliert, wie sie weder als groß noch als rechenbetont intensiv sind.

Spracheigenschaften

Namentlich führt das Paket "der Kl." eine ziemlich große Teilmenge des Allgemeinen Lispelns durch.

Gebrauch von Emacs Lisp dynamisch, nicht statisch (oder lexikalisch), Spielraum. Wenn ein Programmierer eine Variable im Rahmen einer Funktion erklärt, ist es für aus dieser Funktion genannte Unterprogramme verfügbar. Ursprünglich war das als eine Optimierung beabsichtigt; lexikalischer scoping war noch ungewöhnlich und der unsicheren Leistung. Dynamischer scoping ist auch gemeint geworden, um größere Flexibilität für Benutzeranpassungen zur Verfügung zu stellen. Jedoch hat dynamischer scoping mehrere Nachteile. Erstens kann es zu Programmfehlern in großen Programmen wegen unbeabsichtigter Wechselwirkungen zwischen Variablen in verschiedenen Funktionen leicht führen. Zweitens, auf Variablen unter zugreifend

dynamischer scoping ist allgemein langsamer als unter lexikalischem scoping. Infolgedessen sind Pläne dem Bekehrten Emacs Lisp zu lexikalischem scoping gemacht worden, obwohl das noch nicht getan worden ist. Das Makro im Paket "der Kl." stellt wirklich wirksames lexikalisches Spielraum Programmierern von Emacs Lisp zur Verfügung, aber während `Kl.' weit verwendet wird, wird selten verwendet. Variablen, die damit gebunden sind, werden nie veröffentlicht, selbst wenn sie nie verwendet werden. Jedoch wird die Unterstützung für lexikalischen bindings im Stamm von Emacs (24) zur Verfügung gestellt und kann durch das Setzen der Datei lokale Variable aktiviert werden.

Emacs Lispeln (verschieden von einigen anderen Lispeln-Durchführungen) tut Optimierung des Schwanz-Anrufs nicht. Ohne das kann Schwanz recursions schließlich führen, um Überschwemmung aufzuschobern.

Die apel Bibliothek hilft im Schreiben tragbaren Emacs-Lispeln-Codes.

Kommentare

Links


Ellen van Langen / Edward Bulwer-Lytton, 1. Baron Lytton
Impressum & Datenschutz