Оберон-клуб «ВЄДАsoft»
https://zx.oberon.org/forum/

Google «изобрёл» и воплощает в новой версии Android'а динамическую кодогенерацию
https://zx.oberon.org/forum/viewtopic.php?f=3&t=147
Страница 1 из 2

Автор:  Zorko [ 21 ноя 2013, 09:03 ]
Заголовок сообщения:  Google «изобрёл» и воплощает в новой версии Android'а динамическую кодогенерацию

Более десяти лет назад известную в среде оберонщиков и в академических кругах, с чем я нас, господа, и поздравляю. Ещё одна здравая идея наконец-то понята мэйнстримом (и будет им использована в светлых целях наживы. :D ), и хоть бы не испохабили (Java — плохой Оберон). А мне это особенно приятно, т.к. я никогда не был сторонником виртуальных машин и JIT-компиляции и удивлялся ажиотажу вокруг всего этого.

http://habrahabr.ru/post/201346/

Если кто не в курсе, об этом можно прочесть в работах Михаэля Франца.


Автор:  Jordan [ 21 ноя 2013, 10:50 ]
Заголовок сообщения:  Re: Google «изобрёл» и воплощает в новой версии Android'а динамическую кодогенерацию

Опять костыли. Не проще ли задействовать opengl, то есть аппаратное ускорение графики. Написать грамотно, то есть не анимировать, не отрисовывать, то, что не видно пользователю.

Под андроид перенесли игру Call of Duty, а у них видите ли кнопки тормозят. Доколе!

Автор:  geniepro [ 21 ноя 2013, 11:06 ]
Заголовок сообщения:  Re: Google «изобрёл» и воплощает в новой версии Android'а динамическую кодогенерацию

Вообще-то Google в своей новой версии Андроида собирается ввести статическую кодогенерацию (ART) вместо текущей динамической (Dalvik).
Динамическая кодогенерация тормозная, в отличие от статической.

Этот Google ART по сути является аналогом утилиты ngen.exe из майкрософтского .NET Framework, которому уже больше 10 лет...

Автор:  geniepro [ 21 ноя 2013, 11:08 ]
Заголовок сообщения:  Re: Google «изобрёл» и воплощает в новой версии Android'а динамическую кодогенерацию

Jordan писал(а):
Опять костыли. Не проще ли задействовать opengl, то есть аппаратное ускорение графики. Написать грамотно, то есть не анимировать, не отрисовывать, то, что не видно пользователю.

Под андроид перенесли игру Call of Duty, а у них видите ли кнопки тормозят. Доколе!


При чём тут OpenGL-то? о_О
Тормоза возникают не из-за прорисовки, а из-за генерации кода при запуске программ...

Автор:  Jordan [ 21 ноя 2013, 16:18 ]
Заголовок сообщения:  Re: Google «изобрёл» и воплощает в новой версии Android'а динамическую кодогенерацию

geniepro писал(а):
Jordan писал(а):
Опять костыли. Не проще ли задействовать opengl, то есть аппаратное ускорение графики. Написать грамотно, то есть не анимировать, не отрисовывать, то, что не видно пользователю.

Под андроид перенесли игру Call of Duty, а у них видите ли кнопки тормозят. Доколе!


При чём тут OpenGL-то? о_О
Тормоза возникают не из-за прорисовки, а из-за генерации кода при запуске программ...


Поторопился с ответом. Прочитал статью наискось.

Автор:  Zorko [ 21 ноя 2013, 19:33 ]
Заголовок сообщения:  Re: Google «изобрёл» и воплощает в новой версии Android'а динамическую кодогенерацию

geniepro писал(а):
Вообще-то Google в своей новой версии Андроида собирается ввести статическую кодогенерацию (ART) вместо текущей динамической (Dalvik).
Динамическая кодогенерация тормозная, в отличие от статической.
Почитай про кодогенерирующие загрузчики. У Франца под термином "динамическая кодогенерация" понимается то, что ты почему-то называешь статической.

Автор:  geniepro [ 21 ноя 2013, 19:59 ]
Заголовок сообщения:  Re: Google «изобрёл» и воплощает в новой версии Android'а динамическую кодогенерацию

Zorko писал(а):
geniepro писал(а):
Вообще-то Google в своей новой версии Андроида собирается ввести статическую кодогенерацию (ART) вместо текущей динамической (Dalvik).
Динамическая кодогенерация тормозная, в отличие от статической.

Почитай про кодогенерирующие загрузчики. У Франца под термином "динамическая кодогенерация" понимается то, что ты почему-то называешь статической.


Да читал я про кодогенерацию Франца -- это типичный JIT-транслятор, который в андроиде есть давно -- Dalvik.

