1
0
Fork 0
cl-sites/lisp-docs.github.io/cl-language-reference/environments.html

37 lines
35 KiB
HTML
Raw Normal View History

2024-03-13 23:00:32 +01:00
<!doctype html>
<html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-default docs-version-current docs-doc-page docs-doc-id-environments/index" data-has-hydrated="false">
<head>
<meta charset="UTF-8">
<meta name="generator" content="Docusaurus v3.0.1">
<title data-rh="true">Environments | Common Lisp (New) Language Reference</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://lisp-docs.github.io/cl-language-reference/img/1024px-Lisp_logo.svg.png"><meta data-rh="true" name="twitter:image" content="https://lisp-docs.github.io/cl-language-reference/img/1024px-Lisp_logo.svg.png"><meta data-rh="true" property="og:url" content="https://lisp-docs.github.io/cl-language-reference/environments"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="google-site-verification" content="Vzaw013_bfdKeUVG89Ch3W1zC9_vH9ID2dPB9Dz0vr0"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="Environments | Common Lisp (New) Language Reference"><meta data-rh="true" name="description" content="This chapter will discuss the difference between the startup environment, the evaluation environment, the compilation environment, the static lexical environment, and the dynamic environment."><meta data-rh="true" property="og:description" content="This chapter will discuss the difference between the startup environment, the evaluation environment, the compilation environment, the static lexical environment, and the dynamic environment."><link data-rh="true" rel="icon" href="img/favicon.ico"><link data-rh="true" rel="canonical" href="environments.html"><link data-rh="true" rel="alternate" href="environments.html" hreflang="en"><link data-rh="true" rel="alternate" href="environments.html" hreflang="x-default"><link data-rh="true" rel="preconnect" href="https://C1F2Q5VM6X-dsn.algolia.net" crossorigin="anonymous"><link rel="preconnect" href="https://www.google-analytics.com">
<link rel="preconnect" href="https://www.googletagmanager.com">
<script async src="https://www.googletagmanager.com/gtag/js?id=G-8TJCE4NSF8"></script>
<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","G-8TJCE4NSF8",{})</script>
<link rel="search" type="application/opensearchdescription+xml" title="Common Lisp (New) Language Reference" href="opensearch.xml"><link rel="stylesheet" href="assets/css/styles.f13b59fe.css">
<script src="assets/js/runtime~main.02699c25.js" defer="defer"></script>
<script src="assets/js/main.4f0a7a76.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="environments.html#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a href="../index.html" target="_blank" rel="noopener noreferrer" class="navbar__brand"><div class="navbar__logo"><img src="img/logo.svg" alt="Lisp Logo" class="themedComponent_mlkZ themedComponent--light_NVdE"><img src="img/logo.svg" alt="Lisp Logo" class="themedComponent_mlkZ themedComponent--dark_xIcU"></div><b class="navbar__title text--truncate">Common Lisp Docs</b></a><a href="../docs/tutorial/index.html" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">Tutorial</a><a href="index.html" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">Technical Reference</a><a href="../docs/whylisp.html" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">Why Lisp?</a><a href="../docs/howto.html" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">Guides</a></div><div class="navbar__items navbar__items--right"><a href="../docs/contribute.html" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">Contribute!</a><a href="../docs/help.html" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">Getting Help</a><a href="../docs/about.html" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">About</a><a href="../blog.html" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">Blog</a><a href="https://github.com/lisp-docs" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1
<div class="theme-admonition theme-admonition-tip admonition_xJq3 alert alert--success"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>tip</div><div class="admonitionContent_BuS1"><p>TODO: This chapter and article are stubs, please contribute by writing anything you can.</p></div></div>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="1-introduction">1 Introduction<a href="environments.html#1-introduction" class="hash-link" aria-label="Direct link to 1 Introduction" title="Direct link to 1 Introduction"></a></h2>
<p>The concept of an <em>environment</em> is present everywhere in the Common Lisp language. But it can be confusing, because there are many different types of environments, and several environments of the same type can exist simultaneously. In this chapter, we describe the different kinds of environment, what different roles they play, and when they are used.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="2-types-of-environment">2 Types of Environment<a href="environments.html#2-types-of-environment" class="hash-link" aria-label="Direct link to 2 Types of Environment" title="Direct link to 2 Types of Environment"></a></h2>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="21-run-time-environment">2.1 Run-Time Environment<a href="environments.html#21-run-time-environment" class="hash-link" aria-label="Direct link to 2.1 Run-Time Environment" title="Direct link to 2.1 Run-Time Environment"></a></h2>
<p>A <em>run-time environment</em> is an environment relative to which evaluations are performed and the effects of evaluations are stored.</p>
<p>For example, when a top-level form such as <code>(setq y (f x))</code> is evaluated, the current run-time environment is consulted to find a function definition for f and a variable definition for x in order to compute the value of the form <code>(f x)</code>. Then the current run-time environment is consulted again to find a variable definition for y so that the new value of y can be stored in the environment associated with y.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="22-compilation-environment">2.2 Compilation Environment<a href="environments.html#22-compilation-environment" class="hash-link" aria-label="Direct link to 2.2 Compilation Environment" title="Direct link to 2.2 Compilation Environment"></a></h2>
<p>A <em>compilation environment</em> is an environment maintained by the file compiler to record definitions found during compilation of a file. A new compilation environment is created each time a file is compiled, and is valid only for that file. It is no longer accessible when the compilation of the file terminates.</p>
<p>For example, the macro DEFUN does not define the function at compile time, but the compiler still records the fact that a function with the relevant name has been defined, so that when the name is referred to in a function call later in the file, the compiler can check that a function with that name will exist after the compiled file has been loaded, and it can check that the arguments of the function call are valid, given the lambda list of the DEFUN form.</p>
<p>The definitions of many operators, including DEFUN, contain phrases such as &quot;An implementation may choose to store information about the function for the purposes of compile-time error-checking (such as checking the number of arguments on calls), or to enable the function to be expanded inline.&quot; Such phrases implicitly refer to the compilation environment.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="23-lexical-environment">2.3 Lexical Environment<a href="environments.html#23-lexical-environment" class="hash-link" aria-label="Direct link to 2.3 Lexical Environment" title="Direct link to 2.3 Lexical Environment"></a></h2>
<p>A <em>lexical environment</em> is an environment maintained by the compiler, and it contains information about lexical definitions that the compiler encounters so that references to such definitions can be checked and connected to the corresponding definition.</p>
<p>For example, when the compiler processes a form such as <code>(block b ... (return-from b 234))</code>, this processing is done relative to a lexical environment. This lexical environment is augmented with a block definition for b for the purpose of processing the body of the
BLOCK form. When the <code>(return-from b 234)</code> form is encountered, the compiler consults the lexical environment to verify that b is the name of a block in that environment, and it connects the definition and the reference, so that, at run-time, control is transferred to the correct place as a result of the RETURN-FROM.</p>
<p>The lexical environment can be thought of a as an ordered sequence of entries where the last entry is the run-time environment from which the compilation was started. It is an ordered sequence, because some lexical forms can <em>shadow</em> others.<br>
<!-- -->For example in <code>(let ((x 10)) (+ (let ((x 20)) x) x))</code>, there are two references to variables named x, but they refer to different variables. One occurrence of x is in the body of the innermost LET, so when it is encountered by the compiler, the entry containing the binding <code>(x 20)</code> is encountered first, thereby allowing the compiler to resolve x to that definition. The other occurrence is outside the body of the innermost LET but inside the body of the outermost LET, so when it is encountered by the compiler, the entry containing the binding <code>(x 10)</code> is encountered, allowing the compiler to resolve that reference to the relevant binding.</p>
<p>A lexical environment contains definitions of lexical variables introduced by many constructs including LET and LET*. It contains local functions introduced by FLET and LABELS. It also contains definitions of blocks, TAGBODY tags, local macros introduced by MACROLET, local symbol macros introduced by SYMBOL-MACROLET.</p></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="theme-doc-footer-edit-meta-row row"><div class="col"><a href="https://github.com/lisp-docs/cl-language-reference/tree/main/docs/environments/index.md" target="_blank" rel="noopener noreferrer" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class="iconEdit_Z9Sw" aria-hidden="true"><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"></path></g></svg>Edit this page</a></div><div class="col lastUpdated_vwxv"><span class="theme-last-updated">Last updated<!-- --> by <b>daninus14</b></span></div></div></footer></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="chap-25/cf-c-dictionary/user-homedir-pathname_function.html"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">user-homedir-pathname</div></a><a class="pagination-nav__link pagination-nav__link--next" href="category/environments-dictionary.html"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">Environments Dictionary</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="environments.html#1-introduction" class="table-of-contents__link toc-highlight">1 Introduction</a></li><li><a href="environments.html#2-types-of-environment" class="table-of-contents__link toc-highlight">2 Types of Environment</a></li><li><a href="environments.html#21-run-time-environment" class="table-of-contents__link toc-highlight">2.1 Run-Time Environment</a></li><li><a href="environments.html#22-compilation-environment" class="table-of-contents__link toc-highlight">2.2 Compilation Environment</a></li><li><a href="environments.html#23-lexical-environment" class="table-of-contents__link toc-highlight">2.3 Lexical Environment</a></li></ul></div></div></div></div></main></div></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Docs</div><ul class="footer__items clean-list"><li class="footer__item"><a href="../docs/tutorial.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Common Lisp Tutorial</a></li><li class="footer__item"><a href="index.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Common Lisp Technical Reference</a></li><li class="footer__item"><a href="../docs/help.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Help</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://stackoverflow.com/questions/tagged/common-lisp" target="_blank" rel="noopener noreferrer" class="footer__link-item">Stack Overflow<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://discord.gg/hhk46CE" target="_blank" rel="noopener noreferrer" class="footer__link-item">Discord<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li
</body>
</html>