Java バイトコードの「putfield」命令では、スタックのトップが値であると想定され、スタックのトップ 1 が参照であると想定されます。なぜ逆ではないのですか?
講義ノートで質問されましたが、答えが見つかりません。
VM とコンパイラはどちらの方法でも同じように簡単に実装できるため、順序は実際には問題ではありません。しかし Sun は、下位の引数をスタックの下位に表示することを選択しました。
これは、 だけでなくputfield
、配列のロードと格納、メソッドの呼び出しなど、他の多くの命令でも確認できます。それらはすべて同じ規則に従います。私が考えることができる唯一の説明は、この方法の方がより直感的だということです。
スタックを下から上に、左から右に読み取る場合、スタック上の引数は、メソッド シグネチャまたは元のソース コードの引数と同じ順序になります。別の方法で実行したい場合、プログラマーはスタックをリバースされたものとして頭の中で処理する必要があります。これは大したことではありませんが、直感的ではない可能性があります。