посоветуйте архитектуру
От: v_su Мухосранск  
Дата: 08.11.10 15:44
Оценка:
Предыстория

Есть некий программный пакет П1 с входным языком Я1. Для удобного использования этого пакета я решил расширить его язык. Расширение заключается в добавлении дополнительных режимов к существующим командам языка. Команда в расширенном режиме разворачивается в набор команд на том же входном языке Я1. Алгоритмов генерации таких наборов может быть несколько (назовем их А1,А2,...) Для всего этого я создал dsl на ruby, который максимально близко повторяет синтаксис Я1. Так же реализовал несколько сменных алгоритмов. Все вроде худо-бедно работает.

Сейчас я решил расширить функционал своей поделки т.к. помимо моего любимого пакета П1 существует еще куча пакетов П2,П3,... со своими Я2,Я3,... которые умеют то что не умеет П1. Так же я хочу свои данные на Я2 которые я хочу обработать на П1. Все языки декларативные, по функциональности все достаточно похожи но есть и различия.

Хотел было дописать существующий код, но увы, понял что лучше начать сначала и по правильному

Планируя реализацию я решил что пока ограничусь Я1,Я2,Я3 и парой алгоритмов. Для языков буду создавать их dsl-аналоги ДЯ1..ДЯ3 на ruby (это упрощает разбор синтаксиса). Так же поразмыслив пришел к выводу что количество ДЯ и Я может и не совпадать и вообще это суть разные вещи.

Вопрос

Мой вопрос заключается в том как оптимальнее построить архитектуру приложения с такими требованиями:

1. Из любого из ДЯ1..ДЯ3 получать файл на любом из Я1..Я3 при помощи любого из А1..А2
2. Возможность как можно более безболезненного добавления новых элеметов в систему: нового входного языка(ДЯ), нового выходного языка(Я), нового алгоритма
Re: посоветуйте архитектуру
От: LeonidV Ниоткуда http://vygovskiy.com
Дата: 08.11.10 17:43
Оценка:
Я бы смотрел в сторону создания унифицированного кода. Тогда так получается:
Исходный код (любой) → ваш транслятор для него → универсальный код (УК) → транслятор УК в любой код.

Только я насчет алгоритмов не слишком понял.
http://jvmmemory.com — простой способ настройки JVM
Re[2]: посоветуйте архитектуру
От: v_su Мухосранск  
Дата: 09.11.10 02:02
Оценка:
Здравствуйте, LeonidV, Вы писали:

LV>Только я насчет алгоритмов не слишком понял.


Предметная область — специфическая разновидность топографии. При съемке на местности снимается 10 или более параметров, а пакеты как правило обрабатывают 3 из них (они все любительские и простенькие).
Например команда из Я1, которая выводит примитив-отрезок: data a b c
На расширенном языке она же, но с остальными данными: data a b c d e f g h
Примеры алгоритмов:
1) вывод отрезка как в Я1 (1 отрезок)
2) вывoд отрезка в виде треугольника (3 отрезка)
3) вывoд отрезка в виде прямоугольника (4 отрезка)

LV>Я бы смотрел в сторону создания унифицированного кода. Тогда так получается:

LV>Исходный код (любой) → ваш транслятор для него → универсальный код (УК) → транслятор УК в любой код.

У меня примерно так сейчас и есть, универсальный код лежит во массивах. Алгоритмы его читают и сразу создают конечный код. Поэтому и возникла проблема с добавлением второго выходного языка.

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

Отдельно хочу спросить как оптимальней хранить универсальный код? Мне моя реализация не нравится.
Re[3]: посоветуйте архитектуру
От: Miroff Россия  
Дата: 09.11.10 19:31
Оценка:
Здравствуйте, v_su, Вы писали:

_>Предметная область — специфическая разновидность топографии. При съемке на местности снимается 10 или более параметров, а пакеты как правило обрабатывают 3 из них (они все любительские и простенькие).


OFF: Уж не топосъемка ли пещер?
Re[4]: посоветуйте архитектуру
От: v_su Мухосранск  
Дата: 13.11.10 13:53
Оценка:
Здравствуйте, Miroff, Вы писали:

M>OFF: Уж не топосъемка ли пещер?


да, она самая
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.