Erlang
Kısaca
Erlang, Ericsson'da telekom santralleri için geliştirilen fonksiyonel bir dildir; devasa eşzamanlılık, hata toleransı ve kesintisiz çalışma için tasarlandı.
Erlang nedir?
Erlang, Ericsson'da 1986'da Joe Armstrong, Robert Virding ve Mike Williams tarafından, çok sayıda eşzamanlı aramayı yönetmesi ve yıllarca ayakta kalması gereken telefon santrallerini çalıştırmak için geliştirilen, fonksiyonel bir programlama dilidir. 1998'de açık kaynak olarak yayımlandı. Erlang neredeyse her zaman, güvenilir sunucular kurmak için bir kütüphaneler ve tasarım ilkeleri kümesi olan OTP (Open Telecom Platform) ile birlikte kullanılır; bu yüzden paketin tamamına genellikle Erlang/OTP denir.
Erlang programları, BEAM sanal makinesi üzerinde çalışan çok sayıda hafif süreçten (process) oluşur. Bu süreçler işletim sistemi iş parçacıklarından çok daha ucuzdur, bellek paylaşmaz ve yalnızca birbirlerine mesaj göndererek haberleşir. Her hatayı önlemeye çalışmak yerine Erlang, "çökmesine izin ver" (let it crash) felsefesini izler: denetçi (supervisor) süreçler işçileri izler ve başarısız olduklarında onları bilinen iyi bir durumda yeniden başlatır. Çalışma zamanı ayrıca, çalışan bir sistemde kodu durdurmadan değiştiren sıcak kod değişimini (hot code swapping) destekler.
Erlang; telekom sistemlerinde, mesajlaşma ve sohbet arka uçlarında, mesaj aracılarında (message broker), veritabanlarında ve yüksek erişilebilirlik gerektiren diğer servislerde kullanılır. Tasarımı iyi yönetilen bir çağrı merkezine benzer: birçok bağımsız operatör kendi çağrısıyla ilgilenir ve biri takılırsa bir süpervizör onu değiştirir; salonun geri kalanı bunu fark etmez. Veri değiştirilemezdir ve her değişken yalnızca bir kez bağlanabilir; bu da bütün bir eşzamanlılık hataları sınıfını ortadan kaldırır.
Erlang, aynı BEAM sanal makinesinde çalışan ve aynı OTP kütüphanelerini kullanan Elixir ile yakından bağlantılıdır; ikisi birbirlerinin kodunu doğrudan çağırabilir. Erlang'ın kendine ait, Prolog'dan esinlenen sıkışık bir sözdizimi vardır; ifadeler noktayla biter ve değişkenler büyük harfle başlar. Elixir ise Ruby benzeri bir sözdizimi, makrolar ve daha yeni araçlar sunar. Erlang'ın hafif süreçleri ayrıca işletim sistemi süreçlerinden farklıdır: sanal makine onları tamamen yönetir ve tek bir düğüm milyonlarcasını çalıştırabilir.
Önemli noktalar
- Erlang, kesintisiz çalışması gereken telekom sistemleri için Ericsson'da geliştirildi.
- Hafif süreçler mesajlaşarak haberleşir ve bellek paylaşmaz.
- OTP denetçileri, "çökmesine izin ver" felsefesini izleyerek başarısız süreçleri yeniden başlatır.
- Sıcak kod değişimi, çalışan bir sistemi durdurmadan güncellemeye olanak tanır.
- Elixir aynı BEAM sanal makinesinde çalışır ve Erlang kütüphanelerini doğrudan kullanabilir.
Örnek
-module(greeter).
-export([start/0]).
% Spawn a lightweight process that waits for messages
start() ->
Pid = spawn(fun loop/0),
Pid ! {hello, "Ada"},
Pid ! stop.
loop() ->
receive
{hello, Name} -> io:format("Hello, ~s!~n", [Name]), loop();
stop -> ok
end.Sık sorulan sorular
Erlang ile Elixir arasındaki fark nedir?
İkisi de BEAM sanal makinesinde çalışır ve OTP'yi paylaşır; dolayısıyla aynı eşzamanlılık ve hata toleransı modeline sahiptir. Erlang kendi sözdizimiyle özgün dildir; Elixir ise Ruby'den esinlenen sözdizimi, makrolar ve modern araçlara sahip daha yeni bir dildir.
"Çökmesine izin ver" ne demek?
Olası her hata için savunmacı kod eklemek yerine Erlang geliştiricileri başarısız bir sürecin çökmesine izin verir ve onu temiz biçimde yeniden başlatmak için bir denetçiye güvenir. Süreçler yalıtılmış olduğundan bir çökme sistemin geri kalanını bozmaz.
Erlang hâlâ kullanılıyor mu?
Evet. Erlang/OTP her yıl büyük bir sürüm alır ve telekom ekipmanlarını, mesajlaşma platformlarını, mesaj aracılarını ve kesintisiz çalışmanın en çok önem taşıdığı diğer sistemleri çalıştırır.
İlgili sayfalar
- ElixirProgramlama Dilleri, s. 9Elixir, Erlang sanal makinesinde çalışan, hataya dayanıklı ve yüksek eşzamanlılıklı sistemler kurmasıyla bilinen, dinamik ve fonksiyonel bir dildir.
- EşzamanlılıkProgramlamanın Temelleri, s. 19Eşzamanlılık, bir programın birden çok görevde örtüşen zaman dilimlerinde ilerleyebilme yeteneğidir; örneğin birçok kullanıcıya aynı anda hizmet vermek gibi.
- Hata ToleransıYazılım Mimarisi, s. 17Hata toleransı, bir sistemin bazı donanım ya da yazılım bileşenleri arızalandığında, belki azalmış kapasiteyle de olsa doğru çalışmayı sürdürebilmesidir.
- Fonksiyonel programlamaProgramlamanın Temelleri, s. 21Fonksiyonel programlama, paylaşılan verileri değiştirmeyen saf fonksiyonlarla yazılım kurma stilidir; kodu daha öngörülebilir ve test etmesi kolay yapar.
- Yüksek ErişilebilirlikYazılım Mimarisi, s. 48Yüksek erişilebilirlik, bir sistemin, çoğunlukla yedeklilikle tek hata noktalarını ortadan kaldırarak neredeyse her zaman çalışır durumda kalabilmesidir.
- Mesaj KuyruğuBackend ve API'ler, s. 28Mesaj kuyruğu, bir servisten gelen mesajları bir başkası işlemeye hazır olana kadar saklayan ve sistemin parçalarını eşzamansız çalıştıran bir bileşendir.
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin