Corrispondenza del modello in Clojure vs Scala


12

Quali sono le differenze chiave tra la corrispondenza dei modelli in queste due lingue? Non mi riferisco alla sintassi, ma alla capacità, ai dettagli di implementazione, alla gamma di casi d'uso e alle necessità.

Le applicazioni Scala (ad es. Lift and Play) parlano con orgoglio delle abilità di adattamento dei pattern linguistici. Clojure, d'altra parte, ha una libreria, core.match e costruito in destrutturazione, che sembra anche potente.

* nota: il motivo per cui sono stato ispirato a porre questa domanda è a causa di un post sul blog che ho visto in cui un programmatore, come esperimento, ha costruito un interprete lisp usando sia Scala che Clojure. Ha detto che le partite di Clojure si sono interrotte dopo un certo periodo, ma non sono riuscito a spiegarne il motivo, ma sono davvero curioso di saperlo. Puoi trovare questo post qui: http://www.janvsmachine.net/2013/09/writing-simple-lisp-interpreter-in-clojure.html


3
@gnat Il post sul blog sembra davvero fortuito. Mi sembra che non gli interessi davvero una spiegazione al blog di per sé, ma solo un confronto di come una particolare caratteristica della lingua differisce tra due lingue specifiche. Non è obiettivamente rispondente?
Doval,

3
A difesa di questa domanda: è oggettivo, ben scritto e chiaro. Perché è importante che l'OP legga un blog prima di pubblicare questa domanda? Ciò non cambia la qualità della domanda.

1
Questo non è Gorilla vs. Shark perché sta chiedendo informazioni molto specifiche su una caratteristica molto specifica che è comune ad entrambe le lingue, anche se potrebbe essere implementata diversamente in entrambe. Questa è una domanda molto più mirata di Gorilla vs. Shark.
Evicatos,

1
Concordato. Gorilla vs. Shark riguarda il confronto tra due cose incomparabili, come mele e arance. Confrontare le implementazioni di una funzionalità in due lingue non è Gorilla vs. Shark. È specifico, pertinente e il tipo di domanda a cui gli esperti sono interessati. Non è solo una domanda "aiutami a scegliere una lingua".
Karl Bielefeldt,

1
Il motivo per cui ho menzionato il blog è stato quello di completare la tua comprensione di ciò che mi ha motivato a porre la domanda. Ho pensato che sarebbe stata una buona nota a fondo alla mia vera domanda. Ne ho spiegato alcuni in modo da non doverlo leggere da soli, ma ho incluso un link nel caso lo avessi fatto. Ho pensato che * e "note:" lo rendessero abbastanza chiaro, ma credo che avrei dovuto aggiungere anche alcune parentesi e una linea di trattini. PS: squali.
Kurofune,

Risposte:


21

In questo video che ho visto di recente, Rich Hickey commenta che gli piace la parte destrutturante di lingue come Scala, ma non tanto la parte corrispondente al modello, e ha progettato Clojure di conseguenza. Questo probabilmente spiega perché la corrispondenza del modello è in una libreria e non così robusta, anche se il tipo di problemi visti nel post che hai citato sono chiaramente dei bug.

Ciò che Rich Hickey menziona come un'alternativa alla corrispondenza dei pattern sono i multimetodi . La maggior parte delle lingue ti consente di effettuare spedizioni polimorfiche in base al tipo. Alcune lingue ti consentono anche di farlo in base a un valore. Utilizzando multimetodi, Clojure ti consente di farlo in base a qualsiasi funzione arbitraria. È un concetto abbastanza potente.

Dipende dal principio che i programmatori che usano una lingua dovrebbero usare i migliori modi di dire della lingua. Cercare di scrivere codice simile alla Scala in Clojure avrà delle difficoltà, e viceversa.


Grazie per una risposta molto interessante alla mia domanda. Non ho mai pensato ai multi-metodi in quel modo! Sembra che sarebbe eccessivo per compiti semplici ma sicuramente potente. Sono d'accordo con quello che hai detto anche sul linguaggio. Non vedo l'ora di
capirlo

Grazie per questa risposta Il video collegato menziona la corrispondenza dei modelli quando Rich dice "Se hai invidia per la corrispondenza dei modelli, questa è la metà, tranne la parte di ciò che non mi piace, che è la parte condizionale". github.com/matthiasn/talk-transcripts/pull/90/files#
hawkeye
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.