Di permukaan Groovy dan Scala terlihat sangat mirip, selain dari Scala yang diketik secara statis, dan Groovy dinamis.
- Apa perbedaan utama lainnya, dan keunggulan masing-masing dari yang lain?
- Seberapa mirip mereka sebenarnya?
- Apakah ada persaingan di antara keduanya?
- Jika demikian, menurut Anda siapa yang akan menang dalam jangka panjang?
Jawaban:
Mereka berdua bahasa berorientasi objek untuk JVM yang memiliki lambdas dan penutupan dan beroperasi dengan Jawa. Selain itu, mereka sangat berbeda.
Groovy adalah bahasa "dinamis" tidak hanya dalam arti bahwa ia diketik secara dinamis tetapi juga mendukung pemrograman meta dinamis.
Scala adalah bahasa "statis" yang diketik secara statis dan hampir tidak memiliki pemrograman meta dinamis di luar hal-hal aneh yang dapat Anda lakukan di Jawa. Catatan, sistem tipe statis Scala secara substansial lebih seragam dan canggih daripada Java.
Groovy secara sintaksis dipengaruhi oleh Java tetapi secara semantik lebih dipengaruhi oleh bahasa-bahasa seperti Ruby.
Scala secara sintaksis dipengaruhi oleh Ruby dan Java. Secara semantik lebih dipengaruhi oleh Java, SML, Haskell, dan bahasa OO yang sangat tidak jelas yang disebut gBeta.
Groovy memiliki beberapa pengiriman "tidak disengaja" karena cara menangani kelebihan beban Java.
Scala hanya merupakan pengiriman tunggal, tetapi memiliki pencocokan pola yang diilhami SML untuk menangani beberapa jenis masalah yang sama yang ingin ditangani oleh banyak pengiriman. Namun, di mana beberapa pengiriman hanya dapat mengirim pada jenis runtime, pencocokan pola Scala dapat mengirimkan pada jenis runtime, nilai, atau keduanya. Pencocokan pola juga termasuk pengikatan variabel yang menyenangkan secara sintaksis. Sulit untuk menekankan betapa menyenangkannya fitur tunggal ini membuat pemrograman di Scala.
Baik Scala maupun Groovy mendukung suatu bentuk pewarisan berganda dengan mixin (meskipun Scala menyebutnya sebagai sifat).
Scala mendukung aplikasi fungsi parsial dan kari di tingkat bahasa, Groovy memiliki metode "curry" yang canggung untuk melakukan aplikasi fungsi parsial.
Scala melakukan optimasi rekursi ekor langsung. Saya tidak percaya Groovy. Itu penting dalam pemrograman fungsional tetapi kurang penting dalam pemrograman imperatif.
Baik Scala dan Groovy dengan penuh semangat dievaluasi secara default. Namun, Scala mendukung parameter panggilan-dengan-nama. Groovy tidak - panggilan-dengan-nama harus ditiru dengan penutupan.
Scala memiliki "untuk pemahaman", sebuah generalisasi dari pemahaman daftar yang ditemukan dalam bahasa lain (secara teknis mereka adalah pemahaman monad ditambah sedikit - di suatu tempat antara yang dilakukan Haskell dan C #'s LINQ).
Scala tidak memiliki konsep bidang "statis", kelas dalam, metode, dll - ia menggunakan objek tunggal. Groovy menggunakan konsep statis.
Scala tidak memiliki built in pemilihan operator aritmatika dengan cara yang Groovy lakukan. Di Scala Anda dapat menyebutkan metode dengan sangat fleksibel.
Groovy memiliki operator elvis untuk menangani null. Pemrogram Scala lebih suka menggunakan jenis Opsi daripada menggunakan nol, tetapi mudah untuk menulis operator elvis di Scala jika Anda mau.
Akhirnya, ada kebohongan, ada kebohongan, dan kemudian ada tolok ukur. Game tolok ukur bahasa komputer memberi peringkat Scala sebagai antara jauh lebih cepat dari Groovy (mulai dari dua kali hingga 93 kali lebih cepat) sambil mempertahankan ukuran sumber yang kira-kira sama. tolok ukur .
Saya yakin ada banyak, banyak perbedaan yang belum saya bahas. Tapi mudah-mudahan ini memberi Anda inti.
Apakah ada persaingan di antara mereka? Ya, tentu saja, tetapi tidak sebanyak yang Anda kira. Persaingan nyata Groovy adalah JRuby dan Jython.
Siapa yang akan menang? Bola kristalku retak seperti milik orang lain.
sumber
scala dimaksudkan sebagai bahasa hibrida fungsional / fungsional dan sangat terencana dan dirancang dengan baik. groovy lebih mirip seperangkat perangkat tambahan yang banyak orang ingin menggunakan di java. saya melihat lebih dekat pada keduanya, jadi saya bisa tahu :)
tak satu pun dari mereka yang lebih baik atau lebih buruk daripada yang lain. groovy sangat pandai dalam meta-pemrograman, scala sangat bagus dalam segala hal yang tidak perlu meta-pemrograman, jadi ... saya cenderung menggunakan keduanya.
sumber
Scala memiliki Aktor, yang membuat konkurensi lebih mudah diimplementasikan. Dan Ciri-ciri yang memberikan pewarisan berganda yang benar dan aman.
sumber
Anda telah memukul paku di kepala dengan pengetikan statis dan dinamis. Keduanya adalah bagian dari generasi baru bahasa dinamis, dengan penutup, ekspresi lambda, dan sebagainya. Ada beberapa perbedaan sintaksis antara keduanya juga, tetapi secara fungsional, saya tidak melihat perbedaan besar antara Groovy dan Scala.
Scala mengimplementasikan Daftar sedikit berbeda; di Groovy, hampir semuanya adalah turunan dari java.util.List, sedangkan Scala menggunakan Daftar dan array primitif. Groovy memiliki (saya pikir) interpolasi string yang lebih baik.
Scala memang lebih cepat, tetapi orang-orang Groovy benar-benar mendorong kinerja untuk rilis 2.0. 1.6 memberikan lompatan besar dalam kecepatan selama seri 1.5.
Saya tidak berpikir bahwa kedua bahasa akan benar-benar 'menang', karena mereka menargetkan dua kelas masalah yang berbeda. Scala adalah bahasa berkinerja tinggi yang sangat mirip Java tanpa memiliki level boilerplate yang sama dengan Java. Groovy adalah untuk pembuatan prototipe dan pengembangan yang cepat, di mana kecepatan kurang penting daripada waktu yang dibutuhkan bagi programmer untuk mengimplementasikan kode.
sumber
Scala memiliki kurva belajar yang jauh lebih curam daripada Groovy. Scala memiliki lebih banyak dukungan untuk pemrograman fungsional dengan pencocokan pola dan rekursi berbasis ekor, yang berarti lebih banyak alat untuk FP murni.
sumber
Scala juga memiliki kompilasi dynamica dan saya telah melakukannya menggunakan twitter eval lib ( https://github.com/twitter/util ). Saya menyimpan kode scala dalam file datar (tanpa ekstensi apa pun) dan menggunakan eval yang dibuat kelas scala pada saat run time. Saya akan mengatakan scala adalah pemrograman meta dan memiliki fitur komplikasi dinamis
sumber