Re: autoload cookies

Zajcev Evgeny <[email protected]> Wed, 20 Oct 2004 10:03:16 +0400
Newsgroups gmane.emacs.xemacs.user.russian
Message-ID <[email protected]>
Andrey Slusar <[email protected]> writes:

> Tue, 19 Oct 2004 22:59:35 +0400, Vasily Korytov wrote:
>
>> > А зачем в elisp иногда вставляют ";;;###autoload" строки? Для чего они
>> > служат?
>
>> В XEmacs очень занятеный механизм автоподгрузки до самих файлов разной
>> фигни из них. На мой взгляд, он просто порочен: от него растут разные
>> проблемы, если у тебя, скажем, один Gnus в xemacs-packages, второй --
>> где-то еще в load-path.
>
>   Да не, там все примерное ясно - load-path считается приоритетным(по
> собственному опыту), но в комментариях писать autoload-ы, это какое-то
> извращение:\
>
>> В принципе, идея иметь в каждом каталоге в load-path файл
>> auto-autoloads.el, в который пишутся (autoload ...)'ы, вычленяемые из
>> *.el именно по этим самым комментариям, не так плоха. Но переменные --
>> это уж увольте. =((
>
>   Так все-же какой механизм ";;;###autoload" и когда оно подгружается?
>
> Или это что-то типа (unless (fboundp 'func) defun func())?

autoload функциая - это специальная форма фунции которая нужна чтобы
подгружать файл с самой фунцией только в момент первого доступа к этой
фунции.  Вот например

  (autoload 'mytest-func "myfile.el" "my documentation for `mytest-func'." nil)  (1)
  ==> (autoload "myfile.el" "my documentation for `mytest-func'." nil nil)

  (symbol-function 'mytest-func)
  ==> (autoload "myfile.el" "my documentation for `mytest-func'." nil nil)

как видишь все продолжает работать и фунция `mytest-func' является
определенной.  Теперь

   (mytest-func nil)
   ==> error: Can't load myfile.el

Видишь, XEmacs попытался подгрузить файл myfile.el где он надеялся что
найдет реальную фунцию mytest-func.

а кука ';;;###autoload' позволяет автоматичски генерить такие вот
записи(1) в специальном файле.  В итоге получается что файлы
подгружаются по мере необходимости, а не все сразу.

-- 
lg