Pregunta:
Para incluir compatibilidad con Common Lisp, he visto ambos
(require 'cl)
y
(require 'cl-lib)
¿Cual es correcta? Según tengo entendido, el cl-lib
es el último de los dos, pero ¿es seguro usarlo solo?
Respuesta:
La primera es la biblioteca antigua, la segunda es la nueva.
El anterior define cosas como defstruct
, symbol-macrolet
, incf
, mientras que el segundo define en cambio cl-defstruct
, cl-symbol-macrolet
y cl-incf
.
El anterior está en desuso porque no obedece a la regla general de que los paquetes deben usar un "prefijo de paquete" para todas sus definiciones para tratar de evitar conflictos con otros paquetes. IOW, el anterior estropea el espacio de nombres, mientras que el nuevo tiene cuidado de usar solo identificadores que comienzan con cl-
.
Las versiones antiguas de Emacs solo vienen con cl
pero puede instalar el paquete de compatibilidad con versiones posteriores cl-lib
de GNU ELPA que usa internamente el cl
antiguo y simplemente reexporta las mismas definiciones con su nuevo nombre.
Las nuevas versiones de Emacs vienen con un cl-lib
real que no usa cl
internamente y en su lugar tienen un paquete de compatibilidad con versiones anteriores de cl
que usa internamente cl-lib
y simplemente reexporta las mismas definiciones con su nombre anterior.