• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1<?xml version="1.0"?>
2<?xml-stylesheet type="text/xsl" href="styleguide.xsl"?>
3<GUIDE title="Google Common Lisp Style Guide">
4
5
6<p align="right">
7
8Revision 1.28
9</p>
10
11
12<address>
13Robert Brown
14</address>
15<address>
16  <a HREF="mailto:tunes@google.com">François-René Rideau</a>
17</address>
18
19<address>
20   In memoriam Dan Weinreb
21</address>
22
23<p align="center">
24<cite>Patterns mean "I have run out of language."</cite> — Rich Hickey
25</p>
26
27
28<OVERVIEW>
29<CATEGORY title="Important Note">
30  <STYLEPOINT title="Note: Displaying Hidden Details in this Guide">
31     <SUMMARY>
32       This style guide contains many details
33       that are initially hidden from view.
34       They are marked by the triangle icon, which you see here on your left.
35       Click it now. You should see "Hooray" appear below.
36     </SUMMARY>
37     <BODY>
38       <p>
39        Hooray!  Now you know you can expand points to get more details.
40        Alternatively, there's an "expand all" at the top of this document.
41       </p>
42     </BODY>
43  </STYLEPOINT>
44</CATEGORY>
45<CATEGORY title="Background">
46  <p>
47    Common Lisp is a powerful multiparadigm programming language.
48    With great power comes great responsibility.
49  </p>
50  <p>
51    This guide recommends formatting and stylistic choices
52    designed to make your code easier for other people to understand.
53    For those internal applications and free software libraries that
54    we develop at Google,
55    you should keep within these guidelines when making changes.
56    Note however that each project has its own rules and customs
57    that complement or override these general guidelines;
58    the speed-oriented QPX low fare search engine notably
59    has a very different style and feel from the QRes reservation system.
60  </p>
61  <p>
62    If you're writing Common Lisp code outside Google,
63    we invite you to consider these guidelines.
64    You may find some of them useful
65    where they don't conflict with other priorities you have.
66    We welcome remarks and constructive feedback
67    on how to improve our guide, and
68    on what alternate styles work for you and why.
69  </p>
70
71  <p>
72    This guide is not a Common Lisp tutorial.
73    For basic information about the language, please consult
74    <a HREF="http://www.gigamonkeys.com/book/">Practical Common Lisp</a>.
75    For a language reference, please consult the
76    <a HREF="http://www.lispworks.com/documentation/HyperSpec/Front/index.htm">Common Lisp HyperSpec</a>.
77    For more detailed style guidance, take (with a pinch of salt)
78    a look at Peter Norvig and Kent Pitman's
79    <a HREF="http://norvig.com/luv-slides.ps">style guide</a>.
80  </p>
81</CATEGORY>
82</OVERVIEW>
83<CATEGORY title="Meta-Guide">
84  <STYLEPOINT title="Must, Should, May, or Not">
85    <SUMMARY>
86      Each guideline's level of importance is indicated
87      by use of the following keywords and phrases, adapted from
88      <a href="https://www.ietf.org/rfc/rfc2119.txt">RFC 2119</a>.
89    </SUMMARY>
90    <BODY>
91      <table>
92        <tr>
93          <th valign="top">MUST</th>
94          <td>
95            <p>
96              This word, or the terms "REQUIRED" or "SHALL",
97              means that the guideline is an absolute requirement.
98              You must ask permission to violate a MUST.
99            </p>
100          </td>
101        </tr>
102        <tr>
103          <th valign="top">MUST NOT</th>
104          <td>
105            <p>
106              This phrase, or the phrase "SHALL NOT",
107              means that the guideline is an absolute prohibition.
108              You must ask permission to violate a MUST NOT.
109            </p>
110          </td>
111        </tr>
112        <tr>
113          <th valign="top">SHOULD</th>
114          <td>
115            <p>
116              This word, or the adjective "RECOMMENDED", means that
117              there may exist valid reasons in particular circumstances
118              to ignore the demands of the guideline, but
119              the full implications must be understood and carefully weighed
120              before choosing a different course.
121              You must ask forgiveness for violating a SHOULD.
122            </p>
123          </td>
124        </tr>
125        <tr>
126          <th valign="top">SHOULD NOT</th>
127          <td>
128            <p>
129              This phrase, or the phrase "NOT RECOMMENDED", means that
130              there may exist valid reasons in particular circumstances
131              to ignore the prohibitions of this guideline, but
132              the full implications should be understood and carefully weighed
133              before choosing a different course.
134              You must ask forgiveness for violating a SHOULD NOT.
135            </p>
136          </td>
137        </tr>
138        <tr>
139          <th valign="top">MAY</th>
140          <td>
141            <p>
142              This word, or the adjective "OPTIONAL",
143              means that an item is truly optional.
144            </p>
145          </td>
146        </tr>
147      </table>
148      <p>
149        Unlike RFCs, we don't capitalize every instance of one of the above
150        keywords when it is used.
151      </p>
152    </BODY>
153  </STYLEPOINT>
154  <STYLEPOINT title="Permission and Forgiveness">
155    <SUMMARY>
156      There are cases where transgression of some of these rules
157      is useful or even necessary.
158      In some cases, you must seek permission or obtain forgiveness
159      from the proper people.
160    </SUMMARY>
161    <BODY>
162      <p>
163        Permission comes from the owners of your project.
164      </p>
165
166      <p>
167        Forgiveness is requested in a comment
168        near the point of guideline violation,
169        and is granted by your code reviewer.
170        The original comment should be signed by you, and
171        the reviewer should add a signed approval to the comment at review time.
172      </p>
173
174    </BODY>
175  </STYLEPOINT>
176  <STYLEPOINT title="Conventions">
177    <SUMMARY>
178      You MUST follow conventions. They are not optional.
179    </SUMMARY>
180    <BODY>
181      <p>
182        Some of these guidelines are motivated by universal principles of good programming.
183        Some guidelines are motivated by technical peculiarities of Common Lisp.
184        Some guidelines were once motivated by a technical reason,
185        but the guideline remained after the reason subsided.
186        Some guidelines, such those about as comments and indentation,
187        are based purely on convention, rather than on clear technical merit.
188        Whatever the case may be, you must still follow these guidelines,
189        as well as other conventional guidelines
190        that have not been formalized in this document.
191      </p>
192      <p>
193        You MUST follow conventions.
194        They are important for readability.
195        When conventions are followed by default,
196        violations of the convention are a signal
197        that something notable is happening and deserves attention.
198        When conventions are systematically violated,
199        violations of the convention are a distracting noise
200        that needs to be ignored.
201      </p>
202      <p>
203        Conventional guidelines <em>are</em> indoctrination.
204        Their purpose is to make you follow the mores of the community,
205
206        so you can more effectively cooperate with existing members.
207        It is still useful to distinguish the parts that are technically motivated
208        from the parts that are mere conventions,
209        so you know when best to defy conventions for good effect,
210        and when not to fall into the pitfalls that the conventions are there to help avoid.
211      </p>
212    </BODY>
213  </STYLEPOINT>
214  <STYLEPOINT title="Old Code">
215    <SUMMARY>
216      Fix old code as you go.
217    </SUMMARY>
218    <BODY>
219      <p>
220        A lot of our code was written before these guidelines existed.
221        You should fix violations as you encounter them
222        in the course of your normal coding.
223      </p>
224      <p>
225        You must not fix violations en masse
226        without warning other developers and coordinating with them,
227        so as not to make the merging of large branches
228        more difficult than it already is.
229      </p>
230    </BODY>
231  </STYLEPOINT>
232  <STYLEPOINT title="Future Topics">
233    <SUMMARY>
234      There are many topics for additional standardization
235      not covered by current version of this document,
236      but deferred to future versions.
237    </SUMMARY>
238    <BODY>
239      <ul>
240        <li>
241          File and directory structure
242        </li>
243        <li>
244          Packages and modularity
245        </li>
246        <li>
247          Threads and locking
248        </li>
249        <li>
250          How to add configurable components
251        </li>
252        <li>
253          CLOS style: initforms, slot and accessor names, etc.
254        </li>
255        <li>
256          Recommendations on max number of slots per class.
257        </li>
258        <li>
259          More concrete examples of good code:
260          <ul>
261            <li>
262              exceptions
263            </li>
264            <li>
265              transactions, with retry
266            </li>
267            <li>
268              XML
269            </li>
270            <li>
271              typing
272            </li>
273            <li>
274              encapsulation / abstraction
275            </li>
276            <li>
277              class and slot names
278            </li>
279            <li>
280              etc.
281            </li>
282          </ul>
283        </li>
284        <li>
285          When (not) to use conditional compilation:
286          <ul>
287            <li>
288              modifying the product
289            </li>
290            <li>
291              conditional debugging/console output/etc.
292            </li>
293            <li>
294              "temporarily" commenting-out blocks of code
295            </li>
296            <li>
297              etc.
298            </li>
299          </ul>
300        </li>
301      </ul>
302    </BODY>
303  </STYLEPOINT>
304  </CATEGORY>
305<CATEGORY title="General Guidelines">
306  <STYLEPOINT title="Principles">
307    <SUMMARY>
308      There are some basic principles for team software development
309      that every developer must keep in mind.
310      Whenever the detailed guidelines are inadequate, confusing or contradictory,
311      refer back to these principles for guidance:
312      <ul>
313        <li>
314          Every developer's code must be easy for another developer
315          to read, understand, and modify
316          — even if the first developer isn't around to explain it.
317          (This is the "hit by a truck" principle.)
318        </li>
319        <li>
320          Everybody's code should look the same.
321          Ideally, there should be no way to look at lines of code
322          and recognize it as "Fred's code" by its style.
323        </li>
324        <li>
325          Be precise.
326        </li>
327        <li>
328          Be concise.
329        </li>
330        <li>
331          KISS — Keep It Simple, Stupid.
332        </li>
333        <li>
334          Use the smallest hammer for the job.
335        </li>
336        <li>
337          Use common sense.
338        </li>
339        <li>
340          Keep related code together.
341          Minimize the amount of jumping around
342          someone has to do to understand an area of code.
343        </li>
344      </ul>
345    </SUMMARY>
346    <BODY>
347    </BODY>
348  </STYLEPOINT>
349  <STYLEPOINT title="Priorities">
350    <SUMMARY>
351      <p>
352        When making decisions about how to write a given piece of
353        code, aim for the following -ilities in this priority order:
354      </p>
355      <ul>
356        <li>
357          Usability by the customer
358        </li>
359        <li>
360          Debuggability/Testability
361        </li>
362        <li>
363          Readability/Comprehensibility
364        </li>
365        <li>
366          Extensibility/Modifiability
367        </li>
368        <li>
369          Efficiency (of the Lisp code at runtime)
370        </li>
371      </ul>
372    </SUMMARY>
373    <BODY>
374      <p>
375        Most of these are obvious.
376      </p>
377      <p>
378        Usability by the customer means that the system has to do what the
379        customer requires; it has to handle the customer's transaction
380        volumes, uptime requirements; etc.
381      </p>
382      <p>
383        For the Lisp efficiency point,
384        given two options of equivalent complexity,
385        pick the one that performs better.
386        (This is often the same as the one that conses less,
387        i.e. allocates less storage from the heap.)
388      </p>
389      <p>
390        Given two options where one is more complex than the other,
391        pick the simpler option and revisit the decision only if
392        profiling shows it to be a performance bottleneck.
393      </p>
394      <p>
395        However, avoid premature optimization.
396        Don't add complexity to speed up something that runs rarely,
397        since in the long run, it matters less whether such code is fast.
398      </p>
399    </BODY>
400  </STYLEPOINT>
401  <STYLEPOINT title="Architecture">
402    <SUMMARY>
403      To build code that is robust and maintainable,
404      it matters a lot how the code is divided into components,
405      how these components communicate,
406      how changes propagate as they evolve,
407      and more importantly
408      how the programmers who develop these components communicate
409      as these components evolve.
410    </SUMMARY>
411    <BODY>
412      <p>
413        If your work affects other groups, might be reusable across groups,
414        adds new components, has an impact on other groups
415        (including QA or Ops), or otherwise isn't purely local,
416        you must write it up using at least a couple of paragraphs,
417        and get a design approval from the other parties involved
418        before starting to write code — or be ready to scratch what you have
419        when they object.
420      </p>
421      <p>
422        If you don't know or don't care about these issues,
423        ask someone who does.
424      </p>
425    </BODY>
426  </STYLEPOINT>
427  <STYLEPOINT title="Using Libraries">
428    <SUMMARY>
429      Often, the smallest hammer is to use an existing library.
430      Or one that doesn't exist yet.
431      In such cases, you are encouraged to use or develop such a library,
432      but you must take appropriate precautions.
433    </SUMMARY>
434    <BODY>
435      <ul>
436        <li>
437          You MUST NOT start a new library
438          unless you established that none is already available
439          that can be fixed or completed into becoming what you need.
440          That's a rule against the NIH syndrome ("Not Invented Here"),
441          which is particularly strong amongst Lisp hackers.
442        </li>
443        <li>
444          Whichever library, old or new, you pick, you MUST get permission
445          to incorporate third-party code into the code base.
446          You must discuss the use of such library
447          in the appropriate mailing-list,
448          and have your code reviewed by people knowledgeable in the domain
449          and/or the Lisp library ecosystem (if any).
450          Please be ready to argue why this particular solution makes sense
451          as compared to other available libraries.
452        </li>
453        <li>
454          Some libraries are distributed under licenses not compatible
455          with the software you're writing, and
456          must not be considered available for use.
457          Be aware of these issues, or consult with people who are.
458        </li>
459      </ul>
460
461    </BODY>
462  </STYLEPOINT>
463  <STYLEPOINT title="Open-Sourcing Code">
464    <SUMMARY>
465      <p>
466        If you write a general-purpose library,
467        or modify an existing open-source library,
468        you are encouraged to publish the result
469        separate from your main project and then
470        have your project import it like any other open-source library.
471      </p>
472
473    </SUMMARY>
474    <BODY>
475      <p>
476        Use your judgment to distinguish
477        general-purpose versus business-specific code,
478        and open-source the general-purpose parts,
479        while keeping the business-specific parts a trade secret.
480      </p>
481
482      <p>
483        Open-Sourcing code has many advantages,
484        including being able to leverage third parties for development,
485        letting the development of features be user-directed,
486        and keeping you honest with respect to code quality.
487        Whatever code you write, you will have to maintain anyway,
488        and make sure its quality is high enough to sustain use in production.
489        There should therefore be no additional burden to Open-Sourcing,
490        even of code that (at least initially)
491        is not directly usable by third parties.
492      </p>
493
494    </BODY>
495  </STYLEPOINT>
496  <STYLEPOINT title="Development Process">
497    <SUMMARY>
498      Development process is outside the scope of this document.
499      However, developers should remember at least these bits:
500      get reviewed, write tests, eliminate warnings, run tests, avoid mass-changes.
501    </SUMMARY>
502    <BODY>
503      <p>
504      </p>
505      <ul>
506        <li>
507          All code changes must be reviewed.
508          You should expect that your code will be reviewed by other hackers,
509          and that you will be assigned other hackers' code to review.
510          Part of the review criteria will be that code obeys
511          the coding standards in this document.
512        </li>
513        <li>
514          You must write and check-in tests for new code that you write and old bugs you fix.
515          There must be a unit test for every API function,
516          and any previously failing case.
517          Your work is not truly done until this activity is complete.
518          Estimating tasks must include the time it takes to produce such tests.
519        </li>
520        <li>
521          Your code must compile
522          without any compilation error or warning messages whatsoever.
523          If the compiler issues warnings that should be ignored,
524          muffle those warnings using the
525          <code>UIOP:WITH-MUFFLED-COMPILER-CONDITIONS</code> and
526          <code>UIOP:*UNINTERESTING-COMPILER-CONDITIONS*</code>
527          framework (part of <code>UIOP</code>, part of <code>ASDF 3</code>),
528          either around the entire project, or around individual files
529          (using <code>ASDF</code>'s <code>:around-compile</code> hooks).
530        </li>
531        <li>
532          All code should be checked in an appropriate source control system,
533          in a way that allows for complete reproducibility of
534          build, test and execution of
535          the code that is, has been or may be deployed.
536        </li>
537        <li>
538          You must run the "precheckin" tests, and each component must pass
539          its unit tests successfully before you commit any code.
540        </li>
541        <li>
542          You should incorporate code coverage into your testing process.
543          Tests are not sufficient
544          if they do not cover all new and updated code;
545          code that for whatever reason cannot be included in coverage results
546          should be clearly marked as such including the reason.
547        </li>
548        <li>
549          Many people develop on branches.
550          You must get permission to undertake mass-changes
551          (e.g. mass reindentations)
552          so that we can coordinate in advance,
553          and give branch residents time to get back on the mainline
554        </li>
555      </ul>
556    </BODY>
557  </STYLEPOINT>
558</CATEGORY>
559<CATEGORY title="Formatting">
560  <STYLEPOINT title="Spelling and Abbreviations">
561    <SUMMARY>
562      <p>
563        You must use correct spelling in your comments,
564        and most importantly in your identifiers.
565      </p>
566      <p>
567        When several correct spellings exist (including American vs English),
568        and there isn't a consensus amongst developers as which to use,
569        you should choose the shorter spelling.
570      </p>
571      <p>
572        You must use only common and domain-specific abbreviations, and
573        must be consistent with these abbreviations.  You may abbreviate
574        lexical variables of limited scope in order to avoid overly-long
575        symbol names.
576      </p>
577    </SUMMARY>
578    <BODY>
579      <p>
580        If you're not sure, consult a dictionary,
581        Google for alternative spellings,
582        or ask a local expert.
583      </p>
584      <p>
585        Here are examples of choosing the correct spelling:
586      </p>
587      <ul>
588        <li>
589          Use "complimentary" in the sense of a meal or beverage
590          that is not paid for by the recipient, not "complementary".
591        </li>
592        <li>
593          Use "existent" and "nonexistent", not "existant".
594          Use "existence", not "existance".
595        </li>
596        <li>
597          Use "hierarchy" not "heirarchy".
598        </li>
599        <li>
600          Use "precede" not "preceed".
601        </li>
602        <li>
603          Use "weird", not "wierd".
604        </li>
605      </ul>
606      <p>
607        Here are examples of choosing the shorter spelling:
608      </p>
609      <ul>
610        <li>
611          Use "canceled", not "cancelled"
612        </li>
613        <li>
614          Use "queuing", not "queueing".
615        </li>
616        <li>
617          Use "signaled", not "signalled";
618        </li>
619        <li>
620          Use "traveled", not "travelled".
621        </li>
622        <li>
623          Use "aluminum", not "aluminium"
624        </li>
625        <li>
626          Use "oriented", not "orientated"
627        </li>
628        <li>
629          Use "color", not "colour"
630        </li>
631        <li>
632          Use "behavior", not "behaviour"
633        </li>
634      </ul>
635      <p>
636        Make appropriate exceptions for industry standard nomenclature/jargon,
637        including plain misspellings.
638        For instance:
639      </p>
640      <ul>
641        <li>
642          Use "referer", not "referrer", in the context of the HTTP protocol.
643        </li>
644      </ul>
645
646    </BODY>
647  </STYLEPOINT>
648  <STYLEPOINT title="Line length">
649    <SUMMARY>
650      You should format source code so that no line is longer than 100 characters.
651    </SUMMARY>
652    <BODY>
653      <p>
654        Some line length restriction is better than none at all.
655        While old text terminals used to make 80 columns the standard,
656        these days, allowing 100 columns seems better,
657        since good style encourages the use of
658        descriptive variables and function names.
659      </p>
660
661    </BODY>
662  </STYLEPOINT>
663  <STYLEPOINT title="Indentation">
664    <SUMMARY>
665      <p>
666        Indent your code the way a properly configured GNU Emacs does.
667      </p>
668      <p>
669        Maintain a consistent indentation style throughout a project.
670      </p>
671      <p>
672        Indent carefully to make the code easier to understand.
673      </p>
674    </SUMMARY>
675    <BODY>
676      <p>
677        Common Lisp indentation in Emacs is provided by the cl-indent library.
678        The latest version of cl-indent is packaged with
679        <a HREF="https://www.common-lisp.net/project/slime/">SLIME</a>
680        (under contrib/slime-cl-indent.el). After installing SLIME, set up Emacs
681        to load SLIME automatically using
682        <a HREF="https://www.common-lisp.net/project/slime/doc/html/Loading-Contribs.html">these instructions</a>, adding slime-indentation to the list of
683        contrib libraries to be loaded in the call to slime-setup.
684     </p>
685     <p>
686        Ideally, use the default indentation settings provided by
687        slime-indentation. If necessary, customize indentation parameters to
688        maintain a consistent indentation style throughout an existing project.
689        Parameters can be customized using the :variables setting in
690        define-common-lisp-style. Indentation of specific forms can be
691        customized using the :indentation setting of define-common-lisp-style.
692        This is particularly useful when creating forms that behave like macros
693        or special operators that are indented differently than standard
694        function calls (e.g. defun, labels, or let). Add a
695        <a HREF="https://www.gnu.org/software/emacs/manual/html_node/emacs/Hooks.html">hook</a> to 'lisp-mode-hook that calls common-lisp-set-style to set
696        the appropriate style automatically.
697      </p>
698
699
700      <p>
701        Use indentation to make complex function applications easier to read.
702        When an application does not fit on one line
703        or the function takes many arguments,
704        consider inserting newlines between the arguments
705        so that each one is on a separate line.
706        However, do not insert newlines in a way that makes it hard to tell
707        how many arguments the function takes
708        or where an argument form starts and ends.
709      </p>
710      <BAD_CODE_SNIPPET>
711        ;; Bad
712        (do-something first-argument second-argument (lambda (x)
713            (frob x)) fourth-argument last-argument)
714      </BAD_CODE_SNIPPET>
715      <CODE_SNIPPET>
716        ;; Better
717        (do-something first-argument
718                      second-argument
719                      #'(lambda (x) (frob x))
720                      fourth-argument
721                      last-argument)
722      </CODE_SNIPPET>
723    </BODY>
724  </STYLEPOINT>
725  <STYLEPOINT title="File Header">
726    <SUMMARY>
727      <p>
728        You should include a description at the top of each source file.
729      </p>
730      <p>
731        You should include neither authorship nor copyright information in a source file.
732      </p>
733    </SUMMARY>
734    <BODY>
735      <p>
736        Every source file should begin with a brief description
737        of the contents of that file.
738      </p>
739      <p>
740        After that description, every file should start the code itself with an
741        <code>(in-package :<em>package-name</em>)</code> form.
742      </p>
743      <p>
744        After that <code>in-package</code> form,
745        every file should follow with any file-specific
746        <code>(declaim (optimize ...))</code> declaration
747        that is not covered by an <code>ASDF</code> <code>:around-compile</code> hook.
748      </p>
749      <CODE_SNIPPET>
750        ;;;; Variable length encoding for integers and floating point numbers.
751
752        (in-package #:varint)
753        (declaim #.*optimize-default*)
754      </CODE_SNIPPET>
755      <p>
756        You should not include authorship information at the top of a file:
757        better information is available from version control,
758        and such a mention will only cause confusion and grief.
759        Indeed, whoever was the main author at the time such a mention was included
760        might not be who eventually made the most significant contributions to the file,
761        and even less who is responsible for the file at the moment.
762
763      </p>
764      <p>
765        You should not include copyright information in individual source code files.
766        An exception is made for files meant to be disseminated as standalone.
767      </p>
768
769
770    </BODY>
771  </STYLEPOINT>
772  <STYLEPOINT title="Vertical white space">
773    <SUMMARY>
774      Vertical white space: one blank line between top-level forms.
775    </SUMMARY>
776    <BODY>
777      <p>
778        You should include one blank line between top-level forms,
779        such as function definitions.
780        Exceptionally, blank lines can be omitted
781        between simple, closely related defining forms of the same kind,
782        such as a group of related type declarations or constant definitions.
783      </p>
784      <CODE_SNIPPET>
785        (defconstant +mix32+ #x12b9b0a1 "pi, an arbitrary number")
786        (defconstant +mix64+ #x2b992ddfa23249d6 "more digits of pi")
787
788        (defconstant +golden-ratio32+ #x9e3779b9 "the golden ratio")
789        (defconstant +golden-ratio64+ #xe08c1d668b756f82 "more digits of the golden ratio")
790
791        (defmacro incf32 (x y)
792          "Like INCF, but for integers modulo 2**32"
793          `(setf ,x (logand (+ ,x ,y) #xffffffff)))
794        (defmacro incf64 (x y)
795          "Like INCF, but for integers modulo 2**64"
796          `(setf ,x (logand (+ ,x ,y) #xffffffffffffffff)))
797      </CODE_SNIPPET>
798      <p>
799        Blank lines can be used to separate parts of a complicated function.
800        Generally, however, you should break a large function into smaller ones
801        instead of trying to make it more readable by adding vertical space.
802        If you can't, you should document with a <code>;;</code> comment
803        what each of the separated parts of the function does.
804      </p>
805      <p>
806        You should strive to keep top-level forms,
807        including comments but excluding the documentation string, of
808        appropriate length; preferrably short.  Forms extending beyond a
809        single page should be rare and their use should be justfied.
810        This applies to each of the forms in an <code>eval-when</code>,
811        rather than to the <code>eval-when</code> itself.
812        Additionally, <code>defpackage</code> forms may be longer,
813        since they may include long lists of symbols.
814      </p>
815    </BODY>
816  </STYLEPOINT>
817  <STYLEPOINT title="Horizontal white space">
818    <SUMMARY>
819      Horizontal white space: none around parentheses. No tabs.
820    </SUMMARY>
821    <BODY>
822      <p>
823        You must not include extra horizontal whitespace
824        before or after parentheses or around symbols.
825      </p>
826      <p>
827        You must not place right parentheses by themselves on a line.
828        A set of consecutive trailing parentheses must appear on the same line.
829      </p>
830      <BAD_CODE_SNIPPET>
831        ;; Very Bad
832        ( defun factorial ( limit )
833          ( let (( product 1 ))
834            ( loop for i from 1 upto limit
835                  do (setf product ( * product i ) ) )
836            product
837          )
838        )
839      </BAD_CODE_SNIPPET>
840      <CODE_SNIPPET>
841        ;; Better
842        (defun factorial (limit)
843          (let ((product 1))
844            (loop for i from 1 upto limit
845                  do (setf product (* product i)))
846            product))
847      </CODE_SNIPPET>
848      <p>
849        You should use only one space between forms.
850      </p>
851      <p>
852        You should not use spaces to vertically align forms
853        in the middle of consecutive lines.
854        An exception is made when the code possesses
855        an important yet otherwise not visible symmetry
856        that you want to emphasize.
857      </p>
858      <BAD_CODE_SNIPPET>
859        ;; Bad
860        (let* ((low    1)
861               (high   2)
862               (sum    (+ (* low low) (* high high))))
863          ...)
864      </BAD_CODE_SNIPPET>
865      <CODE_SNIPPET>
866        ;; Better
867        (let* ((low 1)
868               (high 2)
869               (sum (+ (* low low) (* high high))))
870          ...))
871      </CODE_SNIPPET>
872      <p>
873        You must align nested forms if they occur across more than one line.
874      </p>
875      <BAD_CODE_SNIPPET>
876        ;; Bad
877        (defun munge (a b c)
878        (* (+ a b)
879        c))
880      </BAD_CODE_SNIPPET>
881      <CODE_SNIPPET>
882        ;; Better
883        (defun munge (a b c)
884          (* (+ a b)
885             c))
886      </CODE_SNIPPET>
887      <p>
888        The convention is that the body of a binding form
889        is indented two spaces after the form.
890        Any binding data before the body is usually indented four spaces.
891        Arguments to a function call are aligned with the first argument;
892        if the first argument is on its own line,
893        it is aligned with the function name.
894      </p>
895      <CODE_SNIPPET>
896        (multiple-value-bind (a b c d)
897            (function-returning-four-values x y)
898          (declare (ignore c))
899          (something-using a)
900          (also-using b d))
901      </CODE_SNIPPET>
902      <p>
903        An exception to the rule against lonely parentheses
904        is made for an <code>eval-when</code> form around several definitions;
905        in this case, include a comment <code>; eval-when</code>
906        after the closing parenthesis.
907      </p>
908      <p>
909        You must set your editor to
910        avoid inserting tab characters in the files you edit.
911        Tabs cause confusion when editors disagree
912        on how many spaces they represent.
913        In Emacs, do <code>(setq-default indent-tabs-mode nil)</code>.
914      </p>
915    </BODY>
916  </STYLEPOINT>
917</CATEGORY>
918
919<CATEGORY title="Documentation">
920  <STYLEPOINT title="Document everything">
921    <SUMMARY>
922      You should use document strings on all visible functions
923      to explain how to use your code.
924    </SUMMARY>
925    <BODY>
926      <p>
927        Unless some bit of code is painfully self-explanatory,
928        document it with a documentation string (also known as docstring).
929      </p>
930      <p>
931        Documentation strings are destined to be read
932        by the programmers who use your code.
933        They can be extracted from functions, types, classes, variables and macros,
934        and displayed by programming tools, such as IDEs,
935        or by REPL queries such as <code>(describe 'foo)</code>;
936        web-based documentation or other reference works
937        can be created based on them.
938        Documentation strings are thus the perfect locus to document your API.
939        They should describe how to use the code
940        (including what pitfalls to avoid),
941        as opposed to how the code works (and where more work is needed),
942        which is what you'll put in comments.
943      </p>
944      <p>
945        Supply a documentation string when defining
946        top-level functions, types, classes, variables and macros.
947        Generally, add a documentation string wherever the language allows.
948      </p>
949      <p>
950        For functions, the docstring should describe the function's contract:
951        what the function does,
952        what the arguments mean,
953        what values are returned,
954        what conditions the function can signal.
955        It should be expressed at the appropriate level of abstraction,
956        explaining the intended meaning rather than, say, just the syntax.
957        In documentation strings, capitalize the names of Lisp symbols,
958        such as function arguments.
959        For example, "The value of LENGTH should be an integer."
960      </p>
961      <CODE_SNIPPET>
962        (defun small-prime-number-p (n)
963          "Return T if N, an integer, is a prime number. Otherwise, return NIL."
964          (cond ((or (&lt; n 2))
965                 nil)
966                ((= n 2)
967                 t)
968                ((divisorp 2 n)
969                 nil)
970                (t
971                 (loop for i from 3 upto (sqrt n) by 2
972                       never (divisorp i n)))))
973      </CODE_SNIPPET>
974      <CODE_SNIPPET>
975        (defgeneric table-clear (table)
976          (:documentation
977            "Like clrhash, empties the TABLE of all
978            associations, and returns the table itself."))
979      </CODE_SNIPPET>
980      <p>
981        A long docstring may usefully
982        begin with a short, single-sentence summary,
983        followed by the larger body of the docstring.
984      </p>
985      <p>
986        When the name of a type is used,
987        the symbol may be quoted by surrounding it with
988        a back quote at the beginning and a single quote at the end.
989        Emacs will highlight the type, and the highlighting serves
990        as a cue to the reader that <kbd>M-.</kbd>
991        will lead to the symbol's definition.
992      </p>
993      <CODE_SNIPPET>
994        (defun bag-tag-expected-itinerary (bag-tag)
995          "Return a list of `legacy-pnr-pax-segment' objects representing
996          the expected itinerary of the `bag-tag' object, BAG-TAG."
997          ...)
998      </CODE_SNIPPET>
999      <p>
1000        Every method of a generic function should be independently documented
1001        when the specialization affects what the method does,
1002        beyond what is described in its generic function's docstring.
1003      </p>
1004      <p>
1005        When you fix a bug,
1006        consider whether what the fixed code does is obviously correct or not;
1007        if not, you must add a comment explaining
1008        the reason for the code in terms of fixing the bug.
1009        Adding the bug number, if any, is also recommended.
1010      </p>
1011    </BODY>
1012  </STYLEPOINT>
1013  <STYLEPOINT title="Comment semicolons">
1014    <SUMMARY>
1015      You must use the appropriate number of semicolons to introduce comments.
1016    </SUMMARY>
1017    <BODY>
1018      <p>
1019        Comments are explanations to the future maintainers of the code.
1020        Even if you're the only person who will ever see and touch the code,
1021        even if you're either immortal and never going to quit,
1022        or unconcerned with what happens after you leave
1023        (and have your code self-destruct in such an eventuality),
1024        you may find it useful to comment your code.
1025        Indeed, by the time you revisit your code,
1026        weeks, months or years later,
1027        you will find yourself a different person from the one who wrote it,
1028        and you will be grateful to that previous self
1029        for making the code readable.
1030      </p>
1031      <p>
1032        You must comment anything complicated
1033        so that the next developer can understand what's going on.
1034        (Again, the "hit by a truck" principle.)
1035      </p>
1036      <p>
1037        Also use comments as a way to guide those who read the code,
1038        so they know what to find where.
1039      </p>
1040      <ul>
1041        <li>
1042          File headers and important comments
1043          that apply to large sections of code in a source file
1044          should begin with four semicolons.
1045        </li>
1046        <li>
1047          You should use three semicolons
1048          to begin comments that apply to just
1049          one top-level form or small group of top-level forms.
1050        </li>
1051        <li>
1052          Inside a top-level form, you should use two semicolons
1053          to begin a comment if it appears between lines.
1054        </li>
1055        <li>
1056          You should use one semicolon if it is a parenthetical remark
1057          and occurs at the end of a line.
1058          You should use spaces to separate the comment
1059          from the code it refers to so the comment stands out.
1060          You should try to vertically align
1061          consecutive related end-of-line comments.
1062        </li>
1063      </ul>
1064      <CODE_SNIPPET>
1065        ;;;; project-euler.lisp
1066        ;;;; File-level comments or comments for large sections of code.
1067
1068        ;;; Problems are described in more detail here:  https://projecteuler.net/
1069
1070        ;;; Divisibility
1071        ;;; Comments that describe a group of definitions.
1072
1073        (defun divisorp (d n)
1074          (zerop (mod n d)))
1075
1076        (defun proper-divisors (n)
1077          ...)
1078
1079        (defun divisors (n)
1080          (cons n (proper-divisors n)))
1081
1082        ;;; Prime numbers
1083
1084        (defun small-prime-number-p (n)
1085          (cond ((or (&lt; n 2))
1086                 nil)
1087                ((= n 2)   ; parenthetical remark here
1088                 t)        ; continuation of the remark
1089                ((divisorp 2 n)
1090                 nil)  ; different remark
1091                ;; Comment that applies to a section of code.
1092                (t
1093                 (loop for i from 3 upto (sqrt n) by 2
1094                       never (divisorp i n)))))
1095      </CODE_SNIPPET>
1096      <p>
1097        You should include a space between the semicolon and the text of the comment.
1098      </p>
1099    </BODY>
1100  </STYLEPOINT>
1101  <STYLEPOINT title="Grammar and punctuation">
1102    <SUMMARY>
1103      You should punctuate documentation correctly.
1104    </SUMMARY>
1105    <BODY>
1106      <p>
1107        When a comment is a full sentence,
1108        you should capitalize the initial letter of the first word
1109        and end the comment with a period.
1110        In general, you should use correct punctuation.
1111      </p>
1112    </BODY>
1113  </STYLEPOINT>
1114  <STYLEPOINT title="Attention Required">
1115    <SUMMARY>
1116      You must follow the convention of using TODO comments
1117      for code requiring special attention.
1118      For code using unobvious forms, you must include a comment.
1119    </SUMMARY>
1120    <BODY>
1121      <p>
1122        For comments requiring special attention, such as
1123        incomplete code, todo items, questions, breakage, and danger,
1124        include a TODO comment indicating the type of problem,
1125        its nature, and any notes on how it may be addressed.
1126      </p>
1127      <p>
1128        The comments begin with <code>TODO</code> in all capital letters,
1129        followed by the
1130
1131        name, e-mail address, or other identifier
1132        of the person
1133        with the best context about the problem referenced by the <code>TODO</code>.
1134        The main purpose is to have a consistent <code>TODO</code> that
1135        can be searched to find out how to get more details upon
1136        request. A <code>TODO</code> is not a commitment that the
1137        person referenced will fix the problem. Thus when you create
1138        a <code>TODO</code>,
1139        it is almost always your
1140        name
1141        that is given.
1142      </p>
1143      <p>
1144        When signing comments,
1145        you should use your username (for code within the company)
1146        or full email address (for code visible outside the company),
1147        not just initials.
1148
1149      </p>
1150      <CODE_SNIPPET>
1151        ;;--- TODO(george@gmail.com): Refactor to provide a better API.
1152      </CODE_SNIPPET>
1153      <p>
1154        Be specific when indicating times or software releases
1155        in a TODO comment and use
1156        <a HREF="https://www.w3.org/TR/NOTE-datetime">YYYY-MM-DD</a>
1157        format for dates to make automated processing of such dates easier,
1158        e.g., 2038-01-20 for the end of the 32-bit signed <code>time_t</code>.
1159      </p>
1160      <CODE_SNIPPET>
1161        ;;--- TODO(brown): Remove this code after release 1.7 or before 2012-11-30.
1162      </CODE_SNIPPET>
1163      <p>
1164        For code that uses unobvious forms to accomplish a task, you must include a comment
1165        stating the purpose of the form and the task it accomplishes.
1166      </p>
1167    </BODY>
1168  </STYLEPOINT>
1169  <STYLEPOINT title="Domain-Specific Languages">
1170    <SUMMARY>
1171      You should document DSLs and
1172      any terse program in a DSL.
1173    </SUMMARY>
1174    <BODY>
1175      <p>
1176        You should design your Domain Specific Language
1177        to be easy to read and understand by people familiar with the domain.
1178      </p>
1179      <p>
1180        You must properly document all your Domain Specific Language.
1181      </p>
1182      <p>
1183        Sometimes, your DSL is designed for terseness.
1184        In that case, it is important to document what each program does,
1185        if it's not painfully obvious from the context.
1186      </p>
1187      <p>
1188        Notably, when you use regular expressions
1189        (e.g. with the <code>CL-PPCRE</code> package),
1190        you MUST ALWAYS put in a comment
1191        (usually a two-semicolon comment on the previous line)
1192        explaining, at least basically, what the regular expression does,
1193        or what the purpose of using it is.
1194        The comment need not spell out every bit of the syntax, but
1195        it should be possible for someone to follow the logic of the code
1196        without actually parsing the regular expression.
1197      </p>
1198    </BODY>
1199  </STYLEPOINT>
1200
1201</CATEGORY>
1202
1203<CATEGORY title="Naming">
1204  <STYLEPOINT title="Symbol guidelines">
1205    <SUMMARY>
1206      You should use lower case.
1207      You should follow the rules for <a href="#Spelling_and_Abbreviations">Spelling and Abbreviations</a>
1208      You should follow punctuation conventions.
1209    </SUMMARY>
1210    <BODY>
1211      <p>
1212        Use lower case for all symbols.
1213        Consistently using lower case makes searching for symbol names easier
1214        and is more readable.
1215      </p>
1216      <p>
1217        Note that Common Lisp is case-converting,
1218        and that the <code>symbol-name</code> of your symbols
1219        will be upper case.
1220        Because of this case-converting,
1221        attempts to distinguish symbols by case are defeated,
1222        and only result in confusion.
1223        While it is possible to escape characters in symbols
1224        to force lower case,
1225        you should not use this capability
1226        unless this is somehow necessary
1227        to interoperate with third-party software.
1228      </p>
1229      <p>
1230        Place hyphens between all the words in a symbol.
1231        If you can't easily say an identifier out loud,
1232        it is probably badly named.
1233      </p>
1234      <p>
1235        You must not use <code>"/"</code> or <code>"."</code>
1236        instead of <code>"-"</code>
1237        unless you have a well-documented overarching reason to,
1238        and permission from other hackers who review your proposal.
1239      </p>
1240      <p>
1241        See the section on <a href="#Spelling_and_Abbreviations">Spelling and Abbreviations</a>
1242        for guidelines on using abbreviations.
1243      </p>
1244      <BAD_CODE_SNIPPET>
1245        ;; Bad
1246        (defvar *default-username* "Ann")
1247        (defvar *max-widget-cnt* 200)
1248      </BAD_CODE_SNIPPET>
1249      <CODE_SNIPPET>
1250        ;; Better
1251        (defvar *default-user-name* "Ann")
1252        (defvar *maximum-widget-count* 200)
1253      </CODE_SNIPPET>
1254      <p>
1255        There are conventions in Common Lisp
1256        for the use of punctuation in symbols.
1257        You should not use punctuation in symbols outside these conventions.
1258      </p>
1259      <p>
1260        Unless the scope of a variable is very small,
1261        do not use overly short names like
1262        <code>i</code> and <code>zq</code>.
1263      </p>
1264    </BODY>
1265  </STYLEPOINT>
1266  <STYLEPOINT title="Denote intent, not content">
1267    <SUMMARY>
1268      Name your variables according to their intent,
1269      not their content.
1270    </SUMMARY>
1271    <BODY>
1272      <p>
1273        You should name a variable according
1274        to the high-level concept that it represents,
1275        not according to the low-level implementation details
1276        of how the concept is represented.
1277      </p>
1278      <p>
1279        Thus, you should avoid embedding
1280        data structure or aggregate type names,
1281        such as <code>list</code>, <code>array</code>, or
1282        <code>hash-table</code> inside variable names,
1283        unless you're writing a generic algorithm that applies to
1284        arbitrary lists, arrays, hash-tables, etc.
1285        In that case it's perfectly OK to name a variable
1286        <code>list</code> or <code>array</code>.
1287      </p>
1288      <p>
1289        Indeed, you should be introducing new abstract data types
1290        with <code>DEFCLASS</code> or <code>DEFTYPE</code>,
1291        whenever a new kind of intent appears for objects in your protocols.
1292        Functions that manipulate such objects generically may then
1293        use variables the name of which reflect that abstract type.
1294      </p>
1295      <p>
1296        For example, if a variable's value is always a row
1297        (or is either a row or <code>NIL</code>),
1298        it's good to call it <code>row</code> or <code>first-row</code>
1299        or something like that.
1300        It is alright is <code>row</code> has been
1301        <code>DEFTYPE</code>'d to <code>STRING</code> —
1302        precisely because you have abstracted the detail away,
1303        and the remaining salient point is that it is a row.
1304        You should not name the variable <code>STRING</code> in this context,
1305        except possibly in low-level functions that specifically manipulate
1306        the innards of rows to provide the suitable abstraction.
1307      </p>
1308      <p>
1309        Be consistent.
1310        If a variable is named <code>row</code> in one function,
1311        and its value is being passed to a second function,
1312        then call it <code>row</code> rather than, say, <code>value</code>
1313        (this was a real case).
1314      </p>
1315    </BODY>
1316  </STYLEPOINT>
1317  <STYLEPOINT title="Global variables and constants">
1318    <SUMMARY>
1319      Name globals according to convention.
1320    </SUMMARY>
1321    <BODY>
1322      <p>
1323        The names of global constants should start and end
1324        with plus characters.
1325      </p>
1326      <p>
1327        Global variable names should start and end with asterisks
1328        (also known in this context as earmuffs).
1329      </p>
1330      <p>
1331        In some projects, parameters that are not meant
1332        to be usually modified or bound under normal circumstances
1333        (but may be during experimentation or exceptional situations)
1334        should start (but do not end) with a dollar sign.
1335        If such a convention exists within your project,
1336        you should follow it consistently.
1337        Otherwise, you should avoid naming variables like this.
1338      </p>
1339      <p>
1340        Common Lisp does not have global lexical variables,
1341        so a naming convention is used to ensure that globals,
1342        which are dynamically bound,
1343        never have names that overlap with local variables.
1344        It is possible to fake global lexical variables
1345        with a differently named global variable
1346        and a <code>DEFINE-SYMBOL-MACRO</code>.
1347        You should not use this trick,
1348        unless you first publish a library that abstracts it away.
1349      </p>
1350      <CODE_SNIPPET>
1351        (defconstant +hash-results+ #xbd49d10d10cbee50)
1352
1353        (defvar *maximum-search-depth* 100)
1354      </CODE_SNIPPET>
1355    </BODY>
1356  </STYLEPOINT>
1357  <STYLEPOINT title="Predicate names">
1358    <SUMMARY>
1359      Names of predicate functions and variables end with a <code>"P"</code>.
1360    </SUMMARY>
1361    <BODY>
1362      <p>
1363        You should name boolean-valued functions and variables with a
1364        trailing <code>"P"</code> or <code>"-P"</code>,
1365        to indicate they are predicates.
1366        Generally, you should use
1367        <code>"P"</code> when the rest of the function name is one word
1368        and <code>"-P"</code> when it is more than one word.
1369      </p>
1370      <p>
1371        A rationale for this convention is given in
1372        <a href="http://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node69.html">the CLtL2 chapter on predicates</a>.
1373      </p>
1374      <p>
1375        For uniformity, you should follow the convention above,
1376        and not one of the alternatives below.
1377      </p>
1378      <p>
1379        An alternative rule used in some existing packages
1380        is to always use <code>"-P"</code>.
1381        Another alternative rule used in some existing packages
1382        is to always use <code>"?"</code>.
1383        When you develop such a package,
1384        you must be consistent with the rest of the package.
1385        When you start a new package,
1386        you should not use such an alternative rule
1387        without a very good documented reason.
1388      </p>
1389    </BODY>
1390  </STYLEPOINT>
1391  <STYLEPOINT title="Omit library prefixes">
1392    <SUMMARY>
1393      You should not include a library or package name
1394      as a prefix within the name of symbols.
1395    </SUMMARY>
1396    <BODY>
1397      <p>
1398        When naming a symbol (external or internal) in a package,
1399        you should not include the package name
1400        as a prefix within the name of the symbol.
1401        Naming a symbol this way makes it awkward to use
1402        from a client package accessing the symbol
1403        by qualifying it with a package prefix,
1404        where the package name then appears twice
1405        (once as a package prefix,
1406        another time as a prefix within the symbol name).
1407      </p>
1408      <BAD_CODE_SNIPPET>
1409        ;; Bad
1410        (in-package #:varint)
1411        (defun varint-length64 () ... )
1412
1413        (in-package #:client-code)
1414        (defconst +padding+ (varint:varint-length64 +end-token+))
1415      </BAD_CODE_SNIPPET>
1416      <CODE_SNIPPET>
1417        ;; Better
1418        (in-package #:varint)
1419        (defun length64 () ... )
1420
1421        (in-package #:client-code)
1422        (defconst +padding+ (varint:length64 +end-token+))
1423      </CODE_SNIPPET>
1424      <p>
1425        An exception to the above rule would be to include a prefix
1426        for the names of variables that would otherwise be expected to clash
1427        with variables in packages that use the current one.
1428        For instance, <code>ASDF</code> exports a variable <code>*ASDF-VERBOSE*</code>
1429        that controls the verbosity of <code>ASDF</code> only,
1430        rather than of the entire Lisp program.
1431      </p>
1432    </BODY>
1433  </STYLEPOINT>
1434  <STYLEPOINT title="Packages">
1435    <SUMMARY>
1436      Use packages appropriately.
1437    </SUMMARY>
1438    <BODY>
1439      <p>
1440        Lisp packages are used to demarcate namespaces.
1441        Usually, each system has its own namespace.
1442        A package has a set of external symbols,
1443        which are intended to be used from outside the package,
1444        in order to allow other modules to use this module's facilities.
1445      </p>
1446      <p>
1447        The internal symbols of a package
1448        should never be referred to from other packages.
1449        That is, you should never have to use
1450        the double-colon <code>::</code> construct.
1451        (e.g. <code>QUAKE::HIDDEN-FUNCTION</code>).
1452        If you need to use double-colons to write real production code,
1453        something is wrong and needs to be fixed.
1454      </p>
1455      <p>
1456        As an exception,
1457        unit tests may use the internals of the package being tested.
1458        So when you refactor, watch out for
1459        internals used by the package's unit tests.
1460      </p>
1461      <p>
1462        The <code>::</code> construct is also useful for very temporary hacks,
1463        and at the REPL.
1464        But if the symbol really is part of
1465        the externally-visible definition of the package,
1466        export it.
1467      </p>
1468      <p>
1469        You may find that some internal symbols represent concepts
1470        you usually want to abstract away and hide under the hood,
1471        yet at times are necessary to expose for various extensions.
1472        For the former reason, you do not want to export them,
1473        yet for the latter reason, you have to export them.
1474        The solution is to have two different packages,
1475        one for your normal users to use, and
1476        another for the implementation and its extenders to use.
1477      </p>
1478      <p>
1479        Each package is one of two types:
1480      </p>
1481      <ul>
1482        <li>
1483          Intended to be included
1484          in the <code>:use</code> specification of other packages.
1485          If package <code>A</code> "uses" package <code>B</code>,
1486          then the external symbols of package <code>B</code>
1487          can be referenced from within package <code>A</code>
1488          without a package prefix.
1489          We mainly use this for low-level modules
1490          that provide widely-used facilities.
1491        </li>
1492        <li>
1493          Not intended to be "used".
1494          To reference a facility provided by package <code>B</code>,
1495          code in package <code>A</code> must use an explicit package prefix,
1496          e.g. <code>B:DO-THIS</code>.
1497        </li>
1498      </ul>
1499      <p>
1500        If you add a new package, it should always be of the second type,
1501        unless you have a special reason and get permission.
1502        Usually a package is designed to be one or the other,
1503        by virtue of the names of the functions.
1504        For example, if you have an abstraction called <code>FIFO</code>,
1505        and it were in a package of the first type
1506        you'd have functions named things like
1507        <code>FIFO-ADD-TO</code> and <code>FIFO-CLEAR-ALL</code>.
1508        If you used a package of the second type,
1509        you'd have names like <code>ADD-TO</code> and <code>CLEAR-ALL</code>,
1510        because the callers would be saying
1511        <code>FIFO:ADD-TO</code> and <code>FIFO:CLEAR-ALL</code>.
1512        (<code>FIFO:FIFO-CLEAR-ALL</code> is redundant and ugly.)
1513      </p>
1514      <p>
1515        Another good thing about packages is that
1516        your symbol names won't "collide" with the names of other packages,
1517        except the ones your packages "uses".
1518        So you have to stay away from symbols
1519        that are part of the Lisp implementation (since you always "use" that)
1520        and that are part of any other packages you "use",
1521        but otherwise you are free to make up your own names,
1522        even short ones, and not worry about some else
1523        having used the same name.
1524        You're isolated from each other.
1525      </p>
1526      <p>
1527        Your package must not shadow (and thus effectively redefine)
1528        symbols that are part of the Common Lisp language.
1529        There are certain exceptions,
1530        but they should be very well-justified and extremely rare:
1531      </p>
1532      <ul>
1533        <li>
1534          If you are explicitly replacing a Common Lisp symbol
1535          by a safer or more featureful version.
1536        </li>
1537        <li>
1538          If you are defining a package not meant to be "used",
1539          and have a good reason to export a symbol
1540          that clashes with Common Lisp,
1541          such as <code>log:error</code> and <code>log:warn</code>
1542          and so on.
1543        </li>
1544      </ul>
1545    </BODY>
1546  </STYLEPOINT>
1547</CATEGORY>
1548
1549<CATEGORY title="Language usage guidelines">
1550  <STYLEPOINT title="Mostly Functional Style">
1551    <SUMMARY>
1552      You should avoid side-effects when they are not necessary.
1553    </SUMMARY>
1554    <BODY>
1555      <p>
1556        Lisp is best used as a "mostly functional" language.
1557      </p>
1558      <p>
1559        Avoid modifying local variables, try rebinding instead.
1560      </p>
1561      <p>
1562        Avoid creating objects and the SETFing their slots.
1563        It's better to set the slots during initialization.
1564      </p>
1565      <p>
1566        Make classes as immutable as possible, that is, avoid giving slots
1567        setter functions if at all possible.
1568      </p>
1569      <p>
1570        Using a mostly functional style makes it much easier
1571        to write concurrent code that is thread-safe.
1572        It also makes it easier to test the code.
1573      </p>
1574    </BODY>
1575  </STYLEPOINT>
1576  <STYLEPOINT title="Recursion">
1577    <SUMMARY>
1578      You should favor iteration over recursion.
1579    </SUMMARY>
1580    <BODY>
1581      <p>
1582        Common Lisp systems are not required to implement
1583        function calls from tail positions without leaking stack space
1584        — which is known as proper tail calls (PTC),
1585        tail call elimination (TCE),
1586        or tail call optimization (TCO).
1587        This means that indefinite recursion through tail calls
1588        may quickly blow out the stack,
1589        which hampers functional programming.
1590        Still, most serious implementations (including SBCL and CCL)
1591        do implement proper tail calls, but with restrictions:
1592      </p>
1593      <ul>
1594        <li>
1595          The <code>(DECLARE (OPTIMIZE ...))</code> settings
1596          must favor <code>SPEED</code> enough and
1597          not favor <code>DEBUG</code> too much,
1598          for some compiler-dependent meanings of "enough" and "too much".
1599          (For instance, in SBCL, you should avoid <code>(SPEED 0)</code>
1600          and <code>(DEBUG 3)</code> to achieve proper tail calls.)
1601        </li>
1602        <li>
1603          There should not be dynamic bindings around the call
1604          (even though some Scheme compilers are able to properly treat
1605          such dynamic bindings, called parameters in Scheme parlance).
1606        </li>
1607      </ul>
1608      <p>
1609        For compatibility with all compilers and optimization settings,
1610        and to avoid stack overflow when debugging,
1611        you should prefer iteration or the built in mapping functions
1612        to relying on proper tail calls.
1613      </p>
1614      <p>
1615        If you do rely on proper tail calls,
1616        you must prominently document the fact,
1617        and take appropriate measures to ensure an appropriate compiler is used
1618        with appropriate optimization settings.
1619        For fully portable code, you may have to use trampolines instead.
1620      </p>
1621    </BODY>
1622  </STYLEPOINT>
1623  <STYLEPOINT title="Special variables">
1624    <SUMMARY>
1625      Use special variables sparingly.
1626    </SUMMARY>
1627    <BODY>
1628      <p>
1629        Using Lisp "special" (dynamically bound) variables
1630        as implicit arguments to functions should be used sparingly,
1631        and only in cases where it won't surprise the person reading the code,
1632        and where it offers significant benefits.
1633      </p>
1634      <p>
1635        Indeed, each special variable constitutes state.
1636        Developers have to mentally track the state of all relevant variables
1637        when trying to understand what the code does and how it does it;
1638        tests have to be written and run with all relevant combinations;
1639        to isolate some activity, care has to be taken to locally bind
1640        all relevant variables, including those of indirectly used modules.
1641        They can hide precious information from being printed in a backtrace.
1642        Not only is there overhead associated to each new variable,
1643        but interactions between variables
1644        can make the code exponentially more complex
1645        as the number of such variables increases.
1646        The benefits have to match the costs.
1647      </p>
1648      <p>
1649        Note though that a Lisp special variable is not a global variable
1650        in the sense of a global variable in, say, BASIC or C.
1651        As special variables can be dynamically bound to a local value,
1652        they are much more powerful than
1653        global value cells where all users necessarily interfere with each other.
1654      </p>
1655      <p>
1656        Good candidates for such special variables
1657        are items for which "the current" can be naturally used as prefix,
1658        such as "the current database connection" or
1659        "the current business data source".
1660        They are singletons as far as the rest of the code is concerned,
1661        and often passing them as an explicit argument
1662        does not add anything to the readability or maintainability
1663        of the source code in question.
1664      </p>
1665      <p>
1666        They can make it easier to write code that can be refactored.
1667        If you have a request processing chain,
1668        with a number of layers that all operate upon a "current" request,
1669        passing the request object explicitly to every function
1670        requires that every function in the chain have a request argument.
1671        Factoring out code into new functions often requires
1672        that these functions also have this argument,
1673        which clutters the code with boilerplate.
1674      </p>
1675      <p>
1676        You should treat special variables
1677        as though they are per-thread variables.
1678        By default, you should leave a special variable
1679        with no top-level binding at all,
1680        and each thread of control
1681        that needs the variable should bind it explicitly.
1682        This will mean that any incorrect use of the variable
1683        will result in an "unbound variable" error, and
1684        each thread will see its own value for the variable.
1685        Variables with a default global value should usually be
1686        locally bound at thread creation time.
1687        You should use suitable infrastructure
1688        to automate the appropriate declaration of such variables.
1689      </p>
1690
1691    </BODY>
1692  </STYLEPOINT>
1693  <STYLEPOINT title="Assignment">
1694    <SUMMARY>
1695      Be consistent in assignment forms.
1696    </SUMMARY>
1697    <BODY>
1698      <p>
1699        There are several styles for dealing with assignment and side-effects;
1700        whichever a given package is using,
1701        keep using the same consistently when hacking said package.
1702        Pick a style that makes sense when starting a new package.
1703      </p>
1704      <p>
1705        Regarding multiple assignment in a same form, there are two schools:
1706        the first style groups as many assignments as possible into a single
1707        <code>SETF</code> or <code>PSETF</code> form
1708        thus minimizing the number of forms with side-effects;
1709        the second style splits assignments into as many individual
1710        <code>SETF</code> (or <code>SETQ</code>, see below) forms as possible,
1711        to maximize the chances of locating forms that modify a kind of place
1712        by grepping for <code>(setf (foo ...</code>.
1713        A grep pattern must actually contain as many place-modifying forms
1714        as you may use in your programs, which may make this rationale either
1715        convincing or moot depending on the rest of the style of your code.
1716        You should follow the convention used in the package you are hacking.
1717        We recommend the first convention for new packages.
1718      </p>
1719      <p>
1720        Regarding <code>SETF</code> and <code>SETQ</code>,
1721        there are two schools:
1722        this first regards <code>SETQ</code>
1723        as an archaic implementation detail,
1724        and avoids it entirely in favor of <code>SETF</code>;
1725        the second regards <code>SETF</code>
1726        as an additional layer of complexity,
1727        and avoids it in favor of <code>SETQ</code> whenever possible
1728        (i.e. whenever the assigned place is a variable or symbol-macro).
1729        You should follow the convention used in the package you are hacking.
1730        We recommend the first convention for new packages.
1731      </p>
1732      <p>
1733        In the spirit of a mostly pure functional style,
1734        which makes testing and maintenance easier,
1735        we invite you to consider how to do things with the fewest assignments required.
1736      </p>
1737    </BODY>
1738  </STYLEPOINT>
1739  <STYLEPOINT title="Assertions and Conditions">
1740    <SUMMARY>
1741      You must make proper usage of assertions and conditions.
1742    </SUMMARY>
1743    <BODY>
1744      <ul>
1745        <li>
1746          <code>ASSERT</code> should be used ONLY to detect internal bugs.
1747          Code should <code>ASSERT</code> invariants whose failure indicates
1748          that the software is itself broken.
1749          Incorrect input should be handled properly at runtime,
1750          and must not cause an assertion violation.
1751          The audience for an <code>ASSERT</code> failure is a developer.
1752          Do not use the data-form and argument-form in <code>ASSERT</code>
1753          to specify a condition to signal.
1754          It's fine to use them to print out a message for debugging purposes
1755          (and since it's only for debugging, there's no issue of
1756          internationalization).
1757        </li>
1758        <li>
1759          <code>CHECK-TYPE</code>,
1760          <code>ETYPECASE</code> are also forms of assertion.
1761          When one of these fails, that's a detected bug.
1762          You should prefer to use <code>CHECK-TYPE</code>
1763          over (DECLARE (TYPE ...))
1764          for the inputs of functions.
1765        </li>
1766        <li>
1767          Your code should use assertions and type checks liberally.
1768          The sooner a bug is discovered, the better!
1769          Only code in the critical path for performance
1770          and internal helpers should eschew
1771          explicit assertions and type checks.
1772        </li>
1773        <li>
1774          Invalid input, such as files that are read
1775          but do not conform to the expected format,
1776          should not be treated as assertion violations.
1777          Always check to make sure that input is valid,
1778          and take appropriate action if it is not,
1779          such as signalling a real error.
1780        </li>
1781        <li>
1782          <code>ERROR</code> should be used
1783          to detect problems with user data, requests, permissions, etc.,
1784          or to report "unusual outcomes" to the caller.
1785        </li>
1786        <li>
1787          <code>ERROR</code> should always be called
1788          with an explicit condition type;
1789          it should never simply be called with a string.
1790          This enables internationalization.
1791        </li>
1792        <li>
1793          Functions that report unusual outcomes
1794          by signaling a condition should say so explicitly in their contracts
1795          (their textual descriptions, in documentation and docstrings etc.).
1796          When a function signals a condition
1797          that is not specified by its contract, that's a bug.
1798          The contract should specify the condition class(es) clearly.
1799          The function may then signal any condition
1800          that is a type-of any of those conditions.
1801          That is, signaling instances of subclasses
1802          of the documented condition classes is fine.
1803        </li>
1804        <li>
1805          Complex bug-checks may need to use <code>ERROR</code>
1806          instead of <code>ASSERT</code>.
1807
1808        </li>
1809        <li>
1810          When writing a server, you must not call <code>WARN</code>.
1811          Instead, you should use the appropriate logging framework.
1812
1813        </li>
1814        <li>
1815          Code must not call <code>SIGNAL</code>.
1816          Instead, use <code>ERROR</code> or <code>ASSERT</code>.
1817        </li>
1818        <li>
1819          Code should not use <code>THROW</code> and <code>CATCH</code>;
1820          instead use the <code>restart</code> facility.
1821        </li>
1822        <li>
1823          Code should not generically handle all conditions,
1824          e.g. type <code>T</code>, or use <code>IGNORE-ERRORS</code>.
1825          Instead, let unknown conditions propagate to
1826          the standard ultimate handler for processing.
1827
1828        </li>
1829        <li>
1830          There are a few places where handling all conditions is appropriate,
1831          but they are rare.
1832          The problem is that handling all conditions can mask program bugs.
1833          If you <em>do</em> need to handle "all conditions",
1834          you MUST handle only <code>ERROR</code>, <em>not</em> <code>T</code>
1835          and not <code>SERIOUS-CONDITION</code>.
1836          (This is notably because CCL's process shutdown
1837          depends on being able to signal <code>process-reset</code>
1838          and have it handled by CCL's handler,
1839          so we must not interpose our own handler.)
1840        </li>
1841        <li>
1842          <code>(error (make-condition 'foo-error ...))</code>
1843          is equivalent to <code>(error 'foo-error ...)</code> —
1844          code must use the shorter form.
1845        </li>
1846        <li>
1847          Code should not signal conditions from inside the cleanup form of
1848          <code>UNWIND-PROTECT</code>
1849          (unless they are always handled inside the cleanup form),
1850          or otherwise do non-local exits from cleanup handlers
1851          outside of the handler e.g. <code>INVOKE-RESTART</code>.
1852        </li>
1853        <li>
1854          Do not clean up by resignaling.
1855          If you do that, and the condition is not handled,
1856          the stack trace will halt at the point of the resignal,
1857          hiding the rest.
1858          And the rest is the part we really care about!
1859          <BAD_CODE_SNIPPET>
1860            ;; Bad
1861            (handler-case
1862              (catch 'ticket-at
1863                (etd-process-blocks))
1864              (error (c)
1865                (reset-parser-values)
1866                  (error c)))
1867          </BAD_CODE_SNIPPET>
1868          <CODE_SNIPPET>
1869            ;; Better
1870            (unwind-protect
1871              (catch 'ticket-at
1872                (etd-process-blocks))
1873              (reset-parser-values))
1874          </CODE_SNIPPET>
1875        </li>
1876      </ul>
1877    </BODY>
1878  </STYLEPOINT>
1879  <STYLEPOINT title="Type Checking">
1880    <SUMMARY>
1881      If you know the type of something, you should make it explicit
1882      in order to enable compile-time and run-time sanity-checking.
1883    </SUMMARY>
1884    <BODY>
1885
1886      <p>
1887        If your function is using a special variable as an implicit argument,
1888        it's good to put in a <code>CHECK-TYPE</code> for the special variable,
1889        for two reasons:
1890        to clue in the person reading the code
1891        that this variable is being used implicitly as an argument,
1892        and also to help detect bugs.
1893      </p>
1894
1895      <p>
1896        Using <code>(declare (type ...))</code>
1897        is the least-desirable mechanism to use
1898        because, as Scott McKay puts it:
1899      </p>
1900      <blockquote>
1901        <p>
1902          The fact is, <code>(declare (type ...))</code> does different things
1903          depending on the compiler settings of speed, safety, etc.
1904          In some compilers, when speed is greater than safety,
1905          <code>(declare (type ...))</code> will tell the compiler
1906          "please assume that these variables have these types"
1907          <em>without</em> generating any type-checks.
1908          That is, if some variable has the value <code>1432</code> in it,
1909          and you declare it to be of type <code>string</code>,
1910          the compiler might just go ahead and use it as though it's a string.
1911        </p>
1912        <p>
1913          Moral: don't use <code>(declare (type ...))</code>
1914          to declare the contract of any API functions,
1915          it's not the right thing.
1916          Sure, use it for "helper" functions, but not API functions.
1917        </p>
1918      </blockquote>
1919      <p>
1920        You should, of course, use appropriate declarations
1921        in internal low-level functions
1922        where these declarations are used for optimization.
1923        When you do, however, see our recommendations for
1924        <a href="#Unsafe_Operations">Unsafe Operations</a>.
1925      </p>
1926    </BODY>
1927  </STYLEPOINT>
1928  <STYLEPOINT title="CLOS">
1929    <SUMMARY>
1930      Use CLOS appropriately.
1931    </SUMMARY>
1932    <BODY>
1933      <p>
1934        When a generic function is intended to be called from other
1935        modules (other parts of the code), there should be an
1936        explicit <code>DEFGENERIC</code> form,
1937        with a <code>:DOCUMENTATION</code> string
1938        explaining the generic contract of the function
1939        (as opposed to its behavior for some specific class).
1940        It's generally good to do explicit <code>DEFGENERIC</code> forms,
1941        but for module entry points it is mandatory.
1942      </p>
1943      <p>
1944        When the argument list of a generic function includes
1945        <code>&amp;KEY</code>,
1946        the <code>DEFGENERIC</code> should always explicitly list
1947        all of the keyword arguments that are acceptable,
1948        and explain what they mean.
1949        (Common Lisp does not require this, but it is good form,
1950        and it may avoid spurious warnings on SBCL.)
1951      </p>
1952      <p>
1953        You should avoid <code>SLOT-VALUE</code> and <code>WITH-SLOTS</code>,
1954        unless you absolutely intend to circumvent
1955        any sort of method combination that might be in effect for the slot.
1956        Rare exceptions include <code>INITIALIZE-INSTANCE</code>
1957        and <code>PRINT-OBJECT</code> methods and
1958        accessing normally hidden slots in the low-level implementation of
1959        methods that provide user-visible abstractions.
1960        Otherwise, you should use accessors,
1961        <code>WITH-ACCESSORS</code>
1962      </p>
1963
1964      <p>
1965        Accessor names generally follow a convention of
1966        <code>&lt;protocol-name&gt;-&lt;slot-name&gt;</code>,
1967        where a "protocol" in this case loosely indicates
1968        a set of functions with well-defined behavior.
1969      </p>
1970      <p>
1971        No implication of a formal "protocol" concept is necessarily intended,
1972        much less first-class "protocol" objects.
1973        However, there may indeed be an abstract CLOS class
1974        or an
1975        <a href="https://common-lisp.net/~frideau/lil-ilc2012/lil-ilc2012.html">Interface-Passing Style</a> interface
1976        that embodies the protocol.
1977        Further (sub)classes or (sub)interfaces may then implement
1978        all or part of a protocol by defining
1979        some methods for (generic) functions in the protocol,
1980        including readers and writers.
1981      </p>
1982      <p>
1983        For example, if there were a notional protocol called
1984        is <code>pnr</code> with accessors <code>pnr-segments</code>
1985        and <code>pnr-passengers</code>, then
1986        the classes <code>air-pnr</code>, <code>hotel-pnr</code> and
1987        <code>car-pnr</code> could each reasonably implement
1988        methods for <code>pnr-segments</code> and <code>pnr-passengers</code>
1989        as accessors.
1990      </p>
1991      <p>
1992        By default, an abstract base class name is used
1993        as the notional protocol name, so accessor names default
1994        to <code>&lt;class-name&gt;-&lt;slot-name&gt;</code>;
1995        while such names are thus quite prevalent,
1996        this form is neither required nor even preferred.
1997        In general, it contributes to "symbol bloat",
1998        and in many cases has led to a proliferation of "trampoline" methods.
1999      </p>
2000      <p>
2001        Accessors named <code>&lt;slot-name&gt;-of</code> should not be used.
2002      </p>
2003      <p>
2004        Explicit <code>DEFGENERIC</code> forms should be used when there are
2005        (or it is anticipated that there will be)
2006        more than one <code>DEFMETHOD</code> for that generic function.
2007        The reason is that the documentation for the generic function
2008        explains the abstract contract for the function,
2009        as opposed to explaining what an individual method does for
2010        some specific class(es).
2011      </p>
2012      <p>
2013        You must not use generic functions where there is no notional protocol.
2014        To put it more concretely,
2015        if you have more than one generic function that specializes its Nth argument,
2016        the specializing classes should all be descendants of a single class.
2017        Generic functions must not be used for "overloading",
2018        i.e. simply to use the same name for two entirely unrelated types.
2019      </p>
2020      <p>
2021        More precisely, it's not really
2022        whether they descend from a common superclass,
2023        but whether they obey the same "protocol".
2024        That is, the two classes should handle the same set of generic functions,
2025        as if there were an explicit <code>DEFGENERIC</code> for each method.
2026      </p>
2027      <p>
2028        Here's another way to put it.
2029        Suppose you have two classes, A and B, and a generic function F.
2030        There are two methods for F,
2031        which dispatch on an argument being of types A and B.
2032        Is it plausible that there might be a function call somewhere
2033        in the program that calls F,
2034        in which the argument might sometimes, at runtime,
2035        be of class A and other times be of class B?
2036        If not, you probably are overloading and
2037        should not be using a single generic function.
2038      </p>
2039      <p>
2040        We allow one exception to this rule:
2041        it's OK to do overloading
2042        if the corresponding argument "means" the same thing.
2043        Typically one overloading allows an X object,
2044        and the other allows the name of an X object,
2045        which might be a symbol or something.
2046      </p>
2047      <p>
2048        You must not use MOP "intercessory" operations at runtime.
2049        You should not use MOP "intercessory" operations at compile-time.
2050        At runtime, they are at worst a danger, at best a performance issue.
2051        At compile-time, it is usually cleaner that
2052        macros should set things up the right way in one pass
2053        than have to require a second pass of fixups through intercession;
2054        but sometimes, fixups are necessary to resolve forward references,
2055        and intercession is allowed then.
2056        MOP intercession is a great tool for interactive development,
2057        and you may enjoy it while developping and debugging;
2058        but you should not use it in normal applications.
2059      </p>
2060      <p>
2061        If a class definition creates a method
2062        as a <code>:READER</code>, <code>:WRITER</code>,
2063        or <code>:ACCESSOR</code>,
2064        do not redefine that method.
2065        It's OK to add <code>:BEFORE</code>, <code>:AFTER</code>,
2066        and <code>:AROUND</code> methods,
2067        but don't override the primary method.
2068      </p>
2069      <p>
2070        In methods with keyword arguments,
2071        you must always use <code>&amp;KEY</code>,
2072        even if the method does not care about the values of any keys,
2073        and you should never use <code>&amp;ALLOW-OTHER-KEYS</code>.
2074        As long as a keyword is accepted by any method of a generic function,
2075        it's OK to use it in the generic function,
2076        even if the other methods of the same generic function
2077        don't mention it explicitly.
2078        This is particularly important
2079        for <code>INITIALIZE-INSTANCE</code> methods,
2080        since if you did use <code>&amp;ALLOW-OTHER-KEYS</code>,
2081        it would disable error checking for misspelled or wrong keywords
2082        in <code>MAKE-INSTANCE</code> calls!
2083      </p>
2084
2085      <p>
2086        A typical <code>PRINT-OBJECT</code> method might look like this:
2087      </p>
2088      <CODE_SNIPPET>
2089        (defmethod print-object ((p person) stream)
2090          (print-unprintable-object (p stream :type t :identity t)
2091            (with-slots (first-name last-name) p
2092              (safe-format stream "~a ~a" first-name last-name))))
2093      </CODE_SNIPPET>
2094    </BODY>
2095  </STYLEPOINT>
2096</CATEGORY>
2097
2098<CATEGORY title="Meta-language guidelines">
2099  <STYLEPOINT title="Macros">
2100    <SUMMARY>
2101      Use macros when appropriate, which is often.
2102      Define macros when appropriate, which is seldom.
2103    </SUMMARY>
2104    <BODY>
2105      <p>
2106        Macros bring syntactic abstraction, which is a wonderful thing.
2107        It helps make your code clearer, by describing your intent
2108        without getting bogged in implementation details
2109        (indeed abstracting those details away).
2110        It helps make your code more concise and more readable,
2111        by eliminating both redundancy and irrelevant details.
2112        But it comes at a cost to the reader,
2113        which is learning a new syntactic concept for each macro.
2114        And so it should not be abused.
2115      </p>
2116      <p>
2117        The general conclusion is that there shouldn't be
2118        any recognizable <em>design pattern</em>
2119        in a good Common Lisp program.
2120        The one and only pattern is: <em>use the language</em>,
2121        which includes defining and using syntactic abstractions.
2122      </p>
2123      <p>
2124        Existing macros must be used
2125        whenever they make code clearer
2126        by conveying intent in a more concise way,
2127        which is often.
2128        When a macro is available in your project
2129        that expresses the concept you're using,
2130        you must not write the expansion rather than use the macro.
2131      </p>
2132      <p>
2133        New macros should be defined as appropriate,
2134        which should be seldom,
2135        for common macros have already been provided
2136        by the language and its various libraries,
2137        and your program typically only needs few new ones
2138        relative to its size.
2139      </p>
2140      <p>
2141        You should follow the OAOOM rule of thumb
2142        for deciding when to create a new abstraction,
2143        whether syntactic or not:
2144        if a particular pattern is used more than twice,
2145        it should probably be abstracted away.
2146        A more refined rule to decide when to use abstraction
2147        should take into account
2148        the benefit in term of number of uses and gain at each use,
2149        to the costs in term of having to get used to reading the code.
2150        For syntactic abstractions, costs and benefits to the reader
2151        is usually more important than costs and benefits to the writer,
2152        because good code is usually written once
2153        and read many times by many people
2154        (including the same programmer
2155        who has to maintain the program after having forgotten it).
2156        Yet the cost to the writer of the macro
2157        should also be taken into account;
2158        however, in doing so it should rather be compared
2159        to the cost of the programmer writing other code instead
2160        that may have higher benefits.
2161      </p>
2162      <p>
2163        Using Lisp macros properly requires taste.
2164        Avoid writing complicated macros
2165        unless the benefit clearly outweighs the cost.
2166        It takes more effort for your fellow developers to learn your macro,
2167        so you should only use a macro if the gain in expressiveness
2168        is big enough to justify that cost.
2169        As usual, feel free to consult your colleagues if you're not sure,
2170        since without a lot of Lisp experience,
2171        it can be hard to make this judgment.
2172      </p>
2173      <p>
2174        You must never use a macro where a function will do.
2175        That is, if the semantics of what you are writing
2176        conforms to the semantics of a function,
2177        then you must write it as a function rather than a macro.
2178      </p>
2179      <p>
2180        You must not transform a function into a macro for performance reasons.
2181        If profiling shows that you have a performance problem
2182        with a specific function <code>FOO</code>,
2183        document the need and profiling-results appropriately,
2184        and
2185        <code>(declaim (inline foo))</code>.
2186      </p>
2187
2188      <p>
2189        You can also use a compiler-macro
2190        as a way to speed up function execution
2191        by specifying a source-to-source transformation.
2192        Beware that it interferes with tracing the optimized function.
2193      </p>
2194      <p>
2195        When you write a macro-defining macro
2196        (a macro that generates macros),
2197        document and comment it particularly clearly,
2198        since these are harder to understand.
2199      </p>
2200      <p>
2201        You must not install new reader macros
2202        without a consensus among the developers of your system.
2203        Reader macros must not leak out of the system that uses them
2204        to clients of that system or other systems used in the same project.
2205        You must use software such as
2206        <code>cl-syntax</code> or <code>named-readtables</code>
2207        to control how reader macros are used.
2208        This clients who desire it may use the same reader macros as you do.
2209        In any case, your system must be usable
2210        even to clients who do not use these reader macros.
2211      </p>
2212      <p>
2213        If your macro has a parameter that is a Lisp form
2214        that will be evaluated when the expanded code is run,
2215        you should name the parameter with the suffix <code>-form</code>.
2216        This convention helps make it clearer to the macro's user
2217        which parameters are Lisp forms to be evaluated, and which are not.
2218        The common names <code>body</code> and <code>end</code> are
2219        exceptions to this rule.
2220      </p>
2221      <p>
2222        You should follow the so-called <code>CALL-WITH</code> style when it applies.
2223        This style is explained at length in
2224        <a href="http://random-state.net/log/3390120648.html">http://random-state.net/log/3390120648.html</a>.
2225        The general principle is that the macro is strictly limited to processing the syntax,
2226        and as much of the semantics as possible is kept in normal functions.
2227        Therefore, a macro <code>WITH-<em>FOO</em></code> is often limited to
2228        generating a call to an auxiliary function
2229        <code>CALL-WITH-<em>FOO</em></code>
2230        with arguments deduced from the macro arguments.
2231        Macro <code>&amp;body</code> arguments are typically
2232        wrapped into a lambda expression of which they become the body,
2233        which is passed as one of the arguments of the auxiliary function.
2234      </p>
2235      <p>
2236        The separation of syntactic and semantic concerns
2237        is a general principle of style that applies
2238        beyond the case of <code>WITH-</code> macros.
2239        Its advantages are many.
2240        By keeping semantics outside the macro,
2241        the macro is made simpler, easier to get right, and less subject to change,
2242        which makes it easier to develop and maintain.
2243        The semantics is written in a simpler language — one without staging —
2244        which also makes it easier to develop and maintain.
2245        It becomes possible to debug and update the semantic function
2246        without having to recompile all clients of the macro.
2247        The semantic function appears in the stack trace
2248        which also helps debug client functions.
2249        The macro expansion is made shorter and
2250        each expansion shares more code with other expansions,
2251        which reduces memory pressure which in turn usually makes things faster.
2252        It also makes sense to write the semantic functions first,
2253        and write the macros last as syntactic sugar on top.
2254        You should use this style unless the macro is used
2255        in tight loops where performance matters;
2256        and even then, see our rules regarding optimization.
2257      </p>
2258      <p>
2259        Any functions (closures) created by the macro should be named,
2260        which can be done using <code>FLET</code>.
2261
2262        This also allows you to declare the function to be of dynamic extent
2263        (if it is — and often it is; yet see below regarding
2264        <a href="#DYNAMIC-EXTENT">DYNAMIC-EXTENT</a>).
2265      </p>
2266      <p>
2267        If a macro call contains a form,
2268        and the macro expansion includes more than one copy of that form,
2269        the form can be evaluated more than once,
2270        and code it contains macro-expanded and compiled more than once.
2271        If someone uses the macro and calls it
2272        with a form that has side effects or that takes a long time to compute,
2273        the behavior will be undesirable
2274        (unless you're intentionally writing
2275        a control structure such as a loop).
2276        A convenient way to avoid this problem
2277        is to evaluate the form only once,
2278        and bind a (generated) variable to the result.
2279        There is a very useful macro called <code>ALEXANDRIA:ONCE-ONLY</code>
2280        that generates code to do this.
2281        See also <code>ALEXANDRIA:WITH-GENSYMS</code>,
2282        to make some temporary variables in the generated code.
2283        Note that if you follow our <code>CALL-WITH</code> style,
2284        you typically expand the code only once, as either
2285        an argument to the auxiliary function, or
2286        the body of a lambda passed as argument to it;
2287        you therefore avoid the above complexity.
2288      </p>
2289      <p>
2290        When you write a macro with a body,
2291        such as a <code>WITH-xxx</code> macro,
2292        even if there aren't any parameters,
2293        you should leave space for them anyway.
2294        For example, if you invent <code>WITH-LIGHTS-ON</code>,
2295        do not make the call to it look like
2296        <code>(defmacro with-lights-on (&amp;body b) ...)</code>.
2297        Instead, do <code>(defmacro with-lights-on (() &amp;body b) ...)</code>.
2298        That way, if parameters are needed in the future,
2299        you can add them without necessarily having to change
2300        all the uses of the macro.
2301      </p>
2302    </BODY>
2303  </STYLEPOINT>
2304  <STYLEPOINT title="EVAL-WHEN">
2305    <SUMMARY>
2306      When using <code>EVAL-WHEN</code>, you should almost always use all of
2307      <code>(:compile-toplevel :load-toplevel :execute)</code>.
2308    </SUMMARY>
2309    <BODY>
2310      <p>
2311        Lisp evaluation happens at several times,
2312        some of them interleaved.
2313        Be aware of them when writing macros.
2314        <a href="https://fare.livejournal.com/146698.html">EVAL-WHEN considered harmful to your mental health</a>.
2315      </p>
2316      <p>
2317        In summary of the article linked above,
2318        unless you're doing truly advanced macrology,
2319        the only valid combination in an <code>EVAL-WHEN</code>
2320        is to include all of
2321        <code>(eval-when (:compile-toplevel :load-toplevel :execute) ...)</code>
2322      </p>
2323      <p>
2324        You must use
2325        <code>(eval-when (:compile-toplevel :load-toplevel :execute) ...)</code>
2326        whenever you define functions, types, classes, constants, variables, etc.,
2327        that are going to be used in macros.
2328      </p>
2329      <p>
2330        It is usually an error to omit the <code>:execute</code>,
2331        because it prevents <code>LOAD</code>ing the source rather than the fasl.
2332        It is usually an error to omit the <code>:load-toplevel</code>
2333        (except to modify e.g. readtables and compile-time settings),
2334        because it prevents <code>LOAD</code>ing future files
2335        or interactively compiling code
2336        that depends on the effects that happen at compile-time,
2337        unless the current file was <code>COMPILE-FILE</code>d
2338        within the same Lisp session.
2339      </p>
2340      <p>
2341        Regarding variables, note that because macros may or may not
2342        be expanded in the same process that runs the expanded code,
2343        you must not depend on compile-time and runtime effects
2344        being either visible or invisible at the other time.
2345        There are still valid uses of variables in macros:
2346      </p>
2347      <ul>
2348        <li>
2349          Some variables may hold dictionaries
2350          for some new kind of definition and other meta-data.
2351          If such meta-data is to be visible at runtime and/or in other files,
2352          you must make sure that the macro expands into code that
2353          will register the definitions to those meta-data structures
2354          at load-time,
2355          in addition to effecting the registration at compile-time.
2356          Typically, your top-level definitions expand
2357          to code that does the registration.
2358          if your code doesn't expand at the top-level,
2359          you can sometimes use <code>LOAD-TIME-VALUE</code> for good effect.
2360          In extreme cases, you may have to use
2361          <code>ASDF-FINALIZERS:EVAL-AT-TOPLEVEL</code>.
2362        </li>
2363        <li>
2364          Some variables may hold temporary data
2365          that is only used at compile-time in the same file,
2366          and can be cleaned up at the end of the file's compilation.
2367          Predefined such variables would include <code>*readtable*</code>
2368          or compiler-internal variables holding
2369          the current optimization settings.
2370          You can often manage existing and new such variables using
2371          the <code>:AROUND-COMPILE</code> hooks of <code>ASDF</code>.
2372        </li>
2373      </ul>
2374    </BODY>
2375  </STYLEPOINT>
2376  <STYLEPOINT title="Read-time evaluation">
2377    <SUMMARY>
2378      You should use <code>#.</code> sparingly,
2379      and you must avoid read-time side-effects.
2380    </SUMMARY>
2381    <BODY>
2382      <p>
2383        The <code>#.</code> standard read-macro
2384        will read one object, evaluate the object, and
2385        have the reader return the resulting value.
2386      </p>
2387      <p>
2388        You must not use it where other idioms will do, such as
2389        using <code>EVAL-WHEN</code> to evaluate side-effects at compile-time,
2390        using a regular macro to return an expression computed at compile-time,
2391        using <code>LOAD-TIME-VALUE</code> to compute it at load-time.
2392      </p>
2393      <p>
2394        Read-time evaluation is often used as a quick way
2395        to get something evaluated at compile time
2396        (actually "read time" but it amounts to the same thing).
2397        If you use this, the evaluation MUST NOT have any side effects
2398        and MUST NOT depend on any variable global state.
2399        The <code>#.</code> should be treated as a way
2400        to force "constant-folding"
2401        that a sufficiently-clever compiler
2402        could have figure out all by itself,
2403        when the compiler isn't sufficiently-clever
2404        and the difference matters.
2405      </p>
2406      <p>
2407        Another use of <code>#.</code> is to expand the equivalent of macros
2408        in places that are neither expressions nor (quasi)quotations,
2409        such as lambda-lists. However, if you find yourself using it a lot,
2410        it might be time to instead define macros to replace your consumers
2411        of lambda-lists with something that recognizes an extension.
2412      </p>
2413      <p>
2414        Whenever you are going to use <code>#.</code>,
2415        you should consider using <code>DEFCONSTANT</code> and its variants,
2416        possibly in an <code>EVAL-WHEN</code>,
2417        to give the value a name explaining what it means.
2418      </p>
2419    </BODY>
2420  </STYLEPOINT>
2421  <STYLEPOINT title="EVAL">
2422    <SUMMARY>
2423      You must not use <code>EVAL</code> at runtime.
2424    </SUMMARY>
2425    <BODY>
2426      <p>
2427        Places where it is actually appropriate to use <code>EVAL</code>
2428        are so few and far between that you must consult with your reviewers;
2429        it's easily misused.
2430      </p>
2431      <p>
2432        If your code manipulates symbols at runtime
2433        and needs to get the value of a symbol,
2434        use <code>SYMBOL-VALUE</code>, not <code>EVAL</code>.
2435      </p>
2436      <p>
2437        Often, what you really need is to write a macro,
2438        not to use <code>EVAL</code>.
2439      </p>
2440      <p>
2441        You may be tempted to use <code>EVAL</code> as a shortcut
2442        to evaluating expressions in a safe subset of the language.
2443        But it often requires more scrutiny to properly check and sanitize
2444        all possible inputs to such use of <code>EVAL</code>
2445        than to build a special-purpose evaluator.
2446        You must not use <code>EVAL</code> in this way at runtime.
2447      </p>
2448      <p>
2449        Places where it is OK to use <code>EVAL</code> are:
2450      </p>
2451      <ul>
2452        <li>
2453          The implementation of an interactive development tool.
2454        </li>
2455        <li>
2456          The build infrastructure.
2457        </li>
2458        <li>
2459          Backdoors that are part of testing frameworks.
2460          (You MUST NOT have such backdoors in production code.)
2461        </li>
2462        <li>
2463          Macros that fold constants at compile-time.
2464        </li>
2465        <li>
2466          Macros that register definitions to meta-data structures;
2467          the registration form is sometimes evaluated at compile-time
2468          as well as included in the macro-expansion,
2469          so it is immediately available to other macros.
2470        </li>
2471      </ul>
2472      <p>
2473        Note that in the latter case,
2474        if the macro isn't going to be used at the top-level,
2475        it might not be possible to make these definitions available
2476        as part of the expansion.
2477        The same phenomenon may happen in a <code>DEFTYPE</code> expansion,
2478        or in helper functions used by macros.
2479        In these cases, you may actually have to use
2480        <code>ASDF-FINALIZERS:EVAL-AT-TOPLEVEL</code> in your macro.
2481        It will not only <code>EVAL</code> your definitions
2482        at macro-expansion time for immediate availability,
2483        it will also save the form aside, for inclusion in a
2484        <code>(ASDF-FINALIZERS:FINAL-FORMS)</code>
2485        that you need to include at the end of the file being compiled
2486        (or before the form is needed).
2487        This way, the side-effects are present when loading the fasl
2488        without having compiled it as well as while compiling it;
2489        in either case, the form is made available at load-time.
2490        <code>ASDF-FINALIZERS</code> ensures that the form is present,
2491        by throwing an error if you omit it.
2492      </p>
2493    </BODY>
2494  </STYLEPOINT>
2495  <STYLEPOINT title="INTERN and UNINTERN">
2496    <SUMMARY>
2497      You must not use <code>INTERN</code> or <code>UNINTERN</code> at runtime.
2498    </SUMMARY>
2499    <BODY>
2500      <p>
2501        You must not use <code>INTERN</code> at runtime.
2502        Not only does it cons,
2503        it either creates a permanent symbol that won't be collected
2504        or gives access to internal symbols.
2505        This creates opportunities for memory leaks, denial of service attacks,
2506        unauthorized access to internals, clashes with other symbols.
2507      </p>
2508      <p>
2509        You must not <code>INTERN</code> a string
2510        just to compare it to a keyword;
2511        use <code>STRING=</code> or <code>STRING-EQUAL</code>.
2512      </p>
2513      <BAD_CODE_SNIPPET>
2514        (member (intern str :keyword) $keys) ; Bad
2515      </BAD_CODE_SNIPPET>
2516      <CODE_SNIPPET>
2517        (member str $keys :test #'string-equal) ; Better
2518      </CODE_SNIPPET>
2519      <p>
2520        You must not use <code>UNINTERN</code> at runtime.
2521        It can break code that relies on dynamic binding.
2522        It makes things harder to debug.
2523        You must not dynamically intern any new symbol,
2524        and therefore you need not dynamically unintern anything.
2525      </p>
2526      <p>
2527        You may of course use <code>INTERN</code> at compile-time,
2528        in the implementation of some macros.
2529        Even so, it is usually more appropriate
2530        to use abstractions on top of it, such as
2531        <code>ALEXANDRIA:SYMBOLICATE</code> or
2532        <code>ALEXANDRIA:FORMAT-SYMBOL</code>
2533        to create the symbols you need.
2534      </p>
2535
2536    </BODY>
2537  </STYLEPOINT>
2538</CATEGORY>
2539
2540<CATEGORY title="Data Representation">
2541  <STYLEPOINT title="NIL: empty-list, false and I Don't Know">
2542    <SUMMARY>
2543      Appropriately use or avoid using <code>NIL</code>.
2544    </SUMMARY>
2545    <BODY>
2546      <p>
2547        <code>NIL</code> can have several different interpretations:
2548      </p>
2549      <ul>
2550        <li>
2551          "False."
2552          In this case, use <code>NIL</code>.
2553          You should test for false <code>NIL</code>
2554          using the operator <code>NOT</code> or
2555          using the predicate function <code>NULL</code>.
2556        </li>
2557        <li>
2558          "Empty-list."
2559          In this case, use <code>'()</code>.
2560          (Be careful about quoting the empty-list when calling macros.)
2561          You should use <code>ENDP</code> to test for the empty list
2562          when the argument is known to be a proper list,
2563          or with <code>NULL</code> otherwise.
2564        </li>
2565        <li>
2566          A statement about some value being unspecified.
2567          In this case, you may use <code>NIL</code>
2568          if there is no risk of ambiguity anywhere in your code;
2569          otherwise you should use an explicit, descriptive symbol.
2570        </li>
2571        <li>
2572          A statement about some value being known not to exist.
2573          In this case, you should use an explicit, descriptive symbol
2574          instead of <code>NIL</code>.
2575        </li>
2576      </ul>
2577      <p>
2578        You must not introduce ambiguity in your data representations
2579        that will cause headaches for whoever has to debug code.
2580        If there is any risk of ambiguity,
2581        you should use an explicit, descriptive symbol or keyword
2582        for each case,
2583        instead of using <code>NIL</code> for either.
2584        If you do use <code>NIL</code>,
2585        you must make sure that the distinction is well documented.
2586      </p>
2587      <p>
2588        In many contexts,
2589        instead of representing "I don't know" as a particular value,
2590        you should instead use multiple values,
2591        one for the value that is known if any,
2592        and one to denote whether the value was known or found.
2593      </p>
2594
2595      <p>
2596        When working with database classes, keep in mind that
2597        <code>NIL</code> need not always map to <code>'NULL'</code>
2598        (and vice-versa)!
2599        The needs of the database may differ from the needs of the Lisp.
2600      </p>
2601    </BODY>
2602  </STYLEPOINT>
2603  <STYLEPOINT title="Do not abuse lists">
2604    <SUMMARY>
2605      You must select proper data representation.
2606      You must not abuse the <code>LIST</code> data structure.
2607    </SUMMARY>
2608    <BODY>
2609      <p>
2610        Even though back in 1958, LISP was short for "LISt Processing",
2611        its successor Common Lisp has been a modern programming language
2612        with modern data structures since the 1980s.
2613        You must use the proper data structures in your programs.
2614      </p>
2615      <p>
2616        You must not abuse the builtin (single-linked) <code>LIST</code>
2617        data structure where it is not appropriate,
2618        even though Common Lisp makes it especially easy to use it.
2619      </p>
2620      <p>
2621        You must only use lists
2622        when their performance characteristics
2623        is appropriate for the algorithm at hand:
2624        sequential iteration over the entire contents of the list.
2625      </p>
2626      <p>
2627        An exception where it is appropriate to use lists
2628        is when it is known in advance
2629        that the size of the list will remain very short
2630        (say, less than 16 elements).
2631      </p>
2632      <p>
2633        List data structures are often (but not always)
2634        appropriate for macros and functions used by macros at compile-time:
2635        indeed, not only is source code passed as lists in Common Lisp,
2636        but the macro-expansion and compilation processes
2637        will typically walk over the entire source code, sequentially, once.
2638        (Note that advanced macro systems don't directly use lists, but instead
2639        use abstract syntax objects that track source code location and scope;
2640        however there is no such advanced macro system
2641        in Common Lisp at this time.)
2642      </p>
2643      <p>
2644        Another exception where it is appropriate to use lists is
2645        for introducing literal constants
2646        that will be transformed into more appropriate data structures
2647        at compile-time or load-time.
2648        It is a good to have a function with a relatively short name
2649        to build your program's data structures from such literals.
2650      </p>
2651      <p>
2652        In the many cases when lists are not the appropriate data structure,
2653        various libraries such as
2654        <a href="http://cliki.net/cl-containers">cl-containers</a> or
2655        <a href="http://cliki.net/lisp-interface-library">lisp-interface-library</a>
2656        provide plenty of different data structures
2657        that should fulfill all the basic needs of your programs.
2658        If the existing libraries are not satisfactory, see above about
2659        <a href="#Using_Libraries">Using Libraries</a> and
2660        <a href="#Open-Sourcing_Code">Open-Sourcing Code</a>.
2661      </p>
2662    </BODY>
2663  </STYLEPOINT>
2664  <STYLEPOINT title="Lists vs. structures vs. multiple values">
2665    <SUMMARY>
2666      You should use the appropriate representation for product types.
2667    </SUMMARY>
2668    <BODY>
2669      <p>
2670        You should avoid using a list as anything
2671        besides a container of elements of like type.
2672        You must not use a list as method of passing
2673        multiple separate values of different types
2674        in and out of function calls.
2675        Sometimes it is convenient to use a list
2676        as a little ad hoc structure,
2677        i.e. "the first element of the list is a FOO, and the second is a BAR",
2678        but this should be used minimally
2679        since it gets harder to remember the little convention.
2680        You must only use a list that way
2681        when destructuring the list of arguments from a function,
2682        or creating a list of arguments
2683        to which to <code>APPLY</code> a function.
2684      </p>
2685      <p>
2686        The proper way to pass around an object
2687        comprising several values of heterogeneous types
2688        is to use a structure as defined by <code>DEFSTRUCT</code>
2689        or <code>DEFCLASS</code>.
2690      </p>
2691      <p>
2692        You should use multiple values only
2693        when function returns a small number of values
2694        that are meant to be destructured immediately by the caller,
2695        rather than passed together as arguments to further functions.
2696      </p>
2697      <p>
2698        You should not return a condition object
2699        as one of a set of multiple values.
2700        Instead, you should signal the condition to denote an unusual outcome.
2701      </p>
2702      <p>
2703        You should signal a condition to denote an unusual outcome,
2704        rather than relying on a special return type.
2705      </p>
2706    </BODY>
2707  </STYLEPOINT>
2708  <STYLEPOINT title="Lists vs. Pairs">
2709    <SUMMARY>
2710      Use the appropriate functions when manipulating lists.
2711    </SUMMARY>
2712    <BODY>
2713      <p>
2714        Use <code>FIRST</code> to access the first element of a list,
2715        <code>SECOND</code> to access the second element, etc.
2716        Use <code>REST</code> to access the tail of a list.
2717        Use <code>ENDP</code> to test for the end of the list.
2718      </p>
2719      <p>
2720        Use <code>CAR</code> and <code>CDR</code>
2721        when the cons cell is not being used to implement a proper list
2722        and is instead being treated as a pair of more general objects.
2723        Use <code>NULL</code> to test for <code>NIL</code> in this context.
2724      </p>
2725      <p>
2726        The latter case should be rare outside of alists,
2727        since you should be using structures and classes where they apply,
2728        and data structure libraries when you want trees.
2729      </p>
2730      <p>
2731        Exceptionally, you may use <code>CDADR</code> and other variants
2732        on lists when manually destructuring them,
2733        instead of using a combination of several list accessor functions.
2734        In this context, using <code>CAR</code> and <code>CDR</code>
2735        instead of <code>FIRST</code> and <code>REST</code> also makes sense.
2736        However, keep in mind that it might be more appropriate in such cases
2737        to use higher-level constructs such as
2738        <code>DESTRUCTURING-BIND</code> or <code>OPTIMA:MATCH</code>.
2739      </p>
2740    </BODY>
2741  </STYLEPOINT>
2742  <STYLEPOINT title="Lists vs. Arrays">
2743    <SUMMARY>
2744      You should use arrays rather than lists where random access matters.
2745    </SUMMARY>
2746    <BODY>
2747      <p>
2748        <code>ELT</code> has <i>O(n)</i> behavior when used on lists.
2749        If you are to use random element access on an object,
2750        use arrays and <code>AREF</code> instead.
2751      </p>
2752      <p>
2753        The exception is for code outside the critical path
2754        where the list is known to be small anyway.
2755      </p>
2756    </BODY>
2757  </STYLEPOINT>
2758  <STYLEPOINT title="Lists vs. Sets">
2759    <SUMMARY>
2760      You should only use lists as sets for very small lists.
2761    </SUMMARY>
2762    <BODY>
2763      <p>
2764        Using lists as representations of sets is a bad idea
2765        unless you know the lists will be small,
2766        for accessors are <i>O(n)</i> instead of <i>O(log n)</i>.
2767        For arbitrary big sets, use balanced binary trees,
2768        for instance using <code>lisp-interface-library</code>.
2769      </p>
2770      <p>
2771        If you still use lists as sets,
2772        you should not <code>UNION</code> lists just to search them.
2773      </p>
2774      <BAD_CODE_SNIPPET>
2775        (member foo (union list-1 list-2)) ; Bad
2776      </BAD_CODE_SNIPPET>
2777      <CODE_SNIPPET>
2778        (or (member foo list-1) (member foo list-2)) ; Better
2779      </CODE_SNIPPET>
2780      <p>
2781        Indeed, <code>UNION</code> not only conses unnecessarily,
2782        but it can be <i>O(n^2)</i> on some implementations,
2783        and is rather slow even when it's <i>O(n)</i>.
2784      </p>
2785    </BODY>
2786  </STYLEPOINT>
2787</CATEGORY>
2788
2789<CATEGORY title="Proper Forms">
2790  <p>
2791    You must follow the proper usage regarding
2792    well-known functions, macros and special forms.
2793  </p>
2794  <STYLEPOINT title="Defining Constants">
2795    <SUMMARY>
2796      You must use proper defining forms for constant values.
2797    </SUMMARY>
2798    <BODY>
2799      <p>
2800        The Lisp system we primarily use, SBCL, is very picky and
2801        signals a condition whenever a constant is redefined to a value not
2802        <code>EQL</code> to its previous setting.
2803        You must not use <code>DEFCONSTANT</code>
2804        when defining variables that are not
2805        numbers, characters, or symbols (including booleans and keywords).
2806        Instead, consistently use whichever alternative
2807        is recommended for your project.
2808      </p>
2809      <BAD_CODE_SNIPPET>
2810        ;; Bad
2811        (defconstant +google-url+ "https://www.google.com/")
2812        (defconstant +valid-colors+ '(red green blue))
2813      </BAD_CODE_SNIPPET>
2814
2815
2816
2817
2818      <p>
2819        Open-Source libraries may use
2820        <code>ALEXANDRIA:DEFINE-CONSTANT</code>
2821        for constants other than numbers, characters and symbols
2822        (including booleans and keywords).
2823        You may use the <code>:TEST</code> keyword argument
2824        to specify an equality predicate.
2825      </p>
2826      <CODE_SNIPPET>
2827        ;; Better, for Open-Source code:
2828        (define-constant +google-url+ "https://www.google.com/" :test #'string=)
2829        (define-constant +valid-colors+ '(red green blue))
2830      </CODE_SNIPPET>
2831      <p>
2832        Note that with optimizing implementations, such as SBCL or CMUCL,
2833        defining constants this way precludes any later redefinition
2834        short of <code>UNINTERN</code>ing the symbol
2835        and recompiling all its clients.
2836        This may make it "interesting" to debug things at the REPL
2837        or to deploy live code upgrades.
2838        If there is a chance that your "constants" are not going to be constant
2839        over the lifetime of your server processes
2840        after taking into consideration scheduled and unscheduled code patches,
2841        you should consider using
2842        <code>DEFPARAMETER</code> or <code>DEFVAR</code> instead,
2843        or possibly a variant of <code>DEFINE-CONSTANT</code>
2844        that builds upon some future library implementing global lexicals
2845        rather than <code>DEFCONSTANT</code>.
2846        You may keep the <code>+plus+</code> convention in these cases
2847        to document the intent of the parameter as a constant.
2848      </p>
2849      <p>
2850        Also note that <code>LOAD-TIME-VALUE</code> may help you
2851        avoid the need for defined constants.
2852      </p>
2853    </BODY>
2854  </STYLEPOINT>
2855  <STYLEPOINT title="Defining Functions">
2856    <SUMMARY>
2857      You should make proper use of
2858      <code>&amp;OPTIONAL</code> and
2859      <code>&amp;KEY</code> arguments.
2860      You should not use <code>&amp;AUX</code> arguments.
2861    </SUMMARY>
2862    <BODY>
2863      <p>
2864        You should avoid using <code>&amp;ALLOW-OTHER-KEYS</code>,
2865        since it blurs the contract of a function.
2866        Almost any real function (generic or not) allows a certain
2867        fixed set of keywords, as far as its caller is concerned,
2868        and those are part of its contract.
2869        If you are implementing a method of a generic function,
2870        and it does not need to know
2871        the values of some of the keyword arguments,
2872        you should explicitly <code>(DECLARE (IGNORE ...))</code>
2873        all the arguments that you are not using.
2874        You must not use <code>&amp;ALLOW-OTHER-KEYS</code>
2875        unless you explicitly want to disable checking of allowed keys
2876        for all methods when invoking the generic function on arguments
2877        that match this particular method.
2878        Note that the contract of a generic function belongs in
2879        the <code>DEFGENERIC</code>, not in the <code>DEFMETHOD</code>
2880        which is basically an "implementation detail" of the generic function
2881        as far as the caller of the generic is concerned.
2882      </p>
2883      <p>
2884        A case where <code>&amp;ALLOW-OTHER-KEYS</code> is appropriate
2885        is when you write a wrapper function to other some other functions
2886        that may vary (within the computation or during development),
2887        and pass around a plist as a <code>&amp;REST</code> argument.
2888      </p>
2889      <p>
2890        You should avoid using <code>&amp;AUX</code> arguments.
2891      </p>
2892      <p>
2893        You should avoid having both <code>&amp;OPTIONAL</code>
2894        and <code>&amp;KEY</code> arguments,
2895        unless it never makes sense to specify keyword arguments
2896        when the optional arguments are not all specified.
2897        You must not have non-<code>NIL</code> defaults
2898        to your <code>&amp;OPTIONAL</code> arguments
2899        when your function has both <code>&amp;OPTIONAL</code>
2900        and <code>&amp;KEY</code> arguments.
2901      </p>
2902      <p>
2903        For maximum portability of a library, it is good form
2904        that <code>DEFMETHOD</code> definitions should
2905        <code>(DECLARE (IGNORABLE ...))</code>
2906        all the required arguments that they are not using.
2907        Indeed, some implementations will issue a warning
2908        if you <code>(DECLARE (IGNORE ...))</code> those arguments,
2909        whereas other implementations will issue a warning
2910        if you fail to <code>(DECLARE (IGNORE ...))</code> them.
2911        <code>(DECLARE (IGNORABLE ...))</code> works on all implementations.
2912      </p>
2913      <p>
2914        You should avoid excessive nesting of binding forms inside a function.
2915        If your function ends up with massive nesting,
2916        you should probably break it up into several functions or macros.
2917        If it is really a single conceptual unit,
2918        consider using a macro such as <code>FARE-UTILS:NEST</code>
2919        to at least reduce the amount of indentation required.
2920        It is bad form to use <code>NEST</code> in typical short functions
2921        with 4 or fewer levels of nesting,
2922        but also bad form not to use it in the exceptional long functions
2923        with 10 or more levels of nesting.
2924        Use your judgment and consult your reviewers.
2925      </p>
2926
2927    </BODY>
2928  </STYLEPOINT>
2929  <STYLEPOINT title="Conditional Expressions">
2930    <SUMMARY>
2931      Use the appropriate conditional form.
2932    </SUMMARY>
2933    <BODY>
2934      <p>
2935        Use <code>WHEN</code> and <code>UNLESS</code>
2936        when there is only one alternative.
2937        Use <code>IF</code> when there are two alternatives
2938        and <code>COND</code> when there are several.
2939      </p>
2940      <p>
2941        However, don't use <code>PROGN</code> for an <code>IF</code> clause
2942        — use <code>COND</code>, <code>WHEN</code>, or <code>UNLESS</code>.
2943      </p>
2944      <p>
2945        Note that in Common Lisp,
2946        <code>WHEN</code> and <code>UNLESS</code> return <code>NIL</code>
2947        when the condition is not met.
2948        You may take advantage of it.
2949        Nevertheless, you may use an <code>IF</code>
2950        to explicitly return <code>NIL</code>
2951        if you have a specific reason to insist on the return value.
2952        You may similarly include a fall-through clause <code>(t nil)</code>
2953        as the last in your <cond>COND</cond>,
2954        or <code>(otherwise nil)</code> as the last in your <cond>CASE</cond>,
2955        to insist on the fact that the value returned by the conditional matters
2956        and that such a case is going to be used.
2957        You should omit the fall-through clause
2958        when the conditional is used for side-effects.
2959      </p>
2960      <p>
2961        You should prefer <code>AND</code> and <code>OR</code>
2962        when it leads to more concise code than using
2963        <code>IF</code>, <code>COND</code>,
2964        <code>WHEN</code> or <code>UNLESS</code>,
2965        and there are no side-effects involved.
2966        You may also use an <code>ERROR</code>
2967        as a side-effect in the final clause of an <code>OR</code>.
2968      </p>
2969      <p>
2970        You should only use <code>CASE</code> and <code>ECASE</code>
2971        to compare numbers, characters or symbols
2972        (including booleans and keywords).
2973        Indeed, <code>CASE</code> uses <code>EQL</code> for comparisons,
2974        so strings, pathnames and structures may not compare the way you expect,
2975        and <code>1</code> will differ from <code>1.0</code>.
2976      </p>
2977      <p>
2978        You should use <code>ECASE</code> and <code>ETYPECASE</code>
2979        in preference to <code>CASE</code> and <code>TYPECASE</code>.
2980        It is better to catch erroneous values early.
2981      </p>
2982      <p>
2983        You should not use <code>CCASE</code> or <code>CTYPECASE</code> at all.
2984        At least, you should not use them in server processes,
2985        unless you have quite robust error handling infrastructure
2986        and make sure not to leak sensitive data this way.
2987        These are meant for interactive use,
2988        and can cause interesting damage
2989        if they cause data or control to leak to attackers.
2990      </p>
2991      <p>
2992        You must not use gratuitous single quotes in <code>CASE</code> forms.
2993        This is a common error:
2994      </p>
2995      <BAD_CODE_SNIPPET>
2996        (case x ; Bad: silently returns NIL on mismatch
2997          ('bar :bar) ; Bad: catches QUOTE
2998          ('baz :baz)) ; Bad: also would catch QUOTE
2999      </BAD_CODE_SNIPPET>
3000      <CODE_SNIPPET>
3001        (ecase x ; Better: will error on mismatch
3002          ((bar) :bar) ; Better: won't match QUOTE
3003          ((baz) :baz)) ; Better: same reason
3004      </CODE_SNIPPET>
3005      <p>
3006        <code>'BAR</code> there is <code>(QUOTE BAR)</code>,
3007        meaning this leg of the case will be executed
3008        if <code>X</code> is <code>QUOTE</code>...
3009        and ditto for the second leg
3010        (though <code>QUOTE</code> will be caught by the first clause).
3011        This is unlikely to be what you really want.
3012      </p>
3013      <p>
3014        In <code>CASE</code> forms,
3015        you must use <code>otherwise</code> instead of <code>t</code>
3016        when you mean "execute this clause if the others fail".
3017        You must use <code>((t) ...)</code>
3018        when you mean "match the symbol T" rather than "match anything".
3019        You must also use <code>((nil) ...)</code>
3020        when you mean "match the symbol NIL" rather than "match nothing".
3021      </p>
3022      <p>
3023        Therefore, if you want to map booleans <code>NIL</code> and <code>T</code>
3024        to respective symbols <code>:BAR</code> and <code>:QUUX</code>,
3025        you should avoid the former way and do it the latter way:
3026      </p>
3027      <BAD_CODE_SNIPPET>
3028        (ecase x ; Bad: has no actual error case!
3029          (nil :bar)) ; Bad: matches nothing
3030          (t :quux)) ; Bad: matches anything
3031      </BAD_CODE_SNIPPET>
3032      <CODE_SNIPPET>
3033        (ecase x ; Better: will actually catch non-booleans
3034          ((nil) :bar)) ; Better: matches NIL
3035          ((t) :quux)) ; Better: matches T
3036      </CODE_SNIPPET>
3037    </BODY>
3038  </STYLEPOINT>
3039  <STYLEPOINT title="Identity, Equality and Comparisons">
3040    <SUMMARY>
3041      You should the appropriate predicates when comparing objects.
3042    </SUMMARY>
3043    <BODY>
3044      <p>
3045        Lisp provides four general equality predicates:
3046        <code>EQ</code>, <code>EQL</code>, <code>EQUAL</code>,
3047        and <code>EQUALP</code>,
3048        which subtly vary in semantics.
3049        Additionally, Lisp provides the type-specific predicates
3050        <code>=</code>, <code>CHAR=</code>, <code>CHAR-EQUAL</code>,
3051        <code>STRING=</code>, and <code>STRING-EQUAL</code>.
3052        Know the distinction!
3053      </p>
3054      <p>
3055        You should use <code>EQL</code> to compare objects and symbols
3056        for <em>identity</em>.
3057      </p>
3058      <p>
3059        You must not use <code>EQ</code> to compare numbers or characters.
3060        Two numbers or characters that are <code>EQL</code>
3061        are not required by Common Lisp to be <code>EQ</code>.
3062      </p>
3063      <p>
3064        When choosing between <code>EQ</code> and <code>EQL</code>,
3065        you should use <code>EQL</code> unless you are writing
3066        performance-critical low-level code.
3067        <code>EQL</code> reduces the opportunity
3068        for a class of embarrassing errors
3069        (i.e. if numbers or characters are ever compared).
3070        There may a tiny performance cost relative to <code>EQ</code>,
3071        although under SBCL, it often compiles away entirely.
3072        <code>EQ</code> is equivalent to <code>EQL</code> and type declarations,
3073        and use of it for optimization should be treated just like
3074        any such <a href="#Unsafe_Operations">unsafe operations</a>.
3075      </p>
3076      <p>
3077        You should use <code>CHAR=</code>
3078        for case-dependent character comparisons,
3079        and <code>CHAR-EQUAL</code> for case-ignoring character comparisons.
3080      </p>
3081      <p>
3082        You should use <code>STRING=</code>
3083        for case-dependent string comparisons,
3084        and <code>STRING-EQUAL</code> for case-ignoring string comparisons.
3085      </p>
3086      <p>
3087        A common mistake when using <code>SEARCH</code> on strings
3088        is to provide <code>STRING=</code> or <code>STRING-EQUAL</code>
3089        as the <code>:TEST</code> function.
3090        The <code>:TEST</code> function
3091        is given two sequence elements to compare.
3092        If the sequences are strings,
3093        the <code>:TEST</code> function is called on two characters,
3094        so the correct tests are <code>CHAR=</code> or <code>CHAR-EQUAL</code>.
3095        If you use <code>STRING=</code> or <code>STRING-EQUAL</code>,
3096        the result is what you expect,
3097        but in some Lisp implementations it's much slower.
3098        CCL (at least as of 8/2008)
3099        creates a one-character string upon each comparison, for example,
3100        which is very expensive.
3101      </p>
3102      <p>
3103        Also, you should use <code>:START</code> and <code>:END</code> arguments
3104        to <code>STRING=</code> or <code>STRING-EQUAL</code>
3105        instead of using <code>SUBSEQ</code>;
3106        e.g. <code>(string-equal (subseq s1 2 6) s2)</code> should instead be
3107        <code>(string-equal s1 s2 :start1 2 :end1 6)</code>
3108        This is preferable because it does not cons.
3109      </p>
3110      <p>
3111        You should use <code>ZEROP</code>,
3112        <code>PLUSP</code>, or <code>MINUSP</code>,
3113        instead of comparing a value to <code>0</code> or <code>0.0</code>.
3114      </p>
3115      <p>
3116        You must not use exact comparison on floating point numbers,
3117        since the vague nature of floating point arithmetic
3118        can produce little "errors" in numeric value.
3119        You should compare absolute values to a threshhold.
3120      </p>
3121      <p>
3122        You must use <code>=</code> to compare numbers,
3123        unless you really mean for <code>0</code>,
3124        <code>0.0</code> and <code>-0.0</code> to compare unequal,
3125        in which case you should use <code>EQL</code>.
3126        Then again, you must not usually use exact comparison
3127        on floating point numbers.
3128      </p>
3129      <p>
3130        Monetary amounts should be using decimal (rational) numbers
3131        to avoid the complexities and rounding errors
3132        of floating-point arithmetic.
3133        Libraries such as
3134        <a href="http://wukix.com/lisp-decimals">wu-decimal</a>
3135        may help you;
3136        once again, if this library is not satisfactory, see above about
3137        <a href="#Using_Libraries">Using Libraries</a> and
3138        <a href="#Open-Sourcing_Code">Open-Sourcing Code</a>.
3139      </p>
3140
3141    </BODY>
3142  </STYLEPOINT>
3143  <STYLEPOINT title="Iteration">
3144    <SUMMARY>
3145      Use the appropriate form for iteration.
3146    </SUMMARY>
3147    <BODY>
3148      <p>
3149        You should use simpler forms such as
3150        <code>DOLIST</code> or <code>DOTIMES</code>
3151        instead of <code>LOOP</code>
3152        in simple cases when you're not going to use any
3153        of the <code>LOOP</code> facilities such as
3154        bindings, collection or block return.
3155      </p>
3156      <p>
3157        Use the <code>WITH</code> clause of <code>LOOP</code>
3158        when it will avoid a level of nesting with <code>LET</code>.
3159        You may use <code>LET</code> if it makes it clearer
3160        to return one of bound variables after the <code>LOOP</code>,
3161        rather than use a clumsy <code>FINALLY (RETURN ...)</code> form.
3162      </p>
3163      <p>
3164        In the body of a <code>DOTIMES</code>,
3165        do not set the iteration variable.
3166        (CCL will issue a compiler warning if you do.)
3167      </p>
3168      <p>
3169        Most systems use unadorned symbols in the current package
3170        as <code>LOOP</code> keywords.
3171        Other systems use actual <code>:keywords</code>
3172        from the <code>KEYWORD</code> package
3173        as <code>LOOP</code> keywords.
3174        You must be consistent with the convention used in your system.
3175      </p>
3176    </BODY>
3177  </STYLEPOINT>
3178  <STYLEPOINT title="I/O">
3179    <SUMMARY>
3180      Use the appropriate I/O functions.
3181    </SUMMARY>
3182    <BODY>
3183      <p>
3184        When writing a server,
3185        code must not send output to the standard streams such as
3186        <code>*STANDARD-OUTPUT*</code> or <code>*ERROR-OUTPUT*</code>.
3187        Instead, code must use the proper logging framework
3188        to output messages for debugging.
3189        We are running as a server, so there is no console!
3190      </p>
3191      <p>
3192        Code must not use <code>PRINT-OBJECT</code>
3193        to communicate with a user —
3194        <code>PRINT-OBJECT</code> is for debugging purposes only.
3195        Modifying any <code>PRINT-OBJECT</code> method
3196        must not break any public interfaces.
3197      </p>
3198      <p>
3199        You should not use a sequence of <code>WRITE-XXX</code>
3200        where a single <code>FORMAT</code> string could be used.
3201        Using format allows you
3202        to parameterize the format control string in the future
3203        if the need arises.
3204      </p>
3205      <p>
3206        You should use <code>WRITE-CHAR</code> to emit a character
3207        rather than <code>WRITE-STRING</code>
3208        to emit a single-character string.
3209      </p>
3210      <p>
3211        You should not use <code>(format nil "~A" value)</code>;
3212        you should use <code>PRINC-TO-STRING</code> instead.
3213      </p>
3214      <p>
3215        You should use <code>~&lt;Newline&gt;</code>
3216        or <code>~@&lt;Newline&gt;</code> in format strings
3217        to keep them from wrapping in 100-column editor windows,
3218        or to indent sections or clauses to make them more readable.
3219      </p>
3220      <p>
3221        You should not use <code>STRING-UPCASE</code>
3222        or <code>STRING-DOWNCASE</code>
3223        on format control parameters;
3224        instead, it should use <code>"~:@(~A~)"</code> or <code>"~(~A~)"</code>.
3225      </p>
3226      <p>
3227        Be careful when using the <code>FORMAT</code> conditional directive.
3228        The parameters are easy to forget.
3229      </p>
3230      <dl>
3231        <dt>No parameters, e.g. <code>"~[Siamese~;Manx~;Persian~] Cat"</code></dt>
3232        <dd>
3233          Take one format argument, which should be an integer.
3234          Use it to choose a clause. Clause numbers are zero-based.
3235          If the number is out of range, just print nothing.
3236          You can provide a default value
3237          by putting a <code>":"</code> in front of the last <code>";"</code>.
3238          E.g. in <code>"~[Siamese~;Manx~;Persian~:;Alley~] Cat"</code>,
3239          an out-of-range arg prints <code>"Alley"</code>.
3240        </dd>
3241        <dt><code>:</code> parameter, e.g. <code>"~:[Siamese~;Manx~]"</code></dt>
3242        <dd>
3243          Take one format argument.  If it's <code>NIL</code>,
3244          use the first clause, otherwise use the second clause.
3245        </dd>
3246        <dt><code>@</code> parameter, e.g. <code>"~@[Siamese ~a~]"</code></dt>
3247        <dd>
3248          If the next format argument is true,
3249          use the choice, but do NOT take the argument.
3250          If it's false, take one format argument and print nothing.
3251          (Normally the clause uses the format argument.)
3252        </dd>
3253        <dt><code>#</code> parameter, e.g. <code>"~#[ none~; ~s~; ~s and ~s~]"</code></dt>
3254        <dd>
3255          Use the number of arguments to format
3256          as the number to choose a clause.
3257          The same as no parameters in all other ways.
3258          Here's the full hairy example:
3259          <code>"Items:~#[ none~; ~S~; ~S and ~S~:;~@{~#[~; and~] ~S~^ ,~}~]."</code>
3260        </dd>
3261      </dl>
3262    </BODY>
3263  </STYLEPOINT>
3264</CATEGORY>
3265
3266<CATEGORY title="Optimization">
3267  <STYLEPOINT title="Avoid Allocation">
3268    <SUMMARY>
3269      You should avoid unnecessary allocation of memory.
3270    </SUMMARY>
3271    <BODY>
3272      <p>
3273        In a language with automatic storage management (such as Lisp or Java),
3274        the colloquial phrase "memory leak" refers to situation
3275        where storage that is not actually needed
3276        nevertheless does not get deallocated,
3277        because it is still reachable.
3278      </p>
3279      <p>
3280        You should be careful that when you create objects,
3281        you don't leave them reachable after they are no longer needed!
3282      </p>
3283      <p>
3284        Here's a particular trap-for-the-unwary in Common Lisp.
3285        If you make an array with a fill pointer, and put objects in it,
3286        and then set the fill pointer back to zero,
3287        those objects are still reachable as far as Lisp goes
3288        (the Common Lisp spec says that it's still OK
3289        to refer to the array entries past the end of the fill pointer).
3290      </p>
3291      <p>
3292        Don't cons (i.e., allocate) unnecessarily.
3293        Garbage collection is not magic.
3294        Excessive allocation is usually a performance problem.
3295      </p>
3296    </BODY>
3297  </STYLEPOINT>
3298  <STYLEPOINT title="Unsafe Operations">
3299    <SUMMARY>
3300      You must only use faster unsafe operations
3301      when there is a clear performance need
3302      and you can document why it's correct.
3303    </SUMMARY>
3304    <BODY>
3305      <p>
3306        Common Lisp implementations often provide backdoors
3307        to compute some operations faster in an unsafe way.
3308        For instance, some libraries provide arithmetic operations
3309        that are designed to be used with fixnums only,
3310        and yield the correct result faster if provided proper arguments.
3311        The downside is that the result of such operations
3312        is incorrect in case of overflow, and can
3313        have undefined behavior when called with anything but fixnums.
3314      </p>
3315
3316      <p>
3317        More generally, unsafe operations
3318        will yield the correct result faster
3319        than would the equivalent safe operation
3320        if the arguments satisfy some invariant such as
3321        being of the correct type and small enough;
3322        however if the arguments fail to satisfy the required invariants,
3323        then the operation may have undefined behavior,
3324        such as crashing the software, or,
3325        which is sometimes worse, silently giving wrong answers.
3326        Depending on whether the software is piloting an aircraft
3327        or other life-critical device,
3328        or whether it is accounting for large amounts money,
3329        such undefined behavior can kill or bankrupt people.
3330        Yet proper speed can sometimes make the difference between
3331        software that's unusably slow and software that does its job,
3332        or between software that is a net loss
3333        and software that can yield a profit.
3334      </p>
3335      <p>
3336        You must not define or use unsafe operations without both
3337        profiling results indicating the need for this optimization,
3338        and careful documentation explaining why it is safe to use them.
3339        Unsafe operations should be restricted to internal functions;
3340        you should carefully documented how unsafe it is
3341        to use these functions with the wrong arguments.
3342        You should only use unsafe operations
3343        inside functions internal to a package and
3344        you should document the use of the declarations,
3345        since calling the functions with arguments of the wrong type
3346        can lead to undefined behavior.
3347        Use <code>check-type</code> in functions exported from a package
3348        to sanitize input arguments,
3349        so that internal functions are never passed illegal values.
3350      </p>
3351      <p>
3352        On some compilers,
3353        new unsafe operations
3354        can usually be defined by combining
3355        type declarations with an <code>OPTIMIZE</code> declaration
3356        that has sufficiently high <code>SPEED</code> and low <code>SAFETY</code>.
3357        In addition to providing more speed for production code,
3358        such declarations may more helpful
3359        than <code>check-type</code> assertions
3360        for finding bugs at compile-time,
3361        on compilers that have type inference.
3362        These compilers may interpret those declarations as assertions
3363        if you switch to safer and slower optimize settings;
3364        this is good to locate a dynamic error in your code during development,
3365        but is not to be used for production code since
3366        it defeats the purpose of declarations as a performance trick.
3367      </p>
3368
3369    </BODY>
3370  </STYLEPOINT>
3371  <STYLEPOINT title="DYNAMIC-EXTENT">
3372    <SUMMARY>
3373      You should only use <code>DYNAMIC-EXTENT</code>
3374      where it matters for performance,
3375      and you can document why it is correct.
3376    </SUMMARY>
3377    <BODY>
3378      <p>
3379        <code>DYNAMIC-EXTENT</code> declarations are
3380        a particular case of
3381        <a href="#Unsafe_Operations">unsafe operations</a>.
3382      </p>
3383      <p>
3384        The purpose of a <code>DYNAMIC-EXTENT</code> declaration
3385        is to improve performance by reducing garbage collection
3386        in cases where it appears to be obvious that an object's lifetime
3387        is within the "dynamic extent" of a function.
3388        That means the object is created at some point
3389        after the function is called, and
3390        the object is always inaccessible after the function exits by any means.
3391      </p>
3392      <p>
3393        By declaring a variable or a local function <code>DYNAMIC-EXTENT</code>,
3394        the programmer <em>asserts</em> to Lisp
3395        that any object that is ever a value of that variable
3396        or the closure that is the definition of the function
3397        has a lifetime within the dynamic extent of the (innermost) function
3398        that declares the variable.
3399      </p>
3400      <p>
3401        The Lisp implementation is then free to use that information
3402        to make the program faster.
3403        Typically, Lisp implementations can take advantage of this knowledge
3404        to stack-allocate:
3405      </p>
3406      <ul>
3407        <li>
3408          The lists created to store <code>&amp;REST</code> parameters.
3409        </li>
3410        <li>
3411          Lists, vectors and structures allocated within a function.
3412        </li>
3413        <li>
3414          Closures.
3415        </li>
3416      </ul>
3417      <p>
3418        If the assertion is wrong, i.e. if the programmer's claim is not true,
3419        the results can be <em>catastrophic</em>:
3420        Lisp can terminate any time after the function returns,
3421        or it can hang forever, or — worst of all —
3422        it can produce incorrect results without any runtime error!
3423      </p>
3424      <p>
3425        Even if the assertion is correct,
3426        future changes to the function might introduce
3427        a violation of the assertion.
3428        This increases the danger.
3429      </p>
3430      <p>
3431        In most cases, such objects are ephemeral.
3432        Modern Lisp implementations use generational garbage collectors,
3433        which are quite efficient under these circumstances.
3434      </p>
3435      <p>
3436        Therefore, <code>DYNAMIC-EXTENT</code> declarations
3437        should be used sparingly. You must only use them if:
3438      </p>
3439      <ol>
3440        <li>
3441          There is some good reason to think that the overall effect
3442          on performance is noticeable, and
3443        </li>
3444        <li>
3445          It is absolutely clear that the assertion is true.
3446        </li>
3447        <li>
3448          It is quite unlikely that the code will be changed
3449          in ways that cause the declaration to become false.
3450        </li>
3451      </ol>
3452      <p>
3453        Point (1) is a special case of
3454        the principle of avoiding premature optimization.
3455        An optimization like this only matters if such objects
3456        are allocated at a very high rate, e.g. "inside an inner loop".
3457      </p>
3458      <p>
3459        Note that is relatively easy to ascertain that
3460        a function will not escape the dynamic extent of the current call frame
3461        by analyzing where the function is called and
3462        what other functions it is passed to;
3463        therefore, you should somewhat wary of declaring a function
3464        <code>DYNAMIC-EXTENT</code>, but this is not a high-stress declaration.
3465        On the other hand, it is much harder to ascertain that
3466        none of the objects ever bound or assigned to that variable
3467        and none of their sub-objects
3468        will escape the dynamic extent of the current call frame,
3469        and that they still won't in any future modification of a function.
3470        Therefore, you should be extremely wary
3471        of declaring a variable <code>DYNAMIC-EXTENT</code>.
3472      </p>
3473      <p>
3474        It's usually hard to predict the effect of such optimization on performance.
3475        When writing a function or macro
3476        that is part of a library of reusable code,
3477        there's no a priori way to know how often the code will run.
3478        Ideally, tools would be available to discover
3479        the availability and suitability of using such an optimization
3480        based on running simulations and test cases, but
3481        in practice this isn't as easy as it ought to be.
3482        It's a tradeoff.
3483        If you're very, very sure that the assertion is true
3484        (that any object bound to the variable and any of its sub-objects
3485        are only used within the dynamic extent of the specified scope),
3486        and it's not obvious how much time will be saved
3487        and it's not easy to measure,
3488        then it may be better to put in the declaration than to leave it out.
3489        (Ideally it would be easier to make such measurements
3490        than it actually is.)
3491      </p>
3492    </BODY>
3493  </STYLEPOINT>
3494  <STYLEPOINT title="REDUCE vs APPLY">
3495    <SUMMARY>
3496      You should use <code>REDUCE</code>
3497      instead of <code>APPLY</code> where appropriate.
3498    </SUMMARY>
3499    <BODY>
3500      <p>
3501        You should use <code>REDUCE</code>
3502        instead of <code>APPLY</code> and a consed-up list,
3503        where the semantics of the first operator argument
3504        otherwise guarantees the same semantics.
3505        Of course, you must use <code>APPLY</code>
3506        if it does what you want and <code>REDUCE</code> doesn't.
3507        For instance:
3508      </p>
3509      <BAD_CODE_SNIPPET>
3510        ;; Bad
3511        (apply #'+ (mapcar #'acc frobs))
3512      </BAD_CODE_SNIPPET>
3513      <CODE_SNIPPET>
3514        ;; Better
3515        (reduce #'+ frobs :key #'acc :initial-value 0)
3516      </CODE_SNIPPET>
3517      <p>
3518        This is preferable because it does not do extra consing,
3519        and does not risk going beyond <code>CALL-ARGUMENTS-LIMIT</code>
3520        on implementations where that limit is small,
3521        which could blow away the stack on long lists
3522        (we want to avoid gratuitous non-portability in our code).
3523      </p>
3524      <p>
3525        However, you must be careful not to use <code>REDUCE</code>
3526        in ways that needlessly increase
3527        the complexity class of the computation.
3528        For instance, <code>(REDUCE 'STRCAT ...)</code> is <i>O(n^2)</i>
3529        when an appropriate implementation is only <i>O(n)</i>.
3530        Moreover, <code>(REDUCE 'APPEND ...)</code>
3531        is also <i>O(n^2)</i> unless you specify <code>:FROM-END T</code>.
3532        In such cases, you MUST NOT use <code>REDUCE</code>,
3533        and you MUST NOT use <code>(APPLY 'STRCAT ...)</code>
3534        or <code>(APPLY 'APPEND ...)</code> either.
3535        Instead you MUST use proper abstractions
3536        from a suitable library (that you may have to contribute to)
3537        that properly handles those cases
3538        without burdening users with implementation details.
3539        See for instance <code>UIOP:REDUCE/STRCAT</code>.
3540      </p>
3541
3542    </BODY>
3543  </STYLEPOINT>
3544  <STYLEPOINT title="Avoid NCONC">
3545    <SUMMARY>
3546      You should not use <code>NCONC</code>;
3547      you should use <code>APPEND</code> instead,
3548      or better, better data structures.
3549    </SUMMARY>
3550    <BODY>
3551      <p>
3552        You should almost never use <code>NCONC</code>.
3553        You should use <code>APPEND</code>
3554        when you don't depend on any side-effect.
3555        You should use <code>ALEXANDRIA:APPENDF</code>
3556        when you need to update a variable.
3557        You should probably not depend on games
3558        being played with the <code>CDR</code>
3559        of the current CONS cell
3560        (which some might argue is suggested but not guaranteed by the specification);
3561        if you do, you must include a prominent
3562        comment explaining the use of <code>NCONC</code>;
3563        and you should probably reconsider your data representation strategy.
3564      </p>
3565      <p>
3566        By extension, you should avoid <code>MAPCAN</code>
3567        or the <code>NCONC</code> feature of <code>LOOP</code>.
3568        You should instead respectively use
3569        <code>ALEXANDRIA:MAPPEND</code>
3570        and the <code>APPEND</code> feature of <code>LOOP</code>.
3571      </p>
3572      <p>
3573        <code>NCONC</code> is very seldom a good idea,
3574        since its time complexity class is no better than <code>APPEND</code>,
3575        its space complexity class also is no better than <code>APPEND</code>
3576        in the common case where no one else is sharing the side-effected list,
3577        and its bug complexity class is way higher than <code>APPEND</code>.
3578      </p>
3579      <p>
3580        If the small performance hit due
3581        to <code>APPEND</code> vs. <code>NCONC</code>
3582        is a limiting factor in your program,
3583        you have a big problem and are probably using the wrong data structure:
3584        you should be using sequences with constant-time append
3585        (see Okasaki's book, and add them to lisp-interface-library),
3586        or more simply you should be accumulating data in a tree
3587        that will get flattened once in linear time
3588        after the accumulation phase is complete.
3589      </p>
3590      <p>
3591        You may only use <code>NCONC</code>, <code>MAPCAN</code>
3592        or the <code>NCONC</code> feature of <code>LOOP</code>
3593        in low-level functions where performance matters,
3594        where the use of lists as a data structure has been vetted
3595        because these lists are known to be short,
3596        and when the function or expression the result of which are accumulated
3597        explicitly promises in its contract that it only returns fresh lists
3598        (in particular, it can't be a constant quote or backquote expression).
3599        Even then, the use of such primitives must be rare,
3600        and accompanied by justifying documentation.
3601      </p>
3602    </BODY>
3603  </STYLEPOINT>
3604</CATEGORY>
3605
3606<CATEGORY title="Pitfalls">
3607  <STYLEPOINT title="#'FUN vs. 'FUN">
3608    <SUMMARY>
3609      You should usually refer to a function as <code>#'FUN</code> rather than <code>'FUN</code>.
3610    </SUMMARY>
3611    <BODY>
3612      <p>
3613        The former, which reads as <code>(FUNCTION FUN)</code>,
3614        refers to the function object, and is lexically scoped.
3615        The latter, which reads as <code>(QUOTE FUN)</code>,
3616        refers to the symbol, which when called
3617        uses the global <code>FDEFINITION</code> of the symbol.
3618      </p>
3619      <p>
3620        When using functions that take a functional argument
3621        (e.g., <code>MAPCAR</code>, <code>APPLY</code>,
3622        <code>:TEST</code> and <code>:KEY</code> arguments),
3623        you should use the <code>#'</code> to refer to the function,
3624        not just single quote.
3625      </p>
3626      <p>
3627        An exception is when you explicitly want dynamic linking,
3628        because you anticipate that
3629        the global function binding will be updated.
3630      </p>
3631      <p>
3632        Another exception is when you explicitly want to access
3633        a global function binding,
3634        and avoid a possible shadowing lexical binding.
3635        This shouldn't happen often, as it is usually a bad idea
3636        to shadow a function when you will want to use the shadowed function;
3637        just use a different name for the lexical function.
3638      </p>
3639      <p>
3640        You must consistently use either <code>#'(lambda ...)</code>
3641        or <code>(lambda ...)</code> without <code>#'</code> everywhere.
3642        Unlike the case of <code>#'symbol</code> vs <code>'symbol</code>,
3643        it is only a syntactic difference with no semantic impact,
3644        except that the former works on Genera and the latter doesn't.
3645
3646        You must use the former style if your code is intended as a library
3647        with maximal compatibility to all Common Lisp implementations;
3648        otherwise, it is optional which style you use.
3649        <code>#'</code> may be seen as a hint
3650        that you're introducing a function in expression context;
3651        but the <code>lambda</code> itself is usually sufficient hint,
3652        and concision is good.
3653        Choose wisely, but above all,
3654        consistently with yourself and other developers,
3655        within a same file, package, system, project, etc.
3656      </p>
3657      <p>
3658        Note that if you start writing a new system
3659        in a heavily functional style,
3660        you may consider using
3661        <a href="http://cliki.net/lambda-reader">lambda-reader</a>,
3662        a system that lets you use the unicode character <code>λ</code>
3663        instead of <code>LAMBDA</code>.
3664        But you must not start using such a syntactic extension
3665        in an existing system without getting permission from other developers.
3666      </p>
3667    </BODY>
3668  </STYLEPOINT>
3669  <STYLEPOINT title="Pathnames">
3670    <SUMMARY>
3671      Common Lisp pathnames are tricky. Be aware of pitfalls. Use <code>UIOP</code>.
3672    </SUMMARY>
3673    <BODY>
3674      <p>
3675        It is surprisingly hard to properly deal with pathnames in Common Lisp.
3676      </p>
3677      <p>
3678        <code>ASDF 3</code> comes with a portability library <code>UIOP</code>
3679        that makes it <em>much</em> easier to deal with pathnames
3680        portably — and correctly — in Common Lisp.
3681        You should use it when appropriate.
3682      </p>
3683      <p>
3684        First, be aware of the discrepancies between
3685        the syntax of Common Lisp pathnames,
3686        which depends on which implementation and operating system
3687        you are using,
3688        and the native syntax of pathnames on your operating system.
3689        The Lisp syntax may involves quoting of special characters
3690        such as <code>#\.</code> and <code>#\*</code>, etc.,
3691        in addition to the quoting of
3692        <code>#\\</code> and <code>#\"</code> within strings.
3693        By contrast, your operating system's other
3694        system programming languages
3695        (shell, C, scripting languages)
3696        may only have one layer of quoting, into strings.
3697      </p>
3698      <p>
3699        Second, when using <code>MERGE-PATHNAMES</code>,
3700        be wary of the treatment of the <code>HOST</code> component,
3701        which matters a lot on non-Unix platforms
3702        (and even on some Unix implementations).
3703        You probably should be using
3704        <code>UIOP:MERGE-PATHNAMES*</code> or <code>UIOP:SUBPATHNAME</code>
3705        instead of <code>MERGE-PATHNAMES</code>,
3706        especially if your expectations for relative pathnames
3707        are informed by the way they work in Unix or Windows;
3708        otherwise you might hit weird bugs whereby on some implementations,
3709        merging a relative pathnames with an absolute pathname
3710        results in overriding the absolute pathname's host
3711        and replace it with the host from the value of
3712        <code>*DEFAULT-PATHNAME-DEFAULTS*</code>
3713        at the time the relative pathname was created.
3714      </p>
3715      <p>
3716        Third, be aware that <code>DIRECTORY</code>
3717        is not portable across implementations
3718        in how it handles wildcards, sub-directories, symlinks, etc.
3719        There again, <code>UIOP</code> provides several
3720        common abstractions to deal with pathnames,
3721        but only does so good a job.
3722        For a complete portable solution, use IOLib —
3723        though its Windows support lags behind.
3724      </p>
3725      <p>
3726        <code>LOGICAL-PATHNAME</code>s are not a portable abstraction,
3727        and should not be used in portable code.
3728        Many implementations have bugs in them, when they are supported at all.
3729        SBCL implements them very well,
3730        but strictly enforces the limitations on characters
3731        allowed by the standard, which restricts their applicability.
3732        Other implementations allow arbitrary characters in such pathnames,
3733        but in doing so are not being conformant,
3734        and are still incompatible with each other in many ways.
3735        You should use other pathname abstractions,
3736        such as <code>ASDF:SYSTEM-RELATIVE-PATHNAME</code> or
3737        the underlying <code>UIOP:SUBPATHNAME</code> and
3738        <code>UIOP:PARSE-UNIX-NAMESTRING</code>.
3739      </p>
3740
3741      <p>
3742        Finally, be aware that paths may change between
3743        the time you build the Lisp image for your application,
3744        and the time you run the application from its image.
3745        You should be careful to reset your image
3746        to forget irrelevant build-time paths and
3747        reinitialize any search path from current environment variables.
3748        <code>ASDF</code> for instance requires you to reset its paths
3749        with <code>UIOP:CLEAR-CONFIGURATION</code>.
3750        <code>UIOP</code> provides hooks
3751        to call functions before an image is dumped,
3752        from which to reset or <code>makunbound</code> relevant variables.
3753      </p>
3754
3755    </BODY>
3756  </STYLEPOINT>
3757  <STYLEPOINT title="SATISFIES">
3758    <SUMMARY>
3759      You must be careful when using a <code>SATISFIES</code> clause in a type specifier.
3760    </SUMMARY>
3761    <BODY>
3762      <p>
3763        Most Common Lisp implementations can't optimize
3764        based on a <code>SATISFIES</code> type,
3765        but many of them offer simple optimizations
3766        based on a type of the form
3767        <code>(AND FOO (SATISFIES BAR-P))</code>
3768        where the first term of the <code>AND</code> clause
3769        describes the structure of the object
3770        without any <code>SATISFIES</code>
3771        and the second term is the <code>SATISFIES</code>.
3772      </p>
3773      <BAD_CODE_SNIPPET>
3774        (deftype prime-number () (satisfies prime-number-p)) ; Bad
3775      </BAD_CODE_SNIPPET>
3776      <CODE_SNIPPET>
3777        (deftype prime-number () (and integer (satisfies prime-number-p)) ; Better
3778      </CODE_SNIPPET>
3779      <p>
3780        However, <code>AND</code> in the <code>DEFTYPE</code> language
3781        isn't a left-to-right short-circuit operator
3782        as in the expression language;
3783        it is a symmetrical connector that allows for reordering subterms
3784        and doesn't guarantee short-circuiting.
3785        Therefore, in the above example,
3786        you cannot rely on the test for <code>INTEGER</code>ness
3787        to protect the function <code>PRIME-NUMBER-P</code>
3788        from being supplied non-integer arguments
3789        to test for being of instances of the type.
3790        Implementations may, and some <em>will</em>,
3791        invoke <code>SATISFIES</code>-specified function
3792        at compile-time to test various relevant objects.
3793      </p>
3794      <p>
3795        That is why any function specified in a <code>SATISFIES</code> clause
3796        MUST accept objects of any type as argument to the function,
3797        and MUST be defined within an <code>EVAL-WHEN</code>
3798        (as well as any variable it uses or function it calls):
3799      </p>
3800      <BAD_CODE_SNIPPET>
3801        (defun prime-number-p (n) ; Doubly bad!
3802          (let ((m (abs n)))
3803            (if (&lt;= m *prime-number-cutoff*)
3804                (small-prime-number-p m)
3805                (big-prime-number-p m))))
3806      </BAD_CODE_SNIPPET>
3807      <CODE_SNIPPET>
3808        (eval-when (:compile-toplevel :load-toplevel :execute) ; Better
3809          (defun prime-number-p (n)
3810            (when (integerp n) ; Better
3811              (let ((m (abs n)))
3812                (if (&lt;= m *prime-number-cutoff*)
3813                    (small-prime-number-p m)
3814                    (big-prime-number-p m))))))
3815      </CODE_SNIPPET>
3816      <p>
3817        In particular, the above means that the
3818        <a href="https://www.lispworks.com/documentation/HyperSpec/Body/t_satisf.htm">example</a>
3819        used in the Common Lisp Standard is erroneous:
3820        <code>(and integer (satisfies evenp))</code>
3821        is <em>not</em> a safe, conformant type specifier to use,
3822        because <code>EVENP</code> will throw an error
3823        rather than return <code>NIL</code>
3824        when passed a non-integer as an argument.
3825      </p>
3826      <p>
3827        Finally, there is a catch when your <code>DEFTYPE</code> code expands
3828        to a <code>SATISFIES</code> with a dynamically generated function:
3829      </p>
3830      <ul>
3831        <li>
3832          You cannot control when implementations will or will not
3833          expand a <code>DEFTYPE</code>.
3834        </li>
3835        <li>
3836          The expansion itself cannot contain a function definition
3837          or any code in the expression language.
3838        </li>
3839        <li>
3840          You cannot control when the expansion is used,
3841          it may happen in a different process
3842          that didn't expand the definition.
3843        </li>
3844      </ul>
3845      <p>
3846        Therefore, you cannot merely create the function
3847        as a side-effect of expansion
3848        using <code>EVAL</code> at type-expansion time.
3849        The solution is to use
3850        <code>ASDF-FINALIZERS:EVAL-AT-TOPLEVEL</code> instead.
3851        See the very last point
3852        in the discussion about <a href="#EVAL">EVAL</a>.
3853      </p>
3854      <p>
3855        Common Lisp is hard to satisfy.
3856      </p>
3857    </BODY>
3858  </STYLEPOINT>
3859</CATEGORY>
3860
3861<HR/>
3862
3863<small>Credits:
3864   Adam Worrall, Dan Pierson, Matt Marjanovic, Matt Reklaitis,
3865   Paul Weiss, Scott McKay, Sundar Narasimhan,
3866   and several other people contributed.
3867   Special thanks to Steve Hain,
3868   and to the previous editors,
3869   in reverse chronological order Dan Weinreb and Jeremy Brown.
3870</small>
3871
3872<p align="right">
3873Revision 1.28
3874</p>
3875
3876
3877<address>
3878Robert Brown
3879</address>
3880
3881<address>
3882  <a HREF="mailto:tunes@google.com">François-René Rideau</a>
3883</address>
3884
3885
3886
3887</GUIDE>
3888