Разрабы
/

АКК

Мы логиним через
гитхаб

После логина появится возможность комментировать материалы. А дальше мы придумаем, какие возможности появятся у залогированного читателя

КодРедакция

Тулинг, поддержка, библиотеки, производительность: что в комьюнити говорят о Haskell

Тулинг, поддержка, библиотеки, производительность: что в комьюнити говорят о Haskell

Чем Haskell отличается от других языков программирования, действительно ли это язык для избранных и за что его так любят в комьюнити.

Об этом и многом другом мы расспросили участников комьюнити Haskell и вот что выяснили.

Для чего используется

Сфера возможного применения Haskell довольно широка. Но на практике его применяют в основном в финтехе и криптовалютах, и в меньшей степени — в научной разработке.

Александр Вершилов, github: qnikst, руководитель отдела разработки, кандидат физико-математических наук:

Haskell — высокоуровневый язык общего назначения, поэтому он может использоваться в различных сферах, не требующих особенных возможностей от системы исполнения. Поэтому Haskell тяжело, но всё-таки возможно применять в системах жёсткого реального времени и embedded-системах. В этом случае он применяется как транслятор, генерирующий код на целевом языке.

Чаще всего Haskell встречается в банковской сфере, блокчейнах, веб-сервисах, научных исследованиях. А самые популярные продукты на Haskell — это ShellCheck — анализатор кода на shell, и Pandoc — система конвертации между текстовыми форматами.

Дмитрий, разработчик из Typeable:

Haskell применяется:

  • в веб-программировании, в основном в бэкенде, но также и во фронтенде;
  • для написания компиляторов;
  • в финтехе;
  • в криптовалютной разработке;
  • и других сферах.

Антон Сорокин, github: Sorokin-Anton, закончил бакалавриат матфака ВШЭ, работаю Haskell-разработчиком в Serokell:

Под фронт и GUI библиотеки языка пока чаще не закончены или заброшены. Наверное, потому что желающих решать эти задачи на Haskell очень мало. Хотя есть даже компании, которые пишут на нём игры для мобильных устройств. Например, keera.co.uk. Но основная сфера использования — финтех, где нужен качественный компилятор, и обычный бэкенд.

Сейчас разработчиков, даже джунов, активно нанимает Тинькофф и ещё несколько российских и международных компаний. На удалёнке тоже достаточно много вакансий, но им чаще всего нужны синьоры.

Ян Шкуринский, Haskell-разработчик:

На Haskell можно решать достаточно большой круг задач, так как это язык общего назначения. Часто можно услышать, что на нём «разве что компиляторы можно писать». Компиляторы действительно писать можно, и очень классно это делать. Но помимо этого немалая часть разработки на Haskell — блокчейн, в частности из-за платформы Cardano, написанной на Haskell. Так же на нём пишут веб, чаще всего бэкенд. Например, в Сириус.Курсах много бекенда написано именно на Haskell. Собственно, всё, что можно решить с помощью языка со сборщиком мусора, вероятно, можно решить и на Haskell.

Регулярно вижу статьи, где не слишком компетентные люди уже лет десять пророчат Haskell смерть, однако это не мешает использовать его в работе. Популярность — не то, что ставится в приоритет. Знаменитый лозунг 'Avoid success at all costs' как раз говорит нам избегать ситуаций, когда ради успеха мы будем готовы заплатить любую цену. Язык был задуман как своеобразный эксперимент, поэтому тут было важнее, что он может дать, а не насколько это будет популярно.

По поводу работы/зарплат скажу так: работы, безусловно, меньше, чем в мейнстримных стеках, впрочем, как и конкуренции. По моему ощущению, всегда есть несколько незакрытых вакансий. Чтобы их найти, достаточно задать вопрос в чатах. Поэтому, если человек захочет найти работу на Haskell, он всегда её найдёт.

Что с тулингом и поддержкой

Haskell не может похвастаться таким же высококлассным тулингом и поддержкой, как более популярные языки программирования. Несмотря на это, программировать без IDE на Haskell можно, и это будет не больно, т.к. система типов и компилятор сильно помогает, а в последние годы стало ещё лучше благодаря появлению LSP-сервера.

