Re[10]: Optional Value. Уменьшение количества null reference
От: Alexander Polyakov  
Дата: 30.09.10 12:14
Оценка:
Здравствуйте, IT, Вы писали:

IT>>>Попробуй его в каком-нибудь навороченном высокорекурсивном алгоритме.

AP>>У меня ровно обратный опыт. При свободном владении этими приемами достаточно запутанные (в том числе рекурсивные) алгоритмы надежно реализуются.
IT>У меня опыт ровно обоюдный. Есть вещи, которые таким способом реализуются не плохо, есть, которые, от применения такого паттерна сильно страдают. Как правило пока речь идёт о компактных задачах, всё нормально. В алгоритмах на несколько тысяч строк вреда становится существенно больше, чем пользы.
Во-первых, я специально написал “при свободном владении этими приемами”. Это подразумевает понимание границ применимости этой техники.

Во-вторых, о каком сравнении пользы и вреда может идти речь, если ты еще даже не знаешь альтернативного варианта
Автор: IT
Дата: 13.09.10
? Сравнение пользы и вреда какого-либо подхода производят, когда есть некоторый известный эталонный вариант реализации; именно от этого эталонного варианта отсчитывают пользу и вред. Т.е. ты оперируешь величинами, не имея точки отсчета для этих величин. В общем, эти твои рассуждения -- чушь.

IT>... Как правило пока речь идёт о компактных задачах, всё нормально. В алгоритмах на несколько тысяч строк вреда становится существенно больше, чем пользы.

Техника является низкоуровневым приемом кодирования, поэтому соотношение между ее достоинствами и недостатками видно уже на небольших кусках кода. Очень сомнительно, что соотношение между достоинствами и недостатками меняется при росте количества строк (я такого не наблюдал).

AP>>>>На что будешь его заменять? во что рефакторить?

IT>>>Пока не знаю. По ходу что-нибудь придумаем. Главное по-меньше лямбд и замыканий
AP>>То есть хорошая замена еще даже не придумана, а реализованный, работающий live вариант назвали говном. Как-то не по-девелоперски это.
IT>Замена давно придума, качетсвенная и на порядки более мощная — ПМ. Непонятно, почему Хейльсберг и ко так сильно ей противится.
Эээ, что-то ты спрыгиваешь с контекста разговора. Ты пишешь, что сделал бранч для рефакторинга, я спрашиваю, на что заменять будешь. В моем последнем предложении слово “замена” именно в контексте твоего рефакторинга. Причем тут замена в виде ПМ? Нет у тебя замены в рамках C# 4.0, так и напиши, зачем юлить?

IT>Замена давно придума, качетсвенная и на порядки более мощная — ПМ. Непонятно, почему Хейльсберг и ко так сильно ей противится.

IT>А эмуляция МП на лямбдах — да, извини, но это самое обыкновенное унылое овно. Поначалу немного вставляет, но быстро проходит.
Я не сомневаюсь, что ПМ замечательная вещь, и что с его помощью тоже можно решить рассматриваемую задачу. Но суть в том, что для рассматриваемой задачи решения через ПМ и без него являются одинаковыми, совпадение решений почти посимвольное
Автор: Alexander Polyakov
Дата: 12.09.10
. Поэтому твое утверждение “без ПМ этим пользоваться не очень удобно
Автор: IT
Дата: 09.09.10
” просто не верно.

Как насчет ковариантности по generic параметру при реализации через ПМ? Потребуется ковариантность классов, а этого сейчас опять таки нет в языке.

Какой вариант решения через ПМ ты хочешь: через discriminated union или через type check? Если через discriminated union, то опять таки надо расширять язык дополнительной конструкцией. Если через type check, то вместо простого “x”, значение надо получать через обращение к свойству “x.Value”.

