мудрый when (if)
От: Othello  
Дата: 13.08.07 10:49
Оценка:
Пишу на Nemerle
when (queuePriority <= 0)
                throw ArgumentOutOfRangeException("queuePriority");

Смотрю рефлектором и вижу вот что
if (((queuePriority <= 0) ? 1 : 0) == 1)
    {
        throw new ArgumentOutOfRangeException("queuePriority");
    }


Можно ли это както обойти ? или это баг ? или так правилнее ???
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: мудрый when (if)
От: Сергей Туленцев Россия http://software.tulentsev.com
Дата: 13.08.07 11:34
Оценка:
Здравствуйте, Othello, Вы писали:

O>Пишу на Nemerle

O>
O>when (queuePriority <= 0)
O>                throw ArgumentOutOfRangeException("queuePriority");
O>

O>Смотрю рефлектором и вижу вот что
O>Можно ли это както обойти ? или это баг ? или так правилнее ???

Так движок паттерн-мэтчинга работает. Ты образцы посложнее напиши, еще и не такое увидишь.
Сделать это место покрасивше можно, но некогда.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
--
Re[2]: мудрый when (if)
От: Othello  
Дата: 13.08.07 12:41
Оценка:
немного меня это разочаровало — но думаю, что жить с этим смогу
в самом .Net и не такое встречал ...
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: мудрый when (if)
От: Константин Л. Франция  
Дата: 13.08.07 19:48
Оценка:
Здравствуйте, Othello, Вы писали:

[]

O>Смотрю рефлектором и вижу вот что

O>
O>if (((queuePriority <= 0) ? 1 : 0) == 1)
O>    {
O>        throw new ArgumentOutOfRangeException("queuePriority");
O>    }
O>


Вот это пипец...

O>Можно ли это както обойти ? или это баг ? или так правилнее ???
Re[2]: мудрый when (if)
От: IT Россия linq2db.com
Дата: 14.08.07 00:56
Оценка: +2
Здравствуйте, Константин Л., Вы писали:

КЛ>Вот это пипец...


Это не пипец, это фигня. Заняться некому.
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Re: мудрый when (if)
От: VladD2 Российская Империя www.nemerle.org
Дата: 14.08.07 20:34
Оценка:
Здравствуйте, Othello, Вы писали:

O>Смотрю рефлектором и вижу вот что

O>
O>if (((queuePriority <= 0) ? 1 : 0) == 1)
O>    {
O>        throw new ArgumentOutOfRangeException("queuePriority");
O>    }
O>


Есть такой косяк. Кто-то воде даже пылатся замазать, но так, значит, до конца и не искоренил.

O>Можно ли это както обойти ? или это баг ? или так правилнее ???


Не обрашай внимание. JIT это выбрасывает в лучшем виде. Так что на производительности это не отразится. Ну, будет пара лишних байт в сборке.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: мудрый when (if)
От: IT Россия linq2db.com
Дата: 17.08.07 17:12
Оценка: +1
Здравствуйте, Othello, Вы писали:

O>Можно ли это както обойти ? или это баг ? или так правилнее ???


Кстати. На самом деле генерируемый код в релизе практически идентичен шарповскому. А приведённое поведение проявляется только в Debug. Но в Debug делаются специальные трансформации практически на всех стадиях, в частности, для того, чтобы можно было удобнее расставить точки останова для match и т.п. Так что на генерируемый в дебаге код лучше вообще не смотреть.
... << RSDN@Home 1.2.0 alpha rev. 717>>
Если нам не помогут, то мы тоже никого не пощадим.
Re: мудрый when (if)
От: BOleg Россия  
Дата: 24.08.07 11:43
Оценка:
Здравствуйте, Othello, Вы писали:

O>Можно ли это както обойти ? или это баг ? или так правилнее ???


Я бы вообще смотрел (и смотрю) на генерируемый Reflector'ом код с заметной долей скептицизма. Ибо рефлектор сам занимается оптимизацией кода.
Получаемый код сильно зависит от параметра настроек рефлектора Optimization (none, .NET 1.0, .NET 2.0 и .NET 3.0).
Как пример скажу, что рефлектор выкидывает локальную переменную, если она используется один раз и заменяет её инициализатором. Даже при отключенной оптимизации.
SomeClass a=tmp.Current;
a.Run();

будет заменён на
SomeClass a;
tmp.Current.Run();
В человечишке все должно быть прекрасненьким: и одёжка, и душенка, и мордочка, и мыслишки.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.