BLOGTIMES
2013/12/23

Deprecated と Obsolete

  english  programming 
このエントリーをはてなブックマークに追加

プログラミングしていて API を眺めていると、よく出てくるのが"Deprecated""Obsolete"

どちらも特定の API が古くなって新規に使うことが「推奨されない」、もしくは既に廃止済みになっていて「使うことができない」ことを表していますが、一度も英和辞典を引いたことがなかったので、ちょっと調べてみることに。ちなみに僕は前者が非推奨、後者が廃止という意味だと思っていましたが、元の意味は全然違いました

deprecateの意味 - 英和辞典 Weblio辞書

  • 1 〈…を〉非難する.
  • 2 〈…に〉反対を唱える.
  • 3 〈…を〉軽視する.

obsoleteの意味 - 英和辞典 Weblio辞書

  • 1a すたれた,もはや用いられない.
  • b 時代遅れの,旧式の.
  • 2 【生物】 退化した,痕跡(こんせき)だけの.

この意味だとどちらが非推奨で、どちらが廃止かというのもハッキリわからないですね。
例えば助動詞の使い方は RFC だと RFC 2119*1*2で厳密に定義されていたりするわけですが、Deprecated と Obsolete にはそういうのはないのかといろいろリファレンスを読み解いてみました。

Mozilla の JavaScript は区別しているみたい

まず MDN の JavaScript の部分に下記の定義があることを発見。これによると deprecated は現在は使うことができるけど、将来的には取り除かれることが予定されていて、使うと警告が出る。obsolete は完全に取り除かれてしまっていてもはや使うことができないという定義のようです。これは僕が認識していた定義と同じ。

Deprecated and obsolete features - JavaScript | MDN

These deprecated features can still be used, but should be used with caution because they are expected to be removed entirely sometime in the future. You should work to remove their use from your code.
These obsolete features have been entirely removed from JavaScript and can no longer be used as of the indicated version of JavaScript.

Java は基本的に deprecated というみたい

Java はハッキリ書かれてませんが、java.lang.Deprecated*3 アノテーション (@Deprecated) の説明には下記の説明があります。

Deprecated (Java Platform SE 7 )

注釈 @Deprecated の付いたプログラム要素は、一般に危険であったり、より適切なほかのプログラム要素で代用できることもあり、プログラマには使用を勧められないプログラム要素です。推奨されていないプログラム要素が使用されている場合、あるいは推奨されているコードにおいてオーバーライドされている場合、コンパイラが警告を発します。

また 「Deprecated API」*4「非推奨のAPI」*5 と訳されています。一方、 java.util.Dictionary*6 では obsolete という記述もみられますね。廃止済みのものはコンパイルエラーになるので、区別する必要がないということでしょうか。

.NET は obsolete というみたい

.NET ではリファレンスに obsolete と deprecated は同じ意味という記述があるので、基本的には区別はしてないみたいです。

What's Obsolete in the .NET Framework Class Library

The terms obsolete and deprecated have the same meaning when applied to the types and members of the .NET Framework.

ただ、obsolete-as-warningobsolete-as-error という区別が紹介されているので、基本的には obsolete と呼ぶみたいです。

API を廃止する

-廃止予定警告 (obsolete-as-warning) と廃止予定エラー (obsolete-as-error) の違いを教えてください。
廃止予定警告中に廃止予定の API を呼び出すアプリケーションのコンパイルを試みると、コンパイル時に警告が生成されます。依然としてコンパイルすることはできますが、廃止予定であることを示すフィードバックを受け取ります。
廃止予定エラー中に廃止予定の API を呼び出すアプリケーションのコンパイルを試みると、エラーが生成され、コンパイルできません。そのエラーに関して廃止予定を示すメッセージが表示されます。

というわけで、場合によりけりということのようです。


トラックバックについて
Trackback URL:
お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/6357
Trackbacks
このエントリにトラックバックはありません
Comments
愛のあるツッコミをお気軽にどうぞ。[policy]
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
コメントはありません
Comments Form

コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。

OpenID を使ってログインすることができます。

Identity URL: Yahoo! JAPAN IDでログイン