名前つき関数を陳腐化している(obsolete)とマークすることができます。これはその関数が将来のある時点で削除されるかもしれないことを意味します。陳腐化しているとマークされた関数を含むコードをバイトコンパイルしたとき、Emacsは警告を発します。またその関数のヘルプドキュメントは表示されなくなります。他の点では陳腐化した関数は他の任意の関数と同様に振る舞います。
関数を陳腐化しているとマークするもっとも簡単な方法は、その関数のdefun
定義に(declare (obsolete
…))
を配置することです。declare
フォームを参照してください。かわりに以下で説明しているmake-obsolete
関数を使うこともできます。
make-obsolete
を使用してマクロ(マクロを参照)を陳腐化しているとマークすることもできます。これは関数のときと同じ効果をもちます。関数やマクロにたいするエイリアスも、陳腐化しているとマークできます。これはエイリアス自身をマークするのであって、名前解決される関数やマクロにたいしてではありません。
この関数はobsolete-nameを陳腐化しているとマークする。obsolete-nameには関数かマクロを命名するシンボル、または関数やマクロにたいするエイリアスを指定する。
current-nameがシンボルならobsolete-nameのかわりにcurrent-nameの使用を促す警告メッセージになる。current-nameがobsolete-nameのエイリアスである必要はない。似たような機能をもつ別の関数かもしれない。current-nameには警告メッセージとなる文字列も指定できる。メッセージは小文字で始まりピリオドで終わること。nil
も指定でき、この場合には警告メッセージに追加の詳細は提供されない。
引数whenは最初にその関数が陳腐化する時期を示す文字列 — たとえば日付やリリース番号を指定する。
この便利なマクロは関数obsolete-nameを陳腐化しているとマークして、それを関数current-nameのエイリアスにする。これは以下と等価:
(defalias obsolete-name current-name doc) (make-obsolete obsolete-name current-name when)
加えて陳腐化した関数にたいする特定の呼び出し規約をマークできます。
この関数はfunctionを呼び出す正しい方法として、引数リストsignatureを指定する。これによりEmacs Lispプログラムが他の方法でfunctionを呼び出していたら、Emacsのバイトコンパイラーが警告を発する(それでもコードはバイトコンパイルされる)。whenにはその変数が最初に陳腐化するときを示す文字列(通常はバージョン番号)を指定する。
たとえば古いバージョンのEmacsでは、sit-for
には以下のように3つの引数を指定していた
(sit-for seconds milliseconds nodisp)
この関数は以降期間中は3つの引数を許容するものの、古い呼び出し規約は以下のように廃止される:
(set-advertised-calling-convention 'sit-for '(seconds &optional nodisp) "22.1")
この関数の代替えとなるのがadvertised-calling-convention
におけるspecのdeclare
です。declare
フォームを参照してください。