avva: (Default)
[personal profile] avva
Прочитал книгу Джо Армстронга про Эрланг. Теперь подмывает что-нибудь на нем написать.

Очень стройный, интересный и гармоничный язык.

Если прыгать по ключевым словам, то Эрланг:

- функциональный язык, но с вполне обычной императивной семантикой исполнения
- компилируется в байткод и выполняется в виртуальной машине, с очень удобной интерактивной средой (как Лисп)
- динамические типы (с опциональной статической аннотацией)
- immutable state, переменные получают значение один раз и больше его не меняют
- pattern-matching как в Хаскеле или даже круче, list comprehension как в Питоне
- типичная программа состоит из множества очень легких "процессов", которые выполняются одновременно, не имеют между собой общей памяти, общаются путем явной передачи сообщений
- эти процессы с одинаковой легкостью могут быть внутри одной виртуальной машины или в нескольких разных или во многих на разных серверах, в их общении при этом ничего не меняется, следовательно: scaling up, fault tolerance, multicore programming - все это делать легко и приятно

Что мне особенно нравится: интерактивная среда. Удобнейший pattern-matching в заголовках функций. Подход Эрланга к обработке ошибок (подход let it crash на любую непредвиденную ошибку: пусть процесс падает, другие это заметят, запишут в лог, перезапустят). Удобный синтаксис для работы с отдельными битами в памяти.

Что мне не нравится: работа со строками, кажется, утомительна и многословна. Циклы на коленке через хвостовую рекурсию уже не вставляют. Отсутствие настоящих статических типов играет, вероятно, свою роль в достаточно объемных проектах.

Книга отлично написана, очень рекомендую. Для знакомства с языком достаточно прочитать первую половину (первые три части), а также главы 24 и 26, где описаны важные принципы построения программ из процессов. Остальные 50% - подробное знакомство с некоторыми стандартными библиотеками, и несколько обширных примеров кода - можно пропустить или быстро пролистать.

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

Date: 2014-04-16 05:44 pm (UTC)
From: [identity profile] raydac.livejournal.com
эрланг - пролог из которого выбросили много вкусного и оптимизировали для работы с сообщениями, многозадачностью и бинарными данными

Date: 2014-04-16 05:48 pm (UTC)
From: [identity profile] avva.livejournal.com
Нет. От пролога в Эрланге осталось только кое-что из синтаксиса. Семантика языка совершенно другая, нет поиска и бэктрэкинга - а это самая сердцевина Пролога, без этого вообще нет смысла считать это тем же *или даже похожим* языком.
Edited Date: 2014-04-16 05:48 pm (UTC)

(no subject)

From: [identity profile] raydac.livejournal.com - Date: 2014-04-16 05:50 pm (UTC) - Expand

(no subject)

From: [identity profile] potan.livejournal.com - Date: 2014-04-17 04:05 am (UTC) - Expand

(no subject)

From: [identity profile] migmit.livejournal.com - Date: 2014-04-17 04:57 am (UTC) - Expand

Date: 2014-04-16 05:53 pm (UTC)
From: [identity profile] zelych.livejournal.com
А можно немножко подробнее про "pattern-matching как в Хаскеле или даже круче"?
Edit: т.е. чем он круче?
Edited Date: 2014-04-16 05:53 pm (UTC)

Date: 2014-04-16 06:09 pm (UTC)
From: [identity profile] avva.livejournal.com
Наверное, про "даже круче" я несколько преувеличил (перечитал сейчас, что есть в Хаскеле). Мне понравилось, во-первых, что в Эрланге можно весь паттерн или часть его присвоить переменной. Я вижу, что это есть в Хаскеле в виде "as pattern", но кажется, только для всего паттерна, а не его части. Т.е. что-то вроде

f ( {First, Second, Pair={Third, Fourth}} ) ->

в Хаскеле так легко не делается?

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

(no subject)

From: [identity profile] zelych.livejournal.com - Date: 2014-04-16 06:19 pm (UTC) - Expand

(no subject)

From: [identity profile] avva.livejournal.com - Date: 2014-04-16 06:25 pm (UTC) - Expand

(no subject)

From: [identity profile] zelych.livejournal.com - Date: 2014-04-16 06:29 pm (UTC) - Expand

(no subject)

From: [identity profile] migmit.livejournal.com - Date: 2014-04-16 07:33 pm (UTC) - Expand

(no subject)

From: [identity profile] avva.livejournal.com - Date: 2014-04-16 10:03 pm (UTC) - Expand

