Прочитал книгу Джо Армстронга про Эрланг. Теперь подмывает что-нибудь на нем написать.
Очень стройный, интересный и гармоничный язык.
Если прыгать по ключевым словам, то Эрланг:
- функциональный язык, но с вполне обычной императивной семантикой исполнения
- компилируется в байткод и выполняется в виртуальной машине, с очень удобной интерактивной средой (как Лисп)
- динамические типы (с опциональной статической аннотацией)
- immutable state, переменные получают значение один раз и больше его не меняют
- pattern-matching как в Хаскеле или даже круче, list comprehension как в Питоне
- типичная программа состоит из множества очень легких "процессов", которые выполняются одновременно, не имеют между собой общей памяти, общаются путем явной передачи сообщений
- эти процессы с одинаковой легкостью могут быть внутри одной виртуальной машины или в нескольких разных или во многих на разных серверах, в их общении при этом ничего не меняется, следовательно: scaling up, fault tolerance, multicore programming - все это делать легко и приятно
Что мне особенно нравится: интерактивная среда. Удобнейший pattern-matching в заголовках функций. Подход Эрланга к обработке ошибок (подход let it crash на любую непредвиденную ошибку: пусть процесс падает, другие это заметят, запишут в лог, перезапустят). Удобный синтаксис для работы с отдельными битами в памяти.
Что мне не нравится: работа со строками, кажется, утомительна и многословна. Циклы на коленке через хвостовую рекурсию уже не вставляют. Отсутствие настоящих статических типов играет, вероятно, свою роль в достаточно объемных проектах.
Книга отлично написана, очень рекомендую. Для знакомства с языком достаточно прочитать первую половину (первые три части), а также главы 24 и 26, где описаны важные принципы построения программ из процессов. Остальные 50% - подробное знакомство с некоторыми стандартными библиотеками, и несколько обширных примеров кода - можно пропустить или быстро пролистать.
(мне понравилось, как Армстронг развивает метафору множества процессов, как комнаты, наполненной людьми. Они все между собой разговаривают - передают сообщения. Дальше он говорит, предположим, я один из них, тут у меня инфаркт, я падаю и умираю - наверное, кто-нибудь заметит, уберет мой труп, перепоручит мою работу другому - вот так же и процессы...)
Очень стройный, интересный и гармоничный язык.
Если прыгать по ключевым словам, то Эрланг:
- функциональный язык, но с вполне обычной императивной семантикой исполнения
- компилируется в байткод и выполняется в виртуальной машине, с очень удобной интерактивной средой (как Лисп)
- динамические типы (с опциональной статической аннотацией)
- immutable state, переменные получают значение один раз и больше его не меняют
- pattern-matching как в Хаскеле или даже круче, list comprehension как в Питоне
- типичная программа состоит из множества очень легких "процессов", которые выполняются одновременно, не имеют между собой общей памяти, общаются путем явной передачи сообщений
- эти процессы с одинаковой легкостью могут быть внутри одной виртуальной машины или в нескольких разных или во многих на разных серверах, в их общении при этом ничего не меняется, следовательно: scaling up, fault tolerance, multicore programming - все это делать легко и приятно
Что мне особенно нравится: интерактивная среда. Удобнейший pattern-matching в заголовках функций. Подход Эрланга к обработке ошибок (подход let it crash на любую непредвиденную ошибку: пусть процесс падает, другие это заметят, запишут в лог, перезапустят). Удобный синтаксис для работы с отдельными битами в памяти.
Что мне не нравится: работа со строками, кажется, утомительна и многословна. Циклы на коленке через хвостовую рекурсию уже не вставляют. Отсутствие настоящих статических типов играет, вероятно, свою роль в достаточно объемных проектах.
Книга отлично написана, очень рекомендую. Для знакомства с языком достаточно прочитать первую половину (первые три части), а также главы 24 и 26, где описаны важные принципы построения программ из процессов. Остальные 50% - подробное знакомство с некоторыми стандартными библиотеками, и несколько обширных примеров кода - можно пропустить или быстро пролистать.
(мне понравилось, как Армстронг развивает метафору множества процессов, как комнаты, наполненной людьми. Они все между собой разговаривают - передают сообщения. Дальше он говорит, предположим, я один из них, тут у меня инфаркт, я падаю и умираю - наверное, кто-нибудь заметит, уберет мой труп, перепоручит мою работу другому - вот так же и процессы...)
no subject
Date: 2014-04-16 05:44 pm (UTC)no subject
Date: 2014-04-16 05:48 pm (UTC)(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2014-04-16 05:53 pm (UTC)Edit: т.е. чем он круче?
no subject
Date: 2014-04-16 06:09 pm (UTC)f ( {First, Second, Pair={Third, Fourth}} ) ->
в Хаскеле так легко не делается?
Ну и guards можно комбинировать с запятыми и точкой-с-запятыми, и это выглядит более читабельно, чем явное использование булевых операторов. Но это тоже относительно мелочь, пожалуй.
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2014-04-16 05:55 pm (UTC)no subject
Date: 2014-04-16 05:58 pm (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2014-04-16 06:04 pm (UTC)no subject
Date: 2014-04-16 06:36 pm (UTC)no subject
Date: 2014-04-16 07:27 pm (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2014-04-16 07:24 pm (UTC)- Это объектно-ориентированный язык с некоторыми функциональными возможностями (а где их сейчас нет?)
- С нерасширяемой системой типов (новые типы определять можно, но это будут синонимы уже существующих), нифига не проверяемой до выполнения
- С огромным количеством mutable state
- С откровенно слабеньким паттерн-матчингом, семантика которого к тому же сильно зависит от контекста
В защиту системы типов Эрланга следует сказать, что Марлоу и Вадлер потратили год, пытаясь сделать для него статическую систему типов, и результат откровенно никакой, так что, видимо, это вообще не очень реально.
no subject
Date: 2014-04-16 07:33 pm (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2014-04-17 04:38 am (UTC)> пусть процесс падает, другие это заметят, запишут в лог, перезапустят).
А как другие отличат: процесс упал или просто временно задержался ?
(no subject)
From:no subject
Date: 2014-04-16 07:36 pm (UTC)со строками да, есть некоторая засада, вместо циклов рекурсия или lists:foreach.
no subject
Date: 2014-04-16 08:15 pm (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2014-04-16 08:18 pm (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2014-04-16 09:55 pm (UTC)С Эрлангом у него общего разве что коммуникация ниток через сообщения - это отличная идея, конечно. Я писал где-то уже, что по-моему Го это попытка fix Java (а не fix C++, как часто неверно утверждают).
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2014-04-17 07:59 am (UTC)no subject
Date: 2014-04-18 04:05 am (UTC)Go сильно хуже в отладке. Внутрь эрланга можно зайти и разобраться: куда утекает память, какой процесс жрет CPU и т.п.
Это всё без включения профилировки, отладки и прочих вещей, которые невозможно сделать на продакшне.
В эрланге это возможно.
Ещё erlang и Go разделяет МНОГО лет по тем усилиям, которые вложены в качество работы мультикора
no subject
Date: 2014-04-17 04:03 am (UTC)no subject
Date: 2014-04-17 04:35 am (UTC)А как другие отличают: процесс упал или просто временно задержался ?
no subject
Date: 2014-04-17 07:02 am (UTC)no subject
Date: 2014-04-17 09:42 am (UTC)no subject
Date: 2014-04-17 10:04 am (UTC)R несомненно очень удобен для статистической обработки данных. Я очень плохо знаю статистику и в моих планах это исправить (наметил себе книгу, курсы MOOC итд.). Если удобней всего будет пользоваться R для этого и лучше с ним познакомиться, я не буду специально отказываться; но предпочел бы заодно изучить язык поинтереснее, скорее всего Julia.
(no subject)
From:no subject
Date: 2014-04-17 11:20 am (UTC)Сравнение с образцом в Хаскеле мощнее - в Эрланге нельзя использовать произвольные функции в качестве гардов.
У многомашинной реализации Эрланга есть неприятные моменты, например, отсутствие гарантированной передачи сообщений (они полагаются на реализацию TCP). Плюс, в отличие от Cloud Haskell, нет бэкендов для транспортов типа InfiniBand, то есть, он ещё и не всё железо использует.
no subject
Date: 2014-04-17 11:57 am (UTC)no subject
Date: 2014-04-17 04:42 pm (UTC)