<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://t8.lbstr.eu/index.php?action=history&amp;feed=atom&amp;title=Erlang</id>
	<title>Erlang - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://t8.lbstr.eu/index.php?action=history&amp;feed=atom&amp;title=Erlang"/>
	<link rel="alternate" type="text/html" href="https://t8.lbstr.eu/index.php?title=Erlang&amp;action=history"/>
	<updated>2026-11-03T04:55:05Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://t8.lbstr.eu/index.php?title=Erlang&amp;diff=1672&amp;oldid=prev</id>
		<title>127.0.0.1: /* Алсо → */</title>
		<link rel="alternate" type="text/html" href="https://t8.lbstr.eu/index.php?title=Erlang&amp;diff=1672&amp;oldid=prev"/>
		<updated>2019-06-06T15:55:16Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Алсо →&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Q|* komar поехал на конференцию по erlang&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;kran_&amp;gt; На конференцию по erlang можно ехать одновременно разными видами транспорта.|http://ipfw.ru/quotes/9806}}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Э́рланг&amp;#039;&amp;#039;&amp;#039; ([[Пиндостан|пинд]]. &amp;#039;&amp;#039;[[Петросян|Error Language]]&amp;#039;&amp;#039;, также &amp;#039;&amp;#039;[[Enlarge your penis|Enlarg]]&amp;#039;&amp;#039;, &amp;#039;&amp;#039;[[Basic|Телебейсик]]&amp;#039;&amp;#039;) — [[Быдлокодер|небыдлокодерский]] язык программирования, придуманный расовой шведской компанией Ericsson (без Sony) с целью [[КМПВ|захватить мир]]. Выгодно отличается от [[Haskell|Хаскелла]] тем, что на нём реально можно писать полезные программы (и даже зарабатывать кровавые доллары). Язык лексически еурсивен&amp;lt;!-- ты знал, ты знал! --&amp;gt;, на 13.7% более компактен, функционален, многопоточен и необычайно полон [[матан]]а. На нем можно делать [http://erlang-mnesia-video.ru/ динамические опердени], не приседая со штангой! Официально заявлено, что он назван в честь [[Нерд|математика]] [[:w:Эрланг, Агнер Краруп|Агнера Краупа Эрланга]], но всем понятно, что это аббревиатура от Ericsson Language.&lt;br /&gt;
