Erlang'daki süreçler / mesajlar ile Smalltalk'taki nesneler / mesajlar arasındaki fark nedir?


12

Ben nesneler / iletilerin arasındaki farkı anlamaya çalışıyorum Smalltalk ve süreçlerin / iletiler Erlang . Ben konuyla ilgili şu yazıyı okumak .

Anladığım kadarıyla, Smalltalk'ta her şey bir nesnedir ve her şey aynı "nesne / mesaj" soyutlamasına sahiptir - sayı bile 1yalnızca mesaj geçişi ile ulaşılabilen bir nesnedir. 1Erlang / Elixir'de bir süreç var mı ? Erlang'daki her şey mesaj / program paradigmasına bir cevap mı? Erlang'daki bir numaraya mesaj gönderebilir misiniz?

Çok teşekkürler.


Bir tamsayı 1 bir işlem değildir; bu nedenle ona bir mesaj gönderemezsiniz. Bir tamsayının durumunu yinelenen bir işlemin içine sarabilir ve bu işlem iletilerini gönderebilirsiniz - örneğin değerini artırmak veya azaltmak için bir talimat. Ama sonra tekrar değeri 1 olmayacak. Buradaki İksir örneğine gidin. Dantswain.herokuapp.com/blog/2015/01/06/…
GavinBrelstaff

bir cevap için teşekkürler!
Tam İşlevsel

Yanıtlar:


18

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. 1bir 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 .


Teşekkür ederim, bu yardımcı oldu!
Tam İşlevsel
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.