Emacs Lisp

Emacs Lisp (czasami nazywany Elisp) – dialekt języka programowania Lisp wykorzystywany przez edytory tekstu GNU Emacs i XEmacs, używany do pisania programów, które wspomagają pisanie tekstu oraz rozszerzają możliwości edytora Emacs. Większość funkcji edytora Emacs została napisana w Emacs Lisp-ie, oprócz między innymi niskopoziomowych funkcji wyświetlających oraz interpretera i kompilatora Emacs Lisp, które zostały napisane w języku C.

Programy w Emacs Lisp są zapisywane jako pliki tekstowe z rozszerzeniem „.el”, ale istnieje możliwość kompilacji za pomocą wbudowanego kompilatora do kodu bajtowego, dzięki czemu osiąga się wyższą wydajność. Kod bajtowy jest zapisywany w plikach z rozszerzeniem „.elc”. Programy Emacs Lisp-a są zapisywane w bibliotekach i ładowane w razie potrzeby[1], najczęściej są to tzw. tryby Emacsa[2], uruchamiane dla określonych typów plików dodające nowe funkcje, skróty klawiszowe czy kolorowanie składni[3]. W Emacsie naciśnięcie dowolnego klawisza powoduje wywołanie jakiejś funkcji napisanej w Emacs Lispie[4], którą można dowolnie zmieniać. Plik konfiguracyjny Emacsa jest programem napisanym w Emacs Lispie.

Emacs Lisp charakteryzuje się dynamicznym wiązaniem zmiennych. Posiada wbudowany garbage collector. W odróżnieniu od innych dialektów lispa nie optymalizuje wywołań z rekurencją ogonową[5].

Cechy dialektu

  • dynamiczne wiązanie zmiennych
  • deklaracje funkcji przez defun jak w Common Lisp
  • dwie przestrzenie nazw (funkcje i zwykłe zmienne) jak w Common Lips

Przykład kodu

(defun square (x) (* x x))
(defun call (fn num) (funcall fn num))
(call #'square 10)
;; 100

Zobacz też

Przypisy

  1. Richard Stallman: EMACS: The Extensible, Customizable Display Editor. 1981. (ang.).
  2. Rozdział „Major Modes” w Oficjalnym Podręczniku GNU Emacsa. (ang.).
  3. Oficjalny Podręcznik GNU Emacsa. (ang.).
  4. zazwyczaj jest to funkcja self-insert-command, która wstawia ostatni wciśnięty znak do bufora
  5. Lisp: Common Lisp, Scheme, Clojure, Emacs Lisp (hyperpolyglot.org). (ang.).

Linki zewnętrzne

  • Emacs na stronie projektu GNU (ang.)
  • R. Chassell, "Programming in Emacs Lisp, an Introduction"
  • B. Lewis, D. LaLiberte, R. Stallman, "GNU Emacs Lisp Reference Manual"
  • Emacs Wiki