Изучаем Elisp — какие библиотеки самого высокого качества для чтения исходного кода?

При изучении нового языка программирования эксперты часто советуют «читать исходный код». Однако с такой огромной системой, как emacs, созданной в течение десятилетий многими людьми, новичку не так просто понять, какие библиотеки являются лучшими примерами идиоматического программирования на Elisp. Поэтому хотелось бы получить некоторые рекомендации по следующим критериям:

  • идиоматический стиль программирования elisp

  • соблюдение правил программирования emacs

  • умное использование cl-пакета в соответствии с рекомендациями emacs

  • умное использование eieio-package

  • примерная организация единой библиотеки файлов .el

  • примерная организация многофайловой/многопакетной библиотеки

  • любые критерии, которые вы считаете важными

Объяснение причин, почему вы рекомендуете определенные библиотеки для самодидактических занятий, несомненно, будет информативным для новичков в программировании на Emacs на языке lisp.


person Thorsten    schedule 12.03.2011    source источник
comment
Существует так много хорошо написанных пакетов Emacs, что почти невозможно выбрать один из них. Я бы посоветовал вам сначала решить, какой пакет вы хотели бы написать, а затем изучить аналогичные пакеты. Например, если вы планируете написать второстепенный режим, изучите, как были реализованы другие второстепенные режимы.   -  person Lindydancer    schedule 13.03.2011
comment
Возможно, мне следует немного переформулировать вопрос: поскольку конечной целью изучения программирования на Элиспе может быть вклад собственных основных и второстепенных модусов, было бы неплохо иметь один или два образцовых модуса каждого вида в качестве образцов для подражания — с уверенностью. качество кода. Конечно, в Emacs есть множество качественных режимов, и выбор одного из них не означает, что другие менее хороши. Однако, поскольку новичок не знает ни программистов, ни их репутации, ни критериев оценки кода, несколько рекомендаций от экспертов были бы полезны.   -  person Thorsten    schedule 13.03.2011


Ответы (2)


Как сказал Трей, используйте elisp из самого Emacs для обучения. Обычно я делаю одно из двух:

1) Если я пытаюсь узнать, как использовать определенную функцию, я открываю окно dired и делаю:

% g foobar

где foobar — это имя функции, которой я хочу научиться пользоваться. Это пометит все файлы, которые используют foobar, а затем я просматриваю их, чтобы увидеть, как его вызвать, в каком контексте он вызывается и т. д.

2) Если я пытаюсь понять, как что-то сделать, и я знаю режим, который делает что-то подобное, я посмотрю исходный код этого режима, чтобы увидеть, как они это делают. Если вы не знаете, с чего начать, но знаете, как выполнить то, что вы хотите сделать, полезно будет найти это с помощью привязки клавиш. Например, в буфере dired сделайте следующее:

C-h k % g

и это вызовет:

% g runs the command dired-mark-files-containing-regexp, which is an
% interactive compiled Lisp function in `dired.el'.

It is bound to % g, <menu-bar> <regexp> <mark-cont>.
(dired-mark-files-containing-regexp regexp &optional marker-char)

Mark all files with contents containing regexp for use in later
commands. A prefix argument means to unmark them instead.
`.' and `..' are never marked.

Нажатие на dired.el в приведенном выше тексте (в буфере emacs) откроет исходный код и приведет вас прямо к определению этой функции. Это отличный способ учиться на примере.

Не забывайте об отладчике elisp, чтобы точно видеть, что происходит, и отслеживать пошаговое выполнение кода. Вы можете пометить код для отладки, используя edebug-defun, а затем вызвать его как обычно, после чего emacs проведет вас через код.

person Joe Casadonte    schedule 13.03.2011
comment
Я начинаю понимать, как все то, что может пригодиться пользователю Emacs, делает его отличной IDE для программиста на Elisp. - person Thorsten; 13.03.2011

Я бы порекомендовал исходный код самого Emacs. Начните с простых вещей (каламбур) и просмотрите другие файлы, как обычно.

M-x find-library simple RET

Я думаю, понятно, почему собственный код лиспа Emacs является хорошим примером лиспа Emacs.

person Trey Jackson    schedule 12.03.2011
comment
Я только что обнаружил «Введение в программирование на Emacs Lisp» Роберта Дж. Часселла (доступно как информационный узел), в котором используется аналогичный подход и рассматриваются некоторые «простые» функции elisp из собственного кода Emacs lisp с большим количеством объяснений. - person Thorsten; 13.03.2011
comment
@Thorsten, конечно, это хорошее введение, но у него не так много исходного кода для просмотра. Для тех, кто ищет, «Введение в программирование на Emacs Lisp» можно найти здесь: gnu.org/software/emacs/emacs-lisp-intro/html_node/index.html - person Trey Jackson; 13.03.2011
comment
Есть ли какие-либо функции, которые вы бы назвали особенно хорошими примерами? Прочитав, например, describe-function-1help-fns.el), я не смог пропагандировать его как образец стиля программирования. Это стоит изучить, но я думаю, что для нового кода мы можем сделать лучше. - person harpo; 11.02.2012