В общем, у нас уже есть решение, которое, во-первых, не требует расширений языка, а, во-вторых, ни в чем не уступает варианту через ПМ. Поэтому рассмотрение ПМ в рамках данного треда становится неуместным.
Re: Optional Value. Уменьшение количества null reference-ов.
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 30.09.10 13:43
Оценка:
Здравствуйте, Alexander Polyakov, Вы писали:

AP>Но наша цель более скромная – уменьшить количество null-ов.


var item = result.Document.Items
                .Where(IsAcceptable(x => x))
                .Select(x => x.Summary)
                .SingleOrDefault();


Покажи пожалуйста на примере, как твоя идея будет работать.
Цепочка что я привел, может быть в несколько раз длиннее и в ней где попало могут случаться null
Re[11]: Optional Value. Уменьшение количества null reference
От: IT Россия linq2db.com
Дата: 30.09.10 14:25
Оценка:
Здравствуйте, Alexander Polyakov, Вы писали:

AP>Во-первых, я специально написал “при свободном владении этими приемами”. Это подразумевает понимание границ применимости этой техники.


Я как раз об этом и говорю. У этой техники весьма узкие границы применимости.

AP>Во-вторых, о каком сравнении пользы и вреда может идти речь, если ты еще даже не знаешь альтернативного варианта
Автор: IT
Дата: 13.09.10
? Сравнение пользы и вреда какого-либо подхода производят, когда есть некоторый известный эталонный вариант реализации; именно от этого эталонного варианта отсчитывают пользу и вред. Т.е. ты оперируешь величинами, не имея точки отсчета для этих величин. В общем, эти твои рассуждения -- чушь.


Чушь — твои рассуждения про чушь. Как минимум у меня есть опыт использования других техник и элементарное сравнение их с ПМ на лямбдах не в пользу последнего.

IT>>... Как правило пока речь идёт о компактных задачах, всё нормально. В алгоритмах на несколько тысяч строк вреда становится существенно больше, чем пользы.

AP>Техника является низкоуровневым приемом кодирования, поэтому соотношение между ее достоинствами и недостатками видно уже на небольших кусках кода. Очень сомнительно, что соотношение между достоинствами и недостатками меняется при росте количества строк (я такого не наблюдал).

Ну вот тебе одно неудобство. Поставь точку останова на фукнции, принимающей лямбду. Поставил? А теперь сделай эту лямбду строк на 50. Какого цвета у тебя стал фон в редакторе?

С лямбдами большого размера в C# работать не удобно. Среда для этого не предназначена. ПМ на лямбдах подразумевает интенсивное использование лямбд в одном вызове. Чем они больше, тем менее удобно с ними работать. В Немерле, например, для ПМ сделана специальная поддержка в студии, позволяющая схлопывать паттерны в регионы, реализация которых занимает более одной строки. В результате работа с любым объёмом кода никаких неудобств не вызывает.

IT>>Замена давно придума, качетсвенная и на порядки более мощная — ПМ. Непонятно, почему Хейльсберг и ко так сильно ей противится.

AP>Эээ, что-то ты спрыгиваешь с контекста разговора. Ты пишешь, что сделал бранч для рефакторинга, я спрашиваю, на что заменять будешь. В моем последнем предложении слово “замена” именно в контексте твоего рефакторинга. Причем тут замена в виде ПМ? Нет у тебя замены в рамках C# 4.0, так и напиши, зачем юлить?

Так я ещё не решил. Может я всю эту кухню на Немерле перепишу.

IT>>А эмуляция МП на лямбдах — да, извини, но это самое обыкновенное унылое овно. Поначалу немного вставляет, но быстро проходит.

AP>Я не сомневаюсь, что ПМ замечательная вещь, и что с его помощью тоже можно решить рассматриваемую задачу. Но суть в том, что для рассматриваемой задачи решения через ПМ и без него являются одинаковыми, совпадение решений почти посимвольное
Автор: Alexander Polyakov
Дата: 12.09.10
. Поэтому твое утверждение “без ПМ этим пользоваться не очень удобно
Автор: IT
Дата: 09.09.10
” просто не верно.


