Pencocokan pola di Clojure vs Scala

12

Apa perbedaan utama antara pencocokan pola dalam dua bahasa ini? Saya tidak mengacu pada sintaks, tetapi kemampuan, detail implementasi, berbagai kasus penggunaan dan kebutuhan.

Aplikasi scala (mis. Angkat dan Mainkan) berbicara dengan bangga tentang kecakapan pencocokan pola bahasa. Clojure, di sisi lain memiliki perpustakaan, core.match, dan dibangun dalam perusakan, yang juga tampak kuat.

* catatan: Alasan saya terilhami untuk mengajukan pertanyaan ini adalah karena posting blog yang saya lihat di mana seorang programmer, sebagai percobaan, membangun juru bahasa dengan menggunakan Scala dan Clojure. Dia mengatakan bahwa pertandingan Clojure pecah setelah jangka waktu tertentu, tetapi tidak bisa menjelaskan mengapa, tetapi saya benar-benar ingin tahu. Anda dapat menemukan posting ini di sini: http://www.janvsmachine.net/2013/09/writing-simple-lisp-interpreter-in-clojure.html

kurofune
sumber
3
@gnat Posting blog sepertinya sangat kebetulan. Sepertinya saya dia tidak terlalu peduli dengan penjelasan blog itu sendiri, hanya perbandingan bagaimana fitur bahasa tertentu berbeda di dua bahasa tertentu. Bukankah itu secara objektif dapat dijawab?
Doval
3
Dalam membela pertanyaan ini: itu obyektif, ditulis dengan baik, dan jelas. Mengapa OP membaca blog sebelum memposting pertanyaan ini? Itu tidak mengubah kualitas pertanyaan.
1
Ini bukan Gorilla vs Shark karena dia meminta informasi yang sangat spesifik pada satu fitur yang sangat spesifik yang umum untuk kedua bahasa, bahkan jika itu mungkin diterapkan secara berbeda di keduanya. Ini adalah pertanyaan yang jauh lebih fokus daripada Gorilla vs Shark.
Evicatos
1
Sepakat. Gorilla vs Shark adalah tentang membandingkan dua hal yang tidak ada bandingannya, seperti apel dan jeruk. Membandingkan implementasi fitur dalam dua bahasa bukanlah Gorilla vs Shark. Ini spesifik, relevan, dan jenis pertanyaan yang diminati para ahli. Ini bukan hanya pertanyaan "bantu saya memilih bahasa".
Karl Bielefeldt
1
Alasan saya menyebutkan blog adalah untuk melengkapi pemahaman Anda tentang apa yang memotivasi saya untuk mengajukan pertanyaan. Saya pikir itu akan menjadi catatan kaki yang baik untuk pertanyaan saya yang sebenarnya. Saya menjelaskan beberapa sehingga Anda tidak perlu membacanya sendiri, tetapi menyertakan tautan jika Anda melakukannya. Saya pikir * dan "note:" membuatnya cukup jelas, tapi saya kira saya harus menambahkan beberapa tanda kurung dan garis garis juga. PS: hiu.
kurofune

Jawaban:

21

Dalam video ini yang saya tonton baru-baru ini, Rich Hickey berkomentar bahwa dia menyukai bagian yang merusak dari bahasa seperti Scala, tetapi tidak terlalu banyak bagian yang cocok dengan pola, dan dia mendesain Clojure dengan tepat. Itu mungkin menjelaskan mengapa pencocokan pola ada di perpustakaan dan tidak sekuat itu, meskipun jenis masalah yang terlihat di pos yang Anda sebutkan jelas adalah bug.

Apa yang dikatakan Rich Hickey sebagai alternatif dari pencocokan pola adalah beberapa metode . Sebagian besar bahasa memungkinkan Anda melakukan pengiriman polimorfik berdasarkan jenis. Beberapa bahasa juga memungkinkan Anda melakukannya berdasarkan nilai. Menggunakan multimethods, Clojure memungkinkan Anda melakukannya berdasarkan fungsi sewenang-wenang. Itu konsep yang sangat kuat.

Turun ke prinsip bahwa programmer menggunakan bahasa harus menggunakan idiom terbaik bahasa sendiri. Mencoba untuk menulis kode seperti Scala di Clojure akan mengalami kesulitan, dan sebaliknya.

Karl Bielefeldt
sumber
Terima kasih atas jawaban yang sangat menarik untuk pertanyaan saya. Saya tidak pernah memikirkan multi-metode dengan cara itu! Sepertinya itu akan berlebihan untuk tugas-tugas sederhana tetapi pasti kuat. Saya setuju dengan apa yang Anda katakan tentang idiom juga. Saya tidak sabar untuk memahami hal itu di Clojure :)
kurofune
Terima kasih atas jawaban ini. Video yang ditautkan menyebutkan pencocokan pola ketika Rich mengatakan "Jika Anda memiliki kecemburuan pencocokan pola, ini setengah dari itu, kecuali bagian yang tidak saya sukai, yang merupakan bagian kondisional." github.com/matthiasn/talk-transcripts/pull/90/files#
Hawkeye