CftClub.ru
Клуб специалистов ЦФТ-Банк

Фантомные макросы

 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle
Предыдущая тема :: Следующая тема  
Автор Сообщение
De Mian
Профи


Вступление в Клуб: 26.09.2008
СообщениеСр Июл 11, 2018 10:27   Фантомные макросы Ответить с цитатой
Полезность: 1
Столкнулся тут с такой вещью, назовем её МАКРОС-ФАНТОМ.
Столкнулся то давно, но про природу этого осенило только сегодня.
Итак пример.
Есть библиотека L1 :
Код:
pragma include(::[DOCUMENT].[L2]);
pragma macro(TEST,'pragma error(7777)');

Есть библиотека L2 :
Код:
pragma include(::[DOCUMENT].[L1]);

Т.е в L1 определен макрос TEST, при этом L1 и L2 импортируют макроопределения друг-друга

Далее, Есть операция L3, которая импортирует либо L1 либо L2 либо обе. это не важно - эффект будет одинаков:
Код:
pragma include(::[DOCUMENT].[L2]);
begin
   &test;
end;

ok. Всё компилится успешно.
Но теперь , если убрать из библиотеки L1 макрос TEST, то всё продолжает компилиться, как будто макрос есть.!!!
Природу этого бага примерно понимаю. Это взаимная INCLUDE библиотек L1 и L2, когда одна из них компилится, то забирает в себя все макросы другой. в итоге максроса уже нет, но при компиляции они друг\другу передают его фантомное последнее описание.

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

Что думаете по поводу? сталкивались ? как обходили ?
vtar
Эксперт


Вступление в Клуб: 20.03.2009
СообщениеСр Июл 11, 2018 13:24   Re: Фантомные макросы Ответить с цитатой
Полезность: Нет оценки
De Mian пишет:

Что думаете по поводу? сталкивались ? как обходили ?


не сталкивался. А в чом проблема все макросы собрать в отдельной библиотеке и ее инклюдить куда надо, чтобы исключить циклический инклюд ?
De Mian
Профи


Вступление в Клуб: 26.09.2008
СообщениеСр Июл 11, 2018 17:52   Re: Фантомные макросы Ответить с цитатой
Полезность: Нет оценки
vtar пишет:

не сталкивался. А в чом проблема все макросы собрать в отдельной библиотеке и ее инклюдить куда надо, чтобы исключить циклический инклюд ?


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


Вступление в Клуб: 22.05.2008
СообщениеПн Июл 30, 2018 22:15   Re: Фантомные макросы Ответить с цитатой
Полезность: Нет оценки
De Mian пишет:
vtar пишет:

не сталкивался. А в чом проблема все макросы собрать в отдельной библиотеке и ее инклюдить куда надо, чтобы исключить циклический инклюд ?


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


Изобилие макросов делает код нечитабельным и несопровождаемым. Гибкость весьма условная. Например, если ошибка всплывает, то по номеру строки на нее не выйти.
De Mian
Профи


Вступление в Клуб: 26.09.2008
СообщениеПн Июл 30, 2018 23:12   Re: Фантомные макросы Ответить с цитатой
Полезность: Нет оценки
ezhem пишет:

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

использование макросов по-любому чиху создает плохой код.
Обоснованное же и грамотное использование макросов , особенно макросов execute и process позволяет делать поистине фантастические вещи, которые на чистом pl+ не сделать.
По поводу ошибки. Вообще не вижу проблемы- там же есть отладка в компиляторе. Сотни раз всплывали ошибки при разработке и никогда не было проблемой найти: Включаешь в администраторе словаря продолжительный уровень отладки и читаешь лог.
По сути, макросы execute и process это почти точка доступа(hook) внутрь компилятора.
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Рейтинг@Mail.ru