@node Coding Conventions
@section Emacs Lisp Coding Conventions
+@cindex coding conventions in Emacs Lisp
Here are conventions that you should follow when writing Emacs Lisp
code intended for widespread use:
@item
Since all global variables share the same name space, and all
functions share another name space, you should choose a short word to
-distinguish your program from other Lisp programs.@footnote{The
+distinguish your program from other Lisp programs@footnote{The
benefits of a Common Lisp-style package system are considered not to
-outweigh the costs.} Then take care to begin the names of all global
+outweigh the costs.}. Then take care to begin the names of all global
variables, constants, and functions in your program with the chosen
prefix. This helps avoid name conflicts.
@item
Redefining (or advising) an Emacs primitive is discouraged. It may do
the right thing for a particular program, but there is no telling what
-other programs might break as a result.
+other programs might break as a result. In any case, it is a
+maintenance burden because the two packages become highly dependent on
+each other.
+
+@item
+Likewise, avoid using @code{eval-after-load} (@pxref{Hooks for
+Loading}) in libraries and packages. This feature is meant for
+personal customizations; using it in a Lisp package increases the
+coupling between it and the package mentioned in
+@code{eval-after-load}, and thus makes it harder to maintain the two
+packages independently.
@item
If a file does replace any of the functions or library programs of