Erlang performansına karşı F # performansı, Erlang'ın VM'sinin daha hızlı olduğuna dair kanıt var mı?


19

Fonksiyonel programlamayı öğrenmeye zaman ayırdım ve öğreticiler / örneklerle uğraşmak yerine bir proje yazmaya başlamak istediğim bölüme geldim.

Araştırmamı yaparken, Erlang'ın eşzamanlı yazılım (bu benim amacım) yazmak söz konusu olduğunda oldukça güçlü olduğunu gördüm, ancak geliştirme kaynakları ve araçları Microsoft geliştirme ürünleri kadar olgun değil.

F #, linux (Mono) üzerinde çalışabilir, böylece bu gereksinim karşılanır, ancak internette dolaşırken F # ile Erlang karşılaştırmaları bulamıyorum. Şu anda, Erlang'a en fazla baskıya sahip gibi geldiği için eğildim, ancak iki sistem arasında gerçekten herhangi bir performans farkı olup olmadığını merak ediyorum.

.NET'te gelişmeye alışkın olduğum için, muhtemelen F # ile Erlang'dan çok daha hızlı olabilirim, ancak F # 'nin Erlang kadar ölçeklenebilir olduğuna ikna edecek herhangi bir kaynak bulamıyorum.

En çok ısrarlı düğümlere hızlı bir şekilde işlenmiş mesajlar gönderecek olan simülasyonla ilgileniyorum.

Sormaya çalıştığım şeyle iyi bir iş yapmadıysam, lütfen daha fazla doğrulama isteyin.


12
Dillerin hızı yoktur. Belirli bir girdi üzerinde belirli bir programı çalıştıran belirli dil uygulamaları (programa bağlı olarak tüm dış dünyayı içerebilir) bir hıza sahiptir.

1
F #, .NET çalışma zamanında ve Erlang kendi VM'sinde çalışır. Erlang'ın süreçleri, kendi alanında (Scala gibi) dillere karşı hafif olarak kabul edilir. Bir simülasyon yumurtlama düğümü için ve çok fazla mesaj iletirken, .NET / Mono çalışma zamanı Erlang'ın VM'si kadar iyi mi yoksa Erlang'ın VM'si daha mı üstün?
afuzzyllama

3
@delnan: Dillerin performans özellikleri vardır.
Jon Harrop

2
@JonHarrop Nasıl yani? Bir programlama dili sadece bazı sözdizimi ve ilgili anlambilimdir.

1
@delnan: Anlambilim, optimizasyona sınırlamalar getirir. Örneğin, dinamik olarak yazılan dillerin pratikte optimize edilmesi oldukça zordur. JVM'de değer türlerinin olmaması, .NET'e göre çok daha fazla yığın tahsisi ve sonuç olarak GC üzerinde çok daha fazla stres ile sonuçlanır. Kod üreticileri gibi, çöp toplayıcıları da performansı artırmak için değişmezlik gibi bilgileri kullanabilir ve kullanabilirler. Programlama dilinin tasarımı bunun üzerinde büyük bir etkiye sahiptir.
Jon Harrop

Yanıtlar:


21

Ne demek "yaşayabilir"? "En fazla basına sahip olmak" mutlaka bir dil seçmenin en iyi yolu değildir.

Erlang'ın şöhret iddiası, büyük paralellik kabiliyetidir. Bu nedenle Ericsson telefon anahtarlarında yaygın olarak kullanılmaktadır. Erlang yumuşak gerçek zamanlıdır, bu nedenle bu konuda belirli performans garantileri yapabilirsiniz.

F #, .NET Jitter'ın optimizasyon özelliklerinden yararlanır. Buna ek olarak, dilin kendisi yüksek performanslı bir işlevsel dil olarak tasarlanmıştır (hızı nedeniyle finans endüstrisinde yaygın olarak kullanılan bir OCaml çeşididir).

Nihayetinde, aynı anda milyonlarca küçük aracı çalıştırmayı planlamıyorsanız (Erlang için optimize edilmiş olan şey budur), F # göreve hazır olmalıdır.

Bu sayfada Erlang için uygun kullanım durumları açıklanmaktadır.


