仮型引数と実型引数の混同に関する考察

Javaジェネリクス初心者は と <? extends Hoge>の違いが分からない!
とよく混乱します。

前者はtype parameter*1として、後者はtype argumentとして使われる表現で、出てくる文脈が違うものです。

では、なぜこの2つは混同されるのでしょうか?
一つの原因はどちらも<>とextendsが使われており、シンタックスが似ているからです。
もう一つの原因は、日本語では「パラメータ」「引数」が文脈によって仮引数と実引数の両方を表すことだと私は考えます。

参考: Wikipedia

仮引数は(formal) parameter、実引数はargumentですね。
この2つを間違えることは、入力と出力を間違えるようなものです。
端子のオスとメスを間違える人はいません。
型の文脈でも「仮型引数」「実型引数」と名前を変えて訳すことでこの間違いを回避できるはずです。

参考: Javaジェネリクス再入門 - プログラマーの脳みそ

英語だとparameter = 仮引数、argument = 実引数だと思って言語仕様を読めば区別ができます。
そこで、日本でも「アーギュメント」を使えば仮引数と実引数が区別できるはず!
アーギュメント!アーギュメント!
…と思っていたのですが、英語でも混乱しているようです。

http://stackoverflow.com/questions/5211548/what-is-the-difference-between-at-extends-b-and-a-extends-b
http://www.coderanch.com/t/269984/java-programmer-SCJP/certification/extends-Animal-VS-extends-Animal

まとめ

「仮型引数」「実型引数」を使いましょう。

*1:リンク先は「クラスの」type parameterだがメソッドの、コンストラクタのものも同じ