20090413

Функциональное веб-программирование

Многие читали Beating the Averages Пола Грэхэма (есть перевод). Он использовал Lisp, и считает, что именно поэтому создал самое удачное веб-приложение (которое потом превратилось в Yahoo! Store). Прекрасно!

А вот что реально уже готово и можно использовать прямо сейчас? Я решил не зацикливаться на Хаскеле, и вспомнил, что есть ещё Erlang, Caml, Scala, Scheme, Lisp. Стоило только начать поиски, и я нашёл много интересного. Делюсь находками.

1. Язык программирования Erlang и каркас для разработки веб-приложений Nitrogen. Кстати, сайт Nitrogen на нём же, видимо, и работает. Рекомендую посмотреть видео:

Видео: возможности Nitrogen (дек. 2008) (.mov)

скринкаст: Новые возможности Nitrogen (дек. 2008)


Обратите внимание на счётчик числа строк, нужных, чтобы запрограммировать страницу (такой счётчик есть и на всех страницах сайта Nitrogen). Число, как правило, двузначное. Меня лично поразило вот это — запуск долгоиграющих процессов на сервере. 31 строчка! Чтобы сделать подобное на Python и Django, мне пришлось попыхтеть.

Кроме Nitrogen, для Erlang есть ещё Erlyweb и Erlang Web.

2. Язык программирования Haskell и сервер приложений Happstack. Самое приятное, что проект хоть ещё и молодой, но уже работающий. На нём сделан Happstack-tutorial, на нём работает Patch-tag.com. Первые энтузиасты даже делают на нём свои блоги.

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

Основная отличительная черта Happstack: реляционная база данных ему не нужна. Можно пользоваться теми структурами данных, которые наиболее удобны. Возможность с одной стороны спорная, полагаться на неё страшно, с другой — весьма интересная.

Вот маленькая презентация Happstack:

Но и не Happstack единым. Читаем Is Haskell a Good Choice for Web Applications?. Весьма обнадёживает. Исходник работающего сайта — в подарок.

3. Язык программирования Scala (гибридный функциональный язык программирований для виртуальной машины Java) и каркас для веб-приложений Lift. Можно посмотреть на его демо.

Интересно, что буквально на днях Гугл объявил поддержку Java на AppEgnine, и народные умельцы уже используют там Scala. Более того, точно так же на AppEngine запустили и Lift.
Scala — по-итальянски лестница. Думаю, игра слов scala — lift теперь всем понятна.


4. Язык программирования Caml и каркас для веб-приложений Ocsigen. Точнее, как я понял, Ocsigen — это веб-сервер, а каркас для веб-приложений называется Eliom. И есть ещё набор библиотек Ocsimore. Однако это детали.

Интересные особенности Ocsigen: валидность XHTML документа гарантируется на уровне типов языка, активно используется стиль отложенных вычислений, управление сессиями, URL-схемами и параметрами страниц автоматическое.

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

Читая сайт Ocsigen, нашёл и совершенно удивительный проект. Немного не в тему, но очень здорово: O'Browser, написанная на Javascript виртуальная машина для байт-кода OCaml. Что это значит? Значит, что код на OCaml можно встраивать в веб-страницы! Вот, например, клон Boulderdash. Что-то подобное есть и для Haskell.


5. Язык программирования Scheme и каркас для веб-приложений LeftParen. Документация выглядит толково. К сожалению, не нашёл сайтов, которые его используют. Или какого-нибудь демонстрационного сайта.

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

Для Scheme есть ещё Icing.

6. Язык программирования Lisp и веб-каркас Weblocks. Сайт и документация очень мне понравились. Если бы я писал на Лиспе, начал бы, наверное, с этого каркаса. Вот демонстрация.

Есть ещё KPAX (это не русское слово, просто такое смешное сокращение!). Пишут, что уже давно и серьёзно используется, но документация страдает. Для Лиспа есть ещё UnCommon Web, BKNR.

7. Ещё один диалект Лиспа — язык программирования Clojure, как и Scala рассчитан на использование на платформе JVM. Надо ли говорить, что и для него есть веб-каркас: Compojure. И на AppEngine его тоже оперативно запустили.



Вот так-то. Сколько всего, оказывается. Глаза разбегаются.

Созвучен этой заметке будет вот этот пост.