Антон Сорокин, github: Sorokin-Anton, закончил бакалавриат матфака ВШЭ, работаю Haskell-разработчиком в Serokell:

С 2018 года за тулинг взялись основательно и сейчас с ним всё очень хорошо. В Haskell сразу был очень продвинутый и строгий компилятор, и сейчас все его ворнинги моментально подсвечиваются в IDE через LSP-сервер. Можно кодить, вообще не рискуя что-нибудь упустить, слушать параллельно музыку или подкасты. Если не ругается — значит, работает. Если, конечно, не ленитесь заводить типы под разные форматы данных.

Есть комитет GHC, который работает над системой типов и добавляет расширения, но не забывает и о починке багов, ускоряет IO.

Данил Берестов, github: goosedb:

Тулинг у Haskell гораздо хуже джавового или растового. Пакетный менеджер, сборщик, линтеры, форматтеры — это всё есть. IDE тоже есть, но работает не у всех и не без косяков. Иногда приходится повозиться с настройкой, побороться со странными проблемами.

Александр Вершилов, github: qnikst, руководитель отдела разработки, кандидат физико-математических наук:

В Haskell развитая система сборки, центральный репозиторий пакетов с документацией. Хотя в 2022 году этим никого не удивишь, но существуют они с тех времён, когда подобный тулинг не был мейнстримом.

Помимо этого у языка достаточно бедная поддержка в IDE. Хотя можно собрать себе IDE с language server, но на больших проектах из-за этого могут возникнуть проблемы с производительностью. В IDE обычно нет специализированных решений для рефакторинга. Базовые утилиты существуют, но придётся настраивать их под свои потребности самостоятельно. Но и тогда, с большой вероятностью, не всё будет работать.

В результате для программиста, которому нужна IDE с уровнем поддержки Java из коробки, Haskell не готов.

Ян Шкуринский, Haskell-разработчик:

Язык развивается чаще всего через «создание расширений», которые добавляют в язык те или иные конструкции. Не могу сказать, часто ли это происходит, это относительно. Могу лишь сказать, что застоя нет.

С тулингом дела обстоят сравнительно неплохо — особенно в последние годы, с появлением LSP. Есть люди, которые привыкли к IDE и её функционалу. Они легко могут найти что-то, перейти по определению, подсветить, показать.

Но есть и те, кто способен разрабатывать и без IDE. Эта группа людей существует благодаря тому, что в Haskell хорошая система типов, которая способна покрыть бОльшее количество ошибок, чем язык в среднем. Благодаря этому часто можно писать код и проверять его, просто перезапуская тайп-чекер. До некоторого времени в основном только так и писали. Не считая нескольких инструментов, пытающихся это упростить и сделанных с разной степенью успешности.

Серьёзным прорывом тут был как раз LSP, возможность в одном редакторе абстрагироваться от конкретного языка и обобщить основные действия, которые должны быть реализованы в IDE. При этом в зависимости от языка иметь разные реализации в виде отдельных языковых серверов.

Теперь можно, например, скачать в VS Code расширение для Haskell, которое скачает нужный языковой сервер под ваш проект, и работать в нём как в обычной IDE. Но должен сказать, что от этого первый способ совсем не утратил своей популярности. Не столько потому, что сообщество хаскеллистов — «закостенелые академики», которые не признают новых модных решений. Скорее причина в том, что это действительно удобно и продуктивно.

Сообщество развито и достаточно открыто к вопросам. Вопреки, возможно, общим ожиданиям, там не сидят сплошь академики, которые, отрываясь от очередного пейпера, пишут в чате новичку, что он невежда. Есть чаты для новичков, где можно задавать даже «самые глупые вопросы». Хотя это тоже шутка — как известно, глупых вопросов не бывает.

Подходит ли Haskell как первый язык программирования

Строгая типизация и функциональный подход делают Haskell интересным выбором в качестве первого языка. Его знание в любом случае развивает вас как программиста. Но узкое применение, низкая популярность и непохожесть на другие языки могут стать преградой для новичков.

Прохор Шляхтун, github: orenty7:

Haskell — достаточно строгий язык, и программы на нём похожи на математические записи, но это только плюс. В принципе его можно изучать с седьмого класса, когда школьникам впервые рассказывают про функции.

