Поддерживает ли формат файла Dalvik (* .dx) больше инструкций, чем файл Java .class? - PullRequest
3 голосов
/ 17 апреля 2010

Есть ли что-нибудь, что поддерживает виртуальная машина Dalvik (с точки зрения байт-кода), которое в настоящее время не используется, потому что у файлов .class этого нет?

Например, если люди напишут свой собственный конвертер Source-to-DX для своего функционального языка XYZ, смогут ли они реализовать e. г. полные хвостовые вызовы, хотя файл .class поддерживает конечные вызовы только при определенных обстоятельствах?

1 Ответ

3 голосов
/ 27 апреля 2010

Я не эксперт, но из того, что я вижу, ответ будет нет .

На следующих двух сайтах перечислены коды операций Dalvik и JVM, и, кроме того факта, что Dalvik является виртуальной машиной на основе регистров, а JVM основана на стеке, коды операций довольно похожи.

http://pallergabor.uw.hu/androidblog/dalvik_opcodes.html

http://en.wikipedia.org/wiki/Java_bytecode

Оба они специально предназначены для работы с Java-языком (хотя в будущих версиях JVM есть предложения по снятию этого ограничения).

Одна из проблем оптимизации хвостового вызова в Java заключается в том, что стек вызовов фактически доступен для программы (например, через new Throwable().getStackTrace(), который также присутствует в Android). Если бы виртуальная машина выполняла оптимизацию "хвостовых" вызовов, ей нужно было бы иметь некоторую бухгалтерию для того, что она просто "оптимизировала", чтобы правильно реализовать метод getStackTrace.

...