Не, это я не по теме на самом деле сказал. Хотя Java-ассемблеры действительно есть, но оптимизации это почти не дает - ведь там чисто стековая машина, никаких регистров, все оптимизации практически на уровне исходного языка. AspectJ позволяет модифицировать классы по определенным шаблонам, вставляя в нужных местах байт-код. Простой пример - трассировка методов - вставляем код печати во все методы.
Э... это просто ассемблерная вставка в исходнике. А там исполняемый машинный код был. Причем хитровывернутый, для выполнения по любому адресу (у Спектрума адрес начала бейсиковской программы "плавающий" был).
В такие "гибриды" обычно как раз и пихали загрузчики, для более крупных блоков. На спектруме бейсиковская программа хранилась не в виде текста. Два байта (слово) на номер строки (из-за чего можно было делать строки с одинаковыми номерами), два байта на длину строки, и далее сама строка. Операторы хранились не в текстовом виде, а как однобайтовые коды. После оператора REM мог быть совершенно любой текст, в т.ч. содержащий управляющие коды (цвет/положение на экране), соответственно вместо них можно было запихать и машинный код. Выглядело это примерно так:
0 REM ...здесь код...
1 RANDOMIZE USR PEEK 23635+256*PEEK 23636+N
где 23635 - адрес системной переменной, где хранится адрес начала бейсиковской программы, и N - смещение содержимого REM от первого байта номера строки. Часто после REM шли управляющие коды и текст, маскирующие программу при просмотре листинга.
Сам код - определял собственный адрес либо через ту же переменную, либо другими способами.
no subject
Date: 2006-11-28 10:40 pm (UTC)страшная штука должна быть...
no subject
Date: 2006-11-29 11:17 pm (UTC)no subject
Date: 2006-11-30 06:09 pm (UTC)no subject
Date: 2006-11-30 08:38 pm (UTC)AspectJ позволяет модифицировать классы по определенным шаблонам, вставляя в нужных местах байт-код. Простой пример - трассировка методов - вставляем код печати во все методы.
no subject
Date: 2006-12-02 12:47 pm (UTC)no subject
Date: 2006-12-02 02:02 pm (UTC)Обычно это еще один этап компиляции - обработка готовых class-файлов. Хотя никто не запрещает это делать в рантайме.
no subject
Date: 2006-12-01 10:07 am (UTC)no subject
Date: 2006-12-02 12:49 pm (UTC)"Программа написана на Паскале. Исходный код:
Вот как-то так
no subject
Date: 2006-12-04 06:51 am (UTC)no subject
Date: 2006-12-04 11:26 am (UTC)Я знаю разницу между асмом и машкодами - просто забавно было: программа "написана на паскале", а внутри один сплошной асм.
no subject
Date: 2006-12-04 02:14 pm (UTC)На спектруме бейсиковская программа хранилась не в виде текста. Два байта (слово) на номер строки (из-за чего можно было делать строки с одинаковыми номерами), два байта на длину строки, и далее сама строка. Операторы хранились не в текстовом виде, а как однобайтовые коды. После оператора REM мог быть совершенно любой текст, в т.ч. содержащий управляющие коды (цвет/положение на экране), соответственно вместо них можно было запихать и машинный код.
Выглядело это примерно так:
где 23635 - адрес системной переменной, где хранится адрес начала бейсиковской программы, и N - смещение содержимого REM от первого байта номера строки.
Часто после REM шли управляющие коды и текст, маскирующие программу при просмотре листинга.
Сам код - определял собственный адрес либо через ту же переменную, либо другими способами.