Shub
шоб нихто не догадавсь
Shub
а классы реализаций называются "интерпретатор", лол
Vasily
очень функциональный код в этом репозитории: интерфейсные классы называются "АЛГЕБРА"
Кстати, спасибо за пояснение, я как-то пробовал вопрос этот у адептов выяснить
Shub
"Cats for FP awesomeness" -- два маркера мудака в одном предложении
Shub
Кстати, спасибо за пояснение, я как-то пробовал вопрос этот у адептов выяснить
это какой-то скаловский локальный мем. они как-то иначе понимают этот момент
Ayrat
столько фп-страданий - и все ради того, чтобы можно было писать банальный быдлокод на трех аккордах слоях
Не, самое смешное что вся эта ФП ссанина не позволяет обойтись без https://github.com/pauljamescleary/scala-pet-store/blob/fa92f6178496beca53107152fc27ca91a7a945b1/src/main/scala/io/github/pauljamescleary/petstore/infrastructure/endpoint/UserEndpoints.scala#L48
Ayrat
Просто ахахахах
Shub
а вот например фУнКцИоНаЛьНаЯ тЕсТиРуЕмОсТь - https://github.com/pauljamescleary/scala-pet-store/tree/master/functional_test
Vasily
Ayrat
Вокруг значит лифты в eitherF
Ayrat
ЭТО ДРУГОЕ
Ну да, ну да. Тримонадный хуюнктор не вытягивает такие простые вещи
Ayrat
Но мы все равно будем на него садиться жопой
Anonymous
Если что, я ту ссылку на петстор с Гитхабв взял на официальной странице Скалы. Мне кажется, это какая-то скрытая форма мазохизма: столько страданий ради того чтоб SQL insert/update/delete сделать.
Vasily
Зато оно типа работает без багов. Помучился разик,и все видят, какой ты крутой
Anonymous
Зато оно типа работает без багов. Помучился разик,и все видят, какой ты крутой
А потом надо добавить логоирование и метрики на Прометей отдать и пиздец.
Anonymous
Дописываем for....
А если тебе нужны конкретные параметры конкретных sql процедур или по какой-то другой причине их нужно отдавать где-то глубже? Придётся аж наверх пробрасывать какой-то стейт или аккумулировать IO и это будет ещё две страницы такого говна в for.
Vasily
IMPLICIT
Anonymous
Так DI руками, оно всегда так выглядит
Вопрос не в этом, а в том какой профит-то от этого в примере? Хотя это наверно задумывалось как гайд по элементарным вещам и взяли что-то самое тривиальное.
Андрей
Вот интересно, а дуби тот же проверяет на sql injection?
Вообще проверяет, если что не так то просто не компилируется. но есть и возможность собрать запрос из говна и палок
Doge
Ну и профита в крудах от такого стиля много не будет, он появляется, когда заходит речь об асинхронности повсюду и конкурентной работе, потому что примитивы для этого в джаве или даже обычной скале очень так себе.
Doge
А это приложение просто пример, что будет если написать круд в таком стиле. Получится круд как круд, разве что асинк-реди (но для этого надо будет вместо jdbc взять человеческий драйвер)
Андрей
ахтунг, счас скажу страшное: код вполне норм, не страшней жирафского или сатурнского, где без разбега и стакана тоже не сладко
Doge
Так здесь как раз асинхронности наверно и обычного Future бы хватило, а метаописания конкаренси как-то не видно.
Здесь хватило бы, но это пример, как писать энтерпрайз-лайк приложения целиком в таком стиле. Просто пример, чисто ради того, чтобы кто-то мог посмотреть как стандартные паттерны в таком стиле сделать
Doge
Неправда ваша. Там же вся репа такая
Так код как код, на хаскеле было бы примерно так же, если такой же код писать
Ayrat
А вот на питоне в 5 раз меньше
Ayrat
(это плюс)
Doge
А вот на питоне в 5 раз меньше
Потому что тут выбран в примере приложения простейший круд, понятное дело, что его можно куда проще написать.
Doge
Так это пример такого стиля
Anonymous
Это не плюс!
Если б там было продвинутый канкаренси, это был бы пиздатый плюс.
Ayrat
Если б там было продвинутый канкаренси, это был бы пиздатый плюс.
Но в крудах нет продвинутого конкаренси. это не шедулеры
Doge
Но в крудах нет продвинутого конкаренси. это не шедулеры
Так, повторю, это не серьезное приложение, это тупо пример как собрать стандартную архитектуру в таком стиле.
Ayrat
Ну короче я все хочу найти пример реальный где вот весь этот бойлерплейт взлетит и с ним будет лучше, но почему-то только хеловорлды и круды. Если мне щас скажут - никто не покажет приватный энтерпрайз, то могу сказать что я видел похожий бойлерплейт в репах джета и там местные гении, обмазав все стрелками, умудрились внедрить ненависть к фшарпу у подавляющего большинства ньюкамеров
Ayrat
Люди уходили с причиной "лишь бы не фшарп". Вот за такое всех мудаков, которые так пишут, надо сажать на кукан
Ayrat
К слову, к скале у не скалистов такое же отношение местами.
Ayrat
Надо работать над имиджем
Doge
И куда проще по своей логике
Sergey
к слову о питоне в чем мистический смысл for else никак не пойму зачем это было добавлять
Андрей
гениев жета я не оправдываю, фп для фп, против которой даже сам язык топорщится, это перебор переборов, И тут сервис из трех ендпоинтов никто так писать не станет конечно. но когда котобаза растет, ну какой нахер питон
Doge
к слову о питоне в чем мистический смысл for else никак не пойму зачем это было добавлять
Когда тебе надо из коробки обработать случай, когда в коллекции пусто.
Doge
Если я правильно помню
Doge
нет онн отрабаывает если пусто или конец
Ну почти так, такое редко, но бывает нужно
Sergey
странная вещь весьма мягко говоря
Anonymous
В опенсорсе, увы с ходу не скажу. Локально есть примеры, где конкурентный код в стандартном стиле - это 500+ строк кода на акторах или голых тредах, в хаскель стиле на скале - раз в 5 минимум меньше.
На Хаскеле обычный IO действительно очень легко писать и все параллеится из коробки, но вот рано или поздно появляется мутабельное общее состояние и модель STM мне как-тонн зашла вместе с MVar. Хотя много канкаренси в таком духе я не писал на Хаскеле. Или ты только про кейсы где «обычное» IO?
Dr. Friedrich
Ну и да, бойлерплейта в том примере не сильно больше, чем в стандартной энтерпрайз джаве. Там оно же, только разве что асинхронное из коробки (если бы не ждбц)
Сделать JDBC асинхронным — это, видать, абсолютно невозможная задача. Оказалось проще весь рантайм сделать асинхронным %)
Doge
Сделать JDBC асинхронным — это, видать, абсолютно невозможная задача. Оказалось проще весь рантайм сделать асинхронным %)
Ну вот да. Сейчас можно брать альтернативные драйвера, они есть, но обычно только под постгрю
Dr. Friedrich
До сих пор не понимаю что сложного
Многие вот так же говорили
Dr. Friedrich
До сих пор перед глазами как живые
Doge
До сих пор не понимаю что сложного
Затянется на кучу лет переход
Dr. Friedrich
А потом их туда засосало
Dr. Friedrich
Затянется на кучу лет переход
Не, ну необходимость асинхронности стала очевидной много лет назад. Начали бы тогда — сейчас бы уже как цари катались в золоте
Ayrat
Затянется на кучу лет переход
Ну и чо? Это надо делать рано или поздно.
Dr. Friedrich
Но, видать, это реально невозможно.
Dr. Friedrich
А вы видали, как в спринге сделали асинхронность? Там довольно странно.
Doge
Ну и чо? Это надо делать рано или поздно.
Так они нашли вариант: project loom
Dr. Friedrich
Вместо того, чтобы просто сделать на футурах, как у всех добрых людей, они всё обмазывают байткод трансформациями и пытаются обмануть самих себя
Dr. Friedrich
Типа, скрыть асинхронность
Doge
Чтобы не менять кодовую базу, а тупо воспользоваться зелёными потоками и уйти в закат, продолжая писать в том же стиле
Doge
С тем же ждбц
Dr. Friedrich
Так они нашли вариант: project loom
Это project loom их нашёл. Пришлось делать, потому что другого выхода не было :)
Dr. Friedrich
Не, это круто, конечно. Идея очень здоровская.
Doge
Вообще интересно, что из него выйдет
Dr. Friedrich
Но я, когда читаю планы, просто офигеваю от того, как оно будет дичайше отъябывать