Введение

Всем привет! Мы хотим продолжить серию постов на тему “где используются эти ваши странные языки программирования”. В прошлый раз мы рассказали про Лисп, а сегодня продолжим разговор про функциональные языки и обратим внимание на Haskell.  Он является основным языком разработки в Typeable и, конечно, мы не смогли пройти мимо такой темы.

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

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

Рассказываем про индустриальное использование Haskell!
Рассказываем про индустриальное использование Haskell!

Что и где написано на Haskell?

  1. Пожалуй, самый гуглящийся и известный пример использования Haskell в крупных компаниях это спам-фильтры в Facebook Meta. Для фильтрации сообщений, содержащих спам, ссылки на потенциально вредоносное ПО и фишинговые атаки, используется система Sigma, которая в 2015 году была переписана на Haskell. Выбор языка основывается в том числе на требованиях к производительности,  необходимости в чистых функциях и статической типизации, а также возможности интерактивной разработки. Под капотом активно используется фреймворк Haxl, который компания выложила в открытый доступ. Больше подробностей о процессе разработки и технических деталях можно найти в соответствующем посте в блоге компании:  https://engineering.fb.com/2015/06/26/security/fighting-spam-with-haskell/

  2. Eaton — компания, производящая электротехническое и гидравлическое оборудование, компоненты для авиационной и автомобильной промышленности. В компании используют Haskell для повседневных задач вроде скриптинга, симуляции железа, инструментов для удалённого управления системами транспортного средства и т.д. Но самое интересное, что они доверили управление гидравликой коду, написанному на DSL Atom, который также реализовали на Haskell. Atom предназначен для разработки систем жёсткого реального времени и позволяет декларативно описывать правила смены состояний системы. Во время компиляции выполняется планирование задач, поэтому результирующий код имеет детерминированное время выполнение и константное потребление памяти. Это значительно упрощает верификацию полученного кода и в целом повышает безопасность системы, что, конечно, очень важно для этой предметной области. Более подробно про всё это можно прочитать на слайдах и в репозитории Atom.

  3. Теперь перенесёмся в совершенно другую область, а именно в мир музыки. Сервис Chordify позволяет преобразовывать музыку с YouTube, soundCloud и т.д. в аккорды, чтобы вы сами научились играть свои любимые песни. Haskell применяется по большей части непосредственно в процессе распознавания, для этого разработчики используют библиотеку HarmTrace, которая анализирует последовательности музыкальных гармоник.

    По аккордам, сгенерированным библиотекой на Haskell, можете сыграть свою любимую песню
    По аккордам, сгенерированным библиотекой на Haskell, можете сыграть свою любимую песню
  4. Лаборатория Касперского разрабатывает собственную защищённую операционную систему KasperskyOS для подключенных к интернету встраиваемых систем. Разумеется, у этой ОС особые требования к надёжности и кибербезопасности. Для компилятора системы безопасности и создания вспомогательных средств разработки команда KasperskyOS активно использует Haskell. Конфигурация безопасности описывается на специальном DSL, который затем компилируется в C. Как видим, Haskell в очередной раз доказал свою пользу, когда дело касается безопасности. 

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

    В Tesla тоже используют Haskell!
    В Tesla тоже используют Haskell!
  6. BIOCAD — одна из крупнейших биотехнологических компаний, базирующаяся в России. В компании осуществляется полный цикл создания медикаментов, вплоть до массового производства и маркетинга. BIOCAD разрабатывает собственные внутренние сервисы для обработки и хранения данных при разработке препаратов. Бэкенд этих сервисов написан на Haskell, в нём используется графовая база данных Neo4j, для которой компания разработала и выложила в открытый доступ драйвер Hasbolt.

  7. Haskell занял свою нишу в разработке блокчейнов и криптовалюты. Наверное, большинство вакансий на Haskell, которые я встречала, были из этой области. Из самых известных, пожалуй, стоит упомянуть Cardano. Основная причина  популярности Haskell в этой области — снова безопасность! Более подробно про это можно почитать в посте FPComplete.

  8. Если блокчейны кажутся слишком скучной, серьезной или “нечеловечной” областью, то расскажу вам о Co–Star — астрологическом приложении для персонализированных гороскопов и ретроградных Меркуриев. Их бэкенд написан на Haskell, и разработчики рассказали на сайте приложения, почему выбрали именно этот язык: https://www.costarastrology.com/why-haskell/

    Haskell немного причастен даже к астрологическим прогнозам...
    Haskell немного причастен даже к астрологическим прогнозам...
  9. Бэкенд мессенджера Wire написан на Haskell, причём серверный код есть в открытом доступе в репозитории компании, и к нему написана подробная документация.

  10. Американский музей естественной истории использует Haskell для исследования филогенетических графов, отражающих эволюционные взаимосвязи между различными видами. Код этого проекта также доступен на GitHub

Заключение

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

Сами мы в Typeable применяем Haskell для разработки проектов в области здравоохранения, туризма, финтеха и многого другого.

Будем рады вашим дополнениям, рассказам об опыте работы или написания пет-проектов на Haskell!

