Сообщающиеся макросы
От: _Claus_  
Дата: 19.11.11 13:11
Оценка:
Недавно была дискуссия и ее фрагмент:

_С_ >> В Boo вложенный макрос видит своего содержателя через переменную с его именем, и соответственно может там менять дописывать все что вздумается.

VladD2 >> В немерле просто не понадобится вложенный макрос.
Тут другие принципы. Обычно в Н для таких случае создают макро-атрибут который вешают на сборку или тип и он распознает нужный синтаксис и формирует нужный код.

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

Самый быстрый механизм работы СУБД через MemoryMapped Files. в net 4.0 появилась возможность напрямую с ними работать, ессно с ограничениями,
но все же. Обмен данных возможен только структурами. У меня классы. Задача: по описанию класса сгенерить структуру + вспомогательный код.

У меня было в Boo так:
Persist X
{  
   VAL a as int
   REF b as string
   REFVAL values as SortList of X
   ..
}


Вложенные макросы VAL, REF,.. создавали защищенные свойства,
добавляли о себе инфу макросу Persist, который потом разворачивал ее в структуру с такими или другими полями и методы.

Теперь в Н я не вижу как сделать то же самое. Макросы отметаем, берем макроатрибуты. Имеет проблемы:
явно объявленное поле (избыточное объявление имеем сразу — mutable оно всегда) надо трансформировать в property
c кодом. вероятно возможно, но дальше, куда кидать информацию о себе ? — если Persist макрос отработал, она уже бесполезна,
если нет, то как ему передать нужные данные? Если все же возможно, все равно есть явная проблема,
если вложенные макроатрибуты работают до атрибута Persist, им некуда регистрировать информацию о себе, если после,
она уже бесполезна.

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