Shub
отец, вы сегодня очень токсик
Hog
у нас 90% личного состава гуляют
Shub
у нас тоже
Hog
а я сижу тут, как дурак... надо допилить новую фичу - хочу успеть за сёня :)
Hog
ты это я
обнимемся!
Doge
ZIO выглядит как-то попроще, чем cats\scalaz и прочие tf. но в абсолютном выражении все равно мотивация непонятна
Так он, если что, как раз за полную ссылочную прозрачность. Если говорить, про практическую мотивацию всего этого, то ZIO/IO/Monix/twitter.Future - это приличные реализации холодных тасков. Каждая со своими фишками и трейдоффами. Плюс ZIO в качестве холодного таска в том, что он полегче с аллокациями при обычных паттернах использования и корректная работа с отменой тасок и ресурсами. Теперь про контроль/абстракцию от эффектов: все эти таски удовлетворяют общему набору тайпклассов из cats.effect и авторам библиотек очень удобно писать абстрагировавшись от конкретной реализации через F[_] и эти самые тайпклассы, чтобы потребитель библиотеки мог использовать любую интересующую его реализацию.
Shub
то есть вся эта замысловатая история чисто чтобы в скале был фича парити с го, что ли?
Shub
в смысле, если все, как написано выше, то я понимаю, почему скале пичот от kotlin
Vasily
Вот у нас есть гопак и асинк
Doge
в смысле, если все, как написано выше, то я понимаю, почему скале пичот от kotlin
Нет, не совсем. Это если с совсем практической стороны. Если копать глубже, то tf - как паттерн это отличное решение expression проблем и средство для eDSL. И неплохая штука с точки зрения parametricity, т.к. очень сильно сужает возможные интерфейсы. А, то как обычно в скале tf используют - это обычно называют MTL-style в хаскеле.
Vasily
Те же холодные таски
Doge
Те же холодные таски
Каждая конкретная реализация - да. (Только опять-таки, там у каждой свои фишки есть) Суть скаловского tf'а в том, что ты можешь от конкретной реализации таска абстрагироваться
Doge
С помощью еще одной абстракции?
Ну "абстракция" - это громко сказано. Там тупо вместо таска дженерик параметр с условием, что для него есть реализация нужных тайпклассов.
Doge
Я, сейчас, увы относительно занят, не могу каких-то подробных обьяснений про суть TF дать. Если интересно, то стукните где-нибудь завтра днём, попробую накатать своё видение, зачем и как (и почему его обычное использование - это далеко не все интересное, что можно с tf сделать)
x
🍿
Doge
зачем нам абстрагироваться от штатной фишки языка\стдлибы\сторонней либы?
Хотя бы чтобы не протекать инфраструктурными и техническими деталям по всеми проекту
Shub
Ну это дико спорно. Почти любая программа - это eDSL некого рода.
следуя этому тезису, мне предлагается встроить eDSL в eDSL?
Doge
следуя этому тезису, мне предлагается встроить eDSL в eDSL?
Тут скорее опять-таки, насколько широко эту идею понимать. Вот реализации CE - это же самые настоящие eDSL
Shub
Хотя бы чтобы не протекать инфраструктурными и техническими деталям по всеми проекту
сильно заряженный тезис. во-первых, откуда пресуппозиция, что без tf мы протекаем? у нас есть сотни, если не тысячи способов и проверенных методов для контроля абстракций
Shub
Тут скорее опять-таки, насколько широко эту идею понимать. Вот реализации CE - это же самые настоящие eDSL
ну так можно любую конструкцию языка назвать eDSL. и это еще хорошо, если в языке есть возможности расширения синтаксиса, а то будет как в скале, где все завернуто в for-comprehension и выглядит как _ <- pustStrLn “wut”
Shub
какую конкретно цель преследует такой синтаксис, что мы пытаемся этим выразить?
Shub
затем
Shub
откуда берется уверенность, что “протекание” деталями реализации проекта в проекте - это плохо?
Doge
сильно заряженный тезис. во-первых, откуда пресуппозиция, что без tf мы протекаем? у нас есть сотни, если не тысячи способов и проверенных методов для контроля абстракций
Ну проблема в том, что в традиционном ОО сложно типобезопасно и без кучи адаптеров абстрагироваться от типа контейнера/таска.
Shub
где-то же конкретика должна располагаться, не так ли? иначе мы всю дорогу будем заниматься абстрагрированием от абстракций
Shub
Ну проблема в том, что в традиционном ОО сложно типобезопасно и без кучи адаптеров абстрагироваться от типа контейнера/таска.
зачем мне от этого абстрагироваться? ты хоть раз видел проект, который пережил миграцию с условного Спринга на условный $WHATEVER?
Doge
откуда берется уверенность, что “протекание” деталями реализации проекта в проекте - это плохо?
Так часто получается одновременно слишком много движущихся частей в рамках каких-то участков кода или проекта в целом. А человеку удобнее работать с сильно ограниченным числом каких-то возможностей.
Doge
Абстракция - это как раз способ спрятать часть движущихся частей
Vasily
Вообще, я тут скорее с дедушкой соглашусь в этом споре
Vasily
Получается из серии "смотри как я могу"
Shub
“у нас много абстракций, поэтому давайте мы введем еще одну абстракцию"
Vasily
Со всеми этими абстракциями
Shub
В отдельных, хорошо разделенных слоях
зачем это делать в отдельных, хорошо разделенных слоях, если они уже отдельные и хорошо разделенные?
Doge
“у нас много абстракций, поэтому давайте мы введем еще одну абстракцию"
Это даёт плюс, когда абстракция выходит ограниченее того, что она прячет.
Doge
Что в случае скаловского tf оно обычно и выходит
Shub
Это даёт плюс, когда абстракция выходит ограниченее того, что она прячет.
в условиях постоянно меняющихся требований, которые никогда не были окончательно сформированы - это очевидный минус, не так ли?
Shub
т.к. абстракция начинает ломаться еще не дойдя до финальной реализации
Shub
мало того, это настолько сложная абстракция, что ее не каждая команда может корректно реализовать
Vasily
Я бы сказал, что нет команд, которые бы ее корректно реализовали
Doge
мало того, это настолько сложная абстракция, что ее не каждая команда может корректно реализовать
Ну в tf, какой-нибудь ZIO/IO/Task с доброй сотней методов прячется за мелкими (по количеству методов) Functor/Monad/Applicative
Shub
и даже в ситуациях, когда ее формально получилось реализовать и она стабильна какой-то промежуток времени, начинаются совсем неочевидные проблемы - внезапно просадки по памяти, недетерминированное поведение из-за ленивости, которое дебажится только в уме и т.п.
Shub
Ну в tf, какой-нибудь ZIO/IO/Task с доброй сотней методов прячется за мелкими (по количеству методов) Functor/Monad/Applicative
в этом собственно весь поинт - все три вносят дополнительную сложность, не имея никаких очевидных преимуществ перед уже существующими средствами. сколько юзкейсов из головы ты можешь назвать для aplicative?
Shub
вот у нас например за 5 лет придумали ровно один
Shub
и тот крайне спорный, т.к. не покрывает даже половины реально существующих в проекте потребностей
Doge
в этом собственно весь поинт - все три вносят дополнительную сложность, не имея никаких очевидных преимуществ перед уже существующими средствами. сколько юзкейсов из головы ты можешь назвать для aplicative?
А какую они сложность вносят дополнительную, если они сугубо подмножество (причем не это меньшее) методов доступных для исходного таска?
Shub
в любом языке, от питона и до F#
x
дохера фреймворков, делающих это без аппликатива
Так поинт в чем? Обазываться фреймворками вместо использования фич языка?
Vasily
Хотя аппликатив тут не нужен
Shub
Vasily
Поинт в том, чтобы обмазываться в меру
Shub
аппликатив можно и в питоне запилить, все, что для этого нужно - первоклассные функции и возможность определять свои операторы
Vasily
Не упарываясь
Shub
Я хз, я на сишарпе )
твой fluent синтаксис - это аппликатив
Shub
Так и в чом с ним проблема?
в ненужности абстракции.
Doge
аппликатив можно и в питоне запилить, все, что для этого нужно - первоклассные функции и возможность определять свои операторы
Проблема в том, что там где есть возможность абстрагироваться от конкретного аппликатива, кучу комбинаторов к нему ты получаешь забесплатно из стандартной библиотеки.
Shub
Эээ. Даже я нозову: валидация со сбором всех ошибок, а не только самой первой. Например для гуя с кучей полей.
но вот это иллюстративно. по ходу, это вообще единственный встречающийся на практике кейс
Shub
в скале?
Doge
в скале?
В скале это все в котах есть
Shub
коты не стдлиба, насколько мне известно
Shub
а у хаскеля нет прода, лол
Shub
может поэтому и нет