"Yaşayabilir" ile ölçeklenebilir demek istedim. Basın sahibi olmanın o dilin daha iyi olduğu anlamına gelmediğini biliyorum, ancak Erlang'ın kanıtlanmış olduğu anlaşılıyor (en azından Ericsson tarafından). Acenteler ile ne demek istiyorsun? Süreçler?
afuzzyllama

1
Evet. Erlang'ın, bir Ericsson anahtarında aynı anda birçok telefon görüşmesi gerçekleştirdiği kanıtlanmıştır. Kullanım durumunuzun benzer olup olmadığını anlamanız gerekir. Göreceli olarak uzmanlaşmış bir kullanım örneği olarak görüyorum; Bu karakteristik bulunmayışı halinde sizin uygulaması, ben Erlang kullanarak herhangi bir avantaj görmüyorum ve Erlang sayfa gerçekten Erlang olduğu bazı kullanım durumlarını anlatır değil uygundur.
Robert Harvey

2
Ajanlar, aktörler, fonksiyonel dil tartışmalarında çokça ortaya çıkan bir tasarım konsepti; Henüz onunla karşılaşmadığına şaşırdım. en.wikipedia.org/wiki/Agent-based_model
Patrick Hughes

Başka bir deyişle, Erlang'ın sağladığı türden büyük ölçekli (ya şimdi ya da sonunda) ölçeklenebilirliğe ihtiyacınız var mı? Çoğu program bunu yapmaz.
Robert Harvey

1
F # ayrıca, Erlang'dakiyle aynı şey olan biraz şifreli olarak adlandırılan 'MailboxProcessor' kullanarak ajan modeline sahiptir . Yine de her birinin göreceli performans özellikleri hakkında yorum yapamam.
FinnNk

7

Bu konuda az sayıda objektif ifade yapılabilir çünkü bu iki dilin performansı büyük ölçüde uygulama ve programlama stiline bağlıdır.

Verebileceğim tek tavsiye, F # 'ın statik tip bir sistemin performans avantajına sahip olması ve CLR'nin performansı artırmak için bunu kullanarak iyi bir iş çıkarmasıdır. F #, eşzamansız aracılara ve ileti geçirmeye sahiptir ancak optimize edilmemiştir ve eşzamanlı kod genellikle 10 kat daha hızlıdır.

Erlang, performans açısından önemli bir dezavantaja sahip olan dinamik olarak yazılmıştır (çok daha fazla boks beklemektedir), ancak eşzamanlı F # 'den çok daha hızlı olabilmesi için asenkron ajanlar arasında hızlı mesajı desteklemek için sıfırdan inşa edilmiştir. . Ancak, bunu destekleyecek bir kıyaslama sonucum yok: bu sadece benim beklentim.

Bir yana, hem Erlang hem de F #, küçük topluluklarla nispeten daha sade dillerdir ve farklı hedef pazarları nedeniyle, her ikisine de aşina olan insanlar nadirdir. Neredeyse kalifiye olduğunu düşünebildiğim tek kişi Jesper Louis Andersen ama ne kadar F # yaptığını bilmiyorum.


4

Bu yazıyı Joe Armstrong tarafından okumalısınız: http://erlang.org/pipermail/erlang-questions/2012-Şubat/064277.html

Kısacası Erlang'ın hızlı olacak şekilde tasarlanmamış olması! Çoğu durumda oldukça hızlıdır, ancak hata toleransı ve kararlılığı gibi sorunlara ikincildir.

Gerçek şu ki, hem Erlang hem de F # güzel dillerdir ve sadece F # 'a hızlıca bakarken, Erlang hakkında bir kitap yazdım: Erlang ile Web Uygulamaları Oluşturmak ve çalışmak için eğlenceli bir dil olduğunu söyleyebilirim.

Önümüzdeki 6-9 ay içinde yayınlanacak işlevsel dil kitaplarında da bir patlama olduğunu belirtmek isterim. Erlang'da (benim dahil) en az 4, Haskell'de bir, OCaml, Clojure ve F # ile ilgili unvanları biliyorum.

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.