Haskell: цель или всё-таки средство?
date = fromGregorian 2017 mar 31
category = "Теория"
tags = ["размышления"]
Привет всем.
Начну с вопроса. Вспомните, пожалуйста, какую-нибудь известную софтину, написанную на Haskell, но не предназначенную для хаскелистов? Только быстро. Вспомнили?
Возможно, это был pandoc
, а возможно и нет (поделитесь в комментариях, буду признателен). И осмелюсь предположить, что вспомнить ещё пару-тройку будет уже трудновато.
Не слишком ли сильно, друзья, мы сфокусированы на самом Haskell? Мы - это всё современное Haskell-сообщество. Мы пишем новые пакеты на Hackage, предлагаем новые расширения GHC, публикуем новые обучающие статьи. Вы заметили? Всё это существует лишь для сообщества. Для нас с вами. Новые идеи для зависимых типов, новые правила форматирования кода, новые Haskell-плагины для редакторов и IDE - всё это нужно лишь сообществу, то есть нам с вами. И больше никому.
На Hackage есть порядка 60 (шестьдесяти!) вариаций кастомной Prelude. В GHC 8.0.2 есть 227 (двести двадцать семь!) расширений. И вот вопрос: мы действительно нуждаемся в этом? Нам правда требуются ещё N собственных прелюдий и ещё M новых расширений компилятора?
Я восторгаюсь языком Haskell, вы знаете это. И совершенно искренне считаю его одним из самых лучших языков в мире. И всё же меня тревожит озвученная тенденция: сообщество слишком сфокусировано на нуждах сообщества. Мы развиваем язык и его экосистему, и это офигенно круто! У нас офигенный компилятор, офигенные языковые возможности, и многие из имеющихся пакетов можно смело назвать офигенными. По ряду параметров Haskell легко даст фору многим языкам. Однако мы не имеем права забыть главное: язык программирования - это средство, но не цель. Мы ведь помним цель, не так ли? Софт. Это наша цель.
И именно с этим у нас проблемы. Ещё один пакет, ещё один proposal, ещё одна презентация про вон тот пакет и про вот этот proposal. И при этом на Haskell написано так мало софта, предназначенного не для нас (или даже вообще не для программистов). Упомянутый ранее pandoc
? Прекрасно. А ещё? Даже известный xmonad
не подойдёт, потому что его конфиг - это Haskell-код. Hakyll? Опять не то, потому что, в отличие от Jekyll, пользоваться оным может только хаскелист. Всё это отличный софт, но он существует только для нас с вами.
Разумеется, софта, написанного на Haskell, в мире существует весьма много, и мы знаем это. В конце концов, компании, предоставляющие хаскельные рабочие места, коих с каждым годом всё больше - они ведь создают какой-то софт, не правда ли? Свои ли разработки, или же софт на заказ, но создают. Однако зачастую это либо корпоративные закрытые решения, либо решения, о которых вообще не слышно (сделали и ладно), либо - правильно, решения для хаскелистов. Есть приятные исключения, но их мало.
Вы слышали это? “Изучай Haskell во имя Haskell”. “Haskell хорош лишь для написания расширений компилятора Haskell”. Мы-то с вами знаем, что это не так, и что Haskell может использоваться для написания отличного софта, но где он, этот софт? Многие ли за пределами нашего сообщества знают о нём?
Да, я уже слышу ответ. Мол, на самом деле пакетов на Hackage не так уж и много, да и по качеству они не столь уж совершенны. Мол, на самом деле компилятор GHC нуждается в улучшении. Мол, на самом деле у нас очень мало хороших книг по Haskell. И это действительно так! Именно поэтому я и не призываю перестать писать новые пакеты, или прекратить контрибьютить в имеющиеся, или забить на развитие компилятора, или бросить задумки для новых книг, вовсе нет! Я лишь призываю делать не только это, и думать не только об этом.
Можно написать очередной парсер, работающий аж на 6% быстрее чем attoparsec
. Можно придумать ещё одно расширение GHC, позволяющее (в каком-то конкретном случае) вместо четырёх строчек кода написать три. И даже можно написать ещё одну статью про монады, которая уж точно прольёт свет на сию вселенскую тайну. Можно, но нужно ли? Не лучше ли потратить эти усилия и время на написание софта? Софта, делающего что-то полезное не для нас, но для других. Софта, который славился бы своим качеством, в широком смысле этого слова. Софта, код которого можно было бы рекомендовать новичкам как образец для подражания. Софта, на который можно было бы сослаться в ответе на надоевший вопрос “Ну и где же софт, написанный на этом вашем Хаскеле?”. И не кажется ли вам, что наличие такого софта станет куда более ярким доказательством силы и красоты Haskell, нежели наличие шестидесяти кастомных прелюдий?..
Конечно, язык развивается, и будет развиваться впредь. И это хорошо, что у нас появляются новые пакеты и новые идеи. Но давайте помнить, для чего всё это существует.