名前付き関数を廃止済みとしてマークできます。これは、将来的にその関数が削除される可能性があることを意味します。これにより、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)
さらに、関数の特定の呼び出し規約を廃止済みとしてマークすることもできます:
この関数は、引数リスト signature を function の正しい呼び出し方として指定します。これにより、Emacsバイトコンパイラは、function をそれ以外の方法で呼び出している Emacs Lisp プログラムに遭遇するたびに警告を出力します(ただし、コードのバイトコンパイルは引き続き許可されます)。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
declare 仕様があります。declare 形式を参照してください。