Programlama Dili Erlang

Genel Bakış

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.

Tarihsel Boyutlar

Oluşum ve İlk Geliştirme

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.

Açık Kaynağa Evrim

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.

Mevcut Durum

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.

Sözdizimi Özellikleri

Fonksiyonel Programlama Paradigması

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.

Hafif Süreçler

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).

Mesaj Geçişi

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!"}.

Desen Eşleştirme

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]).

Hata Toleransı

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).

Sıcak Kod Değiştirme

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").

Değişmezlik

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].

Dağıtım için Yerleşik Destek

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').

Kayıt Türleri

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}.

Liste Kapsamları

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]].

Geliştirici Araçları, Çalışma Zamanları ve IDE'ler

Çalışma Zamanları

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.

Popüler IDE'ler

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.

Bir Proje Oluşturma

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 Uygulamaları

Erlang, telekom, mesajlaşma sistemleri ve gerçek zamanlı uygulamalarda yaygın olarak kullanılmaktadır. Dikkate değer uygulamalar arasında:

Benzer Dillerle Karşılaştırma

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:

Kaynak Koddan Kaynak Koda Çeviri İpuçları

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: