Хабы: Java
20 октября после продолжительной борьбы с глиобластомой скончался первоначальный автор декомпилятора Java Fernflower Стивер.
Стивер был немецким программистом русского происхождения, в основном разрабатывавшим программное обеспечение для медицинского оборудования. Двадцать лет назад у него появился глубокий профессиональный интерес к внутренним устройствам виртуальной машины Java. Вы можете помнить его исследовательские записи в блоге, например, эту (на русском) от 2006 года о том, как настроить иерархию классов Java с помощью Unsafe, когда Java 1.5 только вышла. Примерно в 2008 году Стивер увлекся декомпиляцией Java.
В то время ландшафт декомпиляции Java был очень беден. Время первого поколения декомпиляторов, таких как JAD или JODE, подходило к концу. В то время как Java как язык развивался, существующие декомпиляторы в основном не поддерживались, что затрудняло работу с новыми языковыми конструкциями, такие как операторы утверждений, аннотации и универсальные типы. Более того, прекращение поддержки инструкций JSR/RET в байт-коде Java привело к существенной разнице в том, как компилируются блоки try-finally. Декомпиляторы не смогли обрабатывать новый байт-код.
Еще одной большой проблемой существующих декомпиляторов был их подход к декомпиляции. Они просто искали определенные шаблоны байт-кода и переводили их в соответствующие операторы и выражения Java. Несмотря на простоту, этот подход является нестабильным - любое незначительное семантически эквивалентное изменение в сгенерированном байт-коде делало надлежащую декомпиляцию невозможной. Это серьезно ограничивало применение декомпилятора.
Читать далее