(no subject)

From: [identity profile] migmit.livejournal.com - Date: 2014-04-17 04:55 am (UTC) - Expand

(no subject)

From: [identity profile] janatem.livejournal.com - Date: 2014-04-17 08:49 am (UTC) - Expand

(no subject)

From: [identity profile] avva.livejournal.com - Date: 2014-04-17 08:56 am (UTC) - Expand

(no subject)

From: [identity profile] zelych.livejournal.com - Date: 2014-04-17 09:52 am (UTC) - Expand

(no subject)

From: [identity profile] thesz.livejournal.com - Date: 2014-04-17 11:22 am (UTC) - Expand

(no subject)

From: [identity profile] janatem.livejournal.com - Date: 2014-04-17 11:29 am (UTC) - Expand

(no subject)

From: [identity profile] thesz.livejournal.com - Date: 2014-04-17 11:46 am (UTC) - Expand

Date: 2014-04-16 05:55 pm (UTC)
From: [identity profile] palmas1.livejournal.com
А зачем он вообще нужен, подо что заточен? Что на нём удобно делать?

Date: 2014-04-16 05:58 pm (UTC)
From: [identity profile] zelych.livejournal.com
например, легко масштабируемый сервер, обрабатывающий запросы от миллиона клиентов.

(no subject)

From: [identity profile] francis-drake.livejournal.com - Date: 2014-04-16 06:00 pm (UTC) - Expand

(no subject)

From: [identity profile] zelych.livejournal.com - Date: 2014-04-16 06:10 pm (UTC) - Expand

(no subject)

From: [identity profile] thesz.livejournal.com - Date: 2014-04-17 03:40 am (UTC) - Expand

(no subject)

From: [identity profile] zelych.livejournal.com - Date: 2014-04-17 05:39 am (UTC) - Expand

(no subject)

From: [identity profile] thesz.livejournal.com - Date: 2014-04-17 11:17 am (UTC) - Expand

(no subject)

From: [identity profile] zelych.livejournal.com - Date: 2014-04-17 03:40 pm (UTC) - Expand

(no subject)

From: [identity profile] avva.livejournal.com - Date: 2014-04-17 11:56 am (UTC) - Expand

(no subject)

From: [identity profile] zelych.livejournal.com - Date: 2014-04-17 03:39 pm (UTC) - Expand

(no subject)

From: [identity profile] thesz.livejournal.com - Date: 2014-04-17 08:17 pm (UTC) - Expand

(no subject)

From: [identity profile] thesz.livejournal.com - Date: 2014-04-17 03:39 am (UTC) - Expand

(no subject)

From: [identity profile] amigofriend.livejournal.com - Date: 2014-04-16 06:03 pm (UTC) - Expand

(no subject)

From: [identity profile] palmas1.livejournal.com - Date: 2014-04-16 06:40 pm (UTC) - Expand

(no subject)

From: [identity profile] zelych.livejournal.com - Date: 2014-04-16 06:51 pm (UTC) - Expand

(no subject)

From: [identity profile] avva.livejournal.com - Date: 2014-04-16 10:01 pm (UTC) - Expand

(no subject)

From: [identity profile] zelych.livejournal.com - Date: 2014-04-17 05:05 am (UTC) - Expand

Date: 2014-04-16 06:04 pm (UTC)
develop7: (dero)
From: [personal profile] develop7
добро пожаловать в клуб!

Date: 2014-04-16 06:36 pm (UTC)
From: [identity profile] amarao-san.livejournal.com
У эрланга хорошие идеи и отвратительная реализация во взаимодействии с другими приложениями. Я ни разу не видел полностью адекватной системы старта приложения на сервере. Даже rmq, который считается чуть ли не гербом всего эрланга, может делать вот такое: http://amarao-san.livejournal.com/tag/erlang (первый пост снизу).

Date: 2014-04-16 07:27 pm (UTC)
From: [identity profile] avnik.livejournal.com
Я копался в потрохах у кролика -- у меня всю дорогу было ощущение, что его авторы клали с прибором и на OTP design принципы, в на всякие common practice тоже.

(no subject)

From: [identity profile] amarao-san.livejournal.com - Date: 2014-04-16 07:36 pm (UTC) - Expand

(no subject)

From: [identity profile] avnik.livejournal.com - Date: 2014-04-16 07:58 pm (UTC) - Expand

(no subject)

From: [identity profile] amarao-san.livejournal.com - Date: 2014-04-16 08:11 pm (UTC) - Expand