Я не очень много программировал на других языках: пробовал Python и C немного, С++. Занимался некоторое время вебом. В итоге попробовал Haskell и понял, что это — моё. Дальше изучал только его.

Дмитрий, разработчик из Typeable:

Для людей с математическим складом ума в качестве первого языка Haskell точно подойдёт.

Главная проблема — язык недостаточно распростанён. Если нет никакого опыта работы с базами данных, вебом, то, потратив несколько месяцев только на Haskell, работы не найдёшь. С другими языками, я думаю, проще найти места для начинающего специалиста.

Для хаскеллистов Haskell принципиально проще мейнстрима вроде С++, Java, C#, JavaScript. При этом язык большой и, чтобы его изучить, понадобятся время и усилия. Учёба продолжается и через несколько лет работы. Но писать на Haskell намного проще, так как компилятор делает много работы и многого не надо держать в голове.

По сравнению с другими языками Haskell:

  • компактнее и логичнее;
  • позволяет описывать систему так, чтобы множество проблем выявлялось при компиляции;
  • позволяет строить намного более высокоуровневые абстракции.

Джуны-хаскеллисты бывают, но не очень часто. Чаще в комьюнити — опытные хаскеллисты, изучавшие Haskell самостоятельно, без существенного опыта профессиональной работы на других языках.

Антон Сорокин, github: Sorokin-Anton, закончил бакалавриат матфака ВШЭ, работаю Haskell-разработчиком в Serokell:

Многие стандартные вещи довольно сложно выглядят на Haskell. Монада IO, иммутабельность и строгая типизация берут своё, так что лучше вначале выучить что-нибудь попроще, например, Lisp. Я выучил Haskell из интереса, а потом об этом узнал однокурсник и пригласил работать джуном.

Данил Берестов, github: goosedb:

Сложно сказать, но мало кто из сообщества в действительности выучил Haskell первым. Он точно отличается от большинства привычных языков, но я бы не назвал его действительно сложным. При правильном подходе можно довольно крепко понять основы за полгода, если нет опыта с другими функциональными языками; за пару месяцев, если есть. Конечно, в Haskell есть практически бесконечный простор для изучения, можно очень долго испытывать его на прочность, исследовать возможности, но это не то, что требуется от обычного программиста.

Если прийти в сообщество и начать правильно общаться, можно получить ответы на все вопросы, даже самые специфичные и непростые. Другое дело, что новички иногда приходят и показывают свой гонор: наконец в ваш академический клоповник заглянул нормальный пацан, чё у вас тут, умники? Таких никто не любит и отвечать им не спешат.

Александр Вершилов, github: qnikst, руководитель отдела разработки, кандидат физико-математических наук:

У нас в компании успешно работают люди, у которых это был первый язык. Джуны-хаскеллисты существуют. Например, выпускаются из вузов, где им преподавали Haskell, но при этом ещё не имеют опыта в промышленной разработке.

Но многие уже опытные специалисты начинают интересоваться Haskell и хотят использовать его в работе. Чаще всего это случается с TypeScript-разработчиками.

Haskell сложный, но если начинать его учить после того, как появился background в других языках, то будет проще. Главное не бояться. Ведь, например, С++ значительно сложнее, а многие делают первые шаги в программировании именно с него.

Ян Шкуринский, Haskell-разработчик:

Как мне кажется, Haskell ничем не лучше и не хуже в качестве первого языка программирования, чем общепринятые C или Python. Первый язык — это не на всю жизнь. Человек с первым языком учится декомпозировать задачу, выделять абстракции, выражать идеи через конструкции языка. Я уверен, человеку с нулевыми знаниями программирования в среднем одинаково сложно будет даваться и Python, и Haskell.

К вопросу о сложности: я в компании обучал Haskell человека с опытом PHP, у меня ушло примерно 30 часов, чтобы он смог с моей помощью решать боевые задачи. Для решения обыденных задач язык не сложный. Другое дело, что он достаточно мощный для того, чтобы начать погружаться в какие-то академическо-инфернальные бездны, магию на типах и прочее. Естественно, с этим будет сложно, но не потому что «язык сложный», а потому что сама сфера сложная.

Я замечаю, что в Haskell чаще идут люди с опытом в других языках. Но причина не в том, что существование джунов в этом языке противоречит законам физики и во избежание деления на ноль и взрыва мира тут сидят только опытные, нет.

