D: Perché elisp non ha spazi dei nomi e come possiamo ottenerli?
Elisp non ha spazi dei nomi diversi da quello globale, il che ha portato alla convenzione di codifica del prefisso di tutte le funzioni, variabili e costanti globali con un prefisso univoco.
A parte il fattore di fastidio, mi sembra anche un problema lento dato 1) il numero in continua espansione di grandi librerie e pacchetti e 2) la continua esistenza di funzioni e variabili legacy che non rispettano la convenzione del prefisso, oppure sono sufficientemente idiosincratici da non poter utilizzare una buona opzione di prefisso. Significa anche che i tentativi periodici di razionalizzare il codice più vecchio (come con la transizione da cl
a cl-lib
) è una quantità non banale di lavoro. (Anche se sono contento per la pulizia, verso ancora una lacrima ogni volta che scrivo qualcosa del genere cl-find
).
Sono andato in giro per vedere se potevo scoprire perché Elisp non ha ancora spazi dei nomi dopo alcuni decenni di utilizzo, ma sono rimasto un po 'sorpreso dal raccolto modesto. La pagina wiki sugli spazi dei nomi è piuttosto breve. Nic Ferrier ha un trattamento leggermente più lungo del problema e c'è anche un thread abbastanza recente su emacs-devel su di esso. C'è un vecchio thread Stack Overflow del 2010 che discute la possibilità di usare macro per implementare spazi dei nomi; un altro esempio di approccio macro può essere trovato qui . Ci sono almeno un paio di implementazioni ( qui e qui , con una descrizione di quest'ultima qui) là fuori, ma non vedono molta attività da un paio d'anni e non ho incontrato nessuna biblioteca che li utilizza.
Presumo che, se l'aggiunta di spazi dei nomi fosse facile, sarebbe già stato fatto. Così:
- Quali sono gli ostacoli tecnici all'aggiunta di spazi dei nomi a elisp?
- L'aggiunta di spazi dei nomi spezzerebbe molto il codice esistente?
- Questa funzionalità è qualcosa che deve essere organico da elisp (modifiche all'interprete stesso) o potrebbe davvero essere costruita in cima tramite macro?