Dalvik VM が (バイトコードに関して) サポートしているもので、.class ファイルにないために現在使用されていないものはありますか?
たとえば、関数型言語 XYZ 用に独自の Source-to-DX コンバーターを作成する場合、.class ファイルは特定の状況下でのみテール コールをサポートしますが、完全なテール コールなどを実装できますか?
私は専門家ではありませんが、私が見る限り、答えはノーです。
次の 2 つのサイトには、Dalvik と JVM のオペコードが一覧表示されています。Dalvik がレジスタ ベースの VM であり、JVM がスタック ベースであるという事実は別として、オペコードはかなり似ています。
http://pallergabor.uw.hu/androidblog/dalvik_opcodes.html
http://en.wikipedia.org/wiki/Java_bytecode
どちらも Java 言語を処理するように特別に調整されています (JVM の将来のバージョンでは、この制約を解除する提案がありますが)。
Java でのテール コールの最適化に関する問題の 1 つは、コール スタックがプログラムで実際に利用できることです (たとえばnew Throwable().getStackTrace()
、Android にも存在する を介して)。VM がテール コールの最適化を行った場合、メソッドを適切に実装できるようにするために、「最適化して取り除いた」ものを記録する必要がありますgetStackTrace
。