Ключевое слово здесь — "почти". Не понятно вообще зачем нужен ПМ, если есть такая классная вещь как лямбда

Как минимум для отладки этого кода нужно будет либо занырнуть в твой метод и вынурнуть в одной из лямбд, либо перенести тело лямбды на новую строку, чтобы суметь поставить в её теле точку остановки.

AP>Как насчет ковариантности по generic параметру при реализации через ПМ? Потребуется ковариантность классов, а этого сейчас опять таки нет в языке.


В каком языке?

AP>В общем, у нас уже есть решение, которое, во-первых, не требует расширений языка, а, во-вторых, ни в чем не уступает варианту через ПМ. Поэтому рассмотрение ПМ в рамках данного треда становится неуместным.


Почему не уместным? Ты же как раз именно его изобрёл
Если нам не помогут, то мы тоже никого не пощадим.
Re[12]: Optional Value. Уменьшение количества null reference
От: Alexander Polyakov  
Дата: 30.09.10 18:42
Оценка:
Здравствуйте, IT, Вы писали:

AP>>Во-первых, я специально написал “при свободном владении этими приемами”. Это подразумевает понимание границ применимости этой техники.

IT>Я как раз об этом и говорю. У этой техники весьма узкие границы применимости.
А я не об этом! Границы применимости весьма широкие.

AP>>Во-вторых, о каком сравнении пользы и вреда может идти речь, если ты еще даже не знаешь альтернативного варианта
Автор: IT
Дата: 13.09.10
? Сравнение пользы и вреда какого-либо подхода производят, когда есть некоторый известный эталонный вариант реализации; именно от этого эталонного варианта отсчитывают пользу и вред. Т.е. ты оперируешь величинами, не имея точки отсчета для этих величин. В общем, эти твои рассуждения -- чушь.

IT>Чушь — твои рассуждения про чушь. Как минимум у меня есть опыт использования других техник и элементарное сравнение их с ПМ на лямбдах не в пользу последнего.
Ну какие, какие техники? Скажи же уже наконец, не томи . А пока ты не назвал эталонную технику, с которой сравниваешь, мое доказательство того, что твои рассуждения чушь, остается в силе.

IT>Ну вот тебе одно неудобство. Поставь точку останова на фукнции, принимающей лямбду. Поставил? А теперь сделай эту лямбду строк на 50. Какого цвета у тебя стал фон в редакторе?

Не пойму в чем проблема, в цвете? Цвета в VS настраиваются.
Всё ожидаемо и логично, цветом выделяется выражение, на котором стоит брекпоинт, каких-либо неудобств у меня это не вызывает, я к цветам неприхотлив.

IT>Ключевое слово здесь — "почти". Не понятно вообще зачем нужен ПМ, если есть такая классная вещь как лямбда

IT>Как минимум для отладки этого кода нужно будет либо занырнуть в твой метод и вынурнуть в одной из лямбд, либо перенести тело лямбды на новую строку, чтобы суметь поставить в её теле точку остановки.
Требуются пояснение, почему “ключевое слово здесь — "почти"”? Пока это голословно.
Брекпоинты можно ставить с точностью до символа (F9).
А вообще, аргумент абсурден до безобразия, давайте зафигачим все функции в язык, поскольку если их вынести в библиотеки, то в них дебагер заходит, неудобно.

IT>С лямбдами большого размера в C# работать не удобно. Среда для этого не предназначена. ПМ на лямбдах подразумевает интенсивное использование лямбд в одном вызове. Чем они больше, тем менее удобно с ними работать. В Немерле, например, для ПМ сделана специальная поддержка в студии, позволяющая схлопывать паттерны в регионы, реализация которых занимает более одной строки. В результате работа с любым объёмом кода никаких неудобств не вызывает.