(no subject)

From: [identity profile] migmit.livejournal.com - Date: 2014-04-16 07:59 pm (UTC) - Expand

(no subject)

From: [identity profile] amarao-san.livejournal.com - Date: 2014-04-16 08:07 pm (UTC) - Expand

(no subject)

From: [identity profile] migmit.livejournal.com - Date: 2014-04-16 08:37 pm (UTC) - Expand

(no subject)

From: [identity profile] amarao-san.livejournal.com - Date: 2014-04-16 08:41 pm (UTC) - Expand

(no subject)

From: [identity profile] migmit.livejournal.com - Date: 2014-04-16 08:47 pm (UTC) - Expand

(no subject)

From: [identity profile] amarao-san.livejournal.com - Date: 2014-04-16 08:53 pm (UTC) - Expand

(no subject)

From: [identity profile] migmit.livejournal.com - Date: 2014-04-16 08:57 pm (UTC) - Expand

(no subject)

From: [identity profile] ulfurinn.livejournal.com - Date: 2014-04-16 09:17 pm (UTC) - Expand

Date: 2014-04-16 07:24 pm (UTC)
From: [identity profile] migmit.livejournal.com
Пишу сейчас на эрланге профессионально.

- Это объектно-ориентированный язык с некоторыми функциональными возможностями (а где их сейчас нет?)

- С нерасширяемой системой типов (новые типы определять можно, но это будут синонимы уже существующих), нифига не проверяемой до выполнения

- С огромным количеством mutable state

- С откровенно слабеньким паттерн-матчингом, семантика которого к тому же сильно зависит от контекста

В защиту системы типов Эрланга следует сказать, что Марлоу и Вадлер потратили год, пытаясь сделать для него статическую систему типов, и результат откровенно никакой, так что, видимо, это вообще не очень реально.

Date: 2014-04-16 07:33 pm (UTC)
From: [identity profile] avva.livejournal.com
В каком смысле он объектно-ориентированный?

(no subject)

From: [identity profile] migmit.livejournal.com - Date: 2014-04-16 07:36 pm (UTC) - Expand

(no subject)

From: [identity profile] migmit.livejournal.com - Date: 2014-04-16 07:37 pm (UTC) - Expand

(no subject)

From: [identity profile] leroy-ru.livejournal.com - Date: 2014-04-16 07:51 pm (UTC) - Expand

(no subject)

From: [identity profile] migmit.livejournal.com - Date: 2014-04-16 07:57 pm (UTC) - Expand

(no subject)

From: [identity profile] leroy-ru.livejournal.com - Date: 2014-04-16 08:23 pm (UTC) - Expand

(no subject)

From: [identity profile] migmit.livejournal.com - Date: 2014-04-16 08:39 pm (UTC) - Expand

(no subject)

From: [identity profile] leroy-ru.livejournal.com - Date: 2014-04-16 08:50 pm (UTC) - Expand

(no subject)

From: [identity profile] migmit.livejournal.com - Date: 2014-04-16 08:55 pm (UTC) - Expand

(no subject)

From: [identity profile] leroy-ru.livejournal.com - Date: 2014-04-16 09:23 pm (UTC) - Expand

(no subject)

From: [identity profile] migmit.livejournal.com - Date: 2014-04-16 09:33 pm (UTC) - Expand

(no subject)

From: [identity profile] leroy-ru.livejournal.com - Date: 2014-04-16 09:50 pm (UTC) - Expand

(no subject)

From: [identity profile] migmit.livejournal.com - Date: 2014-04-17 04:50 am (UTC) - Expand

(no subject)

From: [identity profile] leroy-ru.livejournal.com - Date: 2014-04-17 08:23 am (UTC) - Expand

(no subject)

From: [identity profile] migmit.livejournal.com - Date: 2014-04-17 09:01 am (UTC) - Expand

(no subject)

From: [identity profile] avva.livejournal.com - Date: 2014-04-16 09:49 pm (UTC) - Expand

(no subject)

From: [identity profile] migmit.livejournal.com - Date: 2014-04-17 04:46 am (UTC) - Expand

(no subject)

From: [identity profile] michaelm1234.livejournal.com - Date: 2014-04-18 12:23 am (UTC) - Expand

(no subject)

From: [identity profile] migmit.livejournal.com - Date: 2014-04-18 07:17 am (UTC) - Expand

(no subject)

