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
[edytuj | edytuj kod]- 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
[edytuj | edytuj kod](defun square (x) (* x x))
(defun call (fn num) (funcall fn num))
(call #'square 10)
;; 100
Zobacz też
[edytuj | edytuj kod]Przypisy
[edytuj | edytuj kod]- ↑ Richard Stallman: EMACS: The Extensible, Customizable Display Editor. 1981. (ang.).
- ↑ Rozdział „Major Modes” w Oficjalnym Podręczniku GNU Emacsa. (ang.).
- ↑ Oficjalny Podręcznik GNU Emacsa. (ang.).
- ↑ zazwyczaj jest to funkcja self-insert-command, która wstawia ostatni wciśnięty znak do bufora
- ↑ Lisp: Common Lisp, Scheme, Clojure, Emacs Lisp (hyperpolyglot.org). (ang.).