Z tego, co rozumiem, require
służy do ładowania dużych fragmentów kodu (coś w rodzaju modułów), chociaż może również ładować poszczególne funkcje.
Z drugiej strony autoload, rejestruje tylko funkcje i odkłada ładowanie do czasu wykonania.
Niedawno przeczytałem artykuł, który zaleca stosowanie autoload
wyłącznie.
Czy to jest lepsze autoload
niż require
? Jakie są typowe przypadki użycia dla każdego z nich?
autoload
irequire
z tego pytania. Dodanie tagulibraries
było w porządku, ale teraz każdy, kto szuka, używając tagów, pytańautoload
lubrequire
nie znajdzie tego. Są to ważne funkcje Emacsa-Lispa, których ludzie będą szukać. Szkoda I pomyślcie, jak pomocneelisp
ilibraries
(szczególnieelisp
) będą naprawdę w praktyce dla strony Emacs: obawiam się, że nie rozróżniają wiele w Emacsland. (Ale nie, nie jestem przeciwny ich posiadaniu i używaniu.)autoload
irequire
myślę, że te tagi są uzasadnione. W rzeczywistości nazywanie tego pytania [tylko]libraries
zbytnim uogólnieniem. Dla jednego użyciarequire
wyzwalam ładowanie „my-foobar-cfg”, który, jak sama nazwa wskazuje, zawiera tylko moją konfigurację, a nie bibliotekę.Odpowiedzi:
autoload
nie zastępujerequire
. Zwyklerequire
służy do upewnienia się, że określony plik jest załadowany.autoload
z drugiej strony daje Emacsowi wskazówkę, w którym pliku znaleźć daną funkcję bez ładowania pliku od razu. Odpowiedni plik jest ładowany tylko wtedy, gdy wywołana jest funkcja automatycznego ładowania.Zasadniczo
autoload
możesz opóźnić ładowanie całego pliku do momentu, w którym rzeczywiście go potrzebujesz. Dlatego (szczególnie duże) pakiety zwykle definiują swoje funkcje wejścia jakoautoload
s.Jeśli chcesz dokonać ciężkich dostosowań pakietu, zwykle nie masz szczęścia
autoload
. Jeśli nadal chcesz tego uniknąćrequire
, możesz odroczyć dostosowania do momentu załadowania pliku za pomocąeval-after-load
.Podręcznik Emacsa obejmuje ten temat w następujących sekcjach:
źródło
autoload
jest (mniej więcej) o dostarczaniu definicji poleceń, abyś mógł ich używać.require
polega na udostępnianiu wszystkiego w bibliotece (i w bibliotekach, których wymaga biblioteka rekurencyjnie). Emacs to coś więcej niż komendy. (Ale tak, oczywiście po uruchomieniu autoloadera cała biblioteka jest ładowana.)Jeśli chodzi o inicjalizację Emacsa, nie dokonuj wyboru. Użytkownik GitHub, jwiegley, ma doskonałe makro deklaracji use-package , które będzie wymagało lub automatycznie ładowało pakiet zgodnie z potrzebą. Najlepiej stosować, aby odłożyć ładowanie pakietów, które można ładować na żądanie.
źródło
Jeśli chcesz, aby pewna funkcja była ładowana i dostępna bezpośrednio po uruchomieniu Emacsa, użyj opcji wymaganej, w przeciwnym razie użyj funkcji automatycznego ładowania. Osobiście bardzo cenię czas uruchamiania (faktycznie uruchamiam ponownie Emacsa kilka razy w tygodniu, czasem kilka razy dziennie), więc zgadzam się, że zajmie to trochę czasu, gdy Emacs automatycznie załaduje określoną funkcję, gdy jej potrzebuję. Pomyśl więc o tym, co chcesz być dostępne bezpośrednio po uruchomieniu Emacsa i co można załadować w razie potrzeby.
źródło