Компилятор отображает все задействованные типы и помещает их в файлы классов, как если бы вы их вводили сами.
Например, вот результат декомпиляции IntelliJ (фактически Fernflower) файла класса с примером URL:
…
Это байт в байт тот же результат, как если бы я сам объявил типы.
Результат работы декомпилятора не может быть доказательством «помещения» чего-либо куда бы то ни было.
Для исполнения программы информация о типе локальных переменных в class-файле не нужа и потому если и присутствует, то только в отладочной информации. Которой может и не быть.
Fernflower выводит типы локальных переменных сам, не полагаясь на наличие отладочной информации. Хотя и использует её в ряде случаев.
Простейший пример:
public class Test {
public static void main(String... args) {
Object greeting = "Habrahabr, world!";
System.out.println(greeting);
}
}
Декомпилятор в IDEA будет уверен, что декларировали мы переменную с типом String:
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//
public class Test {
public Test() {
}
public static void main(String... var0) {
String var1 = "Habrahabr, world!";
System.out.println(var1);
}
}
Помимо локальных переменных, например в полях и сигнатурах методов, var не может применяться.
В предложении слов порядок, Йода магистр одобрил бы.
что мешает сделать нормальные выравненные структуры данных
О каком выравнивании речь?
В *.class-файле никакое выравнивание не нужно, это будет бессмысленным разбазариванием места. А как выравнивать данные во время исполнения решает VM/JIT и class-файл тут опять не при делах.
и убрать ограничение на 64K методов
Классы принято делать небольшими, так их удобнее разрабатывать и сопровождать.
Если вдруг возникает проблема с 64К чего-либо в рамках одного класса, то это
либо что-то автогенерированное и в этом случае это проблема недоделанного генератора, а не формата class-файлов.
либо что-то написанное руками и тогда это лютый говнокод.
И, соответственно, снова не проблема формата class-файлов.
Ни один из вариантов на уважительную причину для поломки совместимости совершенно не тянет.
При этом 64бит java как и раньше имеет 16 битые индексы на поля, константы и методы.
Что вы этим хотели сказать?
С тем же успехом можно было бы сокрушаться, что процессоры уже давно 64-битные, а байт как был восьмибитным, так и остался.
Так, хирург у нас тут был недавно, теперь вот таксист. Кто следующий?
Мой месячный доход вырос до 315 тысяч, и это еще не предел.
Высокооплачиваемая работа, без опыта, не Гербалайф!
Это самая подходящая для меня работа, я прихожу на работу с хорошим настроением и делаю то, что развивает мир и приближает будущее. В офисе есть настольный теннис и аэрохоккей. Проводятся корпоративы и хакатоны.
Тут мозг не выдержал и вспомнил чеховского "Ваньку". Как раз и рождество на носу.
Никто случайно не пришлет вам письмо с годовым финансовым отчетом или зарплатами сотрудников компании.
Вы незаслуженно хорошего мнения о людях.
Как-то раз позвонила главбух и при помощи истеричных воплей потребовала, чтобы я удалил только что отправленное ею письмо И НИ В КОЕМ СЛУЧАЕ НЕ ЧИТАЛ ЕГО11!!!1
В приложении к письму было что-то типа "зряплатная ведомость апрель 1995.xlsx"
Онлайн-кассы всем впарили, а теперь, в свете выявленных обстоятельств, можно их запретить и взамен продать ещё более новые кассы.
На базе Эльбруса и нанотехнологий, например.
Алгоритм быстрой сортировки с двумя опорными элементами разработан нашим соотечественником Владимиром Ярославским и реализован на python. Позже он был адаптирован на Java в классе DualPivotQuickSort
Кажется, вы что-то путаете. В статье Ярославского Python упоминается ровно ноль раз, а пример реализации как раз на Java.
Сейчас есть куча ЯВУ, транслируемых в JavaScript. При этом ни вышеупомянутые ЯВУ, ни JavaScript, который тоже вполне себе ЯВУ, языками ассемблера не являются. Но при желании результату трансляции можно сделать реверс-инжиниринг до эквивалентной программы на исходном языке.
Я бы скорее сравнил «юридический язык» с декларативными языками программирования а-ля Prolog. С переводом программы, написанной на Прологе, на какой-нибудь императивный язык программирования у вас тоже могут случиться некоторые затруднения.
Алексей представляет собой воплощение Харона. В греческой мифологии Харон занимался перевозкой душ умерших через реку Стикс, а Алексей возит из Java в Big Data.
То есть Big Data — страна мёртвых, а все ею занимающиеся — живые мертвецы?
Спасибо, что предупредили.
Результат работы декомпилятора не может быть доказательством «помещения» чего-либо куда бы то ни было.
Для исполнения программы информация о типе локальных переменных в class-файле не нужа и потому если и присутствует, то только в отладочной информации. Которой может и не быть.
Fernflower выводит типы локальных переменных сам, не полагаясь на наличие отладочной информации. Хотя и использует её в ряде случаев.
Простейший пример:
Декомпилятор в IDEA будет уверен, что декларировали мы переменную с типом
String:В предложении слов порядок, Йода магистр одобрил бы.
О каком выравнивании речь?
В *.class-файле никакое выравнивание не нужно, это будет бессмысленным разбазариванием места. А как выравнивать данные во время исполнения решает VM/JIT и class-файл тут опять не при делах.
Классы принято делать небольшими, так их удобнее разрабатывать и сопровождать.
Если вдруг возникает проблема с 64К чего-либо в рамках одного класса, то это
И, соответственно, снова не проблема формата class-файлов.
Ни один из вариантов на уважительную причину для поломки совместимости совершенно не тянет.
У вас есть контрпримеры?
Что вы этим хотели сказать?
С тем же успехом можно было бы сокрушаться, что процессоры уже давно 64-битные, а байт как был восьмибитным, так и остался.
Так, хирург у нас тут был недавно, теперь вот таксист. Кто следующий?
Высокооплачиваемая работа, без опыта, не Гербалайф!
Тут мозг не выдержал и вспомнил чеховского "Ваньку". Как раз и рождество на носу.
Вы незаслуженно хорошего мнения о людях.
Как-то раз позвонила главбух и при помощи истеричных воплей потребовала, чтобы я удалил только что отправленное ею письмо И НИ В КОЕМ СЛУЧАЕ НЕ ЧИТАЛ ЕГО11!!!1
В приложении к письму было что-то типа "зряплатная ведомость апрель 1995.xlsx"
Это как? (при условии, что поле
aне приватное)На Win XP он был ещё, если правильно помню.
На базе Эльбруса и нанотехнологий, например.
Какие задачи будет решать java-часть и почему решили не делать всё на родном для вас C++?
Кажется, вы что-то путаете. В статье Ярославского Python упоминается ровно ноль раз, а пример реализации как раз на Java.
Иногда его можно использовать как костыль.
Сейчас есть куча ЯВУ, транслируемых в JavaScript. При этом ни вышеупомянутые ЯВУ, ни JavaScript, который тоже вполне себе ЯВУ, языками ассемблера не являются. Но при желании результату трансляции можно сделать реверс-инжиниринг до эквивалентной программы на исходном языке.
Я бы скорее сравнил «юридический язык» с декларативными языками программирования а-ля Prolog. С переводом программы, написанной на Прологе, на какой-нибудь императивный язык программирования у вас тоже могут случиться некоторые затруднения.
То есть Big Data — страна мёртвых, а все ею занимающиеся — живые мертвецы?
Спасибо, что предупредили.
Использовать для этого IDA и вручную править байтики в class-файлах — неоптимально, мягко говоря.
Конечно же физики, какие могут быть сомнения?
Их работа заключается в обслуживании сложнейших инженерных систем.