Dr. Friedrich
Dr. Friedrich
Я хотел кложур взять. У нас всё равно веб и только всякие прикладные вещи. Сказали бас фактор хотя лол это же просто лисп с либами от жабы
Было дело, я угорал по кложуре и всё писал на ней. В итоге отсутствие внятной типизации начало стрелять постоянно, и я к ней очень сильно охладел.
Doge
У нас техдир втирает что пока 5+ лет в проде на одном языке не посидишь ты не шаришь на нём
Ну если писать только круды, то может быть и так. Имхо, в целом важнее в этом плане набор фундаментальных знаний про вычисления в общем смысле, архитектуру эвм, ос и про проектирование прикладного по. Если они есть - то новый язык можно очень быстро освоить до того уровня, что можно будет спокойно писать прикладной софт.
Doge
Значительно меньше.
Это спорно. Вопрос в каких именно местах меньше боли.
Dr. Friedrich
Да во всех.
Dr. Friedrich
Экосистема, инфраструктура
Dr. Friedrich
Библиотек значительно больше, а их качество — выше
Dr. Friedrich
А не как в Кабале, в котором добрая половина годных библиотек — врапперы вокруг сишного или плюсового кода.
Dr. Friedrich
Не стану скрывать, что контроль побочных эффектов и изобретение монадных трансформаторов на каждый чих мне тоже не очень импонирует, и кажется довольно запутанным, в отличие от.
Dr. Friedrich
А, ну и отладка приличная есть.
Dr. Friedrich
В общем, я, без шуток, не вижу ни единого аспекта, в котором Хаскель лучше Скалы. Ну, кроме синтаксиса — do-нотация там таки более прилично сделана.
Doge
В общем, я, без шуток, не вижу ни единого аспекта, в котором Хаскель лучше Скалы. Ну, кроме синтаксиса — do-нотация там таки более прилично сделана.
Основное что мне в хаскеле нравится и чего дичайще в скале не хватает - это собственного приличного оптимизирующего компилятора.
Dr. Friedrich
А не нужен оптимизирующий компилятор, оптимизирующий JIT нужен.
Dr. Friedrich
Он и в хозяйстве удобнее
Doge
А не нужен оптимизирующий компилятор, оптимизирующий JIT нужен.
Так они фиговые в итоге. Не умеют в нужные для ФП высокоуровневые оптимизации
Dr. Friedrich
Ой, ну конечно.
Dr. Friedrich
Graal, вон, ещё лучше стал
Dr. Friedrich
Тут в самой жавамашине не хватает фичей для нормальной специализации кода, но и это скоро завезут, уже вот-вот.
Dr. Friedrich
Но собственно уже сейчас всё окей.
Doge
Graal, вон, ещё лучше стал
Грааль-то да, ничего, спорить не буду.
Dr. Friedrich
Про качество компилятора мне сложно судить, потому что код GHC я не читал. А вот рантайм значительно лучше у JVM.
Doge
Но собственно уже сейчас всё окей.
ФП код на скале хаскелю во многих случаях проиграет.
Dr. Friedrich
Прекрасные оптимизированные бинарники, которые готовит GHC, очень любят того… упасть.
Dr. Friedrich
Толи в сборке мусора там что-то не так, толи шо
Dr. Friedrich
Пяток гигов кучу набираешь — и брык
Dr. Friedrich
Ну, это мой личный опыт. Я поверю, что никто больше с этим не сталкивался.
Doge
Прекрасные оптимизированные бинарники, которые готовит GHC, очень любят того… упасть.
На практике с таким не сталкивался пока. Гц там да, похуже, но над этим тоже работают вроде. С многогиговым хипом надо будет попробовать поработать, посмотрю что выйдет.
Dr. Friedrich
Но мы периодически используем Хаскель в контестах, и это сплошная боль — - что при разработке (расставлять бесконечные trace везде, что тупо синтаксически неудобно) - что при компиляции (ненавижу ошибки, связанные с монадным стеком, которые решаются рандомной расстановкой lift везде) - что в рантайме (необъяснимые падения под нагрузкой)
Dr. Friedrich
У Scala ни одной из этих проблем нет, плюс код можно спокойно отлаживать.
Dr. Friedrich
Поставил в редакторе брейкпоинты и поехали
Dr. Friedrich
У F# — аналогично.
Doge
У Scala ни одной из этих проблем нет, плюс код можно спокойно отлаживать.
Да, но оптимизируещего компилятора все равно дико ну хватает. А без него приходится всегда в ключевых местах отказаться от абстракций (тупо вплоть до операций с коллекциями) и закатывать солнце вручную
Doge
Что раздражает неимоверно
Dr. Friedrich
Напротив, с такими требованиями я ни разу пока не сталкивался.
Dr. Friedrich
Разве что нужно выпиливать везде списки
Dr. Friedrich
Просто ловишь тех, кто юзает списки, лупишь их и выпиливаешь
Doge
Разве что нужно выпиливать везде списки
Да даже стандартные комбинаторы для работы с коллекциями в скале тормозят только так. Даже не над списками. Часть проблемы, конечно, в том что по идиотски их задизайнили, но какими-нибудь rewrite rules может и можно было выправить
Dr. Friedrich
Ну чёрт знает, у меня пока что проблем не было. Я слышу про них иногда, но ни разу не видал.
Dr. Friedrich
Хотя дизайн либы с коллекциями в Scala — это разговор отдельный, на неё много ругаются, и сигнатуры методов заставляют волосы дыбом вставать, это да :)
Doge
Хотя дизайн либы с коллекциями в Scala — это разговор отдельный, на неё много ругаются, и сигнатуры методов заставляют волосы дыбом вставать, это да :)
Ну идея у них была благая (побольше сохранения типа при операциях с коллекциями), но результат чуть странный вышел
Dr. Friedrich
Бонарт щас для .NET такое делает, и у него получается внятно.
Doge
И вопрос стоило оно вообще того
Dr. Friedrich
https://github.com/Kirill-Maurin/Sample.Struct/tree/master/Sample.Struct/Enumerables вотэтавот
Dr. Friedrich
И оно таки стоит.
Doge
Ну чёрт знает, у меня пока что проблем не было. Я слышу про них иногда, но ни разу не видал.
У меня были случаи, где замена в горячем цикле работы с коллекциями через комбинаторы на ручную давала очень неплохой буст в производительности. Но да, в обычных задачах на это пофиг конечно
Doge
Но мы периодически используем Хаскель в контестах, и это сплошная боль — - что при разработке (расставлять бесконечные trace везде, что тупо синтаксически неудобно) - что при компиляции (ненавижу ошибки, связанные с монадным стеком, которые решаются рандомной расстановкой lift везде) - что в рантайме (необъяснимые падения под нагрузкой)
А с монадическим стеком такое же можно и в скале получить. Их не надо явно никогда использовать, они за tagless final должны быть скрыты, а все их возможности доступны через соответствующие тайпклассы а-ля MonadReader, MonadState и т.д. и т.п. (Вот тут, кстати в котах лучше сделано, там такие тайпклассы куда лучше гранулированы)
Dr. Friedrich
В Скале нельзя получить проблемы монадического стека, если ты не ФП-фанатик :)
Doge
В Скале нельзя получить проблемы монадического стека, если ты не ФП-фанатик :)
Я скорее к тому, что так явно использовать трансформеры - это плохая практика и она нигде не работает, а не только в хаскеле
Dr. Friedrich
Ну я с этим согласен, и поэтому скептически отношусь к языкам, которые меня заставляют это делать.
Ayrat
Мне в скале пока нравится идея. Хорошая иде и плагин для скалы бодрый. Навигация моментальная, даже не быстрая, моментальная
Ayrat
И бряки куда угодно ставятся и работают.
Doge
Мне в скале пока нравится идея. Хорошая иде и плагин для скалы бодрый. Навигация моментальная, даже не быстрая, моментальная
Это да. Если не злоупотреблять системой типов, то она практически идеально работает
Dr. Friedrich
Ну или макросами.
Doge
Ну или макросами.
Ну в какую-то из итераций макросистемы она даже неплохо так умеет, вплоть до раскрытия макросов.
Ayrat
Линтер ещё хороший, автоформатер. Короче годный икспириенс
Ayrat
Фшарп похуже, даже в райдере.
Dr. Friedrich
Зато там sbt :)
Dr. Friedrich
sbt похуже мсбилда :)
Ayrat
Зато там sbt :)
Я пока скалу мавеном собираю
Dr. Friedrich
Последний раз на контесте нашли смешную дырку — JVM очень жопошно работает с сертификатами
Ayrat
Я про сбт наслушался что это какое-то говно
Dr. Friedrich
Поэтому у нашего основного девелопера не скачивались депенденси
Dr. Friedrich
Dr. Friedrich
Мавен уж больно фуфельный, если тебе кастомизировать нужно.
Dr. Friedrich
Если не нужно и всё работает по дефолту — тогда ок
Doge
Я про сбт наслушался что это какое-то говно
Это скорее какая-то лавкрафтианская чуждая всему человеческому сущность. Там внутренняя логика неожиданно нетривиальная для того, что ты обычно хочешь и ожидаешь от системы билда
Ayrat
Если не нужно и всё работает по дефолту — тогда ок
Работает через раз. У нас там много кодогенерации для протобуфа и кассандра схем на его основе
Dr. Friedrich
Как там нормально определить таску и добавить её в депенденси к основному билду — это офигеть можно
Ayrat
Регулярно надо делать полный mvn clean install чтобы пропагировать изменения прото файла во все проекты
Dr. Friedrich
https://github.com/codingteam/Keter/blob/168f95c91e6f6af36dc2584a896cd494e36808d1/build.sbt#L32-L47 — ну вот это, например, это серьёзно разве?
Ayrat
А это 10 минут жизни
Dr. Friedrich
(webpack in fullOptJS in Compile).value, ёлы-палы
Dr. Friedrich
Я с этим кодом трахался несколько часов
Dr. Friedrich
Прежде чем он начал ну примерно как-то работать
Doge
Как там нормально определить таску и добавить её в депенденси к основному билду — это офигеть можно
Ага, у меня такие же проблемы были, когда я хотел собрать scala.js проект, а потом засунуть его в ресурсы к другому проекту
Dr. Friedrich
Что такое контесты?
https://translate.yandex.ru/?text=contest