Я для этой тенденции вижу две причины:

  1. Так сложилось, что долгое время мейнстримом были языки, подобные С/Java, и люди по совету коллег/статей в интернете/влияния общественности/обучения в вузе куда чаще начинают своё знакомство с процедурными/ООП языками. Волей-неволей, если и приходят в Haskell, то уже с опытом, причём опытом в императивных языках.
  2. Haskell из-за своей парадигмы продвигает некоторые хорошие штуки: контроль за сайд-эффектами, иммутабельность по умолчанию, алгебраические типы данных и так далее. То, что они хорошие и удобные, становится понятно не сразу. Разработчику приходится пройти некоторый путь до этого осознания. Поэтому нашедшие это в Haskell или, возможно, других языках со схожими фичами уже будут иметь опыт и придут в Haskell не нулевыми.

У Haskell высокий порог входа в специальность. Или это миф?

Выяснилось, что найти первую работу может оказаться сложнее, чем с более популярными и известными языками. Ведь компаний, использующих этот язык в коммерческой разработке, не так много. Зато особенности языка делают уровень среднестатистического джуна выше, чем новичка из мейнстримного стека.

Дмитрий, разработчик из Typeable:

Изучить Haskell, чтобы пройти собеседование на первую работу, — сложнее, чем на других языках. Новичков, знающих Haskell, на проект онбордить легко. А обучить тех, кто не знает Haskell, можно, только если человек сам заинтересован в этом.

Знаю, что, если лишусь работы, найду новую на удалёнке достаточно легко. Зарплаты Haskell-разработчиков, наверное, чуть ниже, чем в мейнстриме. Проекты разные. Скорее всего, это будут веб (бэкенд и фронтенд) и крипта.

Антон Сорокин, github: Sorokin-Anton, закончил бакалавриат матфака ВШЭ, работаю Haskell-разработчиком в Serokell:

Есть курс на Stepik, он бесплатный, не слишком длинный и покрывает всю базу. Если человек уже знает, что такое рекурсия и композиция функций, — будет несложно. Я сам учил детей в летней школе писать игры на библиотеке gloss, было весело.

Александр Вершилов, github: qnikst, руководитель отдела разработки, кандидат физико-математических наук:

Чтобы написать первую нетривиальную работающую программу, нужно потратить больше усилий, чем на многих других ЯП. Stackoverflow driven программирование также будет менее эффективным, будучи брошенным на чужую кодовую базу, скорее всего, придётся потратить больше времени, чем на среднем языке.

При этом сложность или простота онбординга с этим не связана — она полностью зависит от процессов внутри команды. Язык не влияет на сложность — за редкими исключениями языков с одним подходом и фреймворком (кроме ELM такие вообще есть?). Особенно если вы онбордите человека, имеющего представление об этом языке программирования или опыт разработки на нём.

Ян Шкуринский, Haskell-разработчик:

Высокий порог входа — правда лишь отчасти. Благодаря тому, что Haskell форсит такие вещи, как контроль сайд-эффектов, начинающему разработчику приходится осознать чуть больше перед написанием своего первого «Hello, World».

Но эти знания полезны и в будущем всё равно будут нужны. А относительно высокий порог входа компенсируется тем, что уже на самой ранней стадии разработки в среднем Haskell-разработчики знают больше основополагающих полезных концепций, чем другие.

В связи с этим «онбордить новичков» сложнее, однако и новички в итоге получаются получше. Но, повторюсь, это благодаря тому, что язык «форсит это». Никто не мешает потратить больше времени для онбординга JS-разработчика, и он тоже будет более скилловым к началу работы в компании.

Я бы сказал, что технических причин, которые дают противопоказания к Haskell, немного. Тут есть кадровые причины. Если нужно за короткое время нанять команду из нескольких хаскеллистов, то это будет сложнее сделать, чем в случае с джавистами, т.к. язык не так популярен.

Некоторые люди могут использовать Haskell ради эстетического удовольствия вопреки потенциальным кадровым проблемам. Но и это не совсем правда. Иногда это не только и не столько эстетическое удовольствие, сколько желание иметь надёжное решение, которое можно будет легко рефакторить и масштабировать при необходимости.

