Pelo que entendi, require
é usado para carregar grandes pedaços de código (algo como módulos), embora também possa carregar funções individuais.
O carregamento automático, por outro lado, apenas registra funções e adia o carregamento para o tempo de execução.
Recentemente, li um artigo que defende o uso autoload
exclusivo de.
É melhor do autoload
que fazer require
? Quais são alguns casos de uso típicos para cada um deles?
autoload
erequire
desta pergunta. A adição de tagslibraries
foi boa, mas agora qualquer um que esteja pesquisando, usando tags, perguntas sobreautoload
ourequire
não encontrará essa. Essas são as duas funções importantes do Emacs-Lisp que as pessoas procurarão. Que pena. E pense em como realmente será útilelisp
elibraries
(especialmenteelisp
) útil para um site do Emacs: eles não distinguem muito no Emacsland, receio. (Mas não, eu não sou contra tê-los e usá-los.)autoload
erequire
acho que essas tags são justificadas. De fato, rotular essa pergunta [somente] comlibraries
é generalizada demais. Eu, pelo menos, usorequire
para acionar o carregamento do "my-foobar-cfg", que, como o nome sugere, contém apenas minha configuração, não uma biblioteca.Respostas:
autoload
não é um substituto pararequire
. Geralmenterequire
é usado para garantir que um determinado arquivo seja carregado.autoload
por outro lado, dá ao Emacs uma dica sobre qual arquivo encontrar uma determinada função sem carregá-lo imediatamente. Somente quando a função de carregamento automático é chamada, o arquivo correspondente é carregado.Basicamente,
autoload
você pode atrasar o carregamento de um arquivo inteiro para o momento em que você realmente precisa dele. É por isso que pacotes (especialmente grandes) geralmente definem suas funções de entrada comoautoload
s.Se você deseja fazer personalizações pesadas para um pacote, geralmente está sem sorte
autoload
. Se você ainda deseja evitarrequire
, pode adiar suas personalizações até depois que o arquivo tiver sido carregado usandoeval-after-load
.O manual do Emacs aborda esse tópico nas seguintes seções:
fonte
autoload
é (mais ou menos) fornecer definições de comandos, para que você possa usá-los.require
trata-se de disponibilizar tudo em uma biblioteca (e em bibliotecas que essa biblioteca exige, recursivamente). Há mais no Emacs do que comandos. (Mas sim, é claro que uma vez que um comando carregado automaticamente é chamado, toda a sua biblioteca é carregada.) #Em termos de inicialização do Emacs, não faça nenhuma escolha. O usuário do GitHub, jwiegley, possui a excelente macro de declaração de pacote de uso , que exigirá ou carregará automaticamente um pacote, conforme a necessidade. Melhor usado para adiar o carregamento de pacotes que podem ser carregados sob demanda.
fonte
Se você deseja que um determinado recurso seja carregado e esteja disponível diretamente quando o Emacs for iniciado, use require, caso contrário, use o carregamento automático. Pessoalmente, valorizo muito o tempo de inicialização (na verdade, reinicio o Emacs algumas vezes por semana, às vezes várias vezes por dia), então aceito que levará um pouco de tempo quando o Emacs carregar automaticamente uma determinada função quando necessário. Portanto, pense sobre o que você quer que esteja disponível diretamente após o Emacs ser iniciado e o que pode ser carregado quando necessário.
fonte