Макросы Nemerle – расширенный курс. Часть 3
От: VladD2 Российская Империя www.nemerle.org
Дата: 14.11.07 17:39
Оценка: 590 (12)
Статья:
Макросы Nemerle – расширенный курс. Часть 3
Автор(ы): Чистяков Влад (VladD2)
Дата: 05.02.2008
В третьей части статьи о макросах Nemerle речь пойдет о разработке метаатрибутов, то есть макросов, которые выглядят как Custom-атрибуты.


Авторы:
VladD2

Аннотация:
В третьей части статьи о макросах Nemerle речь пойдет о разработке метаатрибутов, то есть макросов, которые выглядят как Custom-атрибуты.
http://nemerle.org/Banners/?g=dark
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Макросы Nemerle – расширенный курс. Часть 3
От: Аноним  
Дата: 20.02.08 10:47
Оценка:
Пример не совсем удачен исходный код компилировался только в Debug версию:
Assert(parameter : object != null, <#The "NotNull" contract of parameter #>
<#"parameter" has been violated.#>);

А то что получили в итоге будет тормозить каждый вызов Release.
Re[2]: Макросы Nemerle – расширенный курс. Часть 3
От: Сергей Туленцев Россия http://software.tulentsev.com
Дата: 20.02.08 11:09
Оценка: +1
Здравствуйте, <Аноним>, Вы писали:

А>Пример не совсем удачен исходный код компилировался только в Debug версию:

А>Assert(parameter : object != null, <#The "NotNull" contract of parameter #>
А> <#"parameter" has been violated.#>);

А>А то что получили в итоге будет тормозить каждый вызов Release.


Насчет этого я думаю так: не все ошибки удается проверить во время тестирования. Что-то неизбежно попадет в релиз. И лично я готов принести производительность в жертву (небольшую в данном случае), если взамен я получаю декларативно объявленный контракт и вразумительное сообщение об ошибке, буде таковая случится у заказчика.
... << RSDN@Home 1.2.0 alpha rev. 788>>
--
Re[3]: Макросы Nemerle – расширенный курс. Часть 3
От: USBLexus Россия  
Дата: 20.02.08 11:20
Оценка:
Здравствуйте, Сергей Туленцев, Вы писали:

СТ>Насчет этого я думаю так: не все ошибки удается проверить во время тестирования. Что-то неизбежно попадет в релиз. И лично я готов принести производительность в жертву (небольшую в данном случае), если взамен я получаю декларативно объявленный контракт и вразумительное сообщение об ошибке, буде таковая случится у заказчика.


Т.е. Вы считаете что такой код приведеный ниже поможет выявить что-либо у заказчика? Только если Вы отдадите ему Debug, потому что как сказано в примечании "Assert – это System.Diagnostics.Trace.Assert()" т. е. в Release он не попадет. И примерно вот что отанется:
if (p.ty.CanBeNull)
  {
    def loc = m.Body.Location;
    def msg = <#The "NotNull" contract of parameter "#>
            + $<#$(p.Name)" has been violated.#>;
    
    def name = <[ $(p.AsParsed().ParsedName : name) ]>;
    def condition = if (p.ty.Fix().IsValueType) name
                    else                        <[ $name : object ]>;

    m.Body = <[
      when ($condition == null){}
        
      $(m.Body)
    ]>;
    
    m.Body.Location = loc;
  }
  else
    Message.Warning(p.Location, 
      $"Parametr '$(p.Name)' has type '$(p.ty)' which not support null");
#define QUESTION(b) (2*b)||(!(2*b)) (c) William Shakespeare
Re[4]: Макросы Nemerle – расширенный курс. Часть 3
От: USBLexus Россия  
Дата: 20.02.08 11:30
Оценка: +1
Хотя нет, наверное попадет, перепутал с System.Diagnostics.Debug.Assert
#define QUESTION(b) (2*b)||(!(2*b)) (c) William Shakespeare
Re[5]: Макросы Nemerle – расширенный курс. Часть 3
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.02.08 16:16
Оценка:
Здравствуйте, USBLexus, Вы писали:

USB>Хотя нет, наверное попадет, перепутал с System.Diagnostics.Debug.Assert


Именно. А вообще-то — это пример. Макросы тем и хороши, что каждый может написать собственную версию которая будет отражать его предпочтения.

В мои задачи не входило создать макрос для дргих. В них входило показать как создавать макросы.
http://nemerle.org/Banners/?g=dark
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.