Сравнение Лиспа и Эрланга.

Apr 04, 2009 14:12

Оценки: 0 - отсутствует (или плохо по моему мнению), 1 - имеется в ограниченном масштабе (или умеренно по моему мнению), 2 - присутствует (или отлично по моему мнению).
  • Синтаксис
    • Лисп: 1. Скобки-скобки-скобки-скобки
    • Эрланг: 1. Синтаксис а-ля ML, но многословней и менее регулярный.
  • Строгая типизация
    • Лисп: 1. Есть Qi. Мощный, но им никто не пользуется.

Эрланг, сравнение, забавное, Лисп

Leave a comment

prikrutil April 4 2009, 13:33:51 UTC
Спасибо за интересный пост. Я специально зарегистрировался в ЖЖ, чтобы написать вам ответ =)

Опыта работы с Лиспом у меня нет, поэтому постараюсь касаться только Эрланга.

Скорость работы программ
* Эрланг: 1. Особо не оптимизирует.

а) Если от Эрланга нужна скорость, то нужно обязательно посмотреть на HiPE. Можно ожидать 2-5 кратного увеличения скорости выполнения вашего кода (разумеется, ускорить таким образом работу с сетевым/дисковым вводом-выводом не получится).

В случаях, где HiPE малополезен (тот же сетевой ввод-вывод) вы, скорее всего, получите адекватную производительность сразу. Например, мой http-сервер, написанный исключительно для раздачи статики, сейчас отстает от nginx'а всего на 15% (мерял с помощью ab). Надеюсь в R13, в котором:

"Significant improvements of SMP and multi-core performance mainly because of multiple run-queues but also a number of other optimizations."

+ одна маленькая выклянченная мною у разработчиков Erlang'а оптимизация

все будет работать еще быстрее =)

Отвоевал единичку Эрлангу?

Метапрограммирование
* Лисп: 2. Здесь всё хорошо.
* Эрланг: 0. Нет. Более того, всё сделано так, чтобы помешать его использовать.

У Эрланга есть parse transforms. Не могу сказать, что пользоваться этим удобно, но единичку определенно можно поставить. 3 : 1 в пользу Лиспа.

Распределённые вычисления
* Лисп: 2. Есть в виде библиотек (1, 2, 3, есть ещё много), скорость сравнима с Эрлангом.
* Эрланг: 2. Вотчина, так сказать.

По-моему, "Вотчина, так сказать" >> "Есть в виде библиотек", но оценку вы поставили одинаковую. Имхо, здесь 3 : 1 в пользу Эрланга.

"2" (Distel) это скорее в плюс Эрлангу: http://xtalk.msk.su/~ott/ru/writings/emacs-devenv/EmacsErlang.html#sec8

Библиотеки 1 и 3 давно не обновляются, но для 1-и достаточно.

REPL
* Лисп: 2. Если не типы, то просто документация по функциям доступна в интерпретаторе.
* Эрланг: 1. Есть интерпретатор. Информации о функциях он не предоставляет.

Этот пункт, по-моему, лишний ввиду своей несущественности. Есть REPL - и ладно. Но, если вы настаиваете, то из эрланговского шелла можно делать "chroot" в любую ноду. +1 Эрлангу? 2:2.

--

Строгая типизация и вывод типов - это супер-здорово. Поэтому, следующий в моем todo - Haskell (а когда-нибудь дойдет дело и до Окамла с Лиспом)!

Reply

thesz April 4 2009, 13:54:35 UTC
Я учитывал HiPE при выставлении оценки. Так что - нет. ;)

REPL - это не только chroot. Это ещё и справочник по текущему и библиотечному коду. В Хаскеле документацией служат команды ghci :t (типы выражения) и :i (информация о символах). В Лиспе есть просто документация.

В Эрланге есть интерпретатор, и всё. Поэтому у Эрланга всего 1. И 2 не будет, пока не будет либо типов, либо документации.

Для меня REPL важен. Составлял сравнение я.

Насчёт распределённых вычислений - если реализовать библиотеку легко, то, значит, ими можно воспользоваться. Вообще, если это легко реализовать, то в языке это есть, можно считать. Так что Лиспу я меньше двойки не опущу.

Но при этом с мелким параллелизмом без ручного управления у Эрланга туго.

Про parse_transform мне сказали. Ну, будет перевес в 4 балла.

Всё равно Эрланг, как язык, так себе.

Reply

lionet April 4 2009, 17:30:38 UTC
HiPE? Фигня. Перформанса никакого, а геморроя (падает в продакшне!) - выше крыши.

http://lionet.livejournal.com/29844.html

(цифры с присказкой "Native" - это HiPE).

Reply

prikrutil April 4 2009, 18:11:25 UTC
Цифры 2-5 получились, когда я замерял влияние HiPE'а на свои несложные потрошилки строк и бинарей. Но т.к. типичная система на эрланге редко упирается в разбор строк (чаще в ввод/вывод), то кумулятивный эффект получается не очень убедительным.

HiPE действительно иногда падает :/ Я даже написал два багрепорта (оба бага были исправлены очень быстро):

Раз: http://erlang.org/pipermail/erlang-bugs/2009-January/001162.html
Два: http://erlang.org/pipermail/erlang-bugs/2009-February/001204.html

Reply

thesz April 4 2009, 20:28:24 UTC
Ай. ;)

Reply

alexott April 16 2009, 11:20:33 UTC
ну если упоминать distel, то тогда уж для лиспа надо взять SLIME, и тогда erlang проиграет еще большие :-)

Reply


Leave a comment

Up