Size: a a a

Compiler Development

2019 September 19

М

Махи in Compiler Development
я второй вопрос задавала. я и думала, что невозможно. но непонятно почему.
источник

AT

Alexander Tchitchigin in Compiler Development
Махи
просто код на джаве. понятно, что исходный нельзя. можно написать две разных проги на джаве, которые в одинаковый байткод транслируются
Очень сильно в этом сомневаюсь! По крайней мере, если компилировать стандартным (OpenJDK/HotSpot) javac. 😊
источник

М

Махи in Compiler Development
развернуть for-each или try-with-resources
источник

М

Махи in Compiler Development
или for  в while
источник

М

Махи in Compiler Development
или подставить константы
источник

М

Махи in Compiler Development
но если очистить весь синтаксический сахар то нельзя, наверное...
источник

AT

Alexander Tchitchigin in Compiler Development
Махи
я второй вопрос задавала. я и думала, что невозможно. но непонятно почему.
Самый очевидный пример я привёл: invokedynamic - его в Java просто нет вообще.
Ну и goto тоже. Поскольку в Java его нет, в JVM можно организовать такую структуру джампов, которая ни в какой валидный Java-код обратно не отображается.
Видимо, есть ещё куча каких-то мелких неочевидных моментов в Scala и Kotlin, которые мешают обратной трансляции в Java.
источник

IK

Ivan Kochurkin in Compiler Development
Alexander Tchitchigin
По факту - да. Наши коллеги пытались декомпилировать Scala и Kotlin - распарсилась от силы половина.
Там с Kotlin были проблемы с порядком вызова базовых конструкторов или что-то вроде того. Как понял, в Котлине больше возможностей.
источник

М

Махи in Compiler Development
ладно. я поняла. спасибо (: а где-нибудь про это с какими-то конкретными примерами написаны, вы не знаете?
источник

А

Алексей in Compiler Development
Alexander Tchitchigin
Самый очевидный пример я привёл: invokedynamic - его в Java просто нет вообще.
Ну и goto тоже. Поскольку в Java его нет, в JVM можно организовать такую структуру джампов, которая ни в какой валидный Java-код обратно не отображается.
Видимо, есть ещё куча каких-то мелких неочевидных моментов в Scala и Kotlin, которые мешают обратной трансляции в Java.
что-то мне сложно представить себе такую структуру, которая не вписывалась бы упомянутый мной выше while + switch case
источник

М

Махи in Compiler Development
Алексей
что-то мне сложно представить себе такую структуру, которая не вписывалась бы упомянутый мной выше while + switch case
самый стандартный пример нередьюсибл графа потока.
источник

А

Алексей in Compiler Development
Махи
самый стандартный пример нередьюсибл графа потока.
а где сам пример собственно?
источник

М

Махи in Compiler Development
источник

М

Махи in Compiler Development
control flow граф
источник

М

Махи in Compiler Development
для него байткод понятно как пишется а в просто из for-while-break-continue его не получить. это в драгонбуке доказывается, по-моему
источник

М

Махи in Compiler Development
вопрос как раз в том, не ли в java каких-нибудь инструментов, которыми это можно выразить
источник

А

Алексей in Compiler Development
я говорил про while switch case
источник

А

Алексей in Compiler Development
ну и переменная state ещё
источник

М

Махи in Compiler Development
аааааа
источник

М

Махи in Compiler Development
ты стейт машину предлагаешь написать? я поняла наконец)
источник