А в IDEA, например, любые блоки можно сворачивать: if, for и т.д. Т.е. проблема более общего плана, а не специфична для лямбд. Просто надо сделать также как в IDEA и будет нам счастье . И делать специальную поддержку ПМ со стороны среды не нужно. А на текущий момент меня удовлетворяет resharper-овская рамка, охватывающая регион между скобками.

IT>Так я ещё не решил. Может я всю эту кухню на Немерле перепишу.

Так и пиши, что отказ от “говеной” техники влечет за собой отказ от C#-а. Всё стало бы гораздо прозрачней.

IT>В каком языке?

В C#, тред то про него .

AP>>В общем, у нас уже есть решение, которое, во-первых, не требует расширений языка, а, во-вторых, ни в чем не уступает варианту через ПМ. Поэтому рассмотрение ПМ в рамках данного треда становится неуместным.

IT>Почему не уместным? Ты же как раз именно его изобрёл
Да не изобретал я ПМ. Не формулировал я задачу, как покрыть лямбдами юзкейсы ПМ-а. Я решал другую конкретную задачу. Сделав пару элементарных привычных шагов по выносу общей функциональности в отдельный модуль, я получил решение конкретной задачи на языке C#. Получилось некоторое сходство с ПМ-ом, но что с этим сходством делать?
Далее твоя логика: о так это ж мы ПМ получили, блин, но не совсем ПМ, ооо... тогда в топку, поскольку ПМ это ууууууу, ПМ это ааааааааа! И выкидываем сначала решение исходной задачи, а потом уж и сам язык C# полетел в топку.

Кстати, ПМ ты мыслишь вместе discriminated union? или ты хочешь в C# ввести ПМ без discriminated union?

IT>... ПМ на лямбдах подразумевает интенсивное использование лямбд в одном вызове...

Кстати, если лямбд передается много в один метод, то я иногда множество лямбд заменяю на интерфейс и классы с ручным прописывание замыканий. Да, слегка громоздко, но при навигационной поддержке ReSharper-а эта громоздкость не сильно чувствуется.
Re[13]: Optional Value. Уменьшение количества null reference
От: IT Россия linq2db.com
Дата: 30.09.10 20:26
Оценка:
Здравствуйте, Alexander Polyakov, Вы писали:

IT>>Я как раз об этом и говорю. У этой техники весьма узкие границы применимости.

AP>А я не об этом! Границы применимости весьма широкие.

У песочной лопатки тоже границы применимости широкие. Но котлованы почему-то удобнее рыть экскаваторами.

IT>>Чушь — твои рассуждения про чушь. Как минимум у меня есть опыт использования других техник и элементарное сравнение их с ПМ на лямбдах не в пользу последнего.

AP>Ну какие, какие техники? Скажи же уже наконец, не томи . А пока ты не назвал эталонную технику, с которой сравниваешь, мое доказательство того, что твои рассуждения чушь, остается в силе.

Мне нравится твоя примитивная логика. Назвать техники? Например, тот же ООП. Назвал? Теперь твои рассуждения — чушь.

IT>>Ну вот тебе одно неудобство. Поставь точку останова на фукнции, принимающей лямбду. Поставил? А теперь сделай эту лямбду строк на 50. Какого цвета у тебя стал фон в редакторе?

AP>Не пойму в чем проблема, в цвете? Цвета в VS настраиваются.
AP>Всё ожидаемо и логично, цветом выделяется выражение, на котором стоит брекпоинт, каких-либо неудобств у меня это не вызывает, я к цветам неприхотлив.

Молодца. А к одному единственному брейкпоинту размером в экран ты прихотлив?

IT>>Ключевое слово здесь — "почти". Не понятно вообще зачем нужен ПМ, если есть такая классная вещь как лямбда

