Emacs Lisp

描主宇田川浩行K#F85E
下描き希哲6年(2012年)
11月05日 18:05
利承
ライセンス
希哲館普通利承(KULクール

Emacs Lisp は,主に Emacs(#F85E/A-AD94) の諸機能を実装するために用いられるプログラミング言語である。Lisp 方言。

Emacs 使用者は設定からモードの記述までをこの言語で行う。

「なんでもメモ」サービス、デライト公開中!
https://dlt.kitetu.com

一覧

=}{*}

初歩的なところでいえば,= を入力した時に前後に半角スペースを入れるだけなら簡単だが,== や === にも対応する必要がある。だから,文脈に応じてどう置換するか設定出来るようにしておく。後は引用符や括弧類を自動的に閉じたり適切にポイントを移動させたり。といっても,慣れた言語なら数時間で出来る作業なのだが,久しぶりの Emacs Lisp だったから復習に時間がかかった。

=}{*}

Emacs Lisp で,希哲館交度(コーディング)規約に合わせた入力支援機能を作り込んでみたのだが,意外と変則的な対応が必要で時間がかかった。こういうのは公開されているものを使っても細かい挙動に不満が出てきたりするので仕方ない。

=}{*}

=}{*}

私の場合,C++ 互換),νSJavaScript 互換),Bash スクリプトEmacs Lisp が今のところそれに当たる。どれも捨てられないし,これ以上分散させたくない。

=}{*}

きっちりしたことは C++(系言語)で書いて,欲しい駒手(コマンド)があったら適当にシェルスクリプトで作ってみて,選り手(エディタ)の機能は Emacs Lisp で書いて,派手なことは JavaScript(系言語)でやる。というのが今は理想形かもしれない。

=}{*}

C++, シェル(Bash)スクリプト, Emacs Lisp, JavaScript が私の中で四大論組言語になってるな。というかこの辺極めると大抵のことは自分で何とかなる。

=}{*}

最近,EmacsEmacs Lisp を勉強し直しているので,いっそのことマニュアル翻訳してしまおうかと思っている。

=}{*}

ただ,Emacs Lisp の場合,良くも悪くも名前が硬直的でどこから参照しても呼び方は大体同じなので,さほどこの技術の活かしどころは無いかもしれない。

=}{*}

要はこれと同じことを Emacs Lisp でもしたい。最初は docstring で我慢するかと思っていたのだが,あれとこれとはちょっと意味合いが違う。

https://mn.kitetu.com/media/0RYpoBXAaxjDPdQQtjQ

=}{*}

込め言(コメント)の自由度が低い Emacs Lisp で,マクロを使った込め言記法を考えていた。例えば,

(fn arg1 arg2)

という函数呼び出しに

(: fn "this is a test function" arg1 arg2)

という込め言が出来ると,知番付け識別子Emacs Lisp でも使える。

=}{*}

流石に最新版では削除されてるか。

=}{*}

ただこの Emacs Lisp マニュアル,「譜類(ファイル)名は13文字以下にすること」などと書いてある代物なので字句通りに受け取るのもあれだ。

=}{*}

「変数名」と書いてあるので,乗算の * 函数や特殊形式である let* は例外ということなのか。

=}{*}

久しぶりに Emacs Lisp のマニュアルを全体的にざっと眺めたのだが,「* を使うような名前は整合性を損うので使わないでね」みたいなことが書いてあった。使うけど。

=}{*}

例えば,「バッファの最初から位置10までを取り出して引用符で囲む」ことを Emacs Lisp では

(concat "'" (buffer-substring (point-min) 10) "'")

などと書く。これを

(*cat "'" (*buf (*bgn) 10) "'")

と書けたらどれだけ楽か。

=}{*}

Emacs は沈みゆく船,Emacs Lisp はその演心(エンジン)だ。伝統に固執して消えるくらいなら,改革を断行した方が良い。

=}{*}

昔から Emacs Lisp なんてそういうものだと言われても,新しく入ってきた人間がこれを見てどう思うか考えてみれば,Emacs 衰退といわれる一因がここにあるのは疑いようがない。

=}{*}

もちろん長い歴史がある以上,歴史的経緯や試行錯誤の跡があるのは仕方ないのだが,それにしても Emacs Lisp がひどいと思うのは,例えば keyboard と kbd,define と def といった表記の一貫性の無さ,やたら長くて説明的な名前と LISP 由来の一見意味不明な略語の混在,そもそも語と意味の整合性が取れてないこともしばしば。

=}{*}

誰でも一目見れば分かるであろう Emacs Lisp の困ったところに,命名が悪すぎるということがある。冗長だがそのかわり分かりやすいわけではなく,整合性も無い。これを交度英語(Code English)で, などと調和するように整理していく。

=}{*}

また Emacs Lisp を本格的に書くようになって,この言語の便利さと醜さを同時に再確認した。とりあえず「μLisp」(ミューリスプ)として,μS(ミューズ,JavaScript 拡張)でも成功した手法で語彙改良に乗り出すことにした。昔同じ構想はあったのだが,当時とは経験が違う。

=}{*}

Emacs Lisp を弄っていて,今はっと気付いたのだが,デルンの操作感と LISP の操作感は妙に似ている。デルンにおける輪郭LISP におけるリストなのかもしれない。これは結構重要な発見だと思う。

=}{*}

私はずっと Emacs Lisp を毛嫌いしていたのだが,それが,昔かなり凝ったことをしようとして,入り組んだ交度(コード)を書いていたからだと気付いた。自分がこんなにスラスラ Emacs Lisp を読めるとも書けるとも思わなかった。

12
出力論組プログラム虎哲*イチ 1.01
制作・運営:希哲社
© K1-13 (2007-2019) KiTetuSha