Это возможно благодаря тому, что код написан лучше в следствие хорошо выбранных абстракций и хорошей поддержки компилятора. Хотя я, конечно, уверен, что есть и эстеты, которые только ради красоты и выбрали этот язык.

Изучать Haskell, чтобы вырасти как специалист: есть ли смысл

Необычные конструкции, важные практики и философия программирования — всё это раскрывается в Haskell.

Прохор Шляхтун, github: orenty7:

Многое в моей голове перевернулось после изучения этого языка. До сих пор встречаю конструкции на нём с мыслью: «А что, так можно было?»

Я не программирую профессионально, но делаю это для удовольствия. Язык достаточно красивый, и, если его правильно использовать, то решения получаются очень элегантными.

Дмитрий, разработчик из Typeable:

Считается, что знание Haskell развивает. Думаю всё же, что основной смысл изучения Haskell — либо научный интерес, либо использование его в работе. Для общей эрудиции тоже полезно разобраться, но это занятие на любителя.

Антон Сорокин, github: Sorokin-Anton, закончил бакалавриат матфака ВШЭ, работаю Haskell-разработчиком в Serokell:

На Haskell нужно явно описывать данные в типах и быть честным с собой, компилятор is watching, а это полезный навык.

Данил Берестов, github: goosedb:

Некоторые концепции Haskell могут помочь взглянуть на привычные вещи с другой стороны. Если вы не собираетесь связывать свою профессиональную деятельность с Haskell, то его, возможно, следует изучить хотя бы концептуально, как и какие-нибудь Lisp, J, Rebol, Prolog.

Александр Вершилов, github: qnikst, руководитель отдела разработки, кандидат физико-математических наук:

Многие из идей, лежащих в основе Haskell, становятся популярны и в других языках или в форме философии, догматов, best practices, библиотек. Например, чистота и неизменяемость считаются очень важной практикой в популярных языках (см. Mark Seeman — Pits of success).

Опыт программирования на языке, где эти принципы лежат в основе, помогает лучше почувствовать эти техники. Кроме того, знакомство с альтернативными подходами к организации программ, например, тотальная чистота функций и разделение эффектов, позволяет по-новому взглянуть на старые проблемы и выбрать наиболее подходящее решение.

Из библиотек линзы и STM стали появляться в разных языках, но в Haskell можно их увидеть во всей красе — как раз из-за чистоты и неизменяемости по умолчанию.

Ян Шкуринский, Haskell-разработчик:

Мне кажется, именно «непохожесть» языков при изучении и является стимулом к росту. Наверное, можно привести аналогию со спортзалом: спортсмены и атлеты всегда повышают нагрузки на мышцы для того, чтобы вывести их из «зоны комфорта» и под стрессом заставить их расти. Тут действует схожий принцип.

Для тех, кто знает Python, JavaScript, Ruby и PHP, изучение пятого скриптового языка с динамической типизацией не сильно даст рост. Возможно,, человек даже ни разу не напряжёт мозг, изучая его, т.к. ему там всё ясно и он находится в «зоне комфорта». Так что да, если цель — узнать что-то новое, вырасти как разработчик, и вы не знакомы с Haskell, то попробуйте его изучить. Узнаете много нового и интересного для себя и, несомненно, вырастите.

Как изучать Haskell

Как и другие языки программирования, начинать учить Haskell рекомендуют с книг, курсов и документации.

Прохор Шляхтун, github: orenty7:

В обучении самое сложное — это подобрать литературу. Я помогал одной знакомой выучить Haskell, по ощущениям это было не сильно сложнее других языков.

Когда я изучал язык сам, мне рекомендовали книгу «Изучай Haskell во имя добра», и я сильно застрял на ней. Она хороша для старта, но потом, как мне показалось, скатывается. Я бы советовал начинать с неё, чтобы попробовать язык, доходить до главы про IO и потом переходить на книгу Уилла Курта «Программируй на Haskell». В ней меньше примеров, но объяснения более строгие.

Дмитрий, разработчик из Typeable:

Есть достаточное количество книг. Для уровня миддл/синьор есть такие авторы:

  • Саймон Марлоу — параллельное и конкурентное программирование;
  • Виталий Брагилевский — пишет про общие «продвинутые» темы;
  • Крис Окасаки — про производительность функциональных структур и алгоритмов; книга старая, но базовая и не непосредственно про Haskell;
  • Сэнди Магуайер с его 'Thinking with types'.

