P: ¿Por qué elisp no tiene espacios de nombres y cómo podríamos obtenerlos?
Elisp no tiene espacios de nombres que no sean el global, lo que ha llevado a la convención de codificación de prefijar todas las funciones, variables y constantes globales con un prefijo único.
Además del factor de molestia, también me parece un problema lento dado 1) el número cada vez mayor de grandes bibliotecas y paquetes, y 2) la existencia continua de funciones y variables heredadas que no respetan la convención de prefijo, o son lo suficientemente idiosincrásicos como para que no haya una buena opción de prefijo que puedan usar También significa que los intentos periódicos de racionalizar el código anterior (como con la transición de cl
a cl-lib
) es una cantidad de trabajo no trivial. (Aunque me alegro por la limpieza, todavía derramo una lágrima cada vez que escribo algo así cl-find
).
Fui hurgando para ver si podía descubrir por qué elisp todavía no tiene espacios de nombres después de algunas décadas de uso, pero me sorprendió un poco la modesta cosecha. La página wiki en espacios de nombres es bastante corta. Nic Ferrier tiene un tratamiento un poco más largo del problema, y también hay un hilo bastante reciente sobre emacs-devel . Hay un viejo subproceso de desbordamiento de pila de 2010 que analiza la posibilidad de usar macros para implementar espacios de nombres; otro ejemplo del enfoque macro se puede encontrar aquí . Hay al menos un par de implementaciones ( aquí y aquí , con una descripción de la última aquí), pero no han visto mucha actividad en un par de años, y no he encontrado ninguna biblioteca que las use.
Supongo que si agregar espacios de nombres fuera fácil, ya estaría hecho. Asi que:
- ¿Cuáles son las barreras técnicas para agregar espacios de nombres a elisp?
- ¿Agregar espacios de nombres rompería mucho código existente?
- ¿Es esta funcionalidad algo que debe ser orgánico para elisp (cambios en el propio intérprete), o podría realmente construirse en la parte superior a través de macros?