![]() | |
パラダイム | 関数型プログラミング, メタプログラミング, リフレクション |
---|---|
登場時期 | 1985年 |
開発者 | GNUプロジェクト |
最新リリース | 29.4/ 2024年6月22日 |
型付け | 動的、強い型付け |
影響を受けた言語 | Common Lisp、Maclisp |
プラットフォーム | クロスプラットフォーム |
ライセンス | GPLv3 |
ウェブサイト | gnu.org/emacs |
拡張子 | .el, .elc, .eln |
関連言語 | LISP |
Emacs Lispは、GNU EmacsとXEmacsテキストエディタ(この記事ではあわせてEmacsと呼ぶ)で使われているプログラミング言語LISPの方言である。Emacs組込みの編集機能のうち、C言語で書かれた部分以外のほとんどを実装するのに使われている。また、利用者によるEmacsのカスタム化や拡張のために用いられる。
Emacs Lispはスクリプト言語として使うこともでき、コマンド行や実行ファイルからも呼び出せる。バッファや移動コマンドのような編集機能はバッチ・モードで動作する。
Emacs Lispは、ときに「ELisp」や「Elisp」と書かれたり呼ばれたりすることもある (両表記ともGNU Emacs Lispリファレンス・マニュアル[1]に見える)。機能でいうと、Common Lispの影響も後にみえるが、Maclisp方言と強い関係がある [2]。プログラミング・メソッドとして、手続き指向プログラミングと関数的プログラミングに対応している。関数をデータとして扱えるなどの強力な機能のため、(TECOを拡張言語としていたオリジナルの) Emacsの書換えにあたり、リチャード・ストールマンは拡張言語としてLISPを選んだ。ストールマンがGosling EmacsをGNU Emacsへ書き換えていたとき、Common Lisp とは違ってSchemeは既に存在した。しかし、当時のワークステーションの性能は貧弱であったため、Schemeよりももっと簡単に最適化のできるLISP方言を開発する必要があった[3]。
Emacs Lispは、アプリケーション・プログラミングで使われる方言群であるSchemeやCommon Lispとは根本的に異なる。大きな違いの1つは、デフォルトで字句的スコープではなく動的スコープを使うことである。つまり、呼出し関数の局所変数は、呼び出された関数からも参照できるが、定義時のスコープで参照しているのではない。
Emacs Lispを書くのがGNU Emacsをカスタム化する唯一の方法ではない。バージョン20以降のGNU Emacsには「カスタム化」機能があり、利用者はグラフィカルなインターフェースによって一般的なカスタム化変数を設定できる。「カスタム化」機能は、比較的単純なものに制限されているものの、利用者の代わりにEmacs Lispのコードを書いてくれる。利用者全員がEmacsの提供する高度な拡張性が必要なわけではないし、またそういう人は自分でEmacs Lispのコードを書けるものだ。