MessagePack — это формат, напоминающий JSON, только более быстрый и более компактный. Например, {"a":1,"b":2}
занимает 13 байт в JSON, 19 байт в BSON и всего лишь 7 байт в MessagePack. MessagePack RPC представляет собой протокол удаленного вызова процедур, основанный на MessagePack. Полная реализация MessagePack RPC предоставляет синхронный и асинхронный обмен сообщениями по TCP, UDP или через Unix-сокеты. Давайте выясним, как работать со всем этим хозяйством в Haskell.
Недавно мне пришло письмо от одного из посетителей с просьбой помочь решить небольшую проблему с OCaml‘ом. И как-то между делом он поинтересовался, почему я отказался от OCaml в пользу Haskell. После небольшого раздумья я ответил, что это сложный вопрос и что я не готов вот так сразу на него ответить, а также пообещал когда-нибудь написать пост на эту тему. И вот, я наконец-то собрал свои мысли в кучку.
Template Haskell — это расширение Haskell, добавляющее в язык шаблоны. Шаблоны в Haskell представляют собой что-то вроде макросов Lisp, только со строгой статической типизацией. Другими словами, TH добавляет в язык возможность метапрограммирования, то есть, написания программ, которые генерируют код программы на этапе компиляции. Давайте же попробуем разобраться, как пользоваться TH и для решения каких задач он вообще может пригодиться.
В мире Haskell есть такой хороший пакет conduit за авторством небезызвестного Michael Snoyman. Этот пакет позволяет легко и непринужденно делать множество полезных вещей с файлами, сокетами, соединениями с базами данных, всякими там TQueue или даже обычными списками. На первый взгляд пакет кажется сложным и пугающим. Но, как это часто бывает с Haskell, если не пытаться вникнуть во все наскоком, а сесть и спокойно разобраться, выясняется, что в действительности все предельно просто.
В прошлый раз мы научились рисовать разноцветные треугольники и пирамиды. Это, конечно, замечательно, но если вы когда-нибудь играли в компьютерные игры, то знаете, что они рисуют на экране очень, очень много пикселей самых разных цветов. Неужели все их приходится раскрашивать вручную при помощи изученных в прошлой заметке средств? К счастью, нет. Для решения этой проблемы были придуманы текстуры.
На днях я разгребал свой список статей для отложенного прочтения. Помимо прочего, в нем был найден хабрапост Графика через OpenGL на Haskell, который пробудил во мне былой интерес к работе с трехмерной графикой на правильном языке. А что может остановить программиста, которому что-то дико интересно и хочется в этом разобраться?
Возможность Erlang'а производить прозрачный обмен сообщениями между процессами, работающими на разных физических машинах, бесспорно, является интересной и порой весьма практичной. Но не факт, что эту возможность следует использовать именно в вашем проекте. Хотя далее по тексту речь будет идти об Erlang, многое из написанного также относится и к распределенным акторам в Akka или Cloud Haskell.
Я тут читаю «Happstack Crashcourse» и нашел в главе о шаблонизаторах упоминание одной интересной возможности GHC. Оказывается, в исходном коде можно указывать дополнительные ключи, которые будут переданы GHC при компиляции программы, в том числе ключи, позволяющие прогнать код через произвольный препроцессор.
Когда я впервые увидел код в стиле f1 >>= \x -> f2 >>= \y -> Right (x, y)
моя реакция была «Ааа! Что тут происходит? Как вообще кто-то может писать на таком языке?». Но, как выяснилось, если сесть и спокойно во всем разобраться, в монадах нет абсолютно ничего сложного. Кроме того, оказывается, монады имеют множество важных практических применений и способны существенно облегчить выполнение нашей с вами повседневной работы.
Scotty — это легковесный движок для создания веб-приложений на языке Haskell. Что-то вроде Cowboy из мира Erlang или Scalatra из мира Scala. Сегодня с помощью Scotty мы прикрутим веб-интерфейс к нашей телефонной книге.