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.