F # dan Scala adalah bahasa pemrograman fungsional yang tidak memaksa pengembang untuk hanya menggunakan tipe data yang tidak dapat diubah. Mereka berdua memiliki dukungan untuk objek, dapat menggunakan perpustakaan yang ditulis dalam bahasa lain dan dijalankan pada mesin virtual. Kedua bahasa tampaknya didasarkan pada ML.
Apa perbedaan terbesar antara F # dan Scala meskipun fakta bahwa F # dirancang untuk .NET dan Scala untuk platform Java?
functional programming langugages that don't force the developer to only use immutable datatypes
- apakah ada, kecuali mungkin bahasa mainan?Jawaban:
Perbedaan Utama:
Baik Scala dan F # menggabungkan pemrograman OO-imperatif dan pemrograman fungsional ke dalam satu bahasa. Pendekatan mereka terhadap penyatuan paradigma sangat berbeda. Scala mencoba untuk menggabungkan dua paradigma menjadi satu (kita menyebutnya paradigma objek-fungsional), sedangkan F # menyediakan dua paradigma tersebut secara berdampingan. Sebagai contoh, tipe data aljabar dalam F # adalah konstruksi fungsional murni tanpa OO'ness di dalamnya sedangkan ADT di Scala masih kelas dan objek reguler. (Catatan: Dalam proses kompilasi ke bytecode CLR, bahkan F # ADTs menjadi kelas dan objek tetapi mereka tidak terlihat oleh programmer F # di tingkat sumber.)
F # memiliki inferensi tipe gaya Hindley-Milner penuh. Scala memiliki inferensi tipe parsial. Dukungan untuk subtyping dan murni-OO-ness membuat inferensi tipe gaya Hindley-Milner tidak mungkin untuk Scala.
Scala adalah bahasa yang jauh lebih minimalis daripada F #. Scala memiliki serangkaian konstruksi ortogonal yang sangat kecil yang digunakan kembali di seluruh bahasa. F # tampaknya memperkenalkan sintaks baru untuk setiap hal kecil, sehingga menjadi sangat sintaks dibandingkan dengan Scala. (Scala memiliki 40 kata kunci, sedangkan F # memiliki 97. Itu akan memberi tahu Anda sesuatu. :-)
F # menjadi bahasa Microsoft memiliki dukungan IDE yang sangat baik dalam bentuk Visual Studio. Hal-hal yang tidak begitu baik di sisi Scala. Plugin Eclipse masih belum sesuai standar. Sama berlaku untuk plugin NetBeans. IDEA tampaknya menjadi taruhan terbaik Anda saat ini, meskipun itu bahkan tidak mendekati apa yang Anda dapatkan dengan Java IDE. (Untuk penggemar Emacs, ada ENSIME. Saya telah mendengar banyak hal baik tentang paket ini, tetapi saya belum mencobanya.)
Scala memiliki sistem tipe yang jauh lebih kuat (dan kompleks) daripada F #.
Perbedaan lain:
Fungsi-fungsi F # diatur secara default. Dalam Scala, kari tersedia tetapi tidak sering digunakan.
Sintaksis Scala adalah campuran dari bahasa Jawa, ML Standar, Haskell, Erlang, dan banyak bahasa lainnya. Sintaks F # terinspirasi oleh orang-orang dari OCaml, C #, dan Haskell.
Scala mendukung jenis dan jenis kacamata yang lebih tinggi. F # tidak.
Scala jauh lebih bisa menerima DSL daripada F #.
PS: Saya suka Scala dan F #, dan berharap mereka menjadi bahasa utama di platform masing-masing di masa depan. :-)
sumber
Some(2)
dalam Scala memiliki tipeSome[Int]
dan bukanOption[Int]
IMO yang tidak diinginkan. F # di sisi lain lain memiliki sintaks khusus dan pengobatan untuk ADT, dan dengan demikian benar menyimpulkan jenisSome 2
sebagaiint option
. Jadi F # encoding ADT lebih baik daripada Scala (IMO, tentu saja). Saya tidak mencoba untuk menyiratkan bahwa itu lebih rendah, dan saya minta maaf jika itu terjadi seperti itu.sumber
Salah satu poin kecil namun penting adalah lisensi: Scala adalah BSD (cukup banyak lisensi perangkat lunak bebas yang paling permisif), F # dulunya adalah "perjanjian lisensi Sumber Penelitian Bersama Microsoft" tetapi merupakan produk komersial saat ini (menurut @Lorenzo di bawah, walaupun saya tidak dapat menemukan perjanjian lisensi yang lebih spesifik di manapun).
sumber