Re[81]: MS забило на дотнет. Питону - да, сишарпу - нет?
От: Sinclair Россия https://github.com/evilguest/
Дата: 17.09.21 16:34
Оценка: 2 (1) +1
Здравствуйте, vdimas, Вы писали:

V>Облом было ради такой задачи возиться аж с опкодами.

С какими ещё опкодами?
Во-первых, там внутри — dynamicMethod. https://stackoverflow.com/questions/43041190/do-compiled-expression-trees-leak
Во-вторых, даже если бы его там не было, то достаточно самому состряпать DynamicMethod и отдать его в Expression.CompileToMethod().

V>Оперировать известными типами проще, чем неизвестными через метаинформацию и систему приоритетов приведений.

V>Не было задачи написать полноценный компилятор, нужно было написать "вычислитель" выражений, оперирующих известными переменными-параметрами.


V>И если малые плюшки имеют низкую трудоёмкость, то их часто в приоритете двигают вперёд.

V>Так проще сугубо психологически даже разработчикам — не накапливается технический долг.

V>>>А здесь ситуация вдвойне забавной получилась, бо поддержка статических локальных методов в expression builder не стоит дороже написания нового кода, который сгенерирует и выдаст новую ошибку компиляции с новым номером при попытке использовать статические локальные методы в expressions.


V>Для этого не обязательно заглядывать в код, достаточно знать, что статический локальный метод компилятор превращает в обычный статический метод в отличие от нестатического метода, захватывающего контекст, а обычный статический метод допустим для использования в Expression.


V>Тут всё слишком стандартно — хотя я где-то приветствую увлекающихся людей и "болею" за них, но в деле принятия решений их слово последнее.



V>Как можно желать того, о чём не в курсе? ))

Аффект — это от английского affect = "to act on, to change something".
Речь не о том, что кто-то из пользователей чего-то хотел. А о том, что миллионы людей страдали, описывая SQL в строковых константах.

V>Ты опять цепляешься за конкретику, не понимая общего принципа разработки дотнета и языка C#.

V>(по каждому нововведению есть кучи и обсуждений, и убедительных обоснований)

V>Добавление в язык linq не потребовало изменять рантайм, к сожалению.

V>К сожалению — потому что пришлось завязать его целиком на имеющихся делегатах.
V>А те всегда наследники MulticastDelegate.
V>Тоже так себе компроммиссное решение, из которого теперь непонятно как выкручиваться.
Нуу... да. Теоретически можно замутить свой SinglecastDelegate на основе managed function pointer, а в компилятор запилить умение компилировать лямбду в него .
Тогда лёгким манием руки дропаем нынешний код Func<...>, переименовываем SinglecastDelegate<...> в Func<...>, и наслаждаемся.
Мультикастами могут быть только Action<...>.

S>>Отсутствие дотнета аффектило, в первую очередь, позиции Microsoft

V>Ага, а теперь MS отпустил дотнет в свободное плавание.
V>И выглядит так, что практически совсем свободное.
Угу. Вот на это больше похоже.

V>Если некая контора отпустила некий стандарт в свободное плавание, то за каким чёртом у неё остаётся возможность контроллировать дальнейшее развитие этого стандарта?

V>Сюрр...
Свободное плавание явы началось только в ноябре 2006. Т.е. через 9 лет после иска Sun, и через пять с половиной после мирового соглашения. А, да, и через четыре с половиной — после выхода дотнета.

V>Я же отслеживаю фичи, обсуждения, расставляемые приоритеты и как вообще принимается решения о назначении приоритетов.

V>Сейчас фичи включаются в релизы по мере фактической готовности, а приоритеты расставляются исходя из того, есть кому заниматься такой-то задачей или нет.
Это вы сейчас про свою секретную компанию, или про дотнет?
Если про дотнет, то мы оба неправы.
Исходно локальные функции прекрасно работали в Expression Trees, и там захватывался ровно mangled method name — всё, как вы хотели.
Вот pull request, который это изменил: https://github.com/dotnet/roslyn/pull/3849
Не было никаких комитетов и обсуждения "добавить их в expression builder или нет", не было оценок стоимости, полезности, и движения в бэклоге.
Не было никаких "нам сложно объяснять, почему статик можно, а нестатик нельзя" — было можно оба.
Не было даже рассуждений типа "при разборе деревьев выражений имена важны, и замена имени метода могла сбить с толку" (https://stackoverflow.com/a/44229632).

Просто конкретная Эшли Хаук решила, что "References to local functions are now disallowed in expression trees, which may or may not change in the future (Previously they were generated as a reference to a mangled method name, which seemed wrong)".
Почему wrong? Да потому, что "local functions in general are bad" (смотреть обсуждение PR). Всё. Это reason enough.

V>А в эту область (exression и прочий сахар) разработки нужны люди навроде тебя, любящие дотнет в его исходной парадигме, чтобы холили и лелеяли такой взгляд на вещи в платформе, усиливали своим вкладом те самые моменты.

V>Но сейчас там задают тон люди, не принявшие исходную парадигму, т.е. твои "природные дотнетные враги", навроде меня. ))
И это тоже выглядит неверным. Я вот пока не понимаю, почему де Смет не делает Pull Request. Уже больше года, как поддержка всего на свете в Expression готова.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.