Kinerja F # vs kinerja Erlang, apakah ada bukti bahwa VM Erlang lebih cepat?

19

Saya telah meluangkan waktu untuk mempelajari pemrograman fungsional dan saya telah sampai pada bagian di mana saya ingin mulai menulis proyek alih-alih hanya mencoba-coba tutorial / contoh.

Saat melakukan penelitian, saya menemukan bahwa Erlang tampaknya cukup kuat dalam hal menulis perangkat lunak bersamaan (yang merupakan tujuan saya), tetapi sumber daya dan alat untuk pengembangan tidak seatur produk pengembangan Microsoft.

F # dapat berjalan di linux (Mono) sehingga persyaratannya terpenuhi, tetapi ketika mencari-cari di internet saya tidak dapat menemukan perbandingan F # vs Erlang. Saat ini, saya condong ke arah Erlang hanya karena tampaknya memiliki pers paling banyak, tetapi saya ingin tahu apakah benar-benar ada perbedaan kinerja antara kedua sistem.

Karena saya terbiasa berkembang di .NET, saya mungkin bisa mempercepat dengan F # jauh lebih cepat daripada Erlang, tetapi saya tidak dapat menemukan sumber daya apa pun untuk meyakinkan saya bahwa F # sama scalable seperti Erlang.

Saya paling tertarik pada simulasi, yang akan menembakkan banyak pesan yang diproses dengan cepat ke node persisten.

Jika saya belum melakukan pekerjaan dengan baik dengan apa yang saya coba tanyakan, silakan minta verifikasi lebih lanjut.

afuzzyllama
sumber
12
Bahasa tidak memiliki kecepatan. Implementasi bahasa tertentu yang menjalankan program spesifik pada input tertentu (ini mungkin termasuk seluruh dunia luar, tergantung pada program) memiliki kecepatan.
1
F # berjalan pada .NET runtime dan Erlang berjalan pada VM-nya sendiri. Proses Erlang dianggap ringan vs bahasa yang ada di domainnya (seperti Scala). Untuk simulasi pemijahan node dan mengirimkan banyak pesan, apakah runtime .NET / Mono sama baiknya dengan VM Erlang atau VM superior Erlang?
afuzzyllama
3
@delnan: Bahasa memang memiliki karakteristik kinerja.
Jon Harrop
2
@ JonHarrop Bagaimana bisa begitu? Bahasa pemrograman hanyalah beberapa sintaks dan semantik terkait.
1
@delnan: Semantik menempatkan batasan pada optimasi. Misalnya, bahasa yang diketik secara dinamis sulit untuk dioptimalkan dalam praktik. Kurangnya tipe nilai pada JVM menghasilkan alokasi heap lebih banyak daripada pada. NET dan, akibatnya, tekanan yang jauh lebih besar pada GC. Seperti pembuat kode, pengumpul sampah dapat dan mengeksploitasi informasi seperti ketidakberdayaan untuk meningkatkan kinerja. Desain bahasa pemrograman memiliki efek besar pada ini.
Jon Harrop

Jawaban:

21

Apa yang Anda maksud dengan "viable?" "Memiliki pers yang paling" tidak selalu merupakan cara terbaik untuk memilih bahasa.

Klaim Erlang untuk ketenaran adalah kemampuannya untuk paralelisasi besar-besaran. Itu sebabnya ini biasa digunakan di sakelar telepon Ericsson. Erlang bersifat soft-realtime, sehingga Anda dapat membuat jaminan kinerja tertentu tentangnya.

F # mendapat manfaat dari kemampuan optimalisasi .NET Jitter. Selain itu, bahasa itu sendiri dirancang untuk menjadi bahasa fungsional berkinerja tinggi (itu menjadi varian OCaml, banyak digunakan dalam industri keuangan karena kecepatannya).

Pada akhirnya, kecuali Anda berencana menjalankan jutaan agen kecil pada saat yang sama (untuk itulah Erlang dioptimalkan untuk), F # harus memenuhi tugas.

Halaman ini menjelaskan kasus penggunaan yang sesuai untuk Erlang.

