Saturday, September 27, 2014

Перестройка.

(обновлено 14.11.2014)

"Они сделали себя сами" 
(из гламурного журнала о звёздах порношоубизнеса)


Нам нужен план.


А пусть-ка ДГ делает себя сам, иначе в этой жизни не добиться успеха.

План по воспитанию самостоятельности.

1. Переводим нынешний код DrakonGen в кодограмму.

2. Генерим новый код DrakonGen2 который повторяет функционал DrakonGen. Цифру 2  ставим, чтобы не поехала крыша от рекурсии))

3. Проверяем. Получаем новый код DrakonGen2 посредством DrakonGen2 и дальше уже делаем его основным рабочим вариантом. Почему на этот раз не используем цифру - 3? А чтобы тренировать мозги посредством постижения рекурсии)) 

3. Производим визуальную инкапсуляцию с целью выделить участки кода отвечающие за производство белка конкретного типа кода, зависящего от конечного языка(AS или Java)

4. Копируем генетическую структуру варианта AS в структуру Java. Настраиваем выходной синтаксис. 

5. Генерим DrakonGen Java-версии 

6. Засовываем результат(DrakonGen Java) в IDE (допустим, Eclipse) и пробуем получить DrakonGen2(Java) из той же самой кодограммы.

7. Если получилось - мы молодцы, если нет, то нас лечат от рекурсии в психушке.


Ну, что же, имеем блестящий(в некоторых пунктах) план. Получится ли с реализацией? Посмотрим.




Реализация.



1. Перевели код в кодограмму. Экая монотонная гусеница! Но она работает(генерит DG2, при помощи которого генерятся новые версии DG2), дальше, постоянно клонируя её, будем модифицировать проявляя структуру.  


Проверяем. Генерим DG2 самим же DG2 из кодограммы DG2. Работает. Оставляем копию на добрую память.


Вырезаем малоинтересные куски кода и перемещаем их в конец. По-хорошему их надо ещё больше инкапсулировать, но пока не будем


Разрисовали структуру квадратика - начало парсинга. На мой вкус, выглядит неплохо.  


Вставляем силуэт в код. И сделаем "гусеницу" немного  компактнее. Затем проверяем.


И сразу исправляем логические ошибки(чёрт!) в прототипе.


Продолжаем визуализировать код ДраконГен-а. Производим постоянные проверки результата тем, что выполняем генерацию кода из кодограммы и ею же генерим новую версию. Вот что хотите со мной делайте, но это красивый подход! :)) Да, не всегда получается работоспособная версия. Тогда правим кодограмму и обрабатывае её старой версией(DG). После исправления опять переходим на DG2.  Но это ладно, забейте, не хочется путать народ. 


Красные стикеры - это обнаруженные логические ошибки в коде. Часть ошибок правим по-быстрому на кодограмме. Те что маркированы красным, не столь опасны и будут поправлены позже.


Эта молекула может воспроизводить себя сама. Правда, пока из моей кодограммы... А что если... Что если заставить её создавать свою же кодограмму? :) Смешно...


Сохраняем рабочие версии. Заодно наблюдаем процесс превращения гусеницы в ... дракона. Это ещё и косвенное нагрузочное тестирование всего комплекса.
А кроме всего прочего, эта "эволюция" демонстрирует как сложность, изначально таящаяся в коде(в гусенице), постепенно вылазит на поверхность и становится видимой.


Ну вот, вроде бы закончил. Окончательная кодограмма DG2.


На всякий случай проверил DG2А на Игрушке. Перегенерил все классы из её кодограммы, в которой довольно много всего. Кстати, это наглядный пример некрасивой кодограммы. (: Но отчасти, можно оправдаться тем, что постоянно меняю стиль, ищу лучший для восприятия вариант.


Всё плавает, стреляет, уклоняется от торпед, смелые нападают, трусливые убегают. Кажется, ничего не поломал.



Вносим коррективы в план.

Прежде чем двинуться дальше, нужно поправить все обнаруженные недостатки(помеченне красными стикерами). Но вот какая мысль меня гнетет... Создам я два клона DG2A и DG2J внешне, визуально они будут выглядеть одинаково, но по коду будут отличаться очень сильно и что тогда? Поддерживать две версии? Не дело... Что если отделить код от иконы и сделать возможным выбирать конкретный код на стадии генерации? Не будет ли это очень геморно? И где хранить варианты кода? Что-то в этой идее есть... но как наилучшим образом реализовать? И так ли уж это нужно? Как часто нужна этакая "переносимость"? Хотя... Если найти легкое решение, и оно, кажется, есть, то почему бы не сделать?
(алгоритмическая инвариантность)

Не перестаем трудиться над имиджем, так как, в визуальном программировании только это важно. (имидж всё)

Итак, сейчас мы на пунктах №5 и №6. DG2J почти работает, осталось окончательно отладить и протестировать.

Ура! Все пункты включая №7 выполнены! DG2J генерит сам себя.

Эта версия достойна гордого названия 0.9.4 :)


Та как появились существенные изменения в языке ДраконГен, необходимо подумать, как поступать дальше.

8. Вносим поправки в визуальную часть Игрушки, в связи с изменениями спецификации языка и тестируем.

9. Ещё дорабатываем язык. Устраняем замечания, убираем из него всю кодозависимость, все служебные выражения и слова(if,else,switch,case).

10. Опять пересобираем, отлаживаем, тестируем DG2A и DG2J.

11. Пересобираем, отлаживаем, тестируем Игрушку.

12. Оформляем спецификацию языка ДраконГен

13. Выкладываем спецификацию и все коды в Сеть.


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


28.10.2014

В планах произошли существенные изменения. Решил сначала реверс инжиниринг сделать J2DG иначе без этого тяжко и неинтересно.


Ещё немного в сторону ушел от магистрального направления. Сделал микро дракон-язык ДраконАкт (DrakonAct) который пока состоит всего из трех икон и позволит управлять запуском "лифта" вверх и вниз. 

Так выглядит главная командная кодограмма, обработка которой инициирует процессы кодогенерации(лифт вниз) или реверсинжениринга(лифт вверх)


Из одной кодограммы может получиться несколько документов, это определятся внутри неё.




Ну, вот. А дальше видится план из трех пунктов:

1.  Заканчиваем реверсинжениринг.
2.  Подправляем спецификацию Дракон-Джас и рисуем спецификацию на систему Дракон-Джаз
3.  Подводим итоги, публикуем коды и Конец! Надеюсь, это случится сразу после новогодних праздников, но загадывать не будем.)



01.11.2014

Решил выложить для ознакомления желающих кодограммы Дракон-Джас, в том виде как они есть на текущий момент. Так как я использую не последнюю версию yEd(она мне не понравилась), поэтому выложил и версию yEd-3.10.2 с которой работаю.

кодограммы Дракон-Джас



14.11.2014

Перевел проекты(confex и drakongen) на GitHub.

С реверсом покончил, скажем так. Работа приостановлена на неопределенное время.

Дальше нужно привести в эстетический порядок DrakonGen2.graphml и окончательно избавиться от ActionScript наследия. Я для себя уяснил, что мультиреальность это реальность :), но сопровождать двуреалие труд напрасный и излишний.


No comments:

Post a Comment