Не, это я не по теме на самом деле сказал. Хотя Java-ассемблеры действительно есть, но оптимизации это почти не дает - ведь там чисто стековая машина, никаких регистров, все оптимизации практически на уровне исходного языка. AspectJ позволяет модифицировать классы по определенным шаблонам, вставляя в нужных местах байт-код. Простой пример - трассировка методов - вставляем код печати во все методы.
Э... это просто ассемблерная вставка в исходнике. А там исполняемый машинный код был. Причем хитровывернутый, для выполнения по любому адресу (у Спектрума адрес начала бейсиковской программы "плавающий" был).
В такие "гибриды" обычно как раз и пихали загрузчики, для более крупных блоков. На спектруме бейсиковская программа хранилась не в виде текста. Два байта (слово) на номер строки (из-за чего можно было делать строки с одинаковыми номерами), два байта на длину строки, и далее сама строка. Операторы хранились не в текстовом виде, а как однобайтовые коды. После оператора REM мог быть совершенно любой текст, в т.ч. содержащий управляющие коды (цвет/положение на экране), соответственно вместо них можно было запихать и машинный код. Выглядело это примерно так:
0 REM ...здесь код...
1 RANDOMIZE USR PEEK 23635+256*PEEK 23636+N
где 23635 - адрес системной переменной, где хранится адрес начала бейсиковской программы, и N - смещение содержимого REM от первого байта номера строки. Часто после REM шли управляющие коды и текст, маскирующие программу при просмотре листинга.
Сам код - определял собственный адрес либо через ту же переменную, либо другими способами.
no subject
страшная штука должна быть...
no subject
no subject
no subject
AspectJ позволяет модифицировать классы по определенным шаблонам, вставляя в нужных местах байт-код. Простой пример - трассировка методов - вставляем код печати во все методы.
no subject
no subject
Обычно это еще один этап компиляции - обработка готовых class-файлов. Хотя никто не запрещает это делать в рантайме.
no subject
no subject
"Программа написана на Паскале. Исходный код:
Вот как-то так
no subject
no subject
Я знаю разницу между асмом и машкодами - просто забавно было: программа "написана на паскале", а внутри один сплошной асм.
no subject
На спектруме бейсиковская программа хранилась не в виде текста. Два байта (слово) на номер строки (из-за чего можно было делать строки с одинаковыми номерами), два байта на длину строки, и далее сама строка. Операторы хранились не в текстовом виде, а как однобайтовые коды. После оператора REM мог быть совершенно любой текст, в т.ч. содержащий управляющие коды (цвет/положение на экране), соответственно вместо них можно было запихать и машинный код.
Выглядело это примерно так:
где 23635 - адрес системной переменной, где хранится адрес начала бейсиковской программы, и N - смещение содержимого REM от первого байта номера строки.
Часто после REM шли управляющие коды и текст, маскирующие программу при просмотре листинга.
Сам код - определял собственный адрес либо через ту же переменную, либо другими способами.