IT>>Как минимум для отладки этого кода нужно будет либо занырнуть в твой метод и вынурнуть в одной из лямбд, либо перенести тело лямбды на новую строку, чтобы суметь поставить в её теле точку остановки.
AP>Требуются пояснение, почему “ключевое слово здесь — "почти"”? Пока это голословно.

А разве это не ясно из твоего кода? Или ты не только к цвету, но и вообще к любому мусору неприхотлив?

AP>Брекпоинты можно ставить с точностью до символа (F9).


Ага, в режиме отладки. Только чтобы поставить брейкпоин (F9) в режиме отладки нужно сначала где-то остановиться.

AP>А вообще, аргумент абсурден до безобразия, давайте зафигачим все функции в язык, поскольку если их вынести в библиотеки, то в них дебагер заходит, неудобно.


Точно! Мне твоя изощрённая (или извращённая, пока не знаю как правильней) логика нравится всё больше.

AP>А в IDEA, например, любые блоки можно сворачивать: if, for и т.д. Т.е. проблема более общего плана, а не специфична для лямбд. Просто надо сделать также как в IDEA и будет нам счастье . И делать специальную поддержку ПМ со стороны среды не нужно.


Этого решили не делать из соображений целесообразности.

AP>А на текущий момент меня удовлетворяет resharper-овская рамка, охватывающая регион между скобками.


В глазах от рамок не рябит?

IT>>Так я ещё не решил. Может я всю эту кухню на Немерле перепишу.

AP>Так и пиши, что отказ от “говеной” техники влечет за собой отказ от C#-а. Всё стало бы гораздо прозрачней.

Да я как бы этого никогда и не скрывал C# не самый лучший язык для решения определённого класса задач.

AP>Да не изобретал я ПМ. Не формулировал я задачу, как покрыть лямбдами юзкейсы ПМ-а. Я решал другую конкретную задачу. Сделав пару элементарных привычных шагов по выносу общей функциональности в отдельный модуль, я получил решение конкретной задачи на языке C#. Получилось некоторое сходство с ПМ-ом, но что с этим сходством делать?

AP>Далее твоя логика: о так это ж мы ПМ получили, блин, но не совсем ПМ, ооо... тогда в топку, поскольку ПМ это ууууууу, ПМ это ааааааааа! И выкидываем сначала решение исходной задачи, а потом уж и сам язык C# полетел в топку.

Была бы моя воля полетел бы. Но пока нельзя. А по поводу твоего решения — не парься. Нормальный велосипед. Не думаю, что он далёко ушел по удобству использования от тех же '?:', '??', но кому-то может и понравится поначалу. С другой стороны народу полезно знать, какие ещё бывают альтернативы, в том числе встроенные в другие языки.

AP>Кстати, ПМ ты мыслишь вместе discriminated union? или ты хочешь в C# ввести ПМ без discriminated union?


Both.

IT>>... ПМ на лямбдах подразумевает интенсивное использование лямбд в одном вызове...

AP>Кстати, если лямбд передается много в один метод, то я иногда множество лямбд заменяю на интерфейс и классы с ручным прописывание замыканий. Да, слегка громоздко, но при навигационной поддержке ReSharper-а эта громоздкость не сильно чувствуется.

Приходится отказываться от замыканий и размазывать логику по разным местам. Хотя, при усложнении логики, конечно же, приходится выносить её в отдельные модули.
Если нам не помогут, то мы тоже никого не пощадим.
Re[14]: Optional Value. Уменьшение количества null reference
От: Alexander Polyakov  
Дата: 01.10.10 09:58
Оценка:
Здравствуйте, IT, Вы писали:

AP>>Брекпоинты можно ставить с точностью до символа (F9).

IT>Ага, в режиме отладки. Только чтобы поставить брейкпоин (F9) в режиме отладки нужно сначала где-то остановиться.
Нет! Брекпоинты с точностью до символа ставятся в любом режиме. Это делается с помощью F9 или с помощью контекстного меню Breakpoint->Insert Breakpoint.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.