Что есть Elang
Во-первых, ссылка : http://www.erlang.org. Язык придумали эрики, жаждавшие облегчить свои мучения при разработке софта для телефонных станций. Можно вполне сказать, что у них получилось – скорость разработки возросла от 9 до 25 раз.
О языке. Эрланг – динамически типизированный строгий функциональный язык. Синтаксис вполне человеческий, чего не скажешь про Лисп и Хаскелл. Впрочем, я их уважаю, особенно Лисп. Для него я в порыве страсти даже написал интерпретатор. Конечно, детский по сравнению с отточенным фирменной реализацией, над которой 40 лет работали лучшие умы человечества.
Язык ориентирован на построение высоконадежных приложений, работающих круглые сутки и без отключений. Достаточно сказать, что приложения можно обновлять без остановки работы – с некототого момента начинает работать новая версия кода и все. Язык был дополнен массой практических моментов, которые обеспечивают данные возможности – поддержка перезапуска процессов, супервайзинг и мониторинг, переключение приложения между несколькими узлами и пр.
Процессы и сообщения
Язык дополнен концепцией легковесных процессов и сообщений, которые они передают друг другу. Не сильно новая концепция, но очень к месту. Отлично поддержана мультипросессорные системы. При удачном раскладе прирост производительности линейно растет пропорционально числу процессоров. Сообщения прозрачно передаются по сети.
Связи и супервизоры
Каждый процесс может быть связан (link) с другим. Свзять двухсторонняя, включая процессы, расположенные на разных компах. Упал один процесс – падает и другой. Особый тип процессов, называемых супервизорами, может отслеживать падение просессов и перезапускать их при необходимости. Супервизоры могут образовывать иерархию – дерево супервизоров. Это делает программы на Эрланг просто неубиваемыми. Профессиональные системы на Эрланг работают практически бессбойно.
Встроенная кластеризация
Приложения могут перемещаться от одной – упавшей – ноды к другой. Или, скажем, работать в пуле, распределяя нагрузку.
Богатая библиотека
Поддержана масса технологий – криптография, XML, CORBA и пр. Все работает очень изящно.
Мультиплатформенность
Unix <-> Windows не проблема – приложения переносятся в бинарном виде.
Мои впечатления
Два часа думаешь, потом тебя озаряет , пишешь три(!) строки кода - и задача решена:)
От написания испытываешь удовольствие. К сожалению, средства IDE пока не сильно разработаны, так что мы пользуемся старым добрым EMACS & Distel.
Отладчик, как правило, не рулит. Рулит трассировка, всякие там вьюверы процессов и пр. Изрядно радуют профайлеры и средства оценки распараллеленности приложения. Поражен.
Наиболее частая ошибка, которую я делаю – передаю не те данные, которые ожидает функция (издержки динамической типизации). Врочем, постусловия и инварианты решают проблему (об этом – в следующих выпусках).
Еще, как правило, возникают какие-то сложные переходные процессы при сбоях в приложении – то запустилось, это не запустилось…Впрочем, это от плохого дизайна. Правильный дизайн приложения должен учитывать эти моменты.
Интероперабельность несколько геморройная. Врочем, мне, как опытному в этом деле человеку, показалось легкой (у меня есть с чем сравнить – с Java, .Net, COM).
Быстродействие виртуальной машины очень высокое. Достаточно сказать, что в в реальном времени успеваю обрабатывать сообщения сотни килобайт каждое.
В целом, от программирования испытываешь удовольствие.