Robert Harvey
sumber
Yang dimaksud dengan "layak" saya maksudkan scalable. Saya tahu bahwa memiliki pers tidak berarti bahasa itu lebih baik, tetapi tampaknya Erlang telah terbukti (setidaknya oleh Ericsson). Apa yang Anda maksud dengan agen? Proses?
afuzzyllama
1
Iya. Erlang telah terbukti menangani banyak panggilan telepon pada sakelar Ericsson secara bersamaan. Anda harus mencari tahu apakah use case Anda serupa. Saya melihat itu sebagai kasus penggunaan yang relatif khusus; jika karakteristik ini tidak ada dalam aplikasi Anda , saya tidak melihat keuntungan menggunakan Erlang, dan halaman Erlang sebenarnya menjelaskan beberapa kasus penggunaan yang Erlang tidak cocok.
Robert Harvey
2
Agen, aktor, ini adalah konsep desain yang banyak muncul dalam diskusi bahasa fungsional; Saya terkejut bahwa Anda belum menemukannya. en.wikipedia.org/wiki/Agent-based_model
Patrick Hughes
Dengan kata lain, apakah Anda membutuhkan skalabilitas besar (baik sekarang atau akhirnya) dari jenis yang disediakan Erlang? Sebagian besar program tidak.
Robert Harvey
1
F # juga memiliki model agen - menggunakan 'MailboxProcessor' yang agak samar bernama yang sama seperti di Erlang. Saya tidak dapat mengomentari karakteristik kinerja relatif masing-masing.
FinnNk
7

Beberapa pernyataan objektif dapat dibuat tentang hal ini karena kinerja kedua bahasa ini sangat bergantung pada aplikasi dan gaya pemrograman.

Satu-satunya saran yang dapat saya berikan adalah bahwa F # memiliki keunggulan kinerja sistem tipe statis dan CLR melakukan pekerjaan yang baik memanfaatkan ini untuk meningkatkan kinerja. F # memang memiliki agen dan sinkronisasi pesan yang tidak sinkron tetapi belum dioptimalkan dan kode sinkron seringkali lebih dari 10 × lebih cepat.

Erlang diketik secara dinamis yang menempatkannya pada kerugian yang signifikan dalam hal kinerja (berharap lebih banyak tinju) tetapi dibangun dari bawah ke atas untuk mendukung pengiriman pesan cepat antara agen asinkron sehingga mungkin jauh lebih cepat daripada F # yang setara. . Namun, saya tidak memiliki hasil patokan untuk mendukung ini: itu hanya harapan saya.

Selain itu, baik Erlang dan F # adalah bahasa yang relatif terbatas dengan komunitas kecil dan, karena pasar target yang berbeda, orang yang akrab dengan keduanya jarang. Satu-satunya orang yang bisa saya pikirkan yang hampir memenuhi syarat adalah Jesper Louis Andersen, tetapi saya tidak yakin berapa banyak yang telah dia lakukan.

Jon Harrop
sumber
4

Anda harus membaca posting ini oleh Joe Armstrong: http://erlang.org/pipermail/erlang-questions/2012-February/064277.html

Pendeknya adalah bahwa Erlang tidak dirancang untuk menjadi cepat! Ini cukup cepat dalam banyak kasus tetapi itu adalah masalah sekunder seperti toleransi kesalahan dan stabilitas.

Yang benar adalah Erlang dan F # adalah bahasa yang baik, dan sementara saya hanya melihat F # saya telah menulis buku tentang Erlang: Membangun Aplikasi Web Dengan Erlang dan saya dapat mengatakan bahwa itu adalah bahasa yang menyenangkan untuk digunakan.

Saya juga akan menunjukkan bahwa tampaknya ada booming dalam buku-buku bahasa fungsional yang akan diterbitkan dalam 6-9 bulan ke depan. Saya tahu setidaknya 4 tentang Erlang (termasuk milik saya), Satu di Haskell, serta Judul di OCaml, Clojure dan F #.

Zachary K
sumber