Интерфейс виртуальных компьютеров[]
Компиляция, интерпретация[]
Компиляция – преобразование исходного текста программы в машинный код.
- Позволяет получить более эффективный код, чем исходный текст за счет оптимизации.
- Применяется, как правило, для императивных языков со сложной структурой:dee Pascal, C, Ada, др.
Интерпретация – непосредственное исполнение исходного текста программы.
- Легкость реализации операций отладки на уровне исходной программы.
- Более медленна и требует больше памяти, чем компиляция.
- Применяется, как правило, для языков с простой структурой: декларативные LISP, APL, языки сценариев ОС.
Смешанная система реализации языка предполагает два этапа:
- Компиляция исходного текста программы в промежуточный язык, и затем
- Интерпретация программы на промежуточном языке.
По сравнению с чистой интерпретацией в смешанной реализации этап компиляции позволяет уменьшить ошибки в интерпретируемом коде, получить компактный и мобильный интерпретируемый код (этапы смешанной реализации могут выполняться в разных аппаратно-программных средах). Примеры: Perl, Java.
Java-модель[]
Решение – замена JVM на компилятор с J-кода в машинный код компьютера-клиента.
- Компиляция может выполняться "на лету" – одновременно или почти одновременно с приемом J-кода. В худшем случае скорость работы возрастет при втором выполнении апплета.
- Это частичное решение – не очень практично встраивать сложный оптимизирующий компилятор внутрь браузера для каждой аппаратно-программной среды.
Проблема безопасности[]
Как контролировать действия апплета во время его интерпретации (format c:, вирусы и др.)?
Возможные стратегии:
- Строгий контроль соответствия типов (устранение случайного или преднамеренного повреждения данных, вызванного выходом за границы массива, повисшими указателями и др.)
- Проверка J-кода (JVM проверяет, действительно ли поток байтов, полученных с удаленного компьютера, состоит из допустимых инструкций J-кода)
- Ограничения на апплет (апплету не разрешается выполнять некоторые операции на получающем компьютере: запись и удаление файлов и др.)
Независимость модели от языка[]
Java-модель может быть реализована на базе любого исходного языка программирования (не обязательно Java).
Существуют компиляторы, которые переводят исходный текст Ada в J-код.