Erlang

Erlang (Ерланг) е програмен език и среда за изпълнение, специално създаден за изграждане на паралелни и разпределени изчислителни системи. Комбинира идеи от функционалното програмиране с техники за изграждане на отказоустойчиви системи, за да предостави мощно средство, с чиято помощ по-лесно да се разработват паралелни приложения.

Erlang програмите могат да са съставени от милиони малки процеси и да използват цялата сила на многоядрените процесори. Това означава, че приложенията работят почти четири пъти по-бързо на четириядрен процесор, от колкото на едноядрен, без да се налага да правите някакви промени.

Erlang притежава нетипичен синтаксис, който може да открие един различен поглед върху програмирането. За поддръжката на паралелност се следва Actor модела при който процесите си комуникират чрез съобщения. Това спестява трудностите при работа с нишки и синхронизация.

С напредването на технологиите почти са изчерпани възможностите на съществуващите процесори. Последните години започва да се обръща все по-голямо внимание на многоядрените процесори, за да се отговори на нуждата от високопроизводителни и надеждни системи. Софтуерът, разработен с масово използваните технологии като Java и C++, изисква допълнителни усилия, за да може да работи паралелно на множество процесорни ядра.

Поради сложността и високата цена за разработка на паралелни приложения, започват да се търсят по-нестандартни решения, при които използването на целия капацитет на многоядрените процесори да се постига по естествен и прозрачен за разработчиците начин. Именно това е целта и на Erlang.

През 1986 година се разработва първата версия на Erlang от Ericsson Computer Science Laboratory. Използва се единствено в телекомуникационните системи, където е много важна високата производителност и надеждност. С цел популяризиране на проекта извън Ericsson, през 1998 година се пуска с отворен код.

Erlang дълго време се използва за разработка на големи системи, които работят в продължение на години с минимално количество прекъсвания. Заради лесната си мащабируемост и надеждност се използва за критични откъм натовареност части на уеб приложения и уеб услуги. Примери за това му приложение са: Facebook Chat, Ejabber, Amazon SimpleDB, Apache CouchDB, RabbitMQ.

 -module(fact).
 -export([fac/1]).
 fac(0) -> 1;
 fac(N) -> N * fac(N-1).