Re[3]: [ANN] Опыт генерации C++ с помощью Ruby
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 06.03.08 07:27
Оценка:
Здравствуйте, K13, Вы писали:

E>>>Может не совсем в тот форум, но отдельного форума по динамическим языкам нет. Да и я здесь выступал как противник метапрограммирования на C++ных шаблонах и макросах, а эта статья как раз показывает, что без подобных техник можно обойтись, если воспользоваться динамическим языком для генерации C++ кода. Так что надеюсь, что кому-нибудь будет интересно.


S>>какой ужас, кто спорит, что сишный код (с классами) можно генерить с помощью левой приблуды, в итоге пользователю

S>>для использования(при разработке) вашей либы придётся эту самую приблуду установить, а это ой как не хорошо.
S>>плюс выигрыша явна никакого нет по сравнению с макросами и шаблонами, вообщем не зачёт.

K13>Еще один минус такого подхода -- невозможность тонкой настройки генерации без изменения утилиты.


Сильно сомневаюсь, что тонкая настройка возможна при использовании макросов и шаблонов вообще.

K13>Вопрос в сторону -- чем провинились шаблоны?


Максимальная цель была следующей -- я задаю список полей PDU с описанием их имен, типов, размеров и дополнительных ограничений. Из этого единственного списка я должен получить класс, в котором:
1. Для каждого поля PDU есть атрибут некоторого C++ного типа. В этом атрибуте должно быть: строковое имя поля, ограничение на размер и, возможно, начальное значение.
2. Для каждого поля PDU должно быть пять публичных методов, осуществляющих операции над соответствующим атрибутом.
3. Должен быть метод encode, который упаковывает значения атрибутов именно в том порядке, в каком они перечислены в моем списке.
4. Должен быть метод decode, который распаковывает значения атрибутов именно в том порядке, в котором они перечислены в моем списке.
5. Должен быть метод debug_dump, который выполняет отладочную печать содержимого всех атрибутов именно в том порядке, в котором они перечисленны в моем списке.

С помощью Ruby сгенерировать это не представляет труда вообще (чтобы иметь представление о том, как это выглядит на практике -- вот демонстрация). Как это сделать с помощью макросов и шаблонов -- я не знаю.

K13>Если уж генерить код, то почему С++, а не сразу ассемблер?


Это что, серьезный вопрос, на который вы ждете ответ?


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.