Почему я ненавижу Haskell, или почему Жизнь — Боль
23.04.2015
Привет, ребята. Сегодня я решил начать делиться с вами своими впечатлениями об функциональном языке Haskell.
Tl;dr. Хаскель заставил меня рыдать, а также биться головой обо все тверды предметы в моём доме. Это одна из немногих технологий в IT, которая выводит меня из равновесия и причиняет, как моральную, так и физическую боль.
Disclaimer. Если вы слепой фанатик Хаскеля, выйдите Вон с моего сайта, пожалуйста. Однако если вы просто хотите поспорить со мной про Haskell — Bienvenue chez les Ch’tis.
Итак, почему же мне не нравится этот язык программирования?
- Ужасный тулинг. Ну, то есть ВООБЩЕ нет никаких инструментов для разработки на Haskell. IDE — хрен-то там. Дебаггер? Ишь, размечтался! Пиши код в блокнотике, скармливай его руками через терминальчик или GHCI — о котором ниже.
- Комьюнити. Это спорный пункт. С одной стороны в Haskell сообществе есть полно отличных парней, которые с радостью помогают на http://stackoverflow.com/questions/tagged/haskell. С другой стороны, это немного не то. В интернете крайне мало (относительно) хороших сайтов с туториалами про Haskell. Почти все поисковые запросы идут или на stackoverflow, или на официальный сайт или на сайты-дочки. Другими словами, фанаты Haskell есть, а вот хорошего, приятно поданного материала по языку — мало.
- Отвратительная документация. То, что предлагает официальный сайт — https://www.haskell.org/hoogle/, не читаемо, мало полезно, ужасно. Ни тебе хороших примеров, ни тебе полных описаний. Голый прототип функции — часто ты получишь только его.
- Нездоровая любовь к hoogle — «официальному» поисковику для Хаскеля. Эта штука умеет искать функции по сигнатурам. Это ужасно, скажу я вам. Но людям — нравится.
- Не интуитивность языка. Если коротко, у вас не выйдет писать на хаскеле, как на джаве. Я думаю все из вас слышали про то, как люди переходят с Java на Scala. Сначала ты пишешь на Скале, как будто это джава, немного используя прелести FP. А потом ты пишешь на Скале уже в идеоматическом виде. Тут это не работает. Вся ваша интуиция будет сломана, если вы будете писать на Хаскеле. Автоматическая конвертация Int в Double? Обойдёшься! Понятные сообщения про ошибки? АГА, ЩАЗ! Ты получишь только сообщение про то, что ожидаемые сигнатуры функции не совпали с реальными. Ииии, да, это так. Но что с этим делать — иди думай сам, прыгая с бубном.
- Отсутствие сахара в Haskell. Нет той приятности разработки, как на том же python. Только хардкор, только вызов кривых функций.
- GHCI. Это интерактивный шелл, который позволяет сразу писать код и видеть результат. Другими словами, это некий IPython в мире Пайтона. Только вот, если кратко, данный терминал — ужасен. Это почти полная копия Windows CMD, в которой нет ни грамму полезных функций. Только способ ввода кода в чёрно белое окно. Думали, тут будет подсветка синтаксиса? Конечно же, нет. Вы же должны страдать, во время разработки на Haskell.
- А ты скомпилируй? Именно так я назову этот пункт. Думаю, все слышали шутку: «Если вы скомпилировали программу на Haskell, то почти наверное у вас всё работает верно». Благодаря уникальной системе типов, Haskell славится своими проблемами с компиляцией. Вы будете делать бессчетное количество ошибок, причиной которых будет — ошибка компиляции. Это очень раздражает, так как исправление данных проблем полностью лежит на вас, и компилятор в этом — вам не помощник.
- Бредовый дизайн языка. Создатели языка сами изобрели себе какой-то абстрактный мир с Чистыми функциями, а потом поняли — если писать ПРИЛОЖЕНИЯ на хаскеле, то это не работает. И функции в мире не только чистые. Поэтому были введены в язык Монады — способ взаимодействия с внешним миром (IO и State, например). А теперь все разработчики должны мучатся, работая с монадами каждый день — ещё бы, ведь программы постоянно взаимодействуют с внешним окружением.
В заключение, я хочу ещё раз чётко обозначить свою позицию. Я ПРОТИВ ХАСКЕЛЯ, НО НЕ ПРОТИВ ФУНКЦИОНАЛЬНОГО ПРОГРАММИРОВАНИЯ. У FP масса плюсов, по сравнению с ООП. Но FP — это набор идей, а Haskell — их имплементация. И она ужасна. Она заставляет страдать людей.
Категории: Программирование
Метки: программирование