Clojure è una scelta sbagliata per l'implementazione delle strutture dati?

-2

Sto pianificando di migliorare le mie conoscenze su Clojure e gli algoritmi allo stesso tempo implementando alcune strutture dati conosciute in Clojure (ad esempio liste collegate, skip list, filtro bloom, ecc.). Tuttavia, ho appreso di recente che questa potrebbe non essere una buona idea.

[... T]he fact that getting an optimized solution is so difficult should be a sign that's somethings wrong. In the ~2 years that I've been writing Clojure, I've never written my own basic structure. In most other languages, it's a very common exercise. In Clojure though, the lower level implementation of the structures used are best tucked away somewhere, and it's much more common to just use the basic structures of the language.

Questo è stato anche il modo in cui mi sono sentito mentre implementavo la lista collegata. Certo, lo so dato che questo è solo un esercizio e non un codice di produzione, non importa se il codice è ottimale o no, oppure esiste già una soluzione integrata o meno. D'altro canto, non vorrei perdere tempo in qualcosa che non ha senso.

So che questa domanda potrebbe essere contrassegnata come basata sull'opinione pubblica e quindi senza una risposta chiara. Tuttavia, immagino di aver chiesto: "L'assemblaggio è la scelta giusta per implementare la parte di back-end di una web-app media?". Anche se questa seconda domanda è anche "basata sull'opinione pubblica", non posso immaginare che la risposta sia "sì", (beh, tranne forse per un caso limite molto molto molto specifico). Ecco perché spero che anche la mia domanda abbia una risposta chiara si / no.

    
posta Attilio 17.03.2018 - 15:49
fonte

1 risposta

1

Le strutture dati tradizionali sono mutabili per loro natura. Li manipoli cambiando puntatori / riferimenti e modificando i loro contenuti. È difficile da fare in un linguaggio immutabile; in sostanza devi sostituire la struttura dati con una nuova.

La chiusura stessa non si attacca nemmeno all'immutabilità quando si utilizzano le proprie strutture dati interne:

Clojure data structures use mutation every time you call, e.g. assoc, creating one or more arrays and mutating them, before returning them for immutable use thereafter. The reason is performance - you simply can’t get as fast using only pure functions and immutable data.

La tua scelta, quindi, è scegliere una lingua diversa per l'apprendimento delle strutture di dati di base, o scriverle in uno stile immutabile, nella vena di Strutture dati puramente funzionali .

Ulteriori letture
Strutture dati transitorie

    
risposta data 17.03.2018 - 16:23
fonte

Leggi altre domande sui tag