require 대신 autoload를 언제 사용해야합니까?


30

내가 이해 한 바에 require따르면 개별 함수를로드 할 수도 있지만 모듈과 같은 큰 코드 덩어리를로드하는 데 사용됩니다.

다른 쪽의 자동로드는 기능 만 등록 하고로드를 실행 시간으로 연기합니다.

최근 에 독점적으로 사용을 주장 하는 기사 를 읽었습니다 autoload.

하는 autoload것보다 낫 require습니까? 이들 각각에 대한 일반적인 사용 사례는 무엇입니까?


3
@Gilles는 : FWIW, 나는 당신의 필요를 제거 태그에 동의 autoload하고 require이 문제에서. 태그 libraries를 추가하는 것은 좋지만 이제 태그를 사용하여 태그를 검색 autoload하거나 require찾는 사람은 없습니다. 그것들은 사람들이 검색 할 중요한 Emacs-Lisp 기능입니다. 너무 나쁘다. 그리고 Emacs 사이트에 실제로 얼마나 도움이 elisp되고 libraries(esp. elisp) 실제로 적용 되는지 생각 하십시오. Emacsland에서는 크게 구별되지 않습니다. (그러나, 나는 그들을 가지고 사용하는 것에 반대하지 않습니다.)
Drew

@Drew 적용 가능한 메타 토론으로 갑니다. 이 일반적인 원칙이 여기에 적용되지 않는다고 생각되면 메타에서 올리십시오.
Gilles 'SO- 악마 그만'

1
@ 질 : 완료 . 예, 나는 그것을 읽고 아마도 그것이 당신에게 동기를 부여한 것이라고 생각했습니다. 나는 많은 일반적인 원칙에 동의하지 않습니다. 그렇다고 담요로 그들을 따르는 것이 항상 TRT라는 것을 의미하지는 않습니다.
Drew

2
이 질문에 대한 사용 사례를 구별에 대해 구체적이기 때문에 : 나는 드류에 동의 autoload하고 require나는 그 태그 정당화 생각합니다. 실제로이 질문에 [단지]로 레이블을 지정하면 libraries지나치게 일반화됩니다. require이름에서 알 수 있듯이 라이브러리가 아닌 내 구성 만 포함하는 "my-foobar-cfg"의로드를 트리거 하기 위해 한 번 사용 했습니다 .
파프리카

답변:


28

autoload의 대체품이 아닙니다 require. 일반적으로 require특정 파일이로드되었는지 확인하는 데 사용됩니다. autoload반면에 Emacs 는 파일을 즉시로드 하지 않고 주어진 함수를 찾을 수있는 힌트를 제공합니다 . 자동로드 된 함수가 호출 될 때만 해당 파일이로드됩니다.

기본적으로 autoload전체 파일의 로딩을 실제로 필요할 때 지연시킬 수 있습니다. 이것이 (특히 큰) 패키지가 일반적으로 엔트리 함수를 autoloads 로 정의하는 이유 입니다.

패키지에 대해 많은 사용자 정의를 수행하려는 경우 일반적으로 운이 좋지 않습니다 autoload. 그래도 계속 피 require하려면 파일을로드 한 후를 사용하여 사용자 정의를 연기 할 수 있습니다 eval-after-load.

Emacs 매뉴얼은 다음 섹션에서이 주제를 다룹니다.


2
아마도 언급 할 가치가있는 것은 : autoload명령 정의를 제공하는 것에 관한 것입니다. 그 명령을 사용할 수 있습니다. 라이브러리 (및 라이브러리가 필요로하는 라이브러리에서 재귀 적으로)의 모든 것을 사용 가능require 하게 만드는 입니다. Emacs에는 명령보다 더 많은 것이 있습니다. (물론 자동로드 명령이 호출되면 전체 라이브러리가로드됩니다.)
Drew

4

Emacs 초기화 측면에서, 어느 쪽도 선택하지 마십시오. GitHub 사용자 jwiegley는 사용 패키지 선언 매크로 가 뛰어나 필요에 따라 패키지를 요구하거나 자동로드합니다. 주문형으로로드 할 수있는 패키지로드를 연기하는 데 가장 적합합니다.


3

Emacs가 시작될 때 특정 기능을로드하여 직접 사용하려면 require를 사용하고 그렇지 않으면 autoload를 사용하십시오. 나는 개인적으로 시작 시간을 중요하게 생각합니다 (실제로 일주일에 몇 번, 때로는 하루에 여러 번 Emacs를 다시 시작합니다). 따라서 Emacs를 시작한 후 바로 사용할 수있는 항목과 필요할 때로드 할 수있는 항목을 생각하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.