Обновить
-13
1.4

Пользователь

Отправить сообщение
Компилятор отображает все задействованные типы и помещает их в файлы классов, как если бы вы их вводили сами.
Например, вот результат декомпиляции 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К чего-либо в рамках одного класса, то это


  1. либо что-то автогенерированное и в этом случае это проблема недоделанного генератора, а не формата class-файлов.
  2. либо что-то написанное руками и тогда это лютый говнокод.
    И, соответственно, снова не проблема формата class-файлов.

Ни один из вариантов на уважительную причину для поломки совместимости совершенно не тянет.


У вас есть контрпримеры?

При этом 64бит java как и раньше имеет 16 битые индексы на поля, константы и методы.

Что вы этим хотели сказать?
С тем же успехом можно было бы сокрушаться, что процессоры уже давно 64-битные, а байт как был восьмибитным, так и остался.

Есть совершенно секретный лайфхак: вместо одной футболки/рубахи купить сразу десять, а стиркой заниматься в выходные.
Что мешает технарю быть «начитанным художественной литературой»?
Ну зачем же огорчать главбуха?

Так, хирург у нас тут был недавно, теперь вот таксист. Кто следующий?


Мой месячный доход вырос до 315 тысяч, и это еще не предел.

Высокооплачиваемая работа, без опыта, не Гербалайф!


Это самая подходящая для меня работа, я прихожу на работу с хорошим настроением и делаю то, что развивает мир и приближает будущее. В офисе есть настольный теннис и аэрохоккей. Проводятся корпоративы и хакатоны.

Тут мозг не выдержал и вспомнил чеховского "Ваньку". Как раз и рождество на носу.

Никто случайно не пришлет вам письмо с годовым финансовым отчетом или зарплатами сотрудников компании.

Вы незаслуженно хорошего мнения о людях.
Как-то раз позвонила главбух и при помощи истеричных воплей потребовала, чтобы я удалил только что отправленное ею письмо И НИ В КОЕМ СЛУЧАЕ НЕ ЧИТАЛ ЕГО11!!!1
В приложении к письму было что-то типа "зряплатная ведомость апрель 1995.xlsx"

На мой взгляд данная статья напротив выгодно отличается от большинства подобных отсутствием нытья.
Например, this.a в JS сможет обратиться к супер-классу, а в Java только к своему собственному свойству.

Это как? (при условии, что поле a не приватное)

Например, debug.exe.
На Win XP он был ещё, если правильно помню.
Онлайн-кассы всем впарили, а теперь, в свете выявленных обстоятельств, можно их запретить и взамен продать ещё более новые кассы.
На базе Эльбруса и нанотехнологий, например.
Java-анализатор взаимодействует с C++ ядром при помощи Java Native Interface (JNI).

Какие задачи будет решать java-часть и почему решили не делать всё на родном для вас C++?

Ещё можно никогда не мыться и не чистить зубы. Легче же, чо.
Алгоритм быстрой сортировки с двумя опорными элементами разработан нашим соотечественником Владимиром Ярославским и реализован на python. Позже он был адаптирован на Java в классе DualPivotQuickSort

Кажется, вы что-то путаете. В статье Ярославского Python упоминается ровно ноль раз, а пример реализации как раз на Java.

При этом частный случай, Pull Members Up/Down, есть уже довольно давно.
Иногда его можно использовать как костыль.
Не обязательно.

Сейчас есть куча ЯВУ, транслируемых в JavaScript. При этом ни вышеупомянутые ЯВУ, ни JavaScript, который тоже вполне себе ЯВУ, языками ассемблера не являются. Но при желании результату трансляции можно сделать реверс-инжиниринг до эквивалентной программы на исходном языке.

 Я бы скорее сравнил «юридический язык» с декларативными языками программирования а-ля Prolog. С переводом программы, написанной на Прологе, на какой-нибудь императивный язык программирования у вас тоже могут случиться некоторые затруднения.
Алексей представляет собой воплощение Харона. В греческой мифологии Харон занимался перевозкой душ умерших через реку Стикс, а Алексей возит из Java в Big Data.

То есть Big Data — страна мёртвых, а все ею занимающиеся — живые мертвецы?
Спасибо, что предупредили.

Пролистал главу по Java.
Использовать для этого IDA и вручную править байтики в class-файлах — неоптимально, мягко говоря.
куда Вы денете медиков? они лирики или физики?

Конечно же физики, какие могут быть сомнения?
Их работа заключается в обслуживании сложнейших инженерных систем.

Информация

В рейтинге
1 444-й
Зарегистрирован
Активность