А этот ART -- это уже не JIT-транслятор, который динамически генерирует машинный код при старте программы, а статический компилятор AOT, который генерирует машинный код при установке программы (в андроиде при установке, в .NET в любой момент по команде пользователя).

Автор:  Zorko [ 21 ноя 2013, 20:11 ]
Заголовок сообщения:  Re: Google «изобрёл» и воплощает в новой версии Android'а динамическую кодогенерацию

Я не согласен. JIT — это поверх виртуальной машины фрагменты байт-кода на лету заменяются на машинные команды. Это JVM и Dalvik.

А у Франца — в момент загрузки программы (с диска или сети в память) плоский бинарник (slim binary) на лету транслируется в машинный код. В момент загрузки, понимаешь? А не исполнения. Видимо, ты невнимательно читал.

Автор:  geniepro [ 21 ноя 2013, 20:57 ]
Заголовок сообщения:  Re: Google «изобрёл» и воплощает в новой версии Android'а динамическую кодогенерацию

Zorko писал(а):
Я не согласен. JIT — это поверх виртуальной машины фрагменты байт-кода на лету заменяются на машинные команды. Это JVM и Dalvik.

А у Франца — в момент загрузки программы (с диска или сети в память) плоский бинарник (slim binary) на лету транслируется в машинный код. В момент загрузки, понимаешь? А не исполнения. Видимо, ты невнимательно читал.

Ну, учитывая что у Франца код загружался через веб-браузер, транслировался в маш-код в оперативной памяти (а не сохранялся на диск), выполнялся, а затем удалялся -- то отличие от JIT-а незначительное.

Автор:  Zorko [ 22 ноя 2013, 08:25 ]
Заголовок сообщения:  Re: Google «изобрёл» и воплощает в новой версии Android'а динамическую кодогенерацию

Не-а, отличие всё-таки принципиальное. Мне кажется, Францем предложен более совершенный способ трансляции, который решает, в основном, все проблемы, присущие VM. Перечислю их вкратце.

    1. Более экономичное использование памяти (нету VM).

    2. Slim binaries имеют качественно мощное представление промежуточного кода в виде двоичных деревьев, что гораздо лучше стекового байт-кода при генерации кода для регистровых архитектур (каковыми является подавляющее большинство процессоров), достаточное для дальнейшей оптимизации или даже перетрансляции в другой ЯП. Также эти бинарники очень компактны, значительно компактнее любого машинного кода или стекового байт-кода (надеюсь, у гугля хватит ума передрать и древовидное представление. Без него, блин, уже слегка не та будет петрушка).

    3. Кодогенерирующий загрузчик может на лету оптимизировать код для установленного процессора. Т.е. одна программа на Slim Binaries будет оттранслирована максимально эффективно в код i386, и также в код PIII с архитектурой IA64. Это всё достигается и с помощью JIT-компиляции (в .NET и JVM), но значительно более дорогой ценой. Высокие показатели оптимальности кода на тестовых испытаниях оборачиваются на практике реальнейшим кошмаром. VM жрут сотни мегабайт памяти оверхеда по сравнению с нативом, а софт неслабо тормозит, в сравнении с аналогичным, но статически слинкованным в натив. Если бы не было современных процессоров, он бы вообще не работал. Но если для десктопов это ещё как-то терпят (ибо высокий штандарт давно и накрепко задан мелким и мягким большим сэмом), то на планшетах у них, видать, тормозит. Меня ещё тогда порадовало, что Dalvik регистровый. Ведь ежу понятно, что стековая VM ещё тормознее, и не только на процессорах архитектуры ARM.

Никак не могу углубленно прокомментировать это, но у меня подход с VM вызвал отторжение с того самого дня, как я о нём узнал. И нынче приемлю их только в эмуляторах других платформ. Там это неизбежность. А вот подход Франца сразу же поразил в плане совершенства. И я рассказывал о нём мэйнстримщикам, самые умные из которых сказали: "ну подождём, что из этого выйдет".

Не будем увязать в терминологии: "статическая" или "динамическая" кодогенерация достигнута у Франца, но, похоже, что и такая, и такая, ибо в фазе "статической" (в твоей терминологии) кодогенерирующий загрузчик порождает натив из плоского бинарника в момент загрузки, и не нужно уводить нас в сторону тем, что, дескать, слим берётся не из файла. Неважно откуда. Хоть из сети. А в "динамической" (в твоей терминологии) фазе дооптимизация достижима и на лету (а вот это уже способ, реализованный в JIT-компиляторах, но серьёзно облагороженный Францем, что хорошо описано в статьях по ссылкам выше). И никакого тяжёлого наследия в виде VM, которые несомненно уйдут в прошлое, как когда-то пи-код, с развитием подхода кодогенерирующих загрузчиков.

Страница 1 из 2 Часовой пояс: UTC + 2 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/