Здравствуйте, hi_octane, Вы писали:
_>Быстрое развитие языка в строну удобства возможно только через macro api и усилия комьюнити.
Есть сомнения в "быстром развитии усилиями коммюнити". Тут неявно предполагается, что уж коммюнити никак не ошибется и точно зайдет куда надо. Как правило, что ни разрабатывается этим самым коммюнити, первым делом начинает дико фрагментироваться, а вот развитие — как то не всегда и видно, т.к. в каждой группе не хватает людей для мейнтенанса хотя бы своего направления. И обратная совместимость в таких вот "коммюнити дривен" экосистемах как то остаётся на обочине.
Вот скажем какой комитет создать — так можно. Вобщем, я думаю, что люди просто не хотят отдавать контроль над развитием яп непонятному коммюнити.
Здравствуйте, hi_octane, Вы писали:
_>Собственно если бы какая-то "кухарка" завопила что любая из перечисленных фич "абсолютно непонятна и вредит читабельности", впору было бы поднимать вопрос о профпригодности.
Это попахивает шапкозакидательскими настроениями. Что стало с тем самым проектом? Может его уже давно на С# переписали?
_>И снова ограничения по фичам в случае макросов вводить куда удобнее — ты можешь просто не включать их в свой проект. Они обычные библиотеки, просто с фичами а не классами. Если лид или команда решили в каком-то проекте использовать какой-то макрос — значит он удобен, понятен, и облегчает работу. А если решили ничего не использовать — то code review закончится на этапе изучения "что ты за новые либы в проект притащил, нам не надо". И в исходники смотреть не придётся.
Проблемы возникают в тот момент, когда шаред-код требует то тех, то этих фич. Макросы в силу своей сущности крайне интрузивны. Соответсвенно депрекейтнутый пакет создаёт чудовищную проблему для тех, кто его использовал. С фремворком хоть промигрировать можно относительно просто, а макросы проникают вообще везе. Эдак все время будет висеть риск полного переписывания.
Напомнило:) За каждую безобразную выходку безпробельную скобку you'll be dealt with by me!!! Я думаю так: или ты ставишь процесс так, чтобы думали, что коммитят, включая твое отсутствие, либо — suck it up and move on
Спросят тебя — для чего макросы юзал — что ты скажешь? — не смог добиться следования правилам форматирования кода, запилил макрос от безысходности?
Здравствуйте, _FRED_, Вы писали:
IT>>Какая нафик коробка? C# 7.3 не хотел? _FR>Вроде как это "фича" не версии языка, а студии / компилятора. Можно в 2022 студии программировать на 7.3 (опять же мой случай).
Студия у меня есть. Проблема в билдсервере, на котором стоит MSBuild от 2017-й студии.
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, VladD2, Вы писали:
IT>>Какая нафик коробка? C# 7.3 не хотел? VD>И студию нельзя по новее поставить?
Стоит. Но на билдсервере без шансов. Там моему босу нужно выходить на начальника его начальника его начальника, чтобы потом опуститься по цепочке, чтобы услышать как нас вежливо посылают на йух по причине непреодолимых обстоятельств. Но на следующий год у них всё запланировано. А на следующий год они сделают так, что ты сможешь использовать новый MSBuild, но только твой проект нужно будет немножко перевести на Core.
Итого, мы сейчас обсуждаем элементарну возможность запретить некоторые вещи через языковые возможности (если бы они были), либо чтобы получить кривенькое подобие такой возможности — перевести весь проект на новую платформу
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, 尿컙拋㕪⬎⤇Ǥ꧃푙刾ꄔ, Вы писали:
尿Ǥ푙>Спросят тебя — для чего макросы юзал — что ты скажешь? — не смог добиться следования правилам форматирования кода, запилил макрос от безысходности?
В том числе. Прикинь!
ЗЫ. Спроси у Влада как он за одним полем location в Немерле гонялся по всему коду. Девелопер должен был его объявить обязательно мутабельным (или наоборот, в общем обратным дефолтному). Как думаешь каким образом проблема была решена?
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, 尿컙拋㕪⬎⤇Ǥ꧃푙刾ꄔ, Вы писали:
尿Ǥ푙>Не знаю, ребята — как по мне, так это дикредитирует светлую идею макросов расширяемых языков! Хотя, для кого то это будет и работой.
Лучше заниматься прикручиванием сбоку всякой хрени, которая следит за стилями? Причём оно это может делать по разному у тебя локально и на билдсерверах. А тут без шансов.
Представь, пришёл, например, в твой какой-нибудь опен-соурс проект умелец и в обход всем .editorconfig нахерачил в коде лидирующих табов (или пробелов по вкусу). Тебе во время ревью нужно будет это обязательно проверять. А так ему сам компайлер этого не позволит.
ЗЫ. Compile-time — это самая надёжная и суровая штука. Её обойти нельзя никакми способами. Не понимаю, почему бы этим не пользоваться в том числе и для принуждения следованию принятым в проекте стилям кодирования.
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, IT, Вы писали:
IT>Здравствуйте, VladD2, Вы писали:
IT>>>Какая нафик коробка? C# 7.3 не хотел? VD>>И студию нельзя по новее поставить?
IT>Стоит. Но на билдсервере без шансов.
Ну настройте анализаторы хотя бы для локального билда. Или этот ваш орёл террорист и прямо специально против ветра...
IT>Итого, мы сейчас обсуждаем элементарну возможность запретить некоторые вещи через языковые возможности (если бы они были), либо чтобы получить кривенькое подобие такой возможности — перевести весь проект на новую платформу
Ну знаешь, с вашими организационными проблемами вы и версию языка поддерживающую расширения не поставили бы. Тут сначала надо решать бюрократические проблемы, а потом уже языковые.
Мы тоже не на последних версиях языка сидим. Сейчас вот на 6-й. Но все же аналайзеры используются. В прочем, тоже есть люди стоящие горой за разную дурь вроде фигурных скобок у if-ов с одним стейтментом.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, rudzuk, Вы писали:
R>Потому что Nemerle и есть игрушка для любителей церебральных соитий.
Нет это ты сам не пробовал, а наговариваешь.
R>Это, конечно, хорошо, только читающему код человеку от этого не легче.
Этот "аргумент" не состоятелен. И по 100 раз на него уже отвечали. Просто скучно в 101-й отвечать. Ну да попробую.
Код выражает некоторую мысль (алгоритм, структуру данных, понятие и т.п.). Если в языке нет достаточных средств для удобного их выражения, то начинаются выразительные проблемы. Мы получаем больше плохого кода. Его трудно читать из-за того, что он рассредоточен, или многословен, или не выразителен. У нас может не быть возможности провести проверки во время компиляции и проверки уезжают в рантайм или вообще отсутствуют. В итоге код становится говном.
Если макрос (расширение языка) позволяет избежать этих проблем, код с их использованием становится лучше. Его становится проще читать, писать и поддерживать.
Новая конструкция языка ничем не отличается от новой функции. Ты все равно не поймешь что написано в коде, если не будешь понимать, что делает функция в нем примененная. Так же и с конструкцией.
R>Как он должен понять, что else в энумераторе это для пустого энумератора?
А как можно это не понять? Это нужно быть откровенным дебилом или олигофреном. Давай проведем эксперимент. Вот код с использованием аналогичного расширения выходящего в стандартную библиотеку Nemerle. Только вместо ключевого слова else в нем используется otherwise:
foreach (i in EmptyEnumerable())
WriteLine(i);
otherwise
WriteLine("Otherwise4");
Давай спросим у людей видящих этот код в первый раз: Есть ли у кого-то проблемы с пониманием того, что будет выведено на консоль?
И, кстати, что должно вернуть EmptyEnumerable() и почему? Что если EmptyEnumerable() вернет бесконечную коллекцию пустых строк?
R>Он, конечно, может догадаться об этом, но для подтверждения догадки, все равно, придется лезть в код макроса (ну спасибо, блин).
А какая в этом проблема? Это ж хорошо, если у операторов будут такие же исходники как у функций, не правда ли?
Когда ты сомневаешься в том, что вернет функция ты можешь залезть в её исходники (если они, конечно же, есть) и почитать код. Не всегда это легко, но все же.
Так почему бы не иметь такую же возможность для языковых конструкций?
В Nemerle ты можешь как посмотреть результат раскрытия макроса (код сгенерированный при его подстановке), так и перейти к его описанию и посмотреть его код. Ничего сложного в нем нет. Думаю таже ты спокойно поймешь, как он устроен:
/**
* foreach .. otherwise macro.
* otherwise block is called when foreach block was not called.
*/public macro ForeachOtherwise(inexpr, body, otherwiseBody)
syntax ("foreach", "(", inexpr, ")", body, "otherwise", otherwiseBody)
{
def (iter, _, _) = ForeachModule.ParseInExpr(inexpr);
match (body)
{
// Implicit match case
| <[ match ($(null)) { ..$cases } ]> with newBody = <[match ($iter) { ..$cases } ]>
// Other cases
| _ with newBody = body =>
<[
mutable firstHit = false;
foreach ($inexpr)
{
firstHit = true;
$newBody
}
when (!firstHit)
$otherwiseBody;
]>
}
}
R>А если макросы вообще семантику выражения меняют, где это видно в коде?
Макра не меняет семантику, а имеет. Она что-то делает. Как и к функциям к макрам имеет смысл делать документацию, если её смысл не очевиден. В случае нашего примера документация особо не требуется. Она нужна разве что для того, чтобы узнать, что эта конструкция есть и как ею пользоваться.
R> Риторический вопрос. Тут уже предложили ломать макросом "некрасивый" код... Это же, блин, диверсия в чистом виде!
Вопрос не риторический, а невежественный. Не стоит трепаться о том, что ты никогда не пробовал и в чём не разбирался. Иначе велик шанс оказаться в положении мартышки из басни "Мартышка и очки":
Мартышка к старости слаба глазами стала;
А у людей она слыхала,
Что это зло еще не так большой руки:
Лишь стоит завести Очки.
Очков с полдюжины себе она достала;
Вертит Очками так и сяк:
То к темю их прижмет, то их на хвост нанижет,
То их понюхает, то их полижет;
Очки не действуют никак.
«Тьфу пропасть! — говорит она, — и тот дурак,
Кто слушает людских всех врак;
Всё про Очки лишь мне налгали;
А проку на-волос нет в них».
Мартышка тут с досады и с печали
О камень так хватила их,
Что только брызги засверкали.
К несчастью, то ж бывает у людей:
Как ни полезна вещь, — цены не зная ей,
Невежда про неё свой толк все к худу клонит;
А ежели невежда познатней,
Так он её ещё и гонит.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, IT, Вы писали:
IT>Я тебя умоляю. Как тебе такое — на билд серверах нельзя использовать soft on demand, нельзя устанавливать никакие сервероподобные приложения. И это в 2023-м году, когда весь мир уже не представляет что такое билд сервер без докера. Ынтырпрайз, фигли.
Ну у нас тоже запрещено тянуть что попало из-за периметра. Но это из соображений безопастности и новые версии фрэймворков и билд-запчастей ставятся.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, IT, Вы писали:
IT>Это если у тебя 5-10 вменяемых человек. А если 20 в разной степени вменяемости, то это другое.
У нас несколько сотен разработчиков. Вроде живём.
IT>Я не единственный апрувер и всякие умники этим умело пользуются. У нас пол команды в Европе и когда я появляюсь на работе, то половина PR уже может быть замёржена.
Ежу понятно, что правила форматирование не должны на человеческий фактор завесить.
Так что тебе мешает в проект добавить аналайзер который просто выдаст ошибку компиляции на "if("?
Хотя пол жизни писал "if(" и проблем не видел. Читабельности оно не мешает от слова совсем. Это просто батерт у тех кто к этому не привык и всё.
IT>Потому и говорю — дайте мне возможность это решить языковыми методами и проблемы не будет уже завтра.
Так что тебе мешает добавить аналайзеры сейчас? Я понимаю, макры никак. Но аналайзеры они даже от версии языка не зависят вроде.
Вот у нас докинули и норм. Проблемы только в согласование стилей:
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Так что тебе мешает добавить аналайзеры сейчас? Я понимаю, макры никак. Но аналайзеры они даже от версии языка не зависят вроде.
Т.е. ты такое аналайзерами делал много раз и ваще это не вопрос. Ну продемонстрируй.
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, IT, Вы писали: _FR>>А почему в таком случае не помогают настройки студии или .editorconfig? IT>Сделай настройки, а потом попробуй без набери 'if(' без пробела. Помогло?
Вот что получилось:
Гифка под катом
Help will always be given at Hogwarts to those who ask for it.
Здравствуйте, IT, Вы писали:
IT>>>Какая нафик коробка? C# 7.3 не хотел? _FR>>Вроде как это "фича" не версии языка, а студии / компилятора. Можно в 2022 студии программировать на 7.3 (опять же мой случай).
IT>Студия у меня есть. Проблема в билдсервере, на котором стоит MSBuild от 2017-й студии.