![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
COLLAPSE [COLLAPSE, Windows]
Владимир Кладов © (2004-10-22 08:13:00)Разрабатываю технологию COLLAPSE. Предполагается уменьшение кода еще в несколько раз, на уже готовых проектах,
причем на этот раз можно будет портировать по этой технологии и VCL-проекты, а в перспективе - никаких особых
ограничений на платформу, или язык (и С пойдет, если для С конвертер сделать). Но на этот раз - возможно
замедление выполнения на длительных вычислениях, если их не оптимизировать.
Суть в следующем: уже готов эмулятор форт-подобной виртуальной "машины", занимает 240 байт машинного кода, уже
практически годный к использованию неоптимизирующий макро-компилятор с (уже разработанного) языка П2 и
пошаговый отладчик П2-кода (уровня исходных текстов) в виде dll, который вызывается, если программа была
откомпилирована специально для отладки. Тестовое приложение - exe-файл в формате PE, которое просто вызывает
MessageBoxA (типа hello,world) занимает 1,5К. Процесс разработки сейчас такой: П2-код подается в компилятор П2,
на выходе получается программа на ассемблере (masm32). В этой программе находятся вместе сам эмулятор и код,
который надо эмулировать, включая ассемблерные вставки (П2-программа состоит из П2-процедур и асм-процедур, так
что П2-машина легко расширяется быстрыми ассемблерными процедурами). Далее masm32-программа компилируется и
собирается в нормальный исполнимый файл.
Сейчас я делаю компилятор из Паскаля в П2. Мне не очень хотелось аннонсировать проект, пока не будет пройден
этот этап, но полноценный компилятор с Паскаля - хотя и в реально несуществующую машину - это и правда не очень
быстрый кусок работы. Принципиальных проблем пока не встретилось (разве что то, что при компиляции system.pas
обнаруживается неприятное наличие неких аксиом, в самом system.pas не отраженных. Как например, некоторые типы
данных вроде Longint или констант MaxLongint. Но это все решаемо).
Когда будет пройден этот шаг, можно будет публиковать саму технологию, и заняться оптимизатором П2-кода,
предполагаю делать оптимизатор как отдельную программу (или даже как несколько отдельных), которая принимает
файлы с П2-кодом, и на выходе выдает опять П2-код, но уже оптимизированный. Основная цель оптимизации - это
помимо мелких (локальных) оптимизаций выполнить глобальную оптимизацию, в основном это должно стать вынесение
общих кусков куда в отдельные П2-процедуры и предварительный расчет константных выражений, сбор сведений о том,
какие значеняи могут принимать глобальные/локальные переменные, и за счет этого редуцировать ненужные процедуры
и всегда одинаковые параметры процедур.
Владимир Кладов (2004-10-30 19:30:00) [21]Вот пропустил в описании П2-кода:
Следующие конструкции П2-языка определены встроенным образом,
аксиоматически:
#...#число или #...#(числовое выражение)
#'символ' или #"символ"
"строка" или 'строка'
метка:
IF=0(метка)
IF<>0(метка)
IF>0(метка)
IF>=0(метка)
IF<0(метка)
IF<=0(метка)
GOTO(метка)
IFcond ... [ ELSE ... ] ENDIF (где cond - одно из 6 условий < > <> <= >= = )
процедура
При записи кода никакие разделители (кроме пробелов между отдельными
командами) не требуются. Комментарии могут начинаться с символа ';' до
конца строки или /* ... */ (вложенные, т.е. /* ... /* ... */ ... */,
могут быть многострочными).
SPeller (2004-10-30 17:59:00) [22]Владимир, ждем дальнейших результатов! Лично мне ваш проект очень нравится, и когда будет готов конвертер дельфийских исходников - ему цены не будет. Сейчас ещё багово всё, но, я думаю, будущее у этого проекта есть. Я попытался наваять что-нибудь свое, но пока безрезультатно - много непонятно, много ещё не реализовано, много ещё не описано. Буду ждать с нетерпением дальнейших разработок.
Владимир Кладов (2004-10-29 22:29:00) [23]потому что важен был принцип, а дополнительно оптимизировать всегда потом можно. Нет, оптимизатор на автомате должен оптимизировать только G2-код. Нет, конечно, если кто напишет автоматический оптимизатор для асм-процедур, то всегда пожалуйста :) Тем более что есть пожелания, чтобы был и обратный инструмент - некоторые процедуры переводить обратно в асм для вящей скорости. После выявления критичных участков, конечно.
miek (2004-10-29 21:40:00) [24]Описание П2 впечатляет! Демо-программы работают без проблем.
Из любопытства посмотрел в код. Сразу вопрос возникает - почему бы не заменить такую конструкцию:
+ PROC ASM ; сложение двух целых на вершине, заменяются результатом
POP EAX
POP EDX
ADD EAX, EDX
PUSH EAX
JMP EBX
END +
на такую:
+ PROC ASM
POP EAX
ADD [ESP], EAX
JMP EBX
END +
Вдвое короче. Или оптимизатор сам такие штуки должен будет делать?
Владимир Кладов (2004-10-29 21:28:00) [25]enchcombos у меня на сайте возьмите. А что я сделал выбор шрифта. надо же, не помню :)
SPeller (2004-10-29 21:09:00) [26]Владимир, где-нить лежит KOLFontComboBox, который у вас в отладчике используется? А то не комилится нифига.
Gandalf (2004-10-29 21:02:00) [27]Действительно впечатляет.
Владимир Кладов (2004-10-29 18:33:00) [28]Кстати, в туториалах Iczelion'а есть описание того как сделать прямой call/jmp без создания еще одной таблицы заглушек. Что-то через _imp_имя функции. У меня не получилось, потому возможно, что я делал для masm32 версии 5, а когда версию 8 скачал, уже некогда было возвращаться. Если кто разберется, милости прошу мне на мыло или даже сюда. Хорошо если на 1 API-функцию будет приходиться только 6 байт jmp-а, а не 11, как сейчас - в таблицах. Или можно даже так, что пусть та таблица будет, но код бы использовал сразу ее, не создавая еще одной своей таблицы переходов, как сейчас...
Владимир Кладов (2004-10-29 18:28:00) [29]Вы перекомпилируйте, оно еще может быть от того, что последний раз я собирал для отладчика, он наверное пробует FreeLibrary вызвать для модуля с хэндлом 0.
-SeM- (2004-10-29 17:52:00) [30]P2_tst.exe и test2.exe после ОК - прог-ма ... вызвала ошибку KERNEL32.DLL и будет закрыта (WinMe)
SPeller (2004-10-29 17:45:00) [31]ВАУ!!! Первый раз вижу программу с одним(!!!!) импортом. Владимир - моё уважение :)
_silver (2004-10-29 17:43:00) [32]SPeller © (29.10.04 17:41) [18]
Извини, не увидел это сообщение.
_silver (2004-10-29 17:42:00) [33]http://bonanzas.rinet.ru/Collapse.zip
SPeller (2004-10-29 17:41:00) [34]А-а, букву 'z' забыли :)
SPeller (2004-10-29 17:39:00) [35]Всё хорошо, но ссылка не работает. А на счет играться - лично мне не играться хочется, а посмотреть интересную мне весчь, а если понравится, то и использовать её. Ну и попутно помочь посильно её развитию.
Владимир Кладов (2004-10-29 16:31:00) [36]Не совсем пойму в чего поиграться хотите? Forth берете и то же самое (почти) получаете. Удобств - никаких, баги лезут из всех дыр, документации море, но мышление с ног на голову все, польская обратная запись, непривычное мышление... Для COLLAPSE - это просто - целевая машина, исполнитель, сталкиваться с ней реально не нужно. Выглядеть все будет как раньше... Только иногда может оказаться медленней. Зато сжатие будет еще раз в 5.
Владимир Кладов (2004-10-29 16:27:00) [37]http://bonanas.rinet.ru/Collapse.zip
lse (2004-10-29 13:03:00) [38]можно и пре-alfa :), ... ну дайте ж хоть что-то - поиграться так хочется...
ecm (2004-10-28 22:10:00) [39]2Speller & Kladov
Можно и Альфа-тестирование :)
Владимир Кладов (2004-10-28 21:08:00) [40]7156 строк и чем дальше в лес тем толще партизаны... :)