Антон Сорокин, github: Sorokin-Anton, закончил бакалавриат матфака ВШЭ, работаю Haskell-разработчиком в Serokell:

Я рекомендую пройти вышеупомянутый курс на Stepik, а потом изучать туториалы к конкретным библиотекам и/или прочитать книжки про них ('Optics By Example' Криса Пеннера, 'Thinking with Types' Сэнди Магуайера), для более продвинутого уровня — блоги вроде этого

Данил Берестов, github: goosedb:

Для вкатывания в язык ресурсов достаточно. Дальше, скорее всего, понадобятся ресурсы сильно менее специфичные для Haskell. Для особо пытливых есть GHC User Guide, в котором написано про язык и компилятор вообще всё, что о них полезно знать.

Ян Шкуринский, Haskell-разработчик:

Какие-то конкретные книги тут не так важны. Куда важнее выбора конкретных книг не гнушаться читать исходники базовых библиотек и мануал по компилятору GHC. И книги по проектированию программ, так как принципы проектирования везде одни и те же.

Библиотеки для Haskell

Библиотеки весьма разнообразны и существуют практически под любые задачи, но в работе с ними есть нюансы.

Дмитрий, разработчик из Typeable:

Язык постоянно развивается. Новые версии компилятора выходят раз в полгода. Есть комитеты по языку, по библиотекам.

Контрибьютят энтузиасты и компании, когда есть что-то общее или надо что-то поправить. Людей «на зарплате», занимающихся компилятором и библиотеками, совсем немного. Нет проблем стать контрибьютером. Весь код открыт, бери ишью, делай PR.

Библиотек достаточно, смотреть их стоит тут, например:

  • base — базовая библиотека;
  • containers — всевозможные контейнеры с эффективными алгоритмами;
  • text, bytestring — работа с текстом и двоичными строками;
  • aeson — конвертация Haskell типов в JSON и обратно;
  • postgresql-simple — работа с PostgreSQL;
  • mtl и др. — реализации систем эффектов;
  • stm — транзакционная память для параллельных и конкурентных вычислений;
  • lens — «оптика» для обобщенной работы с данными и не только;
  • megaparsec — парсер-комбинаторы;
  • singletons — частичная реализация «зависимых типов»;
  • reflex, reflex-dom — FRP-программирование, в том числе для веб-фронтенда (с использованием компиляции в JavaScript при помощи компилятора ghcjs).

Антон Сорокин, github: Sorokin-Anton, закончил бакалавриат матфака ВШЭ, работаю Haskell-разработчиком в Serokell:

Самые популярные библиотеки — для работы с JSON, SQL, Rest API, так как содержат много бэкенда. Есть библиотеки для тестов и бенчмарков, а есть с прикольными абстракциями (lens, mtl). Хорошие библиотеки написаны так, что достаточно смотреть на типы функций, чтобы их использовать, эти библиотеки хорошо взаимодействуют друг с другом.

Данил Берестов, github: goosedb:

Библиотек достаточно для работы в продакшне. Есть всё: серверы, вебсокеты, шифрование, любые коллекции, JSON, YAML, XML, работа со временем, асинхронностью, базами данных, логами, метриками, тестами. Кажется, у нас ни разу не было случая, что нам нужна библиотека, но мы её не нашли. Может, иногда приходится патчить уже существующие, но это суровая правда не только про Haskell. Если вам нужен HTTP-сервер, берите servant для более-менее разверстого API, scotty — для экспериментов или очень простого API. Для работы с JSON — aeson, для шифрования — cryptonite.

Ян Шкуринский, Haskell-разработчик:

Библиотек у Haskell достаточно. Очень редко бывает, что мне нужна какая-то библиотека, а аналогов нет. Насчёт самых популярных — тут сильно зависит от разработки. Так как я больше занимаюсь вебом, я бы сказал, что для веб-бэкенд разработки сейчас популярна servant, для проектирования типобезопасного API — persistent и её производные, hasql — для доступа к БД, aeson и его производные — для работы с JSON.