From: [identity profile] michaelm1234.livejournal.com - Date: 2014-04-18 12:20 pm (UTC) - Expand

(no subject)

From: [identity profile] migmit.livejournal.com - Date: 2014-04-18 12:35 pm (UTC) - Expand

(no subject)

From: [identity profile] michaelm1234.livejournal.com - Date: 2014-04-18 12:46 pm (UTC) - Expand

(no subject)

From: [identity profile] migmit.livejournal.com - Date: 2014-04-18 12:53 pm (UTC) - Expand

Date: 2014-04-17 04:38 am (UTC)
From: [identity profile] e2pii1.livejournal.com
Может ответите:

> пусть процесс падает, другие это заметят, запишут в лог, перезапустят).

А как другие отличат: процесс упал или просто временно задержался ?

(no subject)

From: [identity profile] migmit.livejournal.com - Date: 2014-04-17 04:44 am (UTC) - Expand

Date: 2014-04-16 07:36 pm (UTC)
vinsent_ru: (вомбат)
From: [personal profile] vinsent_ru
там как раз самое важное в главах про OTP, ну и лучше про это дело отдельную книжку почитать. Потому что вот так чтобы была готовая платформа для разработки надежных масштабируемых приложений от авторов самого языка - я что-то затрудняюсь аналог назвать.
со строками да, есть некоторая засада, вместо циклов рекурсия или lists:foreach.

Date: 2014-04-16 08:15 pm (UTC)
From: [identity profile] amarao-san.livejournal.com
Go-шники утверждают, что делали с оглядкой на эрланг.

(no subject)

From: [identity profile] avnik.livejournal.com - Date: 2014-04-16 11:57 pm (UTC) - Expand

(no subject)

From: [identity profile] meshko.livejournal.com - Date: 2014-04-19 09:00 pm (UTC) - Expand

(no subject)

From: [identity profile] avnik.livejournal.com - Date: 2014-04-21 06:44 pm (UTC) - Expand

(no subject)

From: [personal profile] vinsent_ru - Date: 2014-04-17 03:38 am (UTC) - Expand

Date: 2014-04-16 08:18 pm (UTC)
From: [identity profile] meshko.livejournal.com
А почему Erlang, а не Go? Я сейчас просмотрел книжку по Go, написал пару программ для пробы (правда пока не настоящих, а так) и мне в общем нравится. Выглядит он по-моему симпатичней, хотя Erlang я не смотрел вблизи.
(deleted comment)

(no subject)

From: [identity profile] meshko.livejournal.com - Date: 2014-04-16 08:43 pm (UTC) - Expand
(deleted comment)

(no subject)

From: [identity profile] meshko.livejournal.com - Date: 2014-04-16 08:52 pm (UTC) - Expand

(no subject)

From: [identity profile] migmit.livejournal.com - Date: 2014-04-16 08:51 pm (UTC) - Expand

(no subject)

From: [identity profile] meshko.livejournal.com - Date: 2014-04-16 08:57 pm (UTC) - Expand

(no subject)

From: [identity profile] migmit.livejournal.com - Date: 2014-04-16 08:57 pm (UTC) - Expand

(no subject)

From: [identity profile] meshko.livejournal.com - Date: 2014-04-16 08:58 pm (UTC) - Expand

(no subject)

From: [identity profile] migmit.livejournal.com - Date: 2014-04-16 08:59 pm (UTC) - Expand

(no subject)

From: [identity profile] meshko.livejournal.com - Date: 2014-04-16 09:00 pm (UTC) - Expand

(no subject)

From: [identity profile] migmit.livejournal.com - Date: 2014-04-16 09:06 pm (UTC) - Expand

(no subject)

From: [identity profile] meshko.livejournal.com - Date: 2014-04-16 09:07 pm (UTC) - Expand
(deleted comment)

(no subject)

From: [identity profile] ulfurinn.livejournal.com - Date: 2014-04-16 09:22 pm (UTC) - Expand

(no subject)

From: [identity profile] potan.livejournal.com - Date: 2014-04-17 08:08 am (UTC) - Expand

(no subject)

From: [identity profile] potan.livejournal.com - Date: 2014-04-17 08:04 am (UTC) - Expand

Date: 2014-04-16 09:55 pm (UTC)
From: [identity profile] avva.livejournal.com
Я писал (немного) на Go, признаю за ним разные достоинства, но не нравится он мне. Пока что по крайней мере.