Вам также может понравиться:

  1. А вы знаете, где сейчас используется Лисп?

  2. Сильные стороны функционального программирования

  3. Какой вклад внесло функциональное программирование в современные языки?

  4. 7 полезных инструментов на Haskell

Версия на английском языке

Комментарии (20)


  1. Shaz
    13.12.2021 18:29
    +4

    Так и хочется написать «А вы знаете кто ещё использовал Haskell? Правильно! ……»


    1. fierce-katie Автор
      13.12.2021 18:46
      +2

      Это развлечение для твиттера!


  1. Indemsys
    13.12.2021 19:06
    +1

    Заинтересовался действительно ли в KasperskyOS смотрят на новые языки как на средство повышения безопасности.

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


    1. nolane
      13.12.2021 23:23
      +3

      Так если рассуждать, то gcc это тоже просто автогенератор кода на ассемблере и никак не повышает безопасность.


    1. Alex_ME
      14.12.2021 01:47
      +3

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

      Я не нашел информации, упомянутый в статье DSL Atom генерирует сразу бинарь или же код на каком-то языке, который компилируется в бинарь.


    1. vitalyisaev2
      14.12.2021 13:41

      Как я понимаю, написан он как раз на Хаскелле, и потом оттранслирован в Си.


    1. timnavigate
      15.12.2021 10:38

      непонятно только одно, безопасность повысилась, и если да, то как?


    1. worldmind
      15.12.2021 10:52

      Пишут-то на хаскеле, какая разница во что он компилируется - сразу в байт-код или предварительно в си?


  1. csl
    13.12.2021 21:56
    +1

    Раз спросили о пет-проектах, да будет мне позволено...

    https://habr.com/ru/post/249803/ (не мой)


  1. funca
    13.12.2021 23:24
    +1

    Минималистичный менеджер окон для X11 https://xmonad.org/


  1. artemisia_borealis
    14.12.2021 01:59
    +1

    Pandoc же.
    (хотя он, оказывается, отнесён к утилитам и был в другой статье)


  1. dio4
    14.12.2021 10:39
    -3

    В общем, как ни круто, а все равно в итоге рулит си.


  1. denizko
    14.12.2021 12:38

    Не холивара ради: был ли у вас выбор между Лиспом и Хаскелом? Если да, то почему второй?


    1. fierce-katie Автор
      15.12.2021 10:37
      +1

      Нет, именно такой выбор не стоял, для нас Haskell обладает целым рядом преимуществ, например, статическая типизация, АТД, удобные для моделирования предметной области, большое количество библиотек и т.д. Я не работала в компании с самого начала, но у нас есть пост, где рассказывается про выбор технологий, так сказать, из первых уст: https://habr.com/ru/company/typeable/blog/554516/

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


  1. denizko
    15.12.2021 04:42
    -2

    И чем плох мой вопрос? На полке книга по Common Lisp, но в последнее время упоминания про Haskell мне попадаются чаще, вот и решил узнать что да как... Но нет же, нашелся какой-то мудень, который вместо ответа влепил минус. За что? ХЗ.


    1. mudriyjo
      15.12.2021 08:55
      +1

      По моим ощущениям haskell развивается и поддерживается гораздо лучше CL. Не так давно добавили поддержку линейных типов


    1. DarkEld3r
      15.12.2021 11:20
      +1

      Не минусовал, но попробую предположить откуда такая реакция. На мой взгляд языки чуть ли не максимально разные, даром что оба принято называть функциональными. То есть, вопрос звучит примерно как "питон или С?" — в большинстве случаев такой выбор просто не стоит, он определяется предметной областью и личными предпочтениями. Опять же, мы ведём это обсуждение в блоге компании, которая топит за статическую типизацию.


      P.S. Обычно такое негодование ещё минусов собирает. (:


      1. fierce-katie Автор
        15.12.2021 11:29
        +1

        Мы тоже не минусовали, наоборот: такие вопросы как раз уместны в блоге компании, которая выбрала Haskell! Можно лишний раз рассказать, какой он классненький :)

        Если серьёзно, то когда хочется функциональщины, то выбор между двумя "семействами" (Lisp или потомки ML) -- вполне естественный. Из лиспов сейчас живее всех в индустриальной разработке Clojure, из ML-ных, Haskell.


        1. DarkEld3r
          16.12.2021 10:50

          Если серьёзно, то когда хочется функциональщины, то выбор между двумя "семействами" (Lisp или потомки ML) — вполне естественный.

          Ну ладно, не буду спорить. Похоже я не могу представить как это когда "просто хочется функциональщины". (:


          Просто мне кажется, что множества любителей динамической и статической типизации не очень сильно пересекаются. Опять же, в моём понимании, лисп (тем более Common Lisp, о котором шла речь) — это, в первую очередь, макросы и "гибкость".


  1. edoss2986
    15.12.2021 10:31
    +3

    Все знают, что Haskell - язык, написанный специально для конфигурации оконного менеджера Xmonad. И может использоваться только для этого)))