Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

COLLAPSE [COLLAPSE, Windows]


Страницы:   1 2 3

Владимир Кладов ©   (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 строк и чем дальше в лес тем толще партизаны... :)


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо