Введение

SafeTSA (Safe Typed Single Assignment) — это статическая форма промежуточного представления (SSA), способная представлять всю безопасность типов языка программирования Java и стандартный байт-код Java Virtual Machine (JVM). Начиная с 2005 года, многие оптимизирующие компиляторы (включая компиляторы Just-in-Time, используемые JVM) используют SSA-представления внутри. Типичный компилятор JVM Just-in-Time преобразует байт-код стековой машины JVM во внутреннее статическое представление с единичным присваиванием, выполняет оптимизации, преобразует форму SSA в форму низкого уровня, аналогичную машинному коду целевого процессора, и выполняет некоторые специфические для платформы оптимизации, прежде чем, наконец, сгенерировать исполняемый нативный код. SafeTSA является внешним представлением, аналогичным этим внутренним SSA-представлениям, но при этом SafeTSA сохраняет полную безопасность типов (включая возможность проверки безопасности при загрузке класса) стандартного байт-кода JVM. Теоретически, это позволяет сохранить преимущества JVM, одновременно снижая объем работы, необходимой JVM для эффективного выполнения программ. Создатели SafeTSA модифицировали IBM JikesRVM (в то время называвшуюся Jalapeño JVM) таким образом, чтобы она могла использовать как стандартный байт-код JVM, так и байт-код SafeTSA. Затем они запустили стандартный набор Java-бенчмарков и опубликовали статью, показывающую, что ввод SafeTSA приводит к генерации более быстрого нативного кода компилятором Just-in-Time. Кроме того, исследователи показали, что SafeTSA требует меньше времени для компиляции в нативный код. С другой стороны, преимущества байт-кода стековой машины (такого как стандартный байт-код JVM) включают в себя простоту реализации интерпретатора. Большинство коммерческих JVM в конце 2005 года используют сочетание интерпретации байт-кода и компиляции байт-кода с оптимизацией Just-in-Time, в то время как JikesRVM, использованная в исследовании SafeTSA, использует только сочетание двух различных уровней оптимизации для компиляции Just-in-Time. Исследовательская платформа никогда не использовала интерпретацию для выполнения байт-кода SafeTSA, поэтому не совсем ясно, как байт-код SafeTSA будет работать в модифицированной версии коммерческой JVM. По состоянию на конец 2005 года, похоже, что SafeTSA использовался только в академической среде.