С Эрлангом у него общего разве что коммуникация ниток через сообщения - это отличная идея, конечно. Я писал где-то уже, что по-моему Го это попытка fix Java (а не fix C++, как часто неверно утверждают).

(no subject)

From: [identity profile] migmit.livejournal.com - Date: 2014-04-17 04:52 am (UTC) - Expand

(no subject)

From: [identity profile] avva.livejournal.com - Date: 2014-04-17 05:02 am (UTC) - Expand

(no subject)

From: [identity profile] migmit.livejournal.com - Date: 2014-04-17 07:14 am (UTC) - Expand

(no subject)

From: [identity profile] avva.livejournal.com - Date: 2014-04-17 08:24 am (UTC) - Expand

Date: 2014-04-17 07:59 am (UTC)
From: [identity profile] potan.livejournal.com
В Go нет pattern matching. И вообще функциональное программирование слабо поддержано.

Date: 2014-04-18 04:05 am (UTC)
From: [identity profile] levgem.livejournal.com
все программисты очень любят писать, но очень не любят поддерживать свой код через полгода, год и т.п. Ведь появится новый язык и можно будет писать заново =)

Go сильно хуже в отладке. Внутрь эрланга можно зайти и разобраться: куда утекает память, какой процесс жрет CPU и т.п.

Это всё без включения профилировки, отладки и прочих вещей, которые невозможно сделать на продакшне.

В эрланге это возможно.


Ещё erlang и Go разделяет МНОГО лет по тем усилиям, которые вложены в качество работы мультикора

Date: 2014-04-17 04:03 am (UTC)
From: [identity profile] potan.livejournal.com
Императивной - в смысле аппликативной? Обычно под императивностью понимается мутабельное состояние.

Date: 2014-04-17 04:35 am (UTC)
From: [identity profile] e2pii1.livejournal.com
> пусть процесс падает, другие это заметят, запишут в лог, перезапустят).


А как другие отличают: процесс упал или просто временно задержался ?

Date: 2014-04-17 07:02 am (UTC)
From: [identity profile] vodianoj.livejournal.com
А ты читал её на обычном Киндле? Не слишком ли маленький экран?

Date: 2014-04-17 09:42 am (UTC)
From: [identity profile] http://users.livejournal.com/_sabiko/
Не про эрланг: вы когда-то в списке языков про которые немного знаете, и не хотите их знать, упомянули R. Почему?

Date: 2014-04-17 10:04 am (UTC)
From: [identity profile] avva.livejournal.com
Кроме работы с векторами и матрицами, которая в нем похожа на Matlab и которую я уже знаю в общих чертах, я не вижу в нем интересных возможностей или идей; с другой стороны, мне часто попадались жалобы на то, что в нем много несуразицы, исторически сложившихся противоречий, медленностей итп.

R несомненно очень удобен для статистической обработки данных. Я очень плохо знаю статистику и в моих планах это исправить (наметил себе книгу, курсы MOOC итд.). Если удобней всего будет пользоваться R для этого и лучше с ним познакомиться, я не буду специально отказываться; но предпочел бы заодно изучить язык поинтереснее, скорее всего Julia.

(no subject)

From: [identity profile] zelych.livejournal.com - Date: 2014-04-17 10:13 am (UTC) - Expand

Date: 2014-04-17 11:20 am (UTC)
From: [identity profile] thesz.livejournal.com
REPL Эрланга неудобен - нет информации о типах. После ghci очень всё криво. Но тем, кто привык, тем удобно.

Сравнение с образцом в Хаскеле мощнее - в Эрланге нельзя использовать произвольные функции в качестве гардов.

У многомашинной реализации Эрланга есть неприятные моменты, например, отсутствие гарантированной передачи сообщений (они полагаются на реализацию TCP). Плюс, в отличие от Cloud Haskell, нет бэкендов для транспортов типа InfiniBand, то есть, он ещё и не всё железо использует.

Date: 2014-04-17 11:57 am (UTC)
From: [identity profile] qvintus.livejournal.com
Эх, только начал гуглить "Erlang for safety-critical real-time systems", как первым же результатом получил вот это (http://rebelscience.blogspot.ru/2007/09/why-functional-languages-should-not-be.html).

Date: 2014-04-17 04:42 pm (UTC)
From: [identity profile] avva.livejournal.com
Это какой-то странный человек, по-моему.

January 2026

S M T W T F S
    1 2 3
4 5 6 7 8 910
11 12 1314 15 1617
18192021222324
25262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 17th, 2026 01:43 pm
Powered by Dreamwidth Studios