Здравствуйте, Дарней, Вы писали:
Д>А в плюсах не так, что ли?
А при чем здесь плюсы? В плюсах вообще нет возможностей, предоставляемых Nemerle.
Д>Давайте лучше временно придушим свою страсть к критиканству, и подумаем, как можно решить эту проблему лучше. Я полагаю, разработчики языка будут рады любым дельным предложениям.
+1
Так же к этому предложению я бы добавил прекратить выискивать в данном обсуждении противников Nemerle.
Д>Другой вариант — это разграничивать область действия макросов в явном виде, когда это необходимо.
Эти области могут сильно пересекаться и твое решение не будет работать. Так, я пытался приводить пример описания класса агента:
agent_class LoadBalancer
message MsgAddNode
{ /* Здесь должно быть описание класса MsgAddNode. */
// Для описания какой-то части потребовалось воспользоваться средствами другого макропакета.
autosubscribe NodeListMonitor;
...
}
event EvtAddNode( m : MsgAddNode )
{
// В реализации метода так же могут потребоваться другие макропакеты.
} autosubscribe MsgAddNode priority 0;
Д>Есть еще идеи?
1. Позволять использовать квалифицированное имя для расширений синтаксиса в случае конфликтов:
agent_class LoadBalancer
message MsgAddNode
{ /* Здесь должно быть описание класса MsgAddNode. */
// Для описания какой-то части потребовалось воспользоваться средствами другого макропакета.
alien.autosubscribe NodeListMonitor;
...
}
event EvtAddNode( m : MsgAddNode )
{
// В реализации метода так же могут потребоваться другие макропакеты.
} sobjectizer.autosubscribe MsgAddNode priority 0;
Причем, чтобы достаточно было указать минимально различимое имя (не полное, которое может быть очень длинным).
В качестве альтернативного синтаксиса для указания квалифицированного имени
autosubscribe#sobjectizer MsgAddNode ...;
2. Позволить ввести псевдонимы для ключевых слов.
alias autosubscribe from Macro.Library.Alien to msg_subscribe;
alias autosubscribe from SObjectizer.Macro.Library to event_subscribe;
agent_class LoadBalancer
message MsgAddNode
{ /* Здесь должно быть описание класса MsgAddNode. */
// Для описания какой-то части потребовалось воспользоваться средствами другого макропакета.
msg_subscribe NodeListMonitor;
...
}
event EvtAddNode( m : MsgAddNode )
{
// В реализации метода так же могут потребоваться другие макропакеты.
} event_subscribe MsgAddNode priority 0;
И ограничить область действия alias-ов.