&lt;br /&gt;
== Кратко → ==&lt;br /&gt;
Эрланг позиционируется как язык всея всего, [[Волшебная таблетка|чудесная таблетка]] от запоров, [[Индусский код|быдлокодерства]] и школоты. Говорят, что на нем легко наваять чудо-мега-пуперсистему, книгу бытия и ответить на [[42|главный вопрос о смысле жизни]]. На практике же скатывается в обыкновенное [[говно]], вконец запутывающее новобранцев и иже с ними. Содержит много [[:w:Лямбда-исчисление|лямбда-ямбда]] и [[БАК|синхрофозантрон-конструкций]].&lt;br /&gt;
&lt;br /&gt;
Такое положение вещей вынуждает [[RMS|приверженцев]] старого мира активно бурлить, попутно вставляя новые [[Костыль|костыли]] в старый-добрый [[C]]. Особо прыткие [[C Sharp|уже так навставляли]], что мама не горюй.&lt;br /&gt;
&lt;br /&gt;
Сам эрланг ничего не делает, а только [[:w:Виртуальная машина|даёт указания]].&lt;br /&gt;
&lt;br /&gt;
[[Кошер]]ен, ибо [http://lib.ru/HRISTIAN/ATH/folklore.txt#31 не хранит данные вместе с кодом].&lt;br /&gt;
&lt;br /&gt;
Любители &amp;lt;del&amp;gt;выебнуться&amp;lt;/del&amp;gt; писать на эрланге хвастаются тем, что могут наплодить кучу потоков, работающих быстрее света, но мы-то знаем, что за все это время они наплодили чуть менее, чем нихуя программ.&lt;br /&gt;
&lt;br /&gt;
== Кошерности → ==&lt;br /&gt;
&lt;br /&gt;
* Может менять куски кода один на другой прямо в продакшне, что невозбранно создаёт возможности для кровавого патчинга. До этого подобная фича применялась разве что в [[Лисп]]е. Ну и в [[PHP]] используется чуть менее, чем везде.&lt;br /&gt;
&lt;br /&gt;
* Может с лёгкостью создавать [[Тысячи их|тысячи]] [[тред]]ов. Треды в эрланге — вовсе и не треды даже, а акторы &amp;#039;&amp;#039;(Actors)&amp;#039;&amp;#039;, общающиеся между собой записочками.&lt;br /&gt;
&lt;br /&gt;
* Может одинаково легко взаимодействовать с процессами как на своем, так и на других хостах.&lt;br /&gt;
&lt;br /&gt;
* В аццкий набор стандартных библиотек входит написанная на нем же распределенная no-sql [[СУБД]] — mnesia (плюс плюшки вроде ETS таблиц для хранения данных в ОЗУ и DETS — для хранения того же, но на диске).&lt;br /&gt;
&lt;br /&gt;
* Будучи практически [[Ъ]]-функциональным языком, основательно (не как [[Haskell]], но заметно) препятствует использованию изменяемых данных. Это вызывает [[баттхёрт]], но почти исключает взаимную блокировку потоков исполнения во время записи данных (кто пытался отлаживать такое в распределённых средах, тот оценит).&lt;br /&gt;
&lt;br /&gt;
* Уникальный подход к обработке ошибок: ты не епошишь весь код в try/catch как последний школий, а строишь так называемые деревья наблюдения (supervision tree), правда, если ты не крайнее днище и всё-таки используешь [[:w:Open_Telecom_Platform|OTP]].&lt;br /&gt;
&lt;br /&gt;
* Честная вытесняющая многозадачность. В отличие от прочих языков, в которых переключение между &amp;quot;зелёными&amp;quot; потоками обычно происходит только при вызове функций из рантайма языка, Enlarg люто-бешено вытесняет потоки, истратившие свой лимит редукций, буквально на [[Candlejack|полусло]]&lt;br /&gt;
&lt;br /&gt;
* Содержит развитый до фанатичной ебанутости фреймворк для работы с SNMP.&lt;br /&gt;
&lt;br /&gt;
== Некошерности → ==&lt;br /&gt;
&lt;br /&gt;
* Динамическая типизация. Большую часть времени настоящий Эрланг-программист проводит за размышлениями на тему «откуда прилетела эта [[НЁХ]], обрушившая мой уютненький gen_server».&lt;br /&gt;
&lt;br /&gt;
* Производительность. Во многом следствие первого пункта — эрланг столь же стремителен, как [[Слоупок|известный розовый покемон]].&lt;br /&gt;
&lt;br /&gt;
* Records. Нормальных записей в Эрланг не завезли, приходится обходиться костыльной надстройкой над кортежами.&lt;br /&gt;
&lt;br /&gt;
* Guards. В отличие от того же Haskell, где в guard-expression можно запихнуть хоть Аллаха, в Эрланге есть только унылые match-expressions.&lt;br /&gt;
&lt;br /&gt;
* Отсутствие чистоты. Что ни говори, а Эрланг всё-таки не чисто-функциональный язык.&lt;br /&gt;
&lt;br /&gt;
* Сложность анализа кода и отладки. По возможности устроить спагетти из кучи процессов, ожидающих невесть что, невесть откуда…&lt;br /&gt;
&lt;br /&gt;
* Нельзя перегружать инфиксные операторы и, как следствие, нет возможности управлять control flow с помощью продолжений, iteratees и прочих [[Haskell|монад]]. Отчасти пофикшено в Elixir.&lt;br /&gt;
&lt;br /&gt;
* Излишнее упование на принцип Let it crash приводит к тому, что чаще всего супервизоры нужны только для того, чтобы превратить быструю смерть приложения в более долгую и мучительную.&lt;br /&gt;
&lt;br /&gt;
* Мелкие ошибки в коде, помноженные на косяки в виртуальной машине, могут с течением времени приводить к поистине термоядерным проблемам. Утечки атомов, переполненные мейлбоксы — всё это медленно, но неизбежно отправляет VM в Адъ.&lt;br /&gt;
&lt;br /&gt;
== «Hello, Joe! Hello, Mike!» → ==&lt;br /&gt;
&lt;br /&gt;
{{Video|xrIjfIjssLE|width=250|nofloat=yes|Вот что случается, если программистам дать видеокамеру}}&lt;br /&gt;
&lt;br /&gt;
{{Q|pre=1|— Hello, Joe.&lt;br /&gt;
— Hello, Mike.&lt;br /&gt;
— Hello, Mike.&lt;br /&gt;
— Hello, Robert.&lt;br /&gt;
— Hello, Joe.|разработчики эрланга об основах языка}}&lt;br /&gt;
&lt;br /&gt;
Интернет-общественности язык известен прежде всего как буквы на экране компьютера в знаменитом видео, где инженеры Эрикссон показывали в камеру свои бледные лица и названивали друг другу по телефону с непонятными целями. Для непосвящённого человека естественна единственная реакция: «[[ЩИТО|what?]]»&lt;br /&gt;
&lt;br /&gt;
== Пример кода на эрланге → ==&lt;br /&gt;
Первая функция сработает, если передать сортировке пустой список &amp;lt;span style=&amp;quot;color:maroon&amp;quot;&amp;gt;&amp;#039;&amp;#039;&amp;#039;;&amp;#039;&amp;#039;&amp;#039;&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Вторая функция разделит список на заголовок «Pivot» и хвост «Rest», после чего &amp;lt;span style=&amp;quot;color:maroon&amp;quot;&amp;gt;→&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
дважды войдёт в рекурсию, выполняя операторы &amp;lt;span style=&amp;quot;color:maroon&amp;quot;&amp;gt;++&amp;lt;/span&amp;gt; и &amp;lt;span style=&amp;quot;color:navy&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt; перемешивая &amp;lt;span style=&amp;quot;color:navy&amp;quot;&amp;gt;||&amp;lt;/span&amp;gt; элементы &amp;lt;span style=&amp;quot;color:navy&amp;quot;&amp;gt;←&amp;lt;/span&amp;gt; списков &amp;lt;span style=&amp;quot;color:navy&amp;quot;&amp;gt;] &amp;lt;span style=&amp;quot;color:maroon&amp;quot;&amp;gt;&amp;#039;&amp;#039;&amp;#039;.&amp;#039;&amp;#039;&amp;#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
%% quicksort:qsort(List)&lt;br /&gt;
%% Sort a list of items&lt;br /&gt;
-module(quicksort).&lt;br /&gt;
-export([qsort/1]).&lt;br /&gt;
&lt;br /&gt;
qsort([]) -&amp;gt; [];&lt;br /&gt;
qsort([Pivot|Rest]) -&amp;gt;&lt;br /&gt;
qsort([ X || X &amp;lt;- Rest, X &amp;lt; Pivot]) ++ [Pivot] ++ qsort([ Y || Y &amp;lt;- Rest, Y &amp;gt;= Pivot]).&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Что характерно, этот недо-[[wiki:QuickSort|QuickSort]] будет практически одинаково выглядеть на 95% функциональных языков, исключая, разве что, [[LISP]].&lt;br /&gt;
&lt;br /&gt;
Алсо, это чуть ли не единственная на планете реализация быстрой сортировки, требующая О(n²) дополнительной памяти в худшем случае из-за врождённой ущербности языка (на любом нормальном языке дополнительной памяти не требуется вовсе). Про скорость работы лучше просто промолчать. Но любителей эрланга не останавливают такие мелочи, как реальность, практическая применимость и здравый смысл. Какая разница, что quicksort перестал быть quick (и существенный пласт алгоритмов в принципе не реализуем на эрланге с сохранением асимптотической сложности)? Зато строчек мало, и можно прикинуться умным перед коллегами!&lt;br /&gt;
&lt;br /&gt;
== Что за _ → ==&lt;br /&gt;
[[IRL]], это был пример взлетевшего [[велосипед]]а, когда компании потребовалось написать один-единственный продукт на тему телефонии.&lt;br /&gt;
&lt;br /&gt;
Огромное количество нужных программистам вещей в язык не вошли просто потому, что они не понадобились в том единственном проекте в самом начале. Массивы? [[Кто все эти люди?|Не надо]]. Циклы? [[Зацените, чуваки, как на улице-то пиздато!|Не знаем]]. Строки? [[Да идите вы уже нахуй со своим Ктулху|Не, не слышали]]. Когда петух клюнул их в задницу, строки пришлось приматывать [[Изолента|изолентой]] как [[Ах ты ж ёбаный ты нахуй|односвязный список чисел]]. Отличать список чисел от строк язык не может до сих пор и перед выводом строки на экран просто пробегается по всем числам. Все маленькие? Кажется, это буквы. [[100500]]? Наверное, это не буквы…&lt;br /&gt;
&lt;br /&gt;
Перерабатывать язык никто не стал, потому что на сыром прототипе уже был запущен проект Эрикссона — и весь код у них оказался write only. Разумеется, пришлось городить дополнительные костыли для структурирования кода. Разумеется, они плохо вписались в базовый язык.&lt;br /&gt;
&lt;br /&gt;
Всё это разительно отличается от других языков для небыдла — [[лисп]]а и [[Haskell|хаскеля]]. Первый прошел бесконечно долгую и болезненную эволюцию на реальных задачах, породил множество диалектов, и, спустя полвека, наконец-то принял современный вид ([[:w:Common Lisp|точнее]] [[:w:Scheme|два]]). Второй годами вылизывался яйцеголовыми теоретиками (больше философами, чем программистами) и стал как минимум целостным. Вся история эрланга вкратце — [http://damienkatz.net/2008/03/what_sucks_abou.html завелось и поехало].&lt;br /&gt;
&lt;br /&gt;
== Но → ==&lt;br /&gt;
Почему взлетел?…&lt;br /&gt;
&lt;br /&gt;
Лучше всех это знает Джо Армстронг, автор языка. Вот что он пишет в своей книге «Programming Erlang»:&lt;br /&gt;
&lt;br /&gt;
{{Цитата|&amp;lt;i&amp;gt;В начальной школе учительница объясняла нам: «Если в разных частях выражения стоит переменная X, то все они имеют одно и то же значение». И мы решали уравнения: так как мы знали, что X+Y&amp;amp;#x3D;10 и что X-Y&amp;amp;#x3D;2, то мы делали вывод, что X&amp;amp;#x3D;6 и что Y&amp;amp;#x3D;4 в обоих выражениях.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Затем мы перешли к изучению программирования и нам показали строку: X &amp;amp;#x3D; X + 1&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;[[Я нихуя не понял|Мы были против]] и нам казалось, что так делать нельзя. Но учитель объяснил нам, что мы не правы и что [[сделайте меня развидеть это|нам надо разучиться]] и [[Забудьте всё, чему вас учили|забыть то, что мы знали раньше]]. «Икс», объяснил он, это такая [[индусский код|коробочка, где лежат данные]], и её содержимое можно менять.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Эрланг не позволяет менять переменные: они выглядят как обозначения в математических выражениях. Когда вы связываете переменную со значением, вы утверждаете некий факт. Теперь переменная имеет это значение — и теперь так и будет.&amp;lt;/i&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
А раз нет изменяемого состояния, то программу можно разделить надвое в любой точке — и она будет выполняться на двух ядрах или на двух процессорах, без семафоров и блокировок. Встречные блокировки (когда один поток захватывает семафоры A,B,C,D, а другой захватывает D,C,A и они останавливаются и ждут друг друга до бесконечности) тоже не возникают. [[Nuff Said|Так всё ли ясно?]]&lt;br /&gt;
&lt;br /&gt;
Подводный кот — такой он один.&lt;br /&gt;
&lt;br /&gt;
Конкурентов в занимаемой нише у него не было и нет.&lt;br /&gt;
&lt;br /&gt;
== Алсо → ==&lt;br /&gt;
* Джо Армстронг — [http://www.sics.se/~joe/images/mc.jpg байкер].&lt;br /&gt;
* На Erlangе написан православный [[XMPP|джаббер]]-сервер ejabberd, который используют на самых высоконагруженных джаббер-серверах в мире. Автор сего винрара, выходец из Севастополя в забугорье через [[Дефолт-сити]], Алекс Щепин&amp;lt;ref&amp;gt;Он же соавтор джаббер-клиента Tkabber, но уже на тикле&amp;lt;/ref&amp;gt;, не иначе как за это самое был удостоен звания лучшего программера на эрланге в 2006 году [http://www.process-one.net/en/ejabberd/article/erlang_user_of_the_year_2006/].&lt;br /&gt;
* Первая версия Эрланга была написана на [[Prolog]].&lt;br /&gt;
* Эрланг — единица измерения загрузки телефонных линий.&lt;br /&gt;
* На Эрланге написан RabbitMQ, Вики: [https://ru.wikipedia.org/wiki/RabbitMQ].&lt;br /&gt;
* Эрлангер — персонаж инфернального опуса [[Кафка|нашего всего]] «[[:w:Замок (роман)|Замок]]».&lt;br /&gt;
* [[:w:Эрлан-шэнь|Эрлан]] (Erlang) — китайский бог с третьим глазом во лбу.&lt;br /&gt;
&lt;br /&gt;
== Примечания → ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== См. также → ==&lt;br /&gt;
* [[Haskell]]&lt;br /&gt;
* [[Нерд]]&lt;br /&gt;
* [[Жаббер]]&amp;lt;!--Ибо на этом языке написан сервак ejabberd, который стоит везде. Даже на жаббер.орг. Так-то.--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ссылки → ==&lt;br /&gt;
* [http://www.wings3d.com/ Wings3D] — редактор для [[Гном|низкополигонального моделирования]]. Написан на сабже.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Языки программирования}}&lt;br /&gt;
&lt;br /&gt;
[[ae:Erlang]]&lt;br /&gt;
[[en.w:Erlang]]&lt;br /&gt;
[[w:Erlang]]&lt;/div&gt;</summary>
		<author><name>127.0.0.1</name></author>
	</entry>
</feed>