января 11, 2014

DEmbro: что с ним было в 2013

Хочется вкратце рассказать о том, в каком состоянии сейчас находится DEmbro и что было сделано за прошедший 2013 год.

Начну с некоторых проблем, с которыми я столкнулся при разработке. Одна из них, как ни странно, — компиляция. Для сборки dembro использовалась довольно сложная система, которая использовала M4 для препроцессинга команд на специальном языке, описывающем встроенные команды, с последующей генерацией кода, заголовков, документации и т.д. Эта система сборки была написана плохо, не учитывала многих зависимостей (и потому практически при каждом запуске требовала полной перекомпиляции), засоряла всё лишними файлами, частенько ломалась на какой-нибудь из платформ (Windows/Linux), в общем требовала полного переосмысления и переработки.

Сам M4 оказался не так хорош на практике. Необходимость постоянно следить за вложенностью цитат при активном использовании кода, сложности с лишними пробелами и переносами строк, коллизии синтаксиса M4 с программой делают почти непригодной M4 для чего-то сложнее, чем просто макросы. Поэтому было принято решение полностью отказаться от M4 как языка обработки командных файлов DEmbro и почти отказаться от использования в программах на паскале (но не полностью, иногда макросы мне всё же нужны). В частности, я закрываю разработку своего побочного проекта metapascal.

Ещё одна проблема — моё паскальное наследие. Пришло понимание, что, даже несмотря на то, что на DEmbro я успешно написал две игры и свой HTTP-сервер (который уже полтора года используется), полностью перейти на него удастся не так быстро, как хотелось бы. Как следствие, мне захотелось привести свои модули на паскале в порядок, а это не так-то просто — в моих разных проектах модули в чём-то отличаются и потому не совместимы друг с другом, от этого тормозится параллельное развитие нескольких проектов. Код самого DEmbro плох и требует написания некоторых фундаментальных вещей для дальнейшего развития, на данном этапе дело практически зашло в тупик.

Наконец, были проблемы с тестированием. При разработке DEmbro добавление фичи может сломать десять других как нечего делать, и уследить за этим вручную очень трудно. Требовалось регрессионное тестирование.  И хоть модуль для этого датирован аж июнем 2011 года, тесты для него практически не написаны, на регулярной основе запускать их не представлялось возможным.

Мутным текстом выше я обозначил проблемы, теперь же не менее мутным текстом опишу как я эти проблемы решил.

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

Полностью переработал систему сборки, и не только для конкретно DEmbro, но и вообще для всех своих проектов. Она учитывает и регрессионное тестирование, и несколько режимов сборки, и аккуратное складывание файлов, с нормальным учётом всех зависимостей. Теперь у меня очень гибкая и сделанная дешёвыми средствами система сборки, о которой я планирую написать цикл статей.

Я долго думал чем заменить M4 при обработке языка команд. Рассматривал много вариантов, но в конце концов остановился на том, чтобы написать этот обработчик на самом DEmbro. Плюс очевиден: DEmbro, как и большинство форт-языков, предназначен для создания проблемно-ориентированных языков, и поэтому написание такого обработчика занимает пару часов времени и 50 строк кода. Минус: для использования этого обработчика нужен уже скомпилированный DEmbro, что усложнаяет развёртывание на новой платформе, но препроцессинг можно сделать и на другой платформе, и потом просто перенести сгенерированные файлики, поэтому этот минус не так страшен.

Под этот новый обработчик нужно переписать все командные файлы, этого я до сих пор не сделал (их много), поэтому уже почти год команды не перегенерировались. Можно даже сказать, что DEmbro более года находится в некомпилирующемся состоянии. Но переписывание команд планируется осуществить в ближайшие несколько недель.

Свои библиотеки на паскале приведены в порядок, структуризированы, и готовы к развитию. Я уже начал использовать новые фичи из нестабильного fpc 2.7.1, о которых может быть напишу позже.

Почти весь прошлый год ушёл на разработку своей системы сборки, разработку нескольких других (тоже амбициозных) проектов, и вноса тяжёлых изменений в код DEmbro. Сам DEmbro был в анабиозном состоянии, а за последнюю неделю из него начал выходить. Ещё несколько дней активной разработки и все обозначенные выше проблемы окажутся решёнными.

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


1 комментарий:

Анонимный комментирует...

Добавил ваш язык в список: http://compiler.su/entuziasty-razrabotchiki-kompilyatorov-i-ikh-proekty.php

Отправить комментарий

Постоянные читатели

Обо мне

Моя фотография
Мой e-mail: vitek_03(at)mail(dot)ru