Che cosa c'è di così fantastico in Clojure? [chiuso]

40

Recentemente ho dato un'occhiata a Clojure e mi sono imbattuto in questo post su Stackoverflow indica alcuni progetti che seguono le migliori pratiche e un buon codice Clojure. Volevo capire la lingua dopo aver letto alcuni tutorial di base, quindi ho dato un'occhiata ad alcuni progetti "reali".

Dopo aver esaminato ClojureScript e Compojure (due dei già citati progetti" buoni "), mi sento come se Clojure fosse uno scherzo. Non capisco perché qualcuno dovrebbe scegliere Clojure per dire, Ruby o Python, due lingue che amo e avere una sintassi così pulita e sono molto facili da cogliere mentre Clojure usa parentesi e simboli così tanto ovunque che rovini la leggibilità per me.

Penso che Ruby e Python siano belli, leggibili ed eleganti. Sono facili da leggere anche per chi non conosce la lingua dentro e fuori. Tuttavia, Clojure è opaco per me e mi sento come se dovessi conoscere ogni piccolo dettaglio dell'implementazione del linguaggio per essere in grado di capire qualsiasi codice.

Quindi per favore, mi illumini!

  • Cosa c'è di buono in Clojure?
  • Qual è il minimo assoluto che dovrei sapere sulla lingua per apprezzarla?
posta marco-fiset 11.12.2012 - 22:09
fonte

3 risposte

46

Per lo sfondo che hai dato, se posso parafrasare:

  1. Conosciamo Ruby / Python.
  2. Non vedi ancora i vantaggi di Clojure.
  3. Non trovi la sintassi Lisp o Clojure chiara.

... Penso che la risposta migliore sia leggere il libro Clojure Programming di Emerick, Carper e Grand. Il libro ha numerosi confronti di codice espliciti con Python, Ruby e Java e ha spiegazioni di testo che indirizzano i programmatori da quelle lingue. Personalmente, sono venuto a Clojure dopo aver realizzato progetti di buone dimensioni con Python e avendo avuto qualche esperienza in Lisp; leggere quel libro mi ha aiutato a convincermi ad iniziare a usare Clojure non solo nei progetti collaterali, ma per fini professionali.

Per indirizzare direttamente le tue due domande:

  1. Cosa c'è di buono in Clojure? Un sacco di risposte su questo sito e altrove, ad es. vedi link
  2. Qual è il minimo assoluto che dovrei sapere sulla lingua per apprezzarla? Suggerirei di conoscere le grandi idee dietro il design di Clojure, articolate in entrambe Programmazione Clojure e The Joy of Clojure per quanto riguarda i libri, e nei colloqui di Rich Hickey, esp. il discorso Semplice semplificato . Una volta che conosci cosa / perché puoi iniziare a capire il come durante la lettura del codice Clojure, esp. come cambiare il tuo pensiero da classi, oggetti, stato / mutazione a "solo funzioni e dati" (funzioni di ordine superiore, mappe / insiemi / sequenze, tipi).

Ulteriori suggerimenti: l'eleganza e il potere di Lisp sono in parte dovuti alla sua sintassi minimalista e assolutamente coerente. È molto più facile apprezzarlo con un buon editor, ad es. Emacs con modalità clojure e ParEdit. Man mano che ci si familiarizza, la sintassi si attenua e si "vedono" la semantica, le intenzioni e le astrazioni concise. In secondo luogo, non iniziare leggendo il sorgente per ClojureScript o Compojure, quelli sono troppo-a-una-volta; prova alcuni problemi di 4clojure.org e confronta le soluzioni con i migliori programmatori presenti. Se vedete 4-6 altre soluzioni, invariabilmente qualcuno avrà scritto una soluzione di stile FP veramente idiomatica, succinta, che potete confrontare con una soluzione di stile imperativo complicata, prolissa e inutilmente complicata.

    
risposta data 12.12.2012 - 01:58
fonte
20

I dialetti Lisp hanno una nicchia unica a causa della loro semplice sintassi. Questa semplice sintassi semplifica la meta-programmazione attraverso l'uso di macro. Ciò consente di modellare la lingua per adattarla al dominio del problema anziché alla modellazione per adattarla al dominio del problema nella tua lingua. È davvero fantastico una volta che hai capito e ti permette di fare molte cose facilmente che sono molto difficili in altre lingue.

Il rovescio della medaglia è che poiché ogni programma Lisp definisce essenzialmente il proprio linguaggio, è davvero necessario avere una solida conoscenza delle cose per capire cosa sta succedendo.

Ora, per rispondere alle tue domande ...

  1. Clojure è un dialetto Lisp moderno che viene eseguito in JVM / CLR. Ciò semplifica l'utilizzo della potenza di Lisp in un'infrastruttura esistente.

  2. È essenziale capire come utilizzare le macro per creare Lisp nel dominio del problema per apprezzarne l'utilizzo. L'ho capito solo dopo aver implementato un runtime Lisp, quando ho scoperto che molte delle funzionalità del linguaggio di base possono essere implementate facilmente in Lisp stesso. Ci vuole un progetto di dimensioni giuste per ottenere questo.

A parte i vantaggi, anche se è divertente programmarlo, personalmente non ho molti casi in cui mi rivolgerei ad esso per problemi quotidiani. È un ottimo strumento per imparare l'espansione della mente e, dopo aver appropriatamente appreso il Lisp, è diventato molto più naturale trarre vantaggio dalle strutture di meta-programmazione in altre lingue.

La semplice sintassi rende facile l'interpretazione da parte dei computer (consentendo così macro facili e potenti), ma rende molto difficile per un essere umano analizzare rapidamente espressioni complesse.

    
risposta data 11.12.2012 - 22:32
fonte
10

I punti di forza di Clojure sono stati evidenziati molte volte e, abbastanza sicuro, rappresentano un linguaggio molto potente, quindi non li ripeterò più qui.

Ho sempre amato la libertà vocale, sin dai tempi dell'università e sono stato davvero entusiasta quando ho scoperto Clojure (forse la possibilità di usare la chiarezza al di fuori del mondo accademico finalmente!). Tuttavia, quando ho iniziato a imparare, ho iniziato a insinuarsi una sensazione di disagio, anche se non riesco a individuare esattamente ciò che non mi piace. Prima di tutto, direi che la codifica in Common lisp è stata facile e divertente per me, ma Clojure ha una curva di apprendimento più ripida. Clisp aveva una certa bellezza ed eleganza. Non sono sicuro che otterrò la stessa sensazione da Clojure. Mi chiedo se quella sensazione scomparirà quando avrò più esperienza.

Ho un'altra ipotesi per la mia misteriosa leggera repulsione. Penso che potrebbe essere la sua grande flessibilità. Ad esempio puoi avere strutture metà vettoriale e metà mappa e con pochi caratteri di codice puoi accettarle come parametri, separarle e elaborarle correttamente. Sì, rimuove tutto il boilerplate, ma in qualche modo non sembra giusto. È come se tu non sapessi mai molto bene che le regole sotto tutte quelle parentesi, due punti, parentesi, ecc. Sono operative.

Per quanto mi riguarda, amo ancora il linguaggio per tutti i suoi vantaggi (in primo luogo, l'esecuzione in JVM e la semplificazione della concorrenza, pur essendo molto più potente e conciso di Java e con difetti di progettazione meno evidenti) ma la giuria è ancora fuori se qualcosa avrebbe potuto essere migliorato.

    
risposta data 11.12.2012 - 23:15
fonte

Leggi altre domande sui tag