Saya baru-baru ini mempelajari pemrograman fungsional terutama Haskell dan F #, sebelumnya lebih dari itu. Setelah beberapa googling di sekitar saya tidak dapat menemukan perbandingan benchmark bahasa fungsional yang lebih menonjol (Scala, F # dll).
Saya tahu itu tidak selalu adil untuk beberapa bahasa (Scala datang ke pikiran) mengingat bahwa mereka adalah hibrida, tapi saya hanya ingin tahu yang mengungguli yang pada operasi apa dan secara keseluruhan.
CPython
vsPyPy
cepat terlintas dalam pikiran.Jawaban:
Menurut Great Benchmarks Game , ATS lebih cepat daripada yang lain dengan Haskell, Scala, dan salah satu varian Common Lisp dalam ikatan kasar untuk kecepatan yang dekat di belakangnya. Setelah itu Ocaml dan F # berada dalam kategori kecepatan yang kira-kira sama dengan Racket dan Clojure tertinggal ...
Namun, hampir tidak ada yang benar-benar berarti. Ini semua masalah masalah, mesin, kompiler, teknik pengkodean, dan dalam beberapa kasus, keberuntungan. Secara umum, bahasa kode mesin langsung seperti Haskell akan mengungguli bahasa yang dikompilasi VM seperti F # dan jauh mengungguli bahasa murni ditafsirkan. Juga secara umum, bahasa yang diketik secara statis lebih cepat daripada yang diketik secara dinamis karena analisis statis memungkinkan semua operasi jenis dikalkulasi pada saat kompilasi daripada pada saat dijalankan. Sekali lagi, ini adalah aturan umum, akan selalu ada pengecualian. "Paradigma" tidak ada hubungannya dengan itu.
sumber
Juga harus ditunjukkan bahwa Anda tidak dapat mengukur / mengukur kinerja bahasa pemrograman . Yang terbaik yang dapat Anda lakukan adalah mengukur kinerja implementasi bahasa tertentu pada platform tertentu, menjalankan program tertentu.
Jadi ketika Anda bertanya tentang "bahasa fungsional tercepat", apa yang sebenarnya Anda tanyakan tentang yang terbaik dari implementasi bahasa saat ini.
Komentar @ igouy memunculkan poin bahwa ada ukuran kinerja lain untuk implementasi bahasa; misal waktu kompilasi. Tapi itu tidak mengubah fakta bahwa waktu menjalankan program aplikasi adalah ukuran (tidak langsung) dari implementasi bahasa, bukan ukuran dari bahasa itu sendiri.
Pertimbangkan Java sebagai contoh. Misalkan saya menulis tolok ukur single-threaded menggunakan fitur bahasa semata-mata dari Java klasik (Java 1.0). Jika saya mengkompilasi dan menjalankan menggunakan JDK 1.0, saya akan mendapatkan kinerja yang buruk (karena cos JDK 1.0 tidak memiliki kompiler kode asli). Jika saya beralih dari JDK 1.1 ke ... JDK 1.7, kemungkinan besar saya akan mendapatkan hasil yang semakin baik. Tetapi ini bukan karena perubahan pada bahasa Java ... karena tolok ukur saya menggunakan subset bahasa yang sama. Sebaliknya percepatan disebabkan oleh peningkatan pada kompiler, sistem runtime dan / atau implementasi perpustakaan kelas. Ini semua adalah masalah implementasi .
Poin lainnya adalah bahwa perbedaan implementasi ini bisa sangat signifikan (misalnya urutan besarnya) untuk bahasa yang sama. Jadi fakta bahwa implementasi terbaik untuk bahasa X lebih cepat daripada implementasi terbaik (atau hanya) bahasa Y tidak selalu memberi tahu Anda banyak tentang bahasa itu sendiri.
sumber
Jika Anda melihat bahasa hanya pada kecepatan eksekusi, Anda kehilangan beberapa poin utama. Kecepatan adalah hal yang baik, tetapi bukan satu-satunya hal.
Haskell menggunakan sistem tipe yang sangat kuat untuk membuat program yang jauh lebih besar kemungkinannya bebas bug dan kuat.
Erlang menggunakan sistem pemantauan bawaannya untuk memungkinkan Anda membuat sistem kesalahan yang dapat memberi Anda tingkat keandalan yang sangat besar dalam menghadapi berbagai jenis kesalahan. Selain itu Erlang dapat memberi Anda tingkat konkurensi yang sulit dicocokkan dengan bahasa lain.
Sebenarnya saya akan menganggap kecepatan eksekusi di zaman modern ini agak jauh di bawah daftar apa yang akan saya pertimbangkan dalam banyak kasus. (OK jika saya melakukan perhitungan numerik besar saya mungkin ingin menggunakan fortran untuk kecepatan tetapi selain itu tidak cukup penting untuk masalah)
sumber