2013-04-07 14 views
9

Sono relativamente nuovo a Clojure ma ho notato che molti progetti implementano uno spazio dei nomi "core"; per esempio. foobar.core sembra essere un modello molto comune. Qual è la storia alla base di questo e perché è lo standard di fatto?Da dove deriva la nomenclatura dello spazio dei nomi "core"?

+0

Probabilmente solo seguendo la convenzione 'clojure.core'. Tuttavia, Stuart Sierra e altri sono in outsourcing su ogni libreria (e sui progetti predefiniti di Leiningen) che abusano di 'Whatever.core'. – noahlz

+10

Suggerimento: 'lein new foo.bar' creerà' foo/bar' piuttosto che 'bar/core'. – vemv

+0

@noahz hai un link? Sono curioso di leggere le opinioni di Stuart su questo. – maxcountryman

risposta

2

È solo un nome generico che rappresenta la funzionalità "principale" di qualcosa. Le funzioni principali di Clojure definiscono un linguaggio di programmazione generico, con funzioni molto generiche che potrebbero essere necessarie in molti domini di problemi diversi. Le funzioni applicabili solo a un dominio problematico specifico si trovano in spazi dei nomi specifici del dominio, ad esempio clojure.string o clojure.set.

Strumenti come Leiningen non possono sapere a priori che tipo di programma che si sta cercando di scrivere, in modo che si imposta con un foo/core namespace di default, sul modello clojure.core - clojure.core è la funzionalità di base di Clojure, così foo.core è la funzionalità principale di foo.

Se si può dare il vostro core namespace un nome meno generico, o semplicemente usare foo/core per dare il via bootstrapping (come ad esempio tenendo la funzione -main), che è incoraggiato, in modo che la maggior parte del codice risiederà in più semanticamente significative spazi dei nomi invece. Questo ti aiuta a trovare il codice specifico su cui vuoi lavorare in seguito.