All streams
Search
Write a publication
Pull to refresh
10
0
Игорь Т. @legigor

Пользователь

Send message
А как там с MS-UA?
Хороший пример, когда бездумное применение var приводит к косякам:

var anObj = new SomeComponent();
Assert.Taht(anObj.Property1, Is.True);

вместо явного указания такого плана

ISomeComponent anObj = new SomeComponent();
Assert.Taht(anObj.Property1, Is.True);
Кто сервис платит — тот его и танцует :)
ИМХО, гики сами ее себе создают, ставя такой крыжик :)
Настроящие гики выбирают третий пункт :)
5,6 можно обобщить: хочется полноценный pattern matching :)
Правит НЛО :)

Вообще, ИМХО, это сигнал…
Вот как все это работает в человеческом сообществе: с одной стороны есть милиция и судебные органы, которые баннят косяки в поведении свободных граждан, но с другой стороны должны приниматься меры, чтобы этих косяков возникало как можно меньше.

Ведь хорошее государство — это не то, где замечательные законы и хорошо работает полиция и тюрьмы, а то, где при хороших законах мало у кого возникает потребность их нарушать…

В этомнаправлении какие-то разработки вообще ведутся в бэкофисе Хабра?
Самое интересное, что саморегулируемое сообщество (с) Хабра может запросто вывести мерзкий кросс-пост на главную страницу.
Спрашивается, почему такое происходит?
По идее, всякое административное вмешательство в процессы контентогенерации сродни читерству.
А иначе «саморегулируемое сообщество» приобретает такой же смысл, как «свободное демократическое общество» в свете событий в мире за последние N*10 лет
Говорю сразу — я ничего против Ruby не имею :)
Ну дык о роли LISP и SmalTalk никто и не спорит :) Nemerle был приведен, как более близкий для .NET язык, чем Ruby :)

А насчет C# — да, при всех своих новых достоинствах он остается слишком уж объектно-ориентированым…
Есть такая тенденция… Всякая функциональщина и динамика активно приходят в мейнстрим.

Но если и сравнивать это с каким-то языком, то скорее с Nemerle, который все эти штуки уже давно именно в .NET превнес.
Навскидку.

Такой код:

foreach (var entity in entities)
{
   var stopWatch = new Stopwatch();
   stopWatch.Start();

   var pi = typeof(Class1).GetProperty(«Property1», BindingFlags.Instance | BindingFlags.Public);
   var val = pi.GetValue(entity, null);

   stopWatch.Stop();
   Console.WriteLine(«{0}\t{1}», val, stopWatch.Elapsed);
}/* This source code was highlighted with Source Code Highlighter.*/


Показывает такой результат:



Что дает повод крепко пофлудить :)
Да, совет дельный :)
Специально для вас :)

Безусловно, преждевременная оптимизация — зло. Но зато если она «навалилась» — для этого и написан этот пост :)
А про разбор expression trees придется дождаться подходящей проблемы в текущем проекте :)
Здесь хорошая статья о том, как там дела обстоят со скоростями в Rеflection и различных способах оптимизации
Могу отдать тему на дальнейшую разработку :)
А область применения этой техники такая же, как и у рефлексии, в общем-то…

Например, задачка валидации состояния объектов на основе информации из какого-то файла конфигурации или даже DSL. Или самый «подножный» пример — это разработка своего супер-универсального DAL, чтобы одним методом проинициализировать любой тип данными из БД…
Сейчас попрошусь к ним :)
Все проще — это когда ты включаешь девайс, а он как минимум не дымиться… :)

en.wikipedia.org/wiki/Smoke_test

Information

Rating
Does not participate
Location
Киев, Киевская обл., Украина
Date of birth
Registered
Activity