Форум
Компьютерные священные войны
Тема
Как правильно задавать вопросы
B
I
abc
U
X
3
X
3
H1
H2
H3
H4
H5
H6
Asm
C/C++
C#
Erlang
Haskell
IDL
Java
Lisp
MSIL
Nemerle
ObjC
OCaml
Pascal
Perl
PHP
Prolog
Python
Ruby
Rust
SQL
VB
Здравствуйте, vdimas, Вы писали: V>Здравствуйте, Sinclair, Вы писали: S>>Выведет причину того, что комбинировать делегаты, [i]возвращающие значение[/i], не имеет смысла. V>Угу. V>Это расплата за отсутствие генериков в первом дотнете. V>Понятно же, что мультикастность можно прикрутить сбоку, но в отсутствии генериков предоставить вменяемую библиотечную реализацию невозможно. V>Я над этим вопросом и сам голову ломал в те же года, когда дотнет вышел - раздражает же что любой юзвеский делегат наследуется от мультикаст-делегата. V>А по-другому в отсутствии инструментов для типизированного своего оборачивания такой функциональности не сделаешь, поэтому оборачивает система. V>И поэтому делегаты такие дорогие в создании и вызове. V>>>Т.е., юридической основы для иска не было. S>>Ну, я не хочу сейчас лезть в юридические дебри. V>Да нет там никаких юридических дебрей, вот в чём странность. V>Т.е. иск юридически ничтожен. V>Поэтому, в кач-ве аргументов были не юридические доводы, а "общечеловеческие", филосовские и прочий такой бред. V>Это почему суды присяжных, таки, фуфел, судопроизводством должны заниматься профессионалы. V>Смотри, вот ты однажды утром проснулся, взял, допустим, открытый стандарт С++, который не покрыт ни патентами, ни запретами на клонирование, ни чем бы то ни было еще. V>Вот ты "форкнул" стандарт для себя, добавил нужных тебе фич, назвал С+++, написал компилятор, показал людям. V>Ни один юрист не объяснит, с какой радости тебя за это вдруг потащат в суд. V>Поэтому, ничего юридического в той истории нет. V>Есть изнанка капитализма: деньги (в т.ч. интересы инвесторов и прочее) превыше закона. S>>Возможно, мы сейчас бы жили в мире, где дотнета нет, зато есть java с value-типами и нормальными генериками, а не этой порнографией. V>Не факт, достаточно посмотреть на веб. V>MS вставляли палки в колеса в течении 15 лет, не давали развивать веб. V>Почему? - потому что сами отставали. V>MS на веб забила в итоге, бо и так IE в течении 15 лет был лучше любых альтернатив. V>А потом эти отстающие с грехом пополам допилили эппловский WebKit до более-менее вменяемого состояния, выкатили Хром. V>Сказали: "Вот теперь мы тоже готовы развивать веб, так давайте же его развивать!" V>Но 15 лет потеряно. V>Так же было бы и с джавой - это были бы такие же точно гири на ногах. V>Т.е., в IT индустрии в плане стандартов происходит равнение на отстающих. V>А вылезающих вперёд враждебное к друг другу до этого стадо объединившись совместно мочит выскочку, прямо как в старом советском мультике: V>https://www.youtube.com/watch?v=phl_hFPBY0U S>>То есть вместо двух управляемых платформ мы бы имели одну, сочетающую лучшие стороны обеих. V>Имели бы одну платформу, отстающую в развитии от имеющихся сегодня лет на 15. )) V>А так дотнет мог делать что хотел... V>Ну и Джава ойкнула от неожиданости и тоже начала шевелиться. S>>Ну вот в нашей компании ресурсы, конечно, перекидываются по велению руководства, но продакт менеджмент стоит достаточно близко к руководству, чтобы а) понимать, на основании чего перекидываются ресурсы и б) в определённой степени влиять на приоритеты. V>У нас это одни и те же люди. S>>То есть анонимную локальную функцию - можно, безо всяких ворнингов, а именованную - уже нельзя. :xz: V>На новый круг заход? )) V>Вычислительное выражение C# чисто, но блок кода - не факт. V>Поэтому блоки нельзя. S>>То есть в делегате ссылаться на потенциально нечистую функцию - ок V>Отродясь. S>>а в expression - уже зашквар? V>Я так думаю, что из тех соображений, мол, а как нечистую ф-ию переводить в SQL? V>Но ограничение всё-равно странное, бо использованный в чистой ф-ии делегат тоже в SQL не уедет, т.е. expression-to-DB провайдер ругнётся в рантайме. V>Т.е., можно было бы во всех случаях выбрасывать рантайм-ошибки, в т.ч. и для выражений-блоков, если нет возможности перевести их в SQL. V>>>А как обеспечить чистоту функций на уровне языка - непонятно. S>>Это опять рационализация иррационального. V>ИМХО, это еще один инструмент проектирования. V>Есть же языки, которые позволяют помечать нужные ф-ии как чистые. V>В таких ф-иях нельзя производить нечистые вычисления, компилятор не скомпилит. V>Причём, это удобней чистых ФП-языков, т.к. ф-ия запросто может быть чистой даже если использует мутабельные переменные в своём теле. V>>>Про локальные я полностью согласен - это непредсказуемая дичь в случае Expression и обычных делегатов, т.к. не всегда очевидно, что именно захватывается и где, т.к. таких локальных ф-ий может быть несколько, но они шарят общий контекст. S>>Как видим, в случае делегатов это никому не мешает. V>Откуда "мы" это видим, если у тебя проявляется та же ошибка, только теперь без ворнинга? )) V>Чтобы исправить ошибку, необходимо создать еще одну ф-ию, замыкающую каждый раз новый экземпляр контекста: V>[cs] V> var funcs = new List<Func<int>>(); V> for(int i = 0; i < 4; i++) V> { V> static Func<int> getI(int i) => () => i; // вспомогательная ф-ия для нового контекста V> funcs.Add(getI(i)); V> } V> funcs.ForEach(f => Console.WriteLine(f())); V>[/cs] V>Используется тот трюк, что в мутабельных языках создаётся новый контекст на каждую ф-ию с замыканием, т.е. аргументы ф-ии показанным образом можно замкнуть byval, в отличие от локальных переменных того же самого контекста, которые замыкаются byref. V>Это ж стандартная головная боль JS - регулярная необходимость преобразования захвата переменных byref в byval. V>Забавно порой почитывать JS-программистов, которые даже спустя десяток лет опыта в JS в этом плавают. V>C# тоже этой головной болью теперь наградили, но хоть компилятор ворнинги выдаёт, если прошляпишь. V>А в JS "можно всё" (С). V>Но удобней, конечно, когда в языке есть способ явно указать способ захвата переменной - по ссылке или по значению. V>Например, как в С++ или PHP. V>>>Но статические локальные ф-ии чисты относительно контекста, т.е. не подменяют значений и ссылок локальных переменных. S>>Правильный ответ - локальные функции настолько редко используются в делегатах и выражениях, что всем просто наплевать. V>А откуда ты взял про "редко", не поделишься источником статистики? )) V>Это просто новая фича, а чуть не весь используемый сейчас в дотнете код был написан до её появления. V>А взять наши внутренние либы, писанные специально для .Net Core - это относительно новый код (в среднем пару лет ему), и там все новые фичи используются в полный рост. V>И по-факту никакого "редко". V>Меня раньше останавливала "тяжесть" локальных ф-ий, если де-факто контекст метода не использовался, но с вводом статических локальных ф-ий последний раздражающий фактор был преодолён. V>Я же говорю - в последние годы разработчики дотнета как мои мысли читают, бгг... V>Т.е. я хорошо понимаю рассуждения, приводящие к таким решениям, бо именно эти рассуждения происходят у меня при написании кода и каждый раз испытываешь досаду от нехватки тех или иных вещей - и тут ровно эти вещи, вызывающие досаду, исправляются. Ну так сразу понятно, какого склада ума люди за дотнет взялись. V>А ты такой пишешь "никому не надо". )) V>Как не вспомнить классику: "Слишком далеки они от народа!" (С) А.И.Герцен.
Теги:
Введите теги разделенные пробелами. Обрамляйте в кавычки словосочетания с пробелами внутри, например:
"Visual Studio" .NET
Имя, пароль:
Загрузить
Нравится наш сайт?
Помогите его развитию!
Отключить смайлики
Получать ответы по e-mail
Проверить правописание
Параметры проверки …