Erlang'daki süreçler ve Smalltalk'taki nesneler gerçekten aynı şeydir.
İlk bakışta, bu şaşırtıcı değil: Erlang bir Aktör Modeli dilidir. Aktör Modeli, mesaj odaklı değerlendirme modelini Smalltalk'ın mesaj odaklı değerlendirme modeline dayanan Carl Hewitt tarafından icat edildi. (Gerçekten, Aktörler ve Nesneler aynı şeydir; sadece bazı detaylarda farklılık gösterirler.) Alan Kay, Smalltalk'ı tasarlarken Carl Hewitt'in PLANNER'inden etkilendi.
Bu nedenle, Aktörler ve Nesneler arasında yakın bir ilişki vardır ve bu nedenle Erlang'ın Süreçleri ve Smalltalk Nesneleri'nin bu kadar benzer olması şaşırtıcı olmamalıdır.
Bir şey hariç: Erlang tasarımcıları Aktör Modelini bilmiyordu ! Bunu daha sonra öğrendiler, özellikle Joe Armstrong doktora tezini 1990'ların sonunda Seif Haridi (Programlama Paradigmaları üzerine kesin kitabın ortak yazarı) yazdığında.
Joe Armstrong, OO'ya ( Niçin OO Sucks ) karşı güçlü bir şekilde savunduğu bir makale yazdı , ancak Erlang'ın aslında çok nesne yönelimli olduğunu fark ettiğinde fikrini değiştirdi. Aslında, Joe Armstrong ve Ralph Johnson ile yapılan bu röportajda Erlang'ın tek nesne odaklı dil olduğunu iddia edecek kadar ileri gitti .
Bu, evrimsel biyologların yakınsak evrim olarak adlandırdığı şeyin ilginç bir örneğidir , yani benzer dış baskılara tepki olarak benzer şekilde gelişen iki alakasız tür.
Yine de Erlang ve Smalltalk arasında birçok ilişki var:
Erlang, Prolog'un bir eşzamanlılık uzantısı olarak başladı (ve Erlang kendi ayrı dili olduğunda bile, ilk uygulamalar Prolog'da yazıldı) ve hala günümüze kadar Prolog'da köklü. Prolog, Carl Hewitt'in PLANNER'inden büyük ölçüde etkileniyor.
Smalltalk, daha sonra ARPANet (ve daha sonra İnternet) olacak olan şeyden de büyük ölçüde etkilendi; Erlang ağ bağlantılı sistemler için tasarlanmıştır.
Bununla birlikte, Erlang ve Smalltalk arasındaki önemli farklardan biri, her şeyin bir Süreç olmamasıdır. 1
bir sayıdır, bir süreç değildir. Bir numaraya mesaj gönderemezsiniz.
Erlang'ın birden çok "katmanı" vardır:
- Fonksiyonel Erlang : Prolog'dan miras alınan bazı "tuhaflıklar" olan, genellikle birleşme gibi, çoğunlukla tipik, dinamik olarak yazılmış bir fonksiyonel dil.
- Eşzamanlı Erlang : Fonksiyonel Erlang + Süreçler ve Mesajlar.
- Dağıtık Erlang : Eşzamanlı Erlang + Uzak İşlemler.
- Hata Toleranslı Erlang : Dağıtılmış Erlang + OTP kütüphanelerinde kodlanan belirli Tasarım Kalıpları, örneğin denetimci ağaçları ve
gen_server
.
Erlang / OTP'de yazılan Hata Toleranslı sistem genellikle "Nesneye Yönelik" olarak tanıyabileceğimiz bir şeye benzeyecektir. Ancak bu nesnelerin iç kısımları genellikle nesne yönelimli bir tarzdan daha işlevsel bir şekilde uygulanacaktır.
İlginç bir şekilde, Erlang'ın altında bulunduğu "evrimsel baskı", yani Erlang tasarımcılarının çözmeye çalıştığı sorun (güvenilirlik, çoğaltma, artıklık, ...) hücrelerin evrimine yol açan aynı baskıdır. Alan Kay mikrobiyolojide küçüldü ve biyolojik hücreler üzerinde açıkça modellenmiştir. Bu, Erlang ve Smalltalk arasında bir başka paralelliktir.
Ben bu konuda biraz yazdım benim başka cevap .