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-процедуры и предварительный расчет константных выражений, сбор сведений о том,

какие значеняи могут принимать глобальные/локальные переменные, и за счет этого редуцировать ненужные процедуры

и всегда одинаковые параметры процедур.


SPeller   (2004-10-27 16:00:00) [41]

Если понадобятся бета-тестеры, пишите сюда, поможем.


Владимир Кладов   (2004-10-27 15:47:00) [42]

а потерпеть придется :) Я еще даже не знаю, как TRY-FINALLY/EXCEPT реализовывать, и что с потоками делать, даже для CALLBACK-функций еще концепция не реализована. А ведь еще надо с ASM-вставками что-то делать.... Хорошо хоть с вызовом API функций уже все проверено, работает. Генерация кода для вложенных процедур по сравнению с этим - пустячок :)


SPeller   (2004-10-27 12:57:00) [43]

Ждем результатов с нетерпением!


Владимир Кладов   (2004-10-27 12:48:00) [44]

Прогресс: 5700 строк, приступаю к трансляции базовых конструкций (тело процедуры/функции). Самое интересное так сказать.


Владимир Кладов   (2004-10-24 13:09:00) [45]

progress report. Некоторое продвижение. С интерфейсной частью покончено: завершен разбор семантики и генерация кода для интерфейсных частей в system.pas, types.pas, windows.pas, messages.pas, richedit.pas, kol.pas, err.pas. Т.е. исходный код еще пестрит //todo: сделать то и это, но проскакивает нормально, p2-файлы (исходные для p2-compiler) генерятся успешно, на вид выглядят нормально. Правда, это только интерфейсная часть, самое интересное (генерация кода) - только начинаю делать. Может, неделя, может две, а может, и больше потребуется.....
Код компилятора Паскаль->П2 достиг уже 4945 (отлаженных) строк. Время от момента создания файла = 8 дней (создан 16 октября сего года).
А тот тут про сроки спрашивали :)


Владимир Кладов   (2004-10-22 12:38:00) [46]

все именно так. Могу поправить самый первый пункт: пишем на языке высокого уровня (получаем си|паскаль|дельфи код)или берем готовое отлаженное приложение, написанное на Delphi/Free Pascal/Kylix/CBuilder/MSVC++...

К линкусу, очевидно, надо будет поправить сам эмулятор, переписать несколько системных модулей, изготовленных на П2+асм, прежде всего в части асм. И приложение само уже должно быть написано для линукса, прежде чем его компилировать в П2. Платформенная независимость здесь только в плане реализации исполнителя кода, сам код получается платформенно-зависимый, это все-таки не ява, где исполнитель машины отделен от самого кода и код сам по себе полностью не содержит никакой привязки к платформе. А так, да хоть для Sun или Эльбруса, не предвижу проблем. Программа будет оставаться весьма маленькой, поскольку бОльшая часть кода преобразуется в П2-код, а он на любой машине будет одинаково компактным.

Для знакомых с фортом могу предупредить, что от форта там только идея 2х стеков. Код выглядит совсем не так, я все-таки не настолько извращенец, чтобы отказываться от концепции локальных переменных. По мне, локальные (да и глобальные тоже) переменные - это и удобно, и эффективно, и главное - адекватно модели внутреннего мира ЯВУ, с которых надо компилировать.

Вообще, идея эта у меня возникла еще в 1988 году (я тогда и понятия не имел о языке Форт, тем не менее мозгов догадаться о том, что может дать двух-стековость, хватило), и была мною реализована в виде компилятора с подможества С (С-тран, 1989) в простейшую П-машину, для платформы DEC PDP. Сжатие оказалось не таким большим, как я тогда рассчитывал, всего в 3 раза, но PDP-код сжимать - это вам не с PC, там код получался очень даже компактненький даже при использовании С-компилятора... Да и не все идеи у меня только от тех времен, есть и более свежие. Например, свертка вызовов подпрограмм до 1-байтных (их можно теперь просто считать командами, просто каждая процедура П2-программы имеет как бы 64 своих собственных команды, и 64 таких команд - общие для всей П2-программы). Не было тогда у меня представления о параметрах "непосредственно" в коде, знакомство с Z80 в 199х дало мне понимание того, как этот простой прием позволяет ужать код в "ноль". В П2 этот способ сжатия кода - один из важнейших. Фактически вызов подпрограммы (1байт) + некоторое количество байтов вслед за этим вызовом - получается новая команда с одним или несколькими непосредственными операндами. В итоге, получается "машина" с переменной системой команд, которая гибко подстраивается под нужды данного конкретного приложения/языка программирования/программиста... Ладно, пойду код делать. Будет еще время описания описывать :)


Gleb   (2004-10-22 12:08:00) [47]

Владимир, я, конечно, понимаю, что вопрос глупый, но есть ли какой-то ориентировочный срок, когда будет что-то опубликовано? Т.е. это вопрос дней, неделей или месяцев?
Если будет уменьшение размеров и незамедление для больших проектов, то это будет чудо. Но всё равно хочется в это верить.


dmd   (2004-10-22 12:00:00) [48]

Правильно ли понимаю, схема будет такая?:

пишем на языке высокого уровня (получаем си|паскаль|дельфи код) -> компилируем в П2 (получаем неоптимизированный П2-код) -> оптимизируем П2-код (имеем улучшенный П2-код) -> компилируем П2 в асм-код (получаем асм-код с интегрированным эмулятором) -> компилим масмом в исполнимый файл.

И какие части этой схемы нужно будет переделать в случае ее приложения, допустим, к линуксу на не-х86?


Владимир Кладов   (2004-10-22 11:38:00) [49]

я сначала компилятор доведу до компиляции хотя бы простого KOL-приложения, без оптимизации, но чтобы работало оно при том. Потом опубликую полностью со всеми исходниками, и будем двигаться дальше, уже вместе. У меня есть большие надежды, что замедление будет достаточно мизерно, а может и совсем его не будет. А еще, если вся программа вмещается в кэш процессора, то это может дать еще и плюсы... И еще большие надежды на то, что чем больше исходный код был до коллапсирования, то тем больший процент сжатия будет достигаться. Двух-стековая архитектура П2-машины позволяет делать с кодом чудеса: практически в любых месте можно найти последовательность одинаковых команд, и вынести в общую процедуру, сэкономив тем самым до половины кода. Вообще не будет дублирующихся участков кода, как вам это нравится. Но это работа для одного из оптимизаторов.


Андрей   (2004-10-22 09:45:00) [50]

Огласите весь список, пожалуйста!

В том смысле, что руки чешутся помочь, и есть немного свободого времени вечерами.

Могу писать на Delphi/Asm, слегка на C
Немножко читал Кнута...:))

Из того, что написано, могу попробовать оптимизацию.
Только нужны примеры П2-программ или средство их делать, пусть даже и ущербное


ecm   (2004-10-22 09:25:00) [51]

Здорово!
И как Вас на все хватает?
Не нужна ли помощь? (Код,Тестирование,Документация) :)


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

Наверх

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