注: 記事で紹介しているRubyのドキュメント以前にもruby-listでdestructive methodsという言葉が使われていたのと、Matzさんのツイートで次のようにコメントして頂いてました。
Lisp界でdestuctive (function)という表現は古くから使われていたけど、Rubyに関数はないからメソッドと呼んだだけではないかと。
なのでこの記事のタイトルは2つの意味で間違っていました。
- Matzさん個人ではなく、Rubyのメーリス参加者も使っていた
- 元々destructive functionという表現があり、Rubyではmethodなのでそう言い換えただけだった(これを以て「発祥」と言えるかもしれませんが)
なのでRuby固有の表現ではないため、元々悩んでいたように、Pythonなど他の言語でも安心して「destructive method/function」という表現を使っても間違いでは無さそうです。メーリスの中に破壊的の定義はなにかという話もあったのでそれも悩みそうですが。
--
この間の『「破壊的メソッド」はRuby用語なのか?』という記事の追加調査です。この記事を3行でまとめるとこうでした。
- Rubyのドキュメントでにdestructive methodの解説があり、るびまでは日本語の「破壊的メソッド」という言葉も使われている
- 一方、PythonやPHPのドキュメントではそもそも「destructive method」という表現は出てこない
- 「破壊的メソッド」というのはRubyのコミュニティで使われ始めた言葉が、日本語でプログラミング用語として認識されて広まったものなのではないか?
また、コメントで次のような情報を頂きました。つまり「destructive(破壊的)」という言葉は他言語のドキュメントでも使われるのに対して、「destructive method(破壊的メソッド)」はRubyのドキュメントに特有の表現のようです。
- C#でもdestructiveという言葉は使われている
- Lispではリストの操作でdestructiveなどの表現が使われていた。Rubyのリスト操作用のメソッドに破壊的/非破壊的なバージョンがあるのはLisp(処理系の一つのScheme)の影響じゃないか?
ただ、stackoverflowで検索したところ、英語圏でもRubyコミュニティを中心に「destructive method」という用語は使われているようです。例えば「What are destructive and non-destructive methods in java?」では、Rubyのドキュメントを参照して質問されています。
今回は「過去のドキュメントや記事の時系列を調べて『破壊的メソッド(destructive method)』という言葉の発祥を調べよう」というモチベーションで調べてみました。
調査方法
「Googleで2005年以前の記事を検索して、Internet Archiveに最初にトラッキングされた日付で裏を取る」というやり方で調べてみました。
ただし、この方法は以下のような欠点があります。
- Googleサービス開始以前や、クローリングできていないサイトやメーリングリスト等はチェックできない
- 英語の検索結果は別分野の結果が混ざっているので見落としがあるかもしれない
調査結果
日本語の検索結果
まず、日本語で「破壊的メソッド」というを完全一致検索します。
タイトル | 概要 | Internet Archiveの最古の日付 | 補足 |
---|---|---|---|
超低級最適化技法 | Rubyのプログラミング最適化方法の一つとして破壊的メソッドが紹介されている | 2003/03/18 | サイトには6/18とあるがInternet Archiveにはそれ以前からある |
逆引きRuby | 配列の重複削除などの項目に「破壊的メソッド」という表現がある | 2003/06/14 | google siteに移行されていたので元のURLでチェックした |
このことから、日本語の「破壊的メソッド」という言葉は、Rubyコミュニティで早くから使われ始めていたことが分かります。おそらく日本語圏内では「破壊的メソッドという言葉はRubyコミュニティが発祥」といって間違いないんじゃないでしょうか?
次に「破壊的」でも同様に検索してみたのですが、「変数やオブジェクトを破壊する」という意味ではヒットしませんでした。次のような「破壊的イノベーション」「破壊的カルト教団」「(機械工学の)破壊的検査」のみで、IT分野では「セキュリティ分野で危険性の高さを表す言葉」しか見つかりませんでした。
英語の検索結果
英語で「destructive method」の完全一致で同様に調べてみました。この間の記事でも触れた、Matzの記載した以下の記事しか見つかりませんでした。
タイトル | 概要 | Internet Archiveの最古の日付 | 補足 |
---|---|---|---|
The Ruby Language FAQ | 「What is a destructive method?」という解説がある | 2004/08/19 | 2002/12/17にMatz(Ruby作者のまつもとゆきひろさん)が書いたらしい |
ただし、日本語の「破壊検査/非破壊検査」のような使われ方もされているので、以下のようなプログラミング分野と関係ないページも数多くヒットしてしまっています。これらを除いてチェックしているので、見落としのある可能性もあることをご了承ください。
- A non-destructive method for estimating above-ground forest biomass in threatened woodlands
- A non‐destructive method of determining rock strength
次に「"destructive" プログラミング言語名」で検索してみます。プログラミング言語名には「lisp, fortran, cobol, c-lang, basic, assenbly, programming」などで調べています。普通の形容詞だけあって数多くヒットするので、古くて興味深いものだけを紹介してみます。
|タイトル|概要|出版・公開年(本文より)|
|---|----|----|----|
|COMMON LISP:A Gentle Introductionto Symbolic Computation|COMMON LISPの本。「destructive sequence operations」という表現がある。|1990年|
|TAO への招待 Invitation to TAO|TAOというプログラミング言語の解説。日本語の記事だが「destructiveな関数」と表現されている。|1987年|
|Higher Order Programming|高階関数を使ったプログラミングスタイルの解説。「destructive operationsを避けているわけではない」と触れられている。|1987年|
|mcs6500 family programming manual - 6502.org|MCS6500というCPUのマニュアル。Twitterの検索結果によるとコモドール社製?アセンブラの解説の中に「non destructive operations」などの表現がある。|1976年|
|Algol 60 Compilation and Assessment|「STORE NON DESTRUCTIVE INTEGER」という表現がある|1973年|
destructiveという形容詞は、少なくとも1970年代から特定のプログラミング言語に限らず「変数やオブジェクトを更新する危険な処理」という意味で使われていたようです。
まとめ
時系列的にまとめると、これまでの観測結果を踏まえると、次のようなシナリオだった事後確率が高そうです。
- 英語圏で古くからdestructiveという形容詞は現在と同じ意味で使われていた
- Matzが2002年に「What is a destructive method?」を書いた
- 日本語圏で「逆引きRuby」などを介して「破壊的メソッド」という訳語が定着していく
- (英語圏でもRubyコミュニティを中心に使われ始めた)
「もしかして、先に日本で普及して、Matzの記事は日本語圏で普及した後に英語圏でdestructive methodが馴染みないから書いたんじゃないか?」とも考えたのですが、個人的には「Matzの英語のドキュメントを参照して、『逆引きRuby』などで破壊的メソッドという用語が生み出されて定着した」というシナリオのほうがありえそうな気がします。
また、「Rubyの初期のメーリングリストなどを見ると更に遡れる可能性もありそう」ということと、「英語圏に対して日本語で先に定着したことがどれだけ影響したのか」ということも調べると面白いかもしれません。
当時のRubyプログラマーなど、事情に詳しい方がいたらコメントください。