Из библиотек общего назначения я бы лично отметил lens. Это отличная библиотека для работы и манипуляции данными, vector — эффективная реализация массивов, bytestring — работа с байтами, text — работа с текстом. Можно, наверное, вспомнить про mtl как один из способов организации и работы с эффектами. В общем, всего достаточно и хватает.

Что с производительностью

У Haskell приемлемая производительность и не очень высокая скорость компиляции, но всё относительно — смотря с какими языками его сравнивать.

Прохор Шляхтун, github: orenty7:

В случае с Haskell попытаться увеличить производительность — значит испортить его элегантность. Скорости Haskell обычно хватает, но для его ускорения используются хаки разной степени грязности, в том числе безобидные, вроде распаковки полей и вычисления значений, ведь Haskell по умолчанию ленивый. А ещё можно использовать монаду ST, чтобы хранить ссылки на объекты и менять состояние. Ну и крайний случай — FFI, в который выносят трудоёмкие расчёты и переписывают их, например, на С.

Дмитрий, разработчик из Typeable:

Производительность программ — отстает от чистого С, но в целом всё хорошо, лучше многих мейнстримных языков. Однако Haskell — язык со сборщиком мусора, поэтому реалтайм на нём не пишут. Компиляция программ может быть довольно долгой.

Я не знаю языков лучше Haskell, потому что он предоставляет разумный компромисс между надёжностью, количеством библиотек, эффективностью и удобством программирования.

Антон Сорокин, github: Sorokin-Anton, закончил бакалавриат матфака ВШЭ, работаю Haskell-разработчиком в Serokell:

Чтобы добиться высокой производительности, иногда надо профайлить — бывают нормальные на первый взгляд места, тормозящие код, связанные в основном с ленивостью языка.

Для меня Haskell — предпочтительный язык, ведь такой качественной системы типов я не встречал почти ни в каком другом языке. Есть другие языки с продвинутой системой типов — в первую очередь это Scala, Purescript и F#. В них можно импортировать библиотеки, написанные на Java, JS и C#, в то время как в Haskell можно использовать библиотеки из С. На данный момент самые крутые библиотеки с абстракциями и расширения системы типов именно у Haskell, и их количество с каждым годом только растёт.

Ян Шкуринский, Haskell-разработчик:

С производительностью всё неплохо. Если знать, что делать, то можно получить производительность не хуже Java. От решения на С это будет отличаться в разы, а не на порядки. Иногда, наверное, найдётся решение, близкое по производительности к C, но это будет не слишком просто, и нужно смотреть на каждую ситуацию по отдельности.

В Haskell (GHC) хороший рантайм, есть т.н. «зелёные потоки», которые умеют в многоядерность, есть честный STM. Благодаря трекингу эффектов компиляция идёт в бинарный файл и проходит через множество оптимизаций, которые в том числе возможны благодаря «чистоте» языка. Благодаря иммутабельности можно эффективно организовать сборку мусора. В общем, кажется, жаловаться особо не на что.

Какое будущее у языка?

Антон Сорокин, github: Sorokin-Anton, закончил бакалавриат матфака ВШЭ, работаю Haskell-разработчиком в Serokell:

В будущем, на мой взгляд, Haskell останется нишевым языком. Но работу будет найти несложно: люди с опытом Haskell-разработки продолжат запускать Haskell-проекты. А если появятся зависимые типы, то непременно возникнет и новая волна интереса к языку.

Ян Шкуринский, Haskell-разработчик:

Haskell вот уже 30 с лишним лет. Немалую часть из них он прожил в обществе, где бытовали мнения, что «он не готов к продакшну», «он медленный», «он умер или умрёт скоро» и т. д. Тем не менее, язык развивался, вносил фичи, многие современные популярные языки типа Rust и Scala очень много взяли оттуда. Я молчу про языки, которые взяли многое у тех языков, которые взяли много у Haskell, и продолжают брать. Это говорит о том, что язык движется в правильном направлении.

Думается, будущее будет примерно таким же: язык будет развиваться, другие языки будут брать от него фичи, люди будут говорить, что он медленный и скоро наконец-то умрёт. А те, кто действительно им пользуются, будут продолжать им наслаждаться.

А вот еще

Если смысл ни в чем, то в чем?

Комменты: ...