Язык программирования Erlang

By peter631

Что есть Elang

Во-первых, ссылка : http://www.erlang.org. Язык придумали эрики, жаждавшие облегчить свои мучения при разработке софта для телефонных станций. Можно вполне сказать, что у них получилось – скорость разработки возросла от 9 до 25 раз.

О языке. Эрланг – динамически типизированный строгий функциональный язык. Синтаксис вполне человеческий, чего не скажешь про Лисп и Хаскелл. Впрочем, я их уважаю, особенно Лисп. Для него я в порыве страсти даже написал интерпретатор. Конечно, детский по сравнению с отточенным фирменной реализацией, над которой 40 лет работали лучшие умы человечества.

Язык ориентирован на построение высоконадежных приложений, работающих круглые сутки и без отключений. Достаточно сказать, что приложения можно обновлять без остановки работы – с некототого момента начинает работать новая версия кода и все.  Язык был дополнен массой практических моментов, которые обеспечивают данные возможности – поддержка перезапуска процессов, супервайзинг  и мониторинг, переключение приложения между несколькими узлами и пр.

Процессы и сообщения

Язык дополнен концепцией легковесных процессов и сообщений, которые они передают друг другу. Не сильно новая концепция, но очень к месту. Отлично поддержана мультипросессорные системы. При удачном раскладе прирост производительности линейно растет пропорционально числу процессоров.  Сообщения прозрачно передаются по сети.

Связи и супервизоры

Каждый процесс может быть связан (link) с другим.  Свзять двухсторонняя, включая процессы, расположенные на разных компах. Упал один процесс – падает и другой.  Особый тип процессов, называемых супервизорами, может отслеживать падение просессов и перезапускать их при необходимости. Супервизоры могут образовывать иерархию – дерево супервизоров. Это делает программы на Эрланг просто неубиваемыми. Профессиональные системы на Эрланг работают практически бессбойно.

Встроенная кластеризация

Приложения могут перемещаться от одной – упавшей – ноды к другой. Или, скажем, работать в пуле, распределяя нагрузку.

Богатая библиотека

Поддержана масса технологий – криптография, XML,  CORBA и пр. Все работает очень изящно.

Мультиплатформенность

Unix  <-> Windows не проблема – приложения переносятся в бинарном виде.

Мои впечатления

Два часа думаешь, потом тебя озаряет , пишешь три(!) строки кода  - и задача решена:)

От написания испытываешь удовольствие.  К сожалению, средства IDE пока не сильно разработаны, так что мы пользуемся старым добрым EMACS & Distel.

Отладчик, как правило, не рулит. Рулит трассировка, всякие там вьюверы процессов и пр. Изрядно  радуют профайлеры и средства оценки распараллеленности приложения. Поражен.

Наиболее частая ошибка, которую я делаю – передаю не те данные, которые ожидает функция (издержки динамической типизации). Врочем, постусловия и инварианты решают проблему (об этом – в следующих выпусках).

Еще, как правило, возникают какие-то сложные переходные процессы при сбоях в приложении – то запустилось, это не запустилось…Впрочем, это от плохого дизайна. Правильный дизайн приложения должен учитывать эти моменты.

Интероперабельность несколько геморройная. Врочем, мне, как опытному в этом деле человеку, показалось легкой (у меня есть с чем сравнить – с Java, .Net, COM).

Быстродействие виртуальной машины очень высокое. Достаточно сказать, что в в реальном времени успеваю обрабатывать сообщения сотни килобайт каждое.

В целом,  от программирования испытываешь удовольствие.

Tags: ,

Leave a Reply