воскресенье, 3 октября 2010 г.

Про Erlang

Disclaimer: я на Эрланге не написал ни строчки кода.

Решил тут грамотно приобщиться к миру распределённых, отказоустойчивых приложений. Для которого, как известно, специально разработан язык Erlang. По которому у меня в читалке на пляже ("ляжу на пляжу") было две книжки: "Programming Erlang. Software for a Concurrent World." и "Erlang Programming. A Concurrent Approach to Software Development."

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

Вторая книжка немножко получше, больше на справочник-введение похожа. Её прочитал почти всю, пропуская упражнения и философию.

Сделал для себя такой вывод: языка Эрланг не существует. Есть полторы странички синтаксиса, а всё остальное - виртуальная машина с легковесными процессами и обширной библиотекой. Собственно, Эрланг даже без OTP можно рассматривать, только как платформу. После могучего Коммон Лиспа слёзы льются. Наверное, на Эрланге прикольно писать фронтэнд, который грудью встанет на пути бешенного траффика из Сети, но всю запудренную работу будет передавать бэкенду на Лиспе :) Или Хаскелле. Но штанги у меня ещё нет, плечевой пояс и пресс слабоват, поэтому за Хаскелль не брался.

Главных фич у Эрланга, помимо самой идеи (шикарной, имхо) взаимодействия процессов и нод, две: само наличие LW-процессов в языке by design и платформа. Остальное или откровенно слабо, или суть легкий синтаксический сахар.

17 комментариев:

  1. ну его никто особо и не рассматривает в отдельности от платформы...
    P.S. LFE уже видел? ;-)

    ОтветитьУдалить
  2. И что ж это за запудренная работа такая, с которой справятся только лисп и хаскел?

    ОтветитьУдалить
  3. > LFE уже видел? ;-)

    Судя по экзамплам - тот же Эрланг, только обёрнутый в sexp'ы. Это явно не Коммон Лисп ;)

    > И что ж это за запудренная работа такая, с которой справятся только лисп и хаскел?

    Ну, писать so called sequental часть можно и на Эрланге, но "макросы препроцессора" после коммон лисповских макросов - это, как минимум, грусть.

    ОтветитьУдалить
  4. Дык что за задачи-то такие? Ну нету макросов в ерланге, но и без них спокойно пишется код. Можно привести пример такой задачи, которая на ерланге решается сложнее, чем на лиспе?

    ОтветитьУдалить
  5. Да легко: парсер FIX, генерящий в данном случае эрланговый код для разбора входящего потока и передачи клиентам. На CL у нас просто конпелятору xml, полученный от биржи, подсовывается, а на выходе - скомпиленный лисповый (и vhdl'ный) код. К парсеру ещё свой событийный DSL наваян, чтобы реагировать на интересные данные в потоке. Макрос на макросе, но сверху - вкусняшка в проблемно-ориентированном виде.

    ОтветитьУдалить
  6. Так и думал, что кодогенерация.

    ОтветитьУдалить
  7. Как я и рассказывал в своей презенташке, Erlang — для разруливания независимых потоков данных, управления, control flow. А что посложнее алгоритмически — на том, что больше подходит под предметную область. На OCaml'е, например.

    http://lionet.info/pdf/2010-lev-walkin-erlang-experience.pdf

    ОтветитьУдалить
  8. Этот комментарий был удален автором.

    ОтветитьУдалить
  9. Ну да, Erlang хорош для тех, кто как я, пришел с языков, где "совсем все плохо" (не буду называть, вы и так знаете). После Erlang я уже потянулся к Лиспу - к хорошему привыкаешь быстро и хочется много и разного.

    ОтветитьУдалить
  10. не советую тебе даже время тратить на haskell ;-)
    лучше качай скилл лиспа!
    у меня дорожка такая была smalltalk -> lisp(не понял или забросил, короче без результата) -> haskell(ocaml всякий немного) -> lisp(понял, прочувтсвовал, Ерик Наггум все верно пишет ;-)
    lisp большой язык и лучше его прокачивать тем дрочево haskell'ное изучать. я бы резбмировал его так. возьми TAPL напиши койнить алгоритм проверки типов на лиспе. в принципе, все - можешь считать ты узнал haskell заочно. возвращайся к лиспу.

    ОтветитьУдалить
  11. блин, про ерланг-то не написал. был тред на c.l.l
    поищи там Joel который с покером ушел с лиспа на ерланг. там все расписали отцы. в принципе, если ты не жоел с его реквайрементами, то лучше написать все это (hotswap,LW,etc) на лиспе :-D

    ОтветитьУдалить
  12. Чё-то читаю этот тред, лисперы какие-то неадкваты в низкоуровневых вопросах (треды, например). И в вопросах лиспа тоже чё-то не очень.

    ОтветитьУдалить
  13. Хотя, эрлангеры тоже фигню несут.

    ОтветитьУдалить
  14. btw, ты не смотрел на termite - примочку к gambit scheme, которая реализует легковесные процессы и прочие фишки из эрланга?

    ОтветитьУдалить
  15. > Так и думал, что кодогенерация.

    Вы так говорите, будто это что-то плохое!

    ОтветитьУдалить
  16. > Хотя, эрлангеры тоже фигню несут.

    всиех обосрал :-D

    ОтветитьУдалить
  17. >lisp большой язык
    Ой. Простите, в каком месте?

    > возьми TAPL напиши койнить алгоритм проверки типов на лиспе. в принципе, все - можешь считать ты узнал haskell заочно.
    Урыдался. 'Я узнал английский заочно'

    ОтветитьУдалить