Erlang'ın akla gelebilecek her kategoride Erlang'ın node.js'nin kıçını nasıl tekmelediğine dair bir sürü saçmalık görüyorum. Bu yüzden Erlang'ı öğrenmek ve denemek istiyorum, ama sorun şu. Erlang'ı almak için node.js'yi aldığımdan çok daha zor olduğumu fark ediyorum. Node.js ile nispeten karmaşık bir proje seçebilirim ve bir gün içinde çalışan bir şeyim vardı. Erlang ile engellere koşuyorum ve neredeyse o kadar hızlı gitmiyorum.
Yani .. daha fazla deneyime sahip olanlar için, Erlang öğrenmesi karmaşık mı, yoksa sadece bir şey mi kaçırıyorum? Node.js mükemmel olmayabilir, ancak bununla işleri halledebilirim.
Her şeyden önce, SADECE benim doğru GÖRÜŞ'ün Erlang öğrenmesiyle ilgili cevabını kabul ediyorum. Çoğunlukla işlevsel bir dildir (eşzamanlılık büyük bir rol oynamasına rağmen) ve ilk etapta Javascript ile tam olarak aynı tasarım hedefleri olmayan hata toleransı ve sağlamlığına gitmek için tüm özellikleri eklendi.
İkincisi, Node.js'yi Erlang'a girmek için bırakmak biraz yanlış. Node.js, geri çağrıların yardımıyla her şeyi olay güdümlü bir şekilde yapma yolunda giden tek bir sunucu/çerçevedir. Erlang'ın kendi çerçevesi (OTP) vardır, ancak aynı düzeyde değildir.
Erlang öğrenmeyi planlıyorsanız, blog girişimi Erlang Acemi'ye (veya Onlooker) Açık Mektup) öğreticilere dalmadan önce giriş okuması olarak öneririm.
Erlang ve Node.js'yi desen ve kullanım açısından karşılaştırabileceğiniz tek şey, olay odaklı olmalarıdır. Ancak burada iki büyük fark var. Node.js'nin modeli, olaylara bağlı geri aramalara dayanır. Erlang, mesaj kuyruklarına ve seçici alımlara dayanır. İçindeki etkileri nelerdir?
Her şeyden önce, bir şeyleri geri arama tabanlı bir şekilde yaparsanız, durumu etrafta taşımanın tek yolu ya küresel olsun ya da devam eden stil programlamaya girmektir. İkincisi, tam olay matrisine kendiniz dikkat etmeniz gerekir. Bunun bir örneği, çok basit bir sonlu durum makinesi hayal edersek: mutex semaforu, olay güdümlüdür.
Muteks semaforunun iki durumu vardır: kilitli ve serbest. Belirli bir hesaplama birimi (işçi, süreç, işlev ya da iş parçacığı) mutekse erişmek istediğinde, ona 'ilgilendiğimi' söyleyen bir olay başlatması gerekir. Şimdi aşağıdaki olay türlerine dikkat etmelisiniz:
Ardından, kilitlenmeleri önlemek için zaman aşımı gibi dikkate alınacak ek etkinlikleriniz vardır:
Sonra bağlı olaylar da var:
Olay matrisi çok hızlı bir şekilde karmaşık hale gelir. Buradaki FSM'mizde sadece 2 eyalet var. Erlang (veya seçici eşzamanlı ve potansiyel olarak eşzamanlı olaylara sahip zaman uyumsuzluğu olan herhangi bir dil) durumunda, birkaç duruma dikkat etmeniz gerekir:
Ve bu kadar. Zamanlayıcılar, alma işlemleriyle aynı durumlarda ele alınır ve 'ücretsiz olana kadar bekleyin' ile ilgili olan her şey için, mesajlar otomatik olarak kuyruğa alınır: çalışan sadece bir cevap beklemek zorundadır. Model bu durumlarda çok, çok daha basittir.
Bu, genel durumlarda, CPS ve node.js'deki gibi geri arama tabanlı modellerin, ya olayları nasıl ele aldığınızda çok akıllı olmanızı istediği veya tüm karmaşık bir olay matrisine tam olarak bakmanızı istediği anlamına gelir. garip zamanlama sorunları ve durum değişikliklerinden kaynaklanan her bir önemsiz durum için geri çağrılmanız gerekir.
Seçici alımlar genellikle yalnızca tüm olası olayların bir alt grubuna odaklanmanıza izin verir ve bu durumda olaylar hakkında çok daha kolay bir şekilde mantık yürütmenize izin verir. Erlang'ın gen_event
Adlı bir şeyin davranışına (tasarım deseni/çerçeve uygulaması) sahip olduğunu unutmayın. Gen_event uygulaması, eğer istediğiniz buysa, node.js'de kullanılana çok benzer bir mekanizmaya sahip olmanızı sağlar.
Onları ayıran başka noktalar da olacak; Erlang, node.js'yi işbirlikçi hale getirirken önleyici bir programlamaya sahiptir, Erlang bazı çok büyük ölçekli uygulamalara (dağıtım ve tümü) daha yatkındır, ancak Node.js ve topluluğu genellikle en son web eğilimi hakkında daha web uyumlu ve bilgilidir. Bu, en iyi aracı seçme meselesidir ve bu, arka planınıza, sorun türünüze ve tercihlerinize bağlı olacaktır. Benim durumumda, Erlang'ın modeli sadece düşünme şeklimize çok iyi uyuyor. Bu herkes için geçerli değildir.
Bu yardımcı olur umarım.
Erlang'ın öğrenmesi karmaşık değil, kodlayıcıların Oda Sabitinin (% 99.44) programlama yolu olarak öğrendiği sadece zihniyete yabancı. Karşılaştığınız sorun muhtemelen gerçek karmaşıklıktan ziyade sadece kavramsal yönelim bozukluğudur.
İşte Erlang'ın tipik bir programcıyı ısıtacak yabancı özelliklerinden bazıları:
Bu nedenle, Erlang'ı öğrenmek çoğu programcı için Node.js'yi öğrenmekten daha zor olacaktır - özellikle programcı zaten JavaScript'e aşina ise. Ancak, sonunda, kavramsal engeli aştığınız zaman, Erlang kodlamasının daha az eşdeğer Node.js kodlamasından daha karmaşık olacağını belirtiyorum. Bunun birkaç nedeni vardır:
Yapabiliyorsanız, Erlang'da yutmaya devam edin ve henüz yapmadıysanız, Erlang'ın kavramlarına nazik ve (çoğunlukla) komik bir giriş yapmak için ziyaret edin Büyük İyilik için Bazı Erlang'ları Öğrenin .
Erlang ve Düğüm arasında birkaç önemli fark vardır
Birincisi, düğümün Javascript olduğu, yani daha fazla insanın aşina olduğu dillerle birçok özelliği paylaştığı çok yaygın bir dildir, bu yüzden kalkmak ve çalıştırmak genellikle daha kolaydır. Erlang'ın çoğu için genellikle garip ve yabancı bir sözdizimi vardır ve bir dil javascript'ten çok daha basit olmasına rağmen, benzersizliği nedeniyle biraz daha alışması gerekir
İkincisi, Erlang'ın çok özel bir paylaşılan hiçbir eşzamanlılık modeli yok, problemleri çözmek için farklı bir şekilde düşünmenizi gerektirir, ki bu iyi bir şeydir (TM)
Sonuncusu, Erlang'ın ticari bir şirket tarafından geliştirilip açık kaynaklı olması, sadece 2 yıl önce ya da insanların kaynak kontrolünde bireysel taahhütleri görebilmeleri ve şimdi bile tüm erlang geliştiricilerinin taşındığını düşünmemesi. gelişmeleri için kamu github repo. node.js en başından beri topluluk içinde inşa edildi, bu da topluluk desteğinin çok daha iyi olduğu, düğüm için çok daha fazla kütüphane, daha fazla topluluk belgesi, daha canlı örnekler, her yerde bulunan bir paket yöneticisi vb. anlamına geliyor. Erlang yetişiyor bu konuda ama hala kalkmak için çok daha büyük bir rampa.
Düğüm, eğlenceli şeyleri oldukça hızlı ve nispeten ağrısız programlamanıza izin verir, erlang'ın uzun zamandır çözdüğü büyük uygulamalar için hala artan ağrıları vardır. Erlang, program yapma şeklinizi değiştirecek ve (imo) sizi daha iyi bir programcı yapacak, ancak başlangıçta hayatı kolaylaştıramayacak. Her ikisi de farklı şekillerde eğlencelidir.