Erlang, ölçeklenebilir ve hata toleranslı sistemler inşa etmek için tasarlanmış bir fonksiyonel programlama dilidir; özellikle eşzamanlı, dağıtık uygulamalar alanında. İlk olarak 1980'lerin sonlarında Ericsson tarafından sağlam telekom sistemleri oluşturmak amacıyla geliştirilmiştir. Erlang'ın benzersiz özellikleri arasında hafif süreçler için destek, mesaj geçişi ile eşzamanlılık, sıcak kod değiştirme ve güvenilirliğe güçlü bir vurgu bulunmaktadır. Bugün, telekomünikasyon, mesajlaşma uygulamaları ve veritabanı sistemleri gibi yüksek kullanılabilirlik ve dağıtık sistemler gerektiren endüstrilerde yaygın olarak kullanılmaktadır.
Erlang, 1980'lerin sonlarında Joe Armstrong, Robert Virding ve Mike Williams tarafından Ericsson'da, esasen telekom endüstrisinin ihtiyaçlarını karşılamak amacıyla yaratılmıştır. Dil, aynı anda birden fazla çağrı ve bağlantıyı yönetebilen büyük ölçekli, hata toleranslı sistemlerin inşasını kolaylaştırmak için geliştirilmiştir.
1990'ların başında, Ericsson, Erlang'ın telekomünikasyonun ötesindeki potansiyelini fark etti. 1998'de Erlang açık kaynak olarak yayımlandı ve bu, daha geniş bir geliştirici topluluğunun büyümesine katkıda bulunmasına olanak tanıdı. Açık kaynak hareketi, Erlang kodunu yürüten BEAM sanal makinesinin geliştirilmesine yol açtı ve bu makine, o zamandan beri diğer dilleri destekleyecek şekilde evrim geçirdi.
Erlang şu anda Erlang/OTP ekibi tarafından bakımda tutulmakta ve kendine özel bir topluluğa sahiptir. Erlang'ın sürüm döngüsü daha tutarlı hale gelmiş, düzenli güncellemeler ve performans, yeni özellikler ve geliştirilmiş belgeler üzerine odaklanılmıştır. Dil ayrıca, Erlang VM üzerinde çalışan ve birçok ilkesini içeren, ancak ek özellikler sunan modern bir programlama dili olan Elixir'in gelişimine de ilham vermiştir.
Erlang esasen bir fonksiyonel dildir, bu da fonksiyonların birinci sınıf vatandaşlar olduğu ve değişkenler gibi taşınabileceği anlamına gelir.
double(X) -> X * 2.
Erlang’ın hafif süreçleri, önemli bir yük olmadan binlerce eşzamanlı süreç oluşturulmasına olanak tanır.
spawn(fun() -> io:format("Bir süreçten merhaba!~n") end).
Erlang'daki süreçler, paylaşılan durum olmadan güvenli iletişim sağlayan mesaj geçişi kullanarak iletişim kurar.
Pid = spawn(fun() -> receive
{msg, Content} -> io:format("Alındı: ~s~n", [Content])
end end),
Pid ! {msg, "Merhaba!"}.
Erlang, açık ve özlü kod yazmayı sağlayan güçlü bir özellik olan desen eşleştirmeyi kullanır.
match(X) when X > 0 -> io:format("Pozitif sayı: ~B~n", [X]);
match(X) -> io:format("Pozitif olmayan sayı: ~B~n", [X]).
Erlang, süreçlerin başarısız olmasına ve sistemin etkilenmeden yeniden başlatılmasına olanak tanıyan "bırakın çökünsün" felsefesi aracılığıyla hata toleransını destekler.
start_process() ->
spawn(fun() -> crash() end).
Erlang, geliştiricilerin çalışan sistemlerde kodu durdurmadan değiştirmesine olanak tanır.
%% Eski versiyon
-module(example).
-export([hello/0]).
hello() -> io:format("Eski Versiyon~n").
%% Yeni versiyon
-module(example).
-export([hello/0]).
hello() -> io:format("Yeni Versiyon~n").
Erlang'daki veriler değişmezdir, bu da daha az hata ve kod hakkında daha kolay akıl yürütme sağlar.
List = [1, 2, 3],
NewList = [4 | List].
Erlang, süreçlerin farklı düğümler arasında kolayca dağıtılmasını sağlayan özelliklere sahiptir.
net_adm:start() ->
net_adm:ping('other_node@hostname').
Erlang, yapılandırılmış veri türleri oluşturmak için kayıt türlerini destekler.
-record(person, {name, age}).
Person = #person{name="Alice", age=30}.
Erlang, listeleri özlü bir şekilde oluşturmak ve manipüle etmek için liste kapsamlarını kullanır.
Squares = [X*X || X <- [1,2,3]].
Erlang, eşzamanlı ve hata toleranslı uygulamaları çalıştırmak için tasarlanmış BEAM sanal makinesinde yürütülmektedir. BEAM, performansı optimize eder ve sıcak kod değiştirme gibi özelliklere olanak tanır.
Erlang için birkaç geliştirme ortamı bulunmaktadır; Emacs ve IntelliJ IDEA (Erlang eklentisi ile) en popüler olanlar arasındadır. Diğer dikkate değer araçlar arasında Erlang'a özgü editörler olan Erlide bulunmaktadır.
Erlang projesi oluşturmak için geleneksel olarak bağımlılıkları yöneten ve derlemeleri gerçekleştiren rebar3
aracı kullanılır. Örneğin, yeni bir proje oluşturmak için şu komutu çalıştırırsınız:
rebar3 new app myapp
Ardından, projeyi şu komutla derleyebilirsiniz:
rebar3 compile
Erlang, telekom, mesajlaşma sistemleri ve gerçek zamanlı uygulamalarda yaygın olarak kullanılmaktadır. Dikkate değer uygulamalar arasında:
Erlang'ın temel güçlü yönleri, eşzamanlılık modeli ve hata toleransıdır; bu da onu şu dillerden ayırır:
Erlang'a ve Erlang'dan kod çevirisi, benzersiz paradigmaları nedeniyle karmaşık olabilir. Belirli çeviriler için erl2cpp
gibi araçlar mevcut olsa da, tüm diller için yaygın bir otomatik araç yoktur. Manuel çeviri, aşağıdakileri içerebilir: