Bargest писал(а):
Зачастую декомпиляторы выдают код, к примеру, следующего вида:
Код:
if (a > b)
;
while(true)
{
return;
b = b + 5;
}
И это без всякой обфускации. Угадайте, что это было в начале.
Теряюсь в догадках. Особенно "вставляет" наличие двух "мёртвых" фрагментов кода и отсутствие вообще чего-либо живого (то есть хоть что-то делающего с данными или осуществляющего переходы).
Если некий "декомпилятор" называет себя именно декомпилятором и выдаёт такое, то у меня есть сильное подозрение о грамотности авторов либо о неком дополнительном усложнении задачи вроде кривого перевода из далвиковского кода в стандартный Java-байткод. Гуглы они вообще те ещё "друзья программистов", от них вполне можно ожидать кастрации всего полезного в нормальном байткоде и превращение этого месива в "андроид".
Bargest писал(а):
Возьмем все имена, заменим на численные идентификаторы. Код будет продолжать работать.
Продолжать работать будет лишь в большинстве случаев. То есть тривиальное использование длины строки с названием метода уже всё портит. Хотя да, это редкость, потому и прокатывает замена обфускаторами, но до поры до времени. То есть опять имеем пример декомпилятора от начинающих студентов - да нафиг париться про какие-то там редкие варианты, ведь меня пока устраивает ...
Bargest писал(а):
Возьмем строки чисел и заменим реально на числа.
Здесь вообще не понял - вы же уже заменили строки на числа выше. Зачем тогда введение никому ненужной сущности "строка чисел" ?
Bargest писал(а):
А чем это отличается от связывания по адресам?
Зависит от того, что вы понимаете под связыванием по адресам. Если вы про адреса функций/методов, то в случае с JVM это никаким местом не относится к названиям методов. То есть вы просто путаете сладкое с длинным.
Bargest писал(а):
А также вы в курсе, что спецификация, к примеру, Dalvik, косвенно рекомендует писать код так, чтобы аннотации не значили по сути ничего, кроме той же самой удобной при отладке информации?
Вы же сами написали про обратную совместимость, о которой гугло-кодеры не захотели думать изначально, а теперь нагибают всех остальных думать за них. То есть вы привели пример убожества и предлагаете на его основе делать далеко идущие выводы. Вы поймите - если вы имели дело только с андроидом, вы совсем не стали знатоком Java, но лишь познакомились с кастрированной гуглами версией изначально гораздо более глубоко продуманной системы.
Bargest писал(а):
Цитата:
И при машино-независимом байткоде это реально единственный правильный путь, ведь если бы компилятор выкидывал много лишней по его мнению информации из байткода, то следующий обязательный этап JIT компиляции на разных платформах страдал бы от отсутствия нужной информации
Я уже описал, что эта информация почти бесполезна компилятору
Ну дело ваше, но для моего компилятора информация очень даже нужна.
Bargest писал(а):
Высокоуровневостью же в байткоде жабы не пахнет и близко. Просто потому, что тут нет никаких конструкций, кардинально отличающих его от любых ассемблеров. Те же самые push/pop/add/mov/jmp, к которым добавили еще пару вариаций new.
Ну так вы возможно и С с Java называете низкоуровневыми языками ? Те же mov/add/jс к которым добавили new. В чём вы видите признаки высокоуровневости ?
Bargest писал(а):
высокоуровневый язык отличается в первую очередь тем, что имеет логические конструкции, а не просто массив команд с переходами по нему как заблагорассудится.
И как по вашему, можно назвать оператор switch в Си или Java логической конструкцией ? Если нет - то что же тогда есть логическая конструкция ? А если да, то вы должны признать байткод высокоуровневым по вашему собственному определению. Как бы похоже, что вы зарапотровались маленько
Bargest писал(а):
байткод был бы высокоуровневым, если бы, к примеру, строился только в виде дерева кода и в таком же виде и хранился.
Ну опять заявление из серии "я не подумал". Или вы готовы привести пример на фортране с указанием развесистых деревьев и такой же формы хранения обычного текста в кодировке ASCII ?
В общем, я бы рекомендовал вам осмыслить предмет разговора и излагать не в виде нефильтрованного потока сознания, но всё же после прочтения ваших собственных аргументов хотя бы пару раз.