A Riddle Wrapped in a Mystery

中身はエニグマ・Emacs

Emacs 24.3 雑感

Emacs 24.3 リリース直後に山本光晴さんがMac用のパッチを公開してくださり、 それをEmacsのソースコードにあてたgitレポジトリを公開 してくれている方 もいる。

% git clone https://github.com/railwaycat/emacs-mac-port
% cd emacs-mac-port
% ./configure --with-mac --enable-profiling --enable-mac-app
% make -j CC="/usr/bin/gcc -std=gnu99" CFLAGS=-g3 bootstrap

以下雑感。

cl-lib

cl.el は従来、Emacsの内部関数と衝突するため、標準配布パッケージではマ クロ以外の利用が禁止されている。Emacs 24.3の cl-lib パッケージは、 clの関数の名前空間をEmacsから分離して提供する。

cl-lib を使えば、一般のパッケージで堂々とcl 関数を利用できる。ただし、 例えば remove-if 関数は、 cl-remove-if と先頭に “cl-” をつける。

Emacsとclで関数名が衝突するのは、clの便利な関数をEmacs本体がサブセット の形で取り込んでいった( dolist など)から。clパッケージの誕生から20年、 ようやく安心して共存できるようになった。

Emacs 24.2 以前のユーザでも cl-lib が利用できるよう、互換パッケージが MELPAに用意されている。逆に Emacs 24.3 ユーザはこの cl-lib をインストー ルしてはいけない。

clのマクロは相変わらず、 (eval-when-compile (require 'cl)) とすれば 利用できる。

pcase.el

Emacs 24.2 から導入された pcase が最近、どんどん使われている。やはり cconv.el でその威力で知った人が多かったのか。

pcase の単純な使い方として、文字列版 case として使う方法がある。

従来の case 文は以下のように eq でしか比較できないけど、

(case var
  ('symb1 ....)
  ('symb2 ....)
  ....)

pcase 文は equal での比較ができるので、以下のような分岐が書ける。

(pcase var
  ("str1" ....)
  ("str2" ....)
  ....)

汎変数

Emacs 本体に、汎変数が導入され、 setf もEmacs本体に組み込まれた。

従来の変数や setq が、シンボルを変数としたのに対して、汎変数やsetfは構 造を変数にする。構造を作ったり (construct) 、構造を分解することが統一 表記で記述できるので、上手く使えば簡潔でわかりやすいelispが書ける。

全体としてみると

今回のリリースはバグ修正(特にメモリ関係)が多く、目立つ機能はあまり入っ ていない。特に多言語機能。MULE が6.0(花散里)になって、ちょうど10年に なる。

ただし汎変数は非常に興味深いので、後日追記予定。