Erlang

Э́рланг (пинд. "Error Language", также "Enlarg", "Телебейсик") — небыдлокодерский язык программирования, придуманный расовой шведской компанией Ericsson (без Sony) с целью захватить мир. Выгодно отличается от Хаскелла тем, что на нём реально можно писать полезные программы (и даже зарабатывать кровавые доллары). Язык лексически еурсивен, на 13.7% более компактен, функционален, многопоточен и необычайно полон матана. На нем можно делать динамические опердени, не приседая со штангой! Официально заявлено, что он назван в честь математика Агнера Краупа Эрланга, но всем понятно, что это аббревиатура от Ericsson Language.
Эрланг позиционируется как язык всея всего, чудесная таблетка от запоров, быдлокодерства и школоты. Говорят, что на нем легко наваять чудо-мега-пуперсистему, книгу бытия и ответить на главный вопрос о смысле жизни. На практике же скатывается в обыкновенное говно, вконец запутывающее новобранцев и иже с ними. Содержит много лямбда-ямбда и синхрофозантрон-конструкций.
Такое положение вещей вынуждает приверженцев старого мира активно бурлить, попутно вставляя новые костыли в старый-добрый C. Особо прыткие уже так навставляли, что мама не горюй.
Сам эрланг ничего не делает, а только даёт указания.
Кошерен, ибо не хранит данные вместе с кодом.
Любители <del>выебнуться</del> писать на эрланге хвастаются тем, что могут наплодить кучу потоков, работающих быстрее света, но мы-то знаем, что за все это время они наплодили чуть менее, чем нихуя программ.
 
Интернет-общественности язык известен прежде всего как буквы на экране компьютера в знаменитом видео, где инженеры Эрикссон показывали в камеру свои бледные лица и названивали друг другу по телефону с непонятными целями. Для непосвящённого человека естественна единственная реакция: «what?»
Первая функция сработает, если передать сортировке пустой список ;
Вторая функция разделит список на заголовок «Pivot» и хвост «Rest», после чего →
дважды войдёт в рекурсию, выполняя операторы ++ и [ перемешивая 

Что характерно, этот недо- будет практически одинаково выглядеть на 95% функциональных языков, исключая, разве что, LISP.
Алсо, это чуть ли не единственная на планете реализация быстрой сортировки, требующая О(n²) дополнительной памяти в худшем случае из-за врождённой ущербности языка (на любом нормальном языке дополнительной памяти не требуется вовсе). Про скорость работы лучше просто промолчать. Но любителей эрланга не останавливают такие мелочи, как реальность, практическая применимость и здравый смысл. Какая разница, что quicksort перестал быть quick (и существенный пласт алгоритмов в принципе не реализуем на эрланге с сохранением асимптотической сложности)? Зато строчек мало, и можно прикинуться умным перед коллегами!
IRL, это был пример взлетевшего велосипеда, когда компании потребовалось написать один-единственный продукт на тему телефонии.
Огромное количество нужных программистам вещей в язык не вошли просто потому, что они не понадобились в том единственном проекте в самом начале. Массивы? Не надо. Циклы? Не знаем. Строки? Не, не слышали. Когда петух клюнул их в задницу, строки пришлось приматывать изолентой как односвязный список чисел. Отличать список чисел от строк язык не может до сих пор и перед выводом строки на экран просто пробегается по всем числам. Все маленькие? Кажется, это буквы. 100500? Наверное, это не буквы…
Перерабатывать язык никто не стал, потому что на сыром прототипе уже был запущен проект Эрикссона — и весь код у них оказался write only. Разумеется, пришлось городить дополнительные костыли для структурирования кода. Разумеется, они плохо вписались в базовый язык.
Всё это разительно отличается от других языков для небыдла — лиспа и хаскеля. Первый прошел бесконечно долгую и болезненную эволюцию на реальных задачах, породил множество диалектов, и, спустя полвека, наконец-то принял современный вид (точнее два). Второй годами вылизывался яйцеголовыми теоретиками (больше философами, чем программистами) и стал как минимум целостным. Вся история эрланга вкратце — завелось и поехало.
Почему взлетел?…
Лучше всех это знает Джо Армстронг, автор языка. Вот что он пишет в своей книге «Programming Erlang»:
В начальной школе учительница объясняла нам: «Если в разных частях выражения стоит переменная X, то все они имеют одно и то же значение». И мы решали уравнения: так как мы знали, что X+Y=10 и что X-Y=2, то мы делали вывод, что X=6 и что Y=4 в обоих выражениях.

Затем мы перешли к изучению программирования и нам показали строку: X = X + 1

Мы были против и нам казалось, что так делать нельзя. Но учитель объяснил нам, что мы не правы и что нам надо разучиться и забыть то, что мы знали раньше. «Икс», объяснил он, это такая коробочка, где лежат данные, и её содержимое можно менять.

Эрланг не позволяет менять переменные: они выглядят как обозначения в математических выражениях. Когда вы связываете переменную со значением, вы утверждаете некий факт. Теперь переменная имеет это значение — и теперь так и будет.
А раз нет изменяемого состояния, то программу можно разделить надвое в любой точке — и она будет выполняться на двух ядрах или на двух процессорах, без семафоров и блокировок. Встречные блокировки (когда один поток захватывает семафоры A,B,C,D, а другой захватывает D,C,A и они останавливаются и ждут друг друга до бесконечности) тоже не возникают. Так всё ли ясно?
Подводный кот — такой он один.
Конкурентов в занимаемой нише у него не было и нет.