SafeTSA: Типобезопасное промежуточное представление для JVM
SafeTSA
SafeTSA: промежуточное представление SSA для Java, сохраняющее типобезопасность и оптимизирующее компиляцию JVM. Повышает эффективность и безопасность кода.
Сравнивайте с английским: нажмите на абзац — оригинал откроется в окне. Кнопка EN под абзацем показывает его прямо в тексте.
Введение
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 использовался только в академической среде.
SafeTSA (Safe Typed Single Assignment) is a static single assignment form (SSA) intermediate representation capable of representing all of the type safety of the Java programming language and the standard Java Virtual Machine (JVM) byte code. As of 2005, many optimizing compilers (including just in time compilers used by JVMs) use SSA representations internally. A typical just in time compiler for a JVM converts JVM stack machine byte code into an internal static single assignment representation, performs optimizations, converts the SSA form to a low level form similar to the host CPU's machine code, and performs some platform specific optimizations before finally creating the native code that gets executed. SafeTSA is an external representation similar to these SSA internal representations, yet SafeTSA still provides the full type safety (including security verifiability at class load time) of standard JVM byte code. In theory, this preserves the advantages of the JVM while decreasing the amount of work the JVM needs to do in order to efficiently execute programs. The creators of SafeTSA modified the IBM JikesRVM (called the Jalapeño JVM at the time) so that it could use standard JVM byte code and also a SafeTSA bytecode. They then ran a standard suite of Java benchmarks and published a paper showing that SafeTSA input produced faster running native code output from the just in time compiler. In addition, the researchers also showed that SafeTSA required less time to compile to native code. On the other hand, the advantages of a stack machine byte code (such as the standard JVM byte code) include an easily implemented interpreter. Most commercial JVMs in late 2005 use a mixture of byte code interpretation and byte code just in time optimized compilation whereas the JikesRVM used in the SafeTSA research uses only a mixture of two different optimization levels for just in time compilation. The research platform never used interpretation to run SafeTSA byte code, so it's less clear how SafeTSA byte code would perform in a modified version of a commercial JVM. As of late 2005, it seems that SafeTSA has only been used in academia.