Doge
Но таски для мсбилда не пишутся на XML!
Да, но собирать их вместе всё равно приходится на xml
Dr. Friedrich
Пакуют в DLL, а потом подключают. И их можно дебажить. И вообще не жизнь, а сказка.
Dr. Friedrich
Кстати, бинлоги мсбилда — это вообще прям каеф
Dr. Friedrich
В сто мильёнов раз подробнее, чем логи в каком-нибудь мавене. И примерно всегда (всегда!) по ним можно понять в деталях, шо происходит, и шо этому болвану не нравится.
Dr. Friedrich
Итого имеем: + супер внятную систему логгирования, которая при желании пользователя пишет ВСЁ + описание тасок на типизированном языке - сами энд-юзер штуки описываются на XML - легаси формат проектов — это ёбаный страх
Doge
Итого имеем: + супер внятную систему логгирования, которая при желании пользователя пишет ВСЁ + описание тасок на типизированном языке - сами энд-юзер штуки описываются на XML - легаси формат проектов — это ёбаный страх
Тут надо понимать, что большинство кейсов у людей не требуют прям настолько большого числа логики, чтобы её имело смысл в отдельную таску выносить. Чаще всего это буквально, возьми артефакт отсюда, сделай с ним какую-то мелочь, перекопируй туда. Это 95% всей логики, что в системах билда описывают.
Dr. Friedrich
В градле - централизованных логов по существу ни хрена нет; смотри то, что тебе изволил записать автор таски (если знаешь флаг, которым повысить verbosity — а его никто не помнит, и поэтому авторы тасок редко когда заморачиваются) - описание самих тасок на типизированных языках — строго опционально и пока не распространено + но можно писать таски по-человечески + сами билдскрипты пишутся на языке программирования + можно на типизированном + в билдскриптах можно делать что угодно - но люди действительно делают что угодно, и ты затрахаешься отлаживать потом
Anatoly
Ну я не знаю, что вы хорошего находите в мсбилде. Любая кастомная логика там - это страх и ужас.
У меня всё решалось просто и элементарно, но я таски на сишурупе писал
Dr. Friedrich
Градло норм
Doge
Такое лучше, конечно, скриптить поверх
Вводить лишнюю сущность в проект
Dr. Friedrich
У меня кстати как-то с трудом заводился kotlin dsl для грэдла, когда я последний раз его пробовал. Это нормально или сейчас уже пофиксили?
Честно — хер его знает, я пока что с kts не сильно экспериментировал. У нас есть проекты, где переехали с Груви на Котлин, и там видно мелкие костылики в билдскриптах. Насколько это в реальности стрёмно — пока сказать не могу; на вид, вроде, не очень плохо.
Dr. Friedrich
https://github.com/JetBrains/fsharp-support/blob/b8ec25e5bd204b0e6849c5ff40429ee94fd73003/rider-fsharp/build.gradle.kts вот можно полюбоваться
Dr. Friedrich
С моей точки зрения, преимущество хотя бы в том, что Котлин я хотя бы знаю, в отличие от Груви :)
Dr. Friedrich
А не буду целый час тупить над блоком кода, который оказался лямбдой
Ayrat
Я делаю на Градле всякие странные штуки, и могу ответственно заявить: он точно лучше Мавена и SBT, но, пожалуй, мсбилд всё-таки понятнее.
Мсбилд всяко лучше чем все жава ужасы, да. Но если выбирать чем собирать жаба котлен, то точно градл
Dr. Friedrich
Мсбилд всяко лучше чем все жава ужасы, да. Но если выбирать чем собирать жаба котлен, то точно градл
Ну, это само собой. Я не говорю, что мсбилд хоть как-то пригоден для сборки вещей вне MS стека
Dr. Friedrich
Впрочем, чувачки, которые пытаются что-то вне JVM stack собирать с помощью Gradle, у меня тоже вызывают удивление.
Anonymous
`` /// Returns the union of two dictionaries, using the combiner function for duplicate keys. let private merge combiner (source1: Map<'Key, 'Value>) (source2: Map<'Key, 'Value>) = Map.fold (fun m k v' -> Map.add k (match Map.tryFind k m with Some v -> combiner v v' | None -> v') m) source1 source2 ``
Anonymous
сука не работает!!1
Anonymous
кто-нить знает, какие стандартные методы позволяют переписать эту штуку наверху?
Ayrat
сука не работает!!1
А почему не работает?
Aleksandr
Хорршо все-таки, что у нас мсбилд а не gulp какой-нибудь и прочие всякие вебпаки
Aleksandr
Вот где ужс
Dr. Friedrich
Dr. Friedrich
Потому что в ней ты сам пишешь все таски, нету никакой внешней магии (типа огромного .NET SDK, который прилагается к msbuild, и в котором ногу сломишь)
Dr. Friedrich
Но на практике gulp работает, к сожалению, уж очень ненадёжно. Есть много примеров кода, которые типа работают, а на самом деле по-тихой портят код или ресурсы, ну или просто плохо поддерживают watch или не канселяются нормально. Это печально.
Anonymous
А почему не работает?
не работает форматирование
Ayrat
мне кажется (мне кажется) это чутка читабельнее
Ayrat
а, да - комбайнер забыл
Ayrat
бля)
Ayrat
let merge2 combiner (source1: Map<'Key, 'Value>) (source2: Map<'Key, 'Value>) = let mutable map = source1 for KeyValue (k2, v2) in source2 do let newValue = match map.TryFind k2 with | None -> v2 | Some v1 -> combiner v1 v2 map <- map.Add(k2, newValue) map
Ayrat
Это ж не то
я ниже поправился
Ayrat
это тот же фолд, но с явно мутабельной переменной
Denis
кто то должен сказать что не функционально ))
Ayrat
у фолда просто тяжело уследить за передаваемым стейтом, т.к. он обычно в конце
Anonymous
Но как-то твоя версия ничего не выиграла кмк, я надеялся что есть что-то ещё более компактное и стандартное.
Ayrat
Ayrat
тебя там бьют за каждую новую строчку кода?
Anonymous
та не, просто в том конкретном случае oneliner в fold'е. кажись, если там строки попереносить и использовать Option.orElse, то вообще будет норм
Vladislav
вопшон!
Это я
Ayrat
да, тут даже есть выигрыш от вопшона
Ayrat
потому что вся работа локально на стеке и аллокаций будет меньше
Ayrat
ещё бы один раз мапу собрать...
Ayrat
вот в скале есть мутабельный мап билдер который превращается в иммутабельный по окончанию - УДОБНО
Anonymous
ещё бы один раз мапу собрать...
можно ж в Seq накапливать, а потом Map.ofSeq, не?
Ayrat
можно ж в Seq накапливать, а потом Map.ofSeq, не?
не, то же самое. если подумаешь. Даже хуже
Anonymous
не, то же самое. если подумаешь. Даже хуже
думать утром не могу, извини
Ayrat
ты в начале делаешь ленивый сиквенс (вместо простого цикла), потом по нему проходишься и точно так же добавляешь элементы по одному
Anonymous
справедливо, да
Vladislav
Анна
Stas
shit happens!
Nuxs🏴‍☠️
> F# > чистый код … > питон
Разве в питоне любят грязный код? По-моему, он и создавался, чтобы код был чище, чем в c++
Dr. Friedrich
Вот у тебя всё смешнее и смешнее получается
Dr. Friedrich
Я бы на твой вечер шуток записался
Nuxs🏴‍☠️
Я шутить люблю, но сейчас я говорю серьёзно
Stas
Разве в питоне любят грязный код? По-моему, он и создавался, чтобы код был чище, чем в c++
"чистота" в принципе понятие субъективно, а если брать синтаксис языка - лично мне читать питон ппц как тяжело)
Nuxs🏴‍☠️
Ради чего тогда такая куча абстракций???
Dr. Friedrich
Ну вот давай откроем какой-нибудь питоновый код
Dr. Friedrich
Все любят tensorflow?
Dr. Friedrich
Давайте откроем tensorflow
Nuxs🏴‍☠️
Все любят tensorflow?
Датасотонисты любят
Dr. Friedrich
Ни одной аннотации типа
Dr. Friedrich
# pylint:disable=g-import-not-at-top from tensorflow.python.debug.lib import source_remote Супер чистота
Dr. Friedrich
if log_usage: pass Мистер Пропер код готовил
Dr. Friedrich
if isinstance(grpc_debug_server_addresses, str): ... elif isinstance(grpc_debug_server_addresses, list): А, так вот почему не было аннотаций типов: тут пиздец!
Sergey
Разве в питоне любят грязный код? По-моему, он и создавался, чтобы код был чище, чем в c++
ой слушай посмотреть на странные структурки там постоянный гемор с обратной поддержкой и т.д.
Dr. Friedrich
Не то рыба, не то кит, не то список, не то строка
Nuxs🏴‍☠️
Тогда не понимаю, в чём ценность питона