Clojure 1.7 è l'ultimo aggiornamento del noto dialetto di Lisp in grado di interagire con le librerie per il linguaggio Java e di funzionare su Virtual Machine, decine di contributors hanno partecipato all'implementazione di questa nuova versione che presenta, tra le novità più rilevanti, i transducers, il supporto per i reader conditionals e una nuova estensione per i file.
Ricercando una definizione semplice e comprensibile, è possibile definire un transducer come una trasformazione da una funzione di riduzione ad un’altra o come l’algoritmo che determina tale trasformazione, dove per funzione di riduzione si intende una funzione che prende in consegna il risultato di un’accumulazione e un nuovo input restituendo un nuovo risultato di un’accumulazione; tra i vantaggi dei transducers vi è il fatto che essi non dipendono dal contesto di input a cui sono associati.
Come anticipato Clojure 1.7 introduce una nuova estensione per i file, essa è stata concepita per la gestione delle librerie e delle applicazioni che, sulla base di un singolo codebase, sono orientate verso più di una piattaforma Clojure, capita infatti spesso che porzioni di codice possano essere platform-specific; tale estensione, .cljc
potrà essere utilizzata per il caricamento tramite Clojure e ClojureScript nonché in altre tipologie di piattaforme.
Sostanzialmente l'idea alla base di tale feature dovrebbe essere quella di gestire in sorgenti platform-specific isolando il codice all'interno di set minimali di namespaces con i quali mettere a disposizione delle versioni compatibili di questi ultimi.
Per quanto riguarda i reader conditionals, essi sarebbero stati introdotti nella più recente release di Clojure per la risoluzione di una problematica correlata a quella che ha portato alla concezione dei .cljc
; la presenza di numerosi dialetti, Clojure, ClojureScript, ClojureCLR.., ospitati in piattaforme differenti, avrebbe portato alla necessità di fornire delle librerie che semplificassero le operazioni per la condivisione di codice portabile.
Via Cognitect