Новый движок моего блога (на Haskell)
Переписал свой блог — теперь это Haskell! Заходите вы ко мне на сайт, почитать это сообщение, а в это время, на далеком сервере, лямбда функции замыкаются и редуцируются, монады одна в другую трансформируются, санки форсятся и происходит разная другая магия.
Пока немного тезисно что, как и почему, часть тем буду в будущем разворачивать:
Web Framework — свой собственный
Я просмотрел всё что сейчас есть из фреймворков на Haskell (их уже много), однако ничего меня не зацепило. Написал свой миниатюрный фреймворк. Для взаимодействия с web-сервером использую fastcgi. Тут особо без вариантов, хотя начали появляться другие реализации fcgi, но я их пока не смотрел. К fastcgi есть некоторые вопросы по архитектуре, и я написал свою небольшую обертку. Но в целом хорошее впечатление производит.
Если Web-программирование на Haskell не заброшу, обязательно рано или поздно напишу свой полноценный фреймворк.
База данный — CouchDb
Использую CouchDB. Давно уже на неё посматриваю, решил попробовать в деле. Для неё существует обертка для Haskell (CouchDB), но в настоящее время она поддерживает далеко не весь API, в частности там нет аттачей (и не только, много чего нет). Так что я написал свой биндинг (тоже, понятно, не полный :) ), благо API у CouchDB простой — берешь документацию и пишешь. Для HTTP использую curl, хорошая штука, рекомендую, API у него не самый очевидный, но мощный, умеет всё, libcurl он и есть libcurl. Выкладывать биндинг к CouchDB пока не буду, он довольно сырой и использует «специфический» JSON (см. ниже).
Ещё, в качестве заметки: в CouchDB для написания view идеально бы подошел чистый функциональный язык, а то по факту побочные эффекты мы использовать не можем (view поломается самым непредсказуемым образом) но написать код, к примеру, использующий текущее время мы можем, и CouchDB никак нам в этом не помешает. Так что у меня есть задумка написать CouchDB view server на Haskell, благо CouchDB API в этом месте тоже простой, и побочные эффекты во view будут отсекаться на уровне чистых функций языка.
Также CouchDB написана на функциональном языке Erlang, и теперь у меня полностью «функциональный» сайт :) .
Про JSON
Библиотек поддержки JSON для Haskell существует уже больше десятка, я сначала начал писать на json т. к. он создал впечатление самого навернутого, однако в реальном деле его API оказался очень громоздким и не удобным для использования. В итоге я его использую как парсер и генератор, а сами JSON объекты у меня самописанные, с удобным для меня интерфейсом. И использую я «свой JSON» везде, включая взаимодействие с CouchDB, поэтому и не буду пока интерфейс к ней выкладывать.
Надо бы провести какой-то сравнительный анализ существующих реализаций JSON-а, может есть что-то более удобное, ну или свою реализацию написать :) .
Шаблонизатор
Это самая удачная часть. Мне очень нравится Mustache, вот только для Haskell его нет. Но такой мелочью меня не остановить, написал свою реализацию. Получилось, на мой взгляд, не плохо. Надо её немного причесать, написать документацию и выложить.
UPD: Написал про Mustache
UPD: Выложил свою реализацию этого шаблонизатора — Hastache
Светлое будущее
В общем, есть что рассказывать и есть куда двигаться. Главное чтоб меня лень не одолела это делать :) . Haskell, на мой взгляд, великолепно подходит для серверного web-программирования, для многих языков именно наличие классного Web Framework'а стало огромным толчком в популярности, причин, почему бы этому не произойти для Haskell, я не вижу. Думаю, чем больше разных фреймворков будет написано на Haskell, и чем больше он будет использоваться рядом с Ruby on Rails, Django, Pylons, Lift и т. д. тем лучше. Постараюсь внести в этот процесс свою посильную лепту.
UPD: С 26.11.2012 устройство моего блога вновь изменилось.