Arka plan
- Erlang, güvenilir dağıtık sistemler kurmak için geliştirilen bir dildir; başlangıçta bir Prolog kütüphanesi olarak başladı ve zamanla bağımsız bir dile dönüştü.
- Ericsson'da telefon santrallerini programlamak için kullanıldı ve 1998'de açık kaynağa dönüştü.
- Joe Armstrong, Erlang'ın başlıca tasarımcılarından biriydi; doktora tezi, yazılım hataları varken güvenilir dağıtık sistemlerin nasıl inşa edileceğini ele alıyordu.
Davranışlar (Behaviours)
- Erlang'daki davranışlar, Java veya Go'daki arayüzlere benzer; birden çok uygulamaya sahip olabilen tür imzaları kümesidir.
- Davranışlar sayesinde yalnızca programın iş mantığını tanımlayan kodu yazmak gerekir; altyapı kodu ise otomatik olarak sağlanır.
- Davranışlar uzmanlar tarafından yazılır ve en iyi uygulamalara dayanır.
Genel sunucu davranışı
gen_server, bir anahtar-değer deposu uygulama örneği üzerinden açıklanır.
handle_call, durumu güncelleme veya anahtarı sorgulama görevini üstlenir; tüm eşzamanlılık gen_server bileşeninin içinde gizlenmiştir.
Olay yöneticisi davranışı
gen_event, olay yöneticisi olarak çalışır; olay işleyicilerini kaydeder ve bir mesaj geldiğinde onları çalıştırır.
- Hata günlükleme için kullanışlıdır ve basit bir logger örneği verilir.
Durum makinesi davranışı
gen_fsm daha sonra gen_statem olarak yeniden adlandırılmıştır ve protokol uygulamaları için uygundur.
Gözetmen davranışı
- Gözetmen, diğer süreçlerin düzgün çalışıp çalışmadığını denetler ve başarısızlık durumunda önceden tanımlanmış stratejiye göre yeniden başlatır.
one_for_one stratejisi yalnızca başarısız olan süreci yeniden başlatırken, one_for_all stratejisinde bir süreç başarısız olursa tüm alt süreçler yeniden başlatılır.
Uygulama ve sürüm davranışı
- Uygulama, gözetmen ağacını ve gerekli olan her şeyi içerir; sürüm ise bir veya daha fazla uygulamayı paketler.
- Yükseltme başarısız olursa geri alma mümkün olmalıdır.
Davranışların uygulanması
- Erlang'ın hafif süreçleri ve mesaj iletiminden ziyade, davranışların yapısı güvenilir yazılıma yol açar.
- Başka dillerde davranışları uygulamak için arayüz imzaları kullanılarak başlanabilir.
Davranışların doğruluğu
- Simülasyon testleri dağıtık sistemlerin test edilmesini kolaylaştırır ve
gen_server davranışının yapısı kullanılarak sorun çözme basitleştirilebilir.
Katkı
- Martin Thompson'ın çalışmalarından fikirler ödünç alarak hızlı bir olay döngüsü oluşturma ve asenkron I/O ekleme gibi fikirler vardır.
- İlgileniyorsanız veya görüş, öneri ya da sorularınız varsa iletişime geçebilirsiniz.
1 yorum
Hacker News görüşleri
Erlang ve BEAM’de şaşırtıcı olan şey, sundukları özelliklerin derinliği. OP için Erlang’ın Behavior/Interface yapısı en büyük kazanımdı. Bana göre ise önemli olan, karmaşık sistemler kurmak için gereken geliştirme kaynaklarının diğer dillere kıyasla çok daha az olması. Birçok kişi için hafif süreçler ve programlama modeli çekici geliyor
eikütüphanesini kullanarak C’den düğümler derleyebiliyor ve diğer Erlang düğümleriyle arayüz kurabiliyoruz. Erlang’ınrpckütüphanesi sayesinde C’den fonksiyon çağrıları yapmak ve Elixir uygulamasıyla arayüz kurmak mümkünDeneyimlerine dayanarak kitap yazmak isteyen birkaç yöneticiyle birlikte çalıştım. Başarının nedenleri konusunda hep farklı düşündük. Bazıları hafif süreçler ve mesajlaşmanın gizli sos olmadığını söylüyor, ama Erlang’ın Communicating Sequential Processes yaklaşımının bu özelliklerden ayrı düşünülemeyeceğini gözden kaçırıyor
Hafif süreçler ve mesajlaşma nedeniyle Erlang’a yeniden ilgi duymaya başladım. Şimdiye kadar behavior’lar ikincil plandaydı
Ericsson’ın neden Erlang kullanımını bıraktığını ve Joe’nun işten çıkarılmasıyla ilgili bilgi arıyordum
Erlang/Elixir’nin gücü, Actor modelini uygulaması, Prolog tarzı eşleştirme, değişmezlik ya da behavior’lar değil; Joe’nun daha az kaynakla daha fazlasını yapmanın mümkün olduğunu gösterme tutkusu
Erlang, OTP ve BEAM behavior’ların ötesinde şeyler sunuyor. VM, sanal bir çekirdeğe benziyor; supervisor’lar, yalıtılmış süreçler ve dağıtık mod sağlıyor. OTP ayrıca Mnesia (veritabanı), atomik sayaçlar/ETS tabloları (önbellekleme) gibi faydalı modüller sunuyor
Erlang/BEAM’deki en ilginç kavramın, kısmi toparlanmanın varsayılan olarak yerleşik gelmesi olduğunu düşünüyorum. Beklenmeyen bir durum ortaya çıktığında, tüm süreci sonlandırmak ya da bozulma riskini almak yerine, mümkün olan en ince ayrıntı seviyesinde bilinen iyi bir duruma geri dönülüyor
Erlang’ın behavior yapısının diğer diller ve kütüphane tasarımcıları tarafından kopyalanmamasının nedeni, Erlang’daki behavior fonksiyon imzalarının, özellikle değişmezlik olmak üzere Erlang’ın diğer özellikleriyle sıkı sıkıya bağlı olması
Bu yazının söylediklerine katılmıyorum. Behavior’lar, sistemin temel mimarisi sayesinde mümkün oluyor. Behavior’lar bir arayüz değil; daha çok Java gibi dillerdeki soyut nesnelere benziyor
Behavior’lar o kadar da ilginç değil. Başka programlama dillerinde de var. BEAM’i ilginç kılan şey, hata fırlatmanın son derece zarif olması. Hata fırlatma ve behavior’ların gücü, hataları yakalamayı, bağlam bilgisini raporlamayı kolaylaştırıyor ve genel olarak bunları birleştirilebilir hale getiriyor