Pregunta:
Comencé a usar emacs hace unos días y leí en alguna parte que (require 'package-name)
no es necesario cuando dicho paquete se instala usando package-install. Pero, ¿por qué, qué hace realmente (require 'package-name)
y en qué se diferencia de los procedimientos de load
o load-file
load
?
Respuesta:
Si load
una biblioteca repetidamente, ese archivo se leerá y su código se evaluará repetidamente (todas y cada una de las veces que lo cargue).
Si require
una biblioteca repetidamente, load
la biblioteca una vez (como máximo, y no en absoluto si la biblioteca ya se había cargado).
require
proporciona esta eficiencia incluso si require
no se usó para cargar la biblioteca inicialmente, porque (la gran mayoría de) las bibliotecas contienen el código (provide 'FEATURE)
para su nombre de FEATURE
particular. Ese código se evalúa cuando se carga la biblioteca, independientemente de cómo se cargó, y en ese momento actualiza los datos que require
verificaciones al decidir si necesita hacer algo.
Principalmente , desea utilizar require
en su propio código, si necesita asegurarse de que se haya cargado una biblioteca determinada.
La razón por la que a menudo no necesita hacer esto con los paquetes ELPA es que el administrador de paquetes procesa automáticamente las cookies de carga automática en el paquete y genera un archivo de cargas automáticas para ese paquete. Cuando se inicializa el sistema de paquetes al iniciar Emacs, se evalúa el archivo de carga automática para cada paquete, que identifica todas las funciones de carga automática. Cuando se llama a una función de carga automática, la biblioteca que contiene la definición real de la función se carga automáticamente.
Los autores de paquetes pueden agregar una cookie de carga automática a cada función que se espera que el usuario llame directamente y, por lo tanto, siempre que sus expectativas sean correctas, no necesitará llamar a require
o cargar explícitamente el paquete para usarlo.
Tenga en cuenta que también puede definir sus propias cargas automáticas personalizadas. Ver Ch g i (elisp) Autoload
RET y también (elisp) Hooks for Loading
si desea utilizar la costumbre perezosa de carga diferida y la configuración de las bibliotecas en su propia configuración. (El último para decir "no evalúe este código hasta que se haya cargado esta biblioteca", lo que se relaciona muy bien con el mecanismo de carga automática "no cargue esta biblioteca hasta que sea necesario").