Здравствуйте, rudzuk, Вы писали:
R>Макросы позволяющие менять синтаксис языка не нужны. Они может и хороши в качестве игрушек для церебральных соитий, но в практическом смысле несут больше вреда, нежели пользы. Как и чистая функциональщина, например.
Ох не туда ты попал. Ша тебя заклюют. Тут большая часть народа с бэкграундом Nemerle.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, hi_octane, Вы писали:
_>А твой страх что "в практическом смысле больше вреда" — это просто указание что культура подключения языковых наворотов пока не сформирована.
Скорее страхи высосанные из пальца. Чё-то как-то в Nemerle никому новые конструкции не мешали. Они ведь подключались нэймспэйсами. Не подключил — нет лишнего.
_>Но она не сложнее чем культура подключеням библиотек. Посмотреть, почитать, попробовать на тестовом проектике, подумать, полезно ли оно, и только потом подключать.
Самое смешное, что пропали бы вот эти недовольства новыми наворотами. Не подключай новые фичи (причем даже к отдельным файлам) и будешь гарантированно защищен от них.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, rudzuk, Вы писали:
R>А это не страх, это понимание в какую жопу превратиться код, особо одаренных личностей.
На чём основывается этот страх? У тебя есть реальный опыт?
Вот у всех кто с тобой тут дискутирует реальный опыт есть, а страхов нет, так как опыт положительный.
R>Людям этот код читать потом, но райтонли пейсателям на это пофиг.
Так расширения языка позволяют сделать код понятнее и безопаснее. Не все же стреляют себе в ногу. Тебя не пугает, что ты можешь вызвать какую-нибудь библиотеку?
R> Не, можно, конечно, ввести ограничения в проект на использование некоторых фичей языка... Ой, чего-то плюсами напахнуло.
Можно если язык модульный как Nemerle, но нельзя, если он монолитный как в C#, C++ и т.е.. В них ты можешь ограничить только версию языка. В модульных языках ты можешь ограничить список фичей.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, IT, Вы писали:
IT>ЗЫ. У нас в команде есть один девелопер, который упорно не ставит пробел между 'if' и '('. Любые воздействия и задушевные беседы бесполезны. Один единственный макрос решил бы эту проблему раз и навсегда.
Это и без макросов решается. Есть стайл-чекеры. Тупо выдают ошибку, если что-то не по стилю (или варнинг, как настроишь).
IT>ЗЫ2. Это я к тому, что плагинами к компилятору можно решать огромный круг задач, не только по генерации кода, но и по его контролю, высокоуровневой оптимизации (типа переписывания Enumerable в циклы) и т.п.
Просто эти стайл-чекеры можно было бы сделать одним из видов макросов.
И вообще, макросы не очень правильное название. Влияние Лиспа и Немерла. По уму — это расширяемые языки.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, IT, Вы писали:
IT>Может где и есть, но не в наших голимых ынтырпрайзах. Так что остаются только задушевные беседы.
Это у МС из коробки теперь. Настраиваешь стили и компилятор выдает ворнинги. Выставляешь настройку рассматривать их как ошибки и тебя орел даже скомпилить код не сможет.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Silver_S, Вы писали:
S_S>Есть еще не освоенное направление, как в Kotlin. При помощи лямбд и лаконичного синтаксиса имитировать DSL : Type-safe builders
Это решает 10% проблем. Даже ДСЛи не все так можно сделать.
S_S>P.S. А почему Kotlin не переводят на .Net? Куча второстепенных языков переведена. А для Kotlin технические нестыковки или идеологические (это не в интересах MS)?
Потому что он тут никому не нужен. Те кто сидят на МС ничего кроме от МС не потребляют.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
IT>>Может где и есть, но не в наших голимых ынтырпрайзах. Так что остаются только задушевные беседы. VD>Это у МС из коробки теперь.
Какая нафик коробка? C# 7.3 не хотел?
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, Евгений Акиньшин, Вы писали:
ЕА>>А что там реально такого нужного, чего нет в C# ? S>В основном мне понравились их функциональные литералы. Собственно, по ссылке как раз был пример DSL на этих литералах, который безо всяких макросов позволяет описывать XML/HTML/Json структуры.
Да, хорошая фича, но:
— ИМХО не настолько, чтобы целый другой язык нужен был. Проще в си-шарп доделать
— В шарпе подобный синтаксис используется для инициализаторов и это тоже очень удобно. В котлине, насколько я понял, такого нет. Надо писать apply()
— Для xml\html мне больше нравиться подход в blazor
Здравствуйте, VladD2, Вы писали:
VD>По ссылке аж три фичи добавили. Две полезных и одну бесполезную.
VD>
VD>Primary constructors for non-record classes and structs
VD>Using aliases for any type
VD>Default values for lambda expression parameters
VD>Самое полезное Using aliases for any type — давно такую хотел.
Если под бесполезной подразумевается: "Primary constructors for non-record classes and structs", то она мало того, что бесполезная, так ещё и вредная, т.к. будет продолжать способствовать замусориванию кода бесполезными "фичами", которые и так за последние 10+ лет обильно раздули язык своей практической бесполезностью.
Вообще это частое явление, когда процесс ведётся ради самого процесса, а не для решения каких-то практических потребностей, как в своё время говорил Ритчи:
Одни языки создаются для решения задачи, другие — для доказательства той или иной точки зрения.
На языке, в котором чего-то не хватает, программировать всегда проще, чем на языке, который богат своими возможностями.
Как по мне C# изначально подкупал сбалансированной простотой и практичностью, и первое время производилось добавление очевидных по полезности "фич", которых реально не хватало (Generics — 2.0, Lambda expressions — 3.0), а потом понеслась душа в рай ...
Здравствуйте, IT, Вы писали:
IT>Проблема в том, что чел как бы совсем не против следовать общим правилам, он постоянно как бы забывает, т.к. как бы привык к как бы такому стилю. Постоянно его контролировать — это всё равно что постоянно контролировать рост бурьяна в огороде.
А почему в таком случае не помогают настройки студии или .editorconfig? // Вопрос не праздный, интересна реальная сторона этого дела, какие кейсы бывают на практике.
Я сам тоже абсолютно не понимаю, зачем между ключевым словом и круглой скобкой ставить пробел но у нас такое же соглашение в проекте и настройки студии отлично помогают "не забывать".
Help will always be given at Hogwarts to those who ask for it.
Здравствуйте, IT, Вы писали:
IT>Какая нафик коробка? C# 7.3 не хотел?
Какие вы все продвинутые! А как?! Зачем и по какой причине апается инструментарий и среда?
-----
последний раз я апнул гошный проект просто потому что зависимость этого требовала. При этом я тут же столкнулся с проблемами типа
grpc-gateway/v2/ и grpc-gateway неспособны уживаться вместе. И ещё такими как криво прикрученная валидация метаданных в новой версии grpc-go (русские буквы — спецсимволы). При этом такой опыт был всю мою жизнь!!!111 Т.е. он подсказывает, что поднять версию среды — далеко не всегда простое занятие.
Всё сказанное выше — личное мнение, если не указано обратное.
Здравствуйте, VladD2, Вы писали:
VD> _>А твой страх что "в практическом смысле больше вреда" — это просто указание что культура подключения языковых наворотов пока не сформирована.
VD> Чё-то как-то в Nemerle никому новые конструкции не мешали.
Потому что Nemerle и есть игрушка для любителей церебральных соитий.
VD> Они ведь подключались нэймспэйсами. Не подключил — нет лишнего.
Это, конечно, хорошо, только читающему код человеку от этого не легче. Как он должен понять, что else в энумераторе это для пустого энумератора? Он, конечно, может догадаться об этом, но для подтверждения догадки, все равно, придется лезть в код макроса (ну спасибо, блин). А если макросы вообще семантику выражения меняют, где это видно в коде? Риторический вопрос. Тут уже предложили ломать макросом "некрасивый" код... Это же, блин, диверсия в чистом виде!
Здравствуйте, Silver_S, Вы писали:
S_S>Здравствуйте, IT, Вы писали:
IT>>А всё! ООП фичи давно закончились. Из ФП подтянули всё необходимое. Ну может только поддержку монад сделать (хотя...) вменяемую. А так осталось только переходить к реализации полноценного метапрограммирования ...
S_S>Есть еще не освоенное направление, как в Kotlin. При помощи лямбд и лаконичного синтаксиса имитировать DSL : Type-safe builders
S_S>P.S. А почему Kotlin не переводят на .Net? Куча второстепенных языков переведена. А для Kotlin технические нестыковки или идеологические (это не в интересах MS)?
хотя даже так https://giraffe.wiki/view-engine#samples смотрится неплохо, зачем вводить новые сущности если есть функции?
впрочем, раз уж тут речь о макросах зашла, иногда хочется код подсократить конечно, но это как коммунизм, все знают что это хорошо, но никто не готов пожертвовать
синицей в руках.
Здравствуйте, rudzuk, Вы писали:
R>Это, конечно, хорошо, только читающему код человеку от этого не легче. Как он должен понять, что else в энумераторе это для пустого энумератора? Он, конечно, может догадаться об этом, но для подтверждения догадки, все равно, придется лезть в код макроса (ну спасибо, блин).
if (mylist.Any())
foreach(var i in mylist)
Console.WriteLine(i);
else
Console.WriteLine("None");
Красота!
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, IT, Вы писали:
IT>>>Может где и есть, но не в наших голимых ынтырпрайзах. Так что остаются только задушевные беседы. VD>>Это у МС из коробки теперь. IT>Какая нафик коробка? C# 7.3 не хотел?
Вроде как это "фича" не версии языка, а студии / компилятора. Можно в 2022 студии программировать на 7.3 (опять же мой случай).
Help will always be given at Hogwarts to those who ask for it.
Здравствуйте, rudzuk, Вы писали: R>Он срабатывает
Хм, и по какому это правилу он срабатывает?
Я не знаю тонкости грамматики вашего макроса, но к чему бы ни цеплялся else — к if или к foreach — я могу написать пример кода с контринтуитивным поведением.
Здесь я предположил жадную грамматику, т.е. else прицепился к foreach; в таком случае он никогда не будет вызван. Ведь весь foreach расположен в true-ветке if, то есть в коллекции заведомо есть элементы.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Sinclair, Вы писали:
S> R>Он срабатывает
S> Хм, и по какому это правилу он срабатывает? S> Я не знаю тонкости грамматики вашего макроса, но к чему бы ни цеплялся else — к if или к foreach — я могу написать пример кода с контринтуитивным поведением.