247 lines
174 KiB
HTML
247 lines
174 KiB
HTML
|
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||
|
<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"/><meta name="viewport" content="width=device-width, initial-scale=0.8"/><title>14.14 Linklets and the Core Compiler</title><link rel="stylesheet" type="text/css" href="../scribble.css" title="default"/><link rel="stylesheet" type="text/css" href="extras.css" title="default"/><link rel="stylesheet" type="text/css" href="../racket.css" title="default"/><link rel="stylesheet" type="text/css" href="../manual-style.css" title="default"/><link rel="stylesheet" type="text/css" href="../manual-racket.css" title="default"/><link rel="stylesheet" type="text/css" href="../manual-racket.css" title="default"/><link rel="stylesheet" type="text/css" href="../doc-site.css" title="default"/><script type="text/javascript" src="../scribble-common.js"></script><script type="text/javascript" src="../manual-racket.js"></script><script type="text/javascript" src="../manual-racket.js"></script><script type="text/javascript" src="../doc-site.js"></script><script type="text/javascript" src="../local-redirect/local-redirect.js"></script><script type="text/javascript" src="../local-redirect/local-user-redirect.js"></script><!--[if IE 6]><style type="text/css">.SIEHidden { overflow: hidden; }</style><![endif]--></head><body id="doc-racket-lang-org"><div class="tocset"><div class="tocview"><div class="tocviewlist tocviewlisttopspace"><div class="tocviewtitle"><table cellspacing="0" cellpadding="0"><tr><td style="width: 1em;"><a href="javascript:void(0);" title="Expand/Collapse" class="tocviewtoggle" onclick="TocviewToggle(this,"tocview_0");">►</a></td><td></td><td><a href="index.html" class="tocviewlink" data-pltdoc="x">The Racket Reference</a></td></tr></table></div><div class="tocviewsublisttop" style="display: none;" id="tocview_0"><table cellspacing="0" cellpadding="0"><tr><td align="right">1 </td><td><a href="model.html" class="tocviewlink" data-pltdoc="x">Language Model</a></td></tr><tr><td align="right">2 </td><td><a href="notation.html" class="tocviewlink" data-pltdoc="x">Notation for Documentation</a></td></tr><tr><td align="right">3 </td><td><a href="syntax.html" class="tocviewlink" data-pltdoc="x">Syntactic Forms</a></td></tr><tr><td align="right">4 </td><td><a href="data.html" class="tocviewlink" data-pltdoc="x">Datatypes</a></td></tr><tr><td align="right">5 </td><td><a href="structures.html" class="tocviewlink" data-pltdoc="x">Structures</a></td></tr><tr><td align="right">6 </td><td><a href="mzlib_class.html" class="tocviewlink" data-pltdoc="x">Classes and Objects</a></td></tr><tr><td align="right">7 </td><td><a href="mzlib_unit.html" class="tocviewlink" data-pltdoc="x">Units</a></td></tr><tr><td align="right">8 </td><td><a href="contracts.html" class="tocviewlink" data-pltdoc="x">Contracts</a></td></tr><tr><td align="right">9 </td><td><a href="match.html" class="tocviewlink" data-pltdoc="x">Pattern Matching</a></td></tr><tr><td align="right">10 </td><td><a href="control.html" class="tocviewlink" data-pltdoc="x">Control Flow</a></td></tr><tr><td align="right">11 </td><td><a href="concurrency.html" class="tocviewlink" data-pltdoc="x">Concurrency and Parallelism</a></td></tr><tr><td align="right">12 </td><td><a href="Macros.html" class="tocviewlink" data-pltdoc="x">Macros</a></td></tr><tr><td align="right">13 </td><td><a href="input-and-output.html" class="tocviewlink" data-pltdoc="x">Input and Output</a></td></tr><tr><td align="right">14 </td><td><a href="security.html" class="tocviewselflink" data-pltdoc="x">Reflection and Security</a></td></tr><tr><td align="right">15 </td><td><a href="os.html" class="tocviewlink" data-pltdoc="x">Operating System</a></td></tr><tr><td align="right">16 </td><td><a href="memory.html" class="tocviewlink" data-pltdoc="x">Memory Management</a></td></tr><tr><td align="right">17 </td><td><a href="unsafe.html" class="tocviewlink" data-pltdoc="x">Unsafe Operations</a></td></tr><tr><td align="right">18 </td><td><a href="runnin
|
||
|
marshaling, and evaluation. Racket’s implementations of modules,
|
||
|
macros, and top-level evaluation are all built on linklets. Racket
|
||
|
programmers generally do not encounter linklets directly, but the
|
||
|
<a href="linklets.html" class="RktModLink" data-pltdoc="x"><span class="RktSym">racket/linklet</span></a> library provides access to linklet
|
||
|
facilities.</p><p>A single Racket module (or collection of top-level forms) is typically
|
||
|
implemented by multiple linklets. For example, each phase of
|
||
|
evaluation that exists in a module is implemented in a separate
|
||
|
linklet. A linklet is also used for metadata such as the <a href="Module_Names_and_Loading.html#%28tech._module._path._index%29" class="techoutside" data-pltdoc="x"><span class="techinside">module
|
||
|
path index</span></a>es for a module’s <span class="RktSym"><a href="require.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._require%29%29" class="RktStxLink" data-pltdoc="x">require</a></span>s. These linklets, plus
|
||
|
some other metadata, are combined to form a <a name="(tech._linklet._bundle)"></a><span style="font-style: italic">linklet bundle</span>.
|
||
|
Information in a <a href="linklets.html#%28tech._linklet._bundle%29" class="techoutside" data-pltdoc="x"><span class="techinside">linklet bundle</span></a> is keyed by either a symbol or
|
||
|
a <a href="numbers.html#%28tech._fixnum%29" class="techoutside" data-pltdoc="x"><span class="techinside">fixnum</span></a>. A <a href="linklets.html#%28tech._linklet._bundle%29" class="techoutside" data-pltdoc="x"><span class="techinside">linklet bundle</span></a> containing
|
||
|
<a href="linklets.html#%28tech._linklet%29" class="techoutside" data-pltdoc="x"><span class="techinside">linklet</span></a>s can be marshaled to and from a byte stream by
|
||
|
<span class="RktSym"><a href="Writing.html#%28def._%28%28quote._~23~25kernel%29._write%29%29" class="RktValLink" data-pltdoc="x">write</a></span> and (with <span class="RktSym"><a href="Reading.html#%28def._%28%28quote._~23~25kernel%29._read-accept-compiled%29%29" class="RktValLink" data-pltdoc="x">read-accept-compiled</a></span> is enabled)
|
||
|
<span class="RktSym"><a href="Reading.html#%28def._%28%28quote._~23~25kernel%29._read%29%29" class="RktValLink" data-pltdoc="x">read</a></span>.</p><p>When a Racket module has submodules, the <a href="linklets.html#%28tech._linklet._bundle%29" class="techoutside" data-pltdoc="x"><span class="techinside">linklet bundles</span></a> for
|
||
|
the module and the submodules are grouped together in a
|
||
|
<a name="(tech._linklet._directory)"></a><span style="font-style: italic">linklet directory</span>. A <a href="linklets.html#%28tech._linklet._directory%29" class="techoutside" data-pltdoc="x"><span class="techinside">linklet directory</span></a> can have
|
||
|
nested linklet directories. Information in a linklet directory is
|
||
|
keyed by <span class="RktVal">#f</span> or a symbol, where <span class="RktVal">#f</span> must be mapped to
|
||
|
a <a href="linklets.html#%28tech._linklet._bundle%29" class="techoutside" data-pltdoc="x"><span class="techinside">linklet bundle</span></a> (if anything) and each symbol must be mapped
|
||
|
to a <a href="linklets.html#%28tech._linklet._directory%29" class="techoutside" data-pltdoc="x"><span class="techinside">linklet directory</span></a>. A <a href="linklets.html#%28tech._linklet._directory%29" class="techoutside" data-pltdoc="x"><span class="techinside">linklet directory</span></a> can be
|
||
|
equivalently viewed as a mapping from a lists of symbols to a
|
||
|
<a href="linklets.html#%28tech._linklet._bundle%29" class="techoutside" data-pltdoc="x"><span class="techinside">linklet bundle</span></a>. Like <a href="linklets.html#%28tech._linklet._bundle%29" class="techoutside" data-pltdoc="x"><span class="techinside">linklet bundles</span></a>, a <a href="linklets.html#%28tech._linklet._directory%29" class="techoutside" data-pltdoc="x"><span class="techinside">linklet
|
||
|
directory</span></a> can be marshaled to and from a byte stream by
|
||
|
<span class="RktSym"><a href="Writing.html#%28def._%28%28quote._~23~25kernel%29._write%29%29" class="RktValLink" data-pltdoc="x">write</a></span> and <span class="RktSym"><a href="Reading.html#%28def._%28%28quote._~23~25kernel%29._read%29%29" class="RktValLink" data-pltdoc="x">read</a></span>; the marshaled form allows individual
|
||
|
<a href="linklets.html#%28tech._linklet._bundle%29" class="techoutside" data-pltdoc="x"><span class="techinside">linklet bundles</span></a> to be loaded independently.</p><p>A linklet consists of a set of variable definitions and expressions,
|
||
|
an exported subset of the defined variable names, a set of variables to export
|
||
|
from the linklet despite having no corresponding definition, and a set
|
||
|
of imports that provide other variables for the linklet to use. To run
|
||
|
a linklet, it is instantiated as as <a name="(tech._linklet._instance)"></a><span style="font-style: italic">linklet instance</span> (or
|
||
|
just <span style="font-style: italic">instance</span>, for short). When a linklet is instantiated,
|
||
|
it receives other <a href="linklets.html#%28tech._linklet._instance%29" class="techoutside" data-pltdoc="x"><span class="techinside">linklet instances</span></a> for its imports, and it
|
||
|
extracts a specified set of variables that are exported from each of
|
||
|
the given instances. The newly created <a href="linklets.html#%28tech._linklet._instance%29" class="techoutside" data-pltdoc="x"><span class="techinside">linklet instance</span></a>
|
||
|
provides its exported variables for use by other linklets or for
|
||
|
direct access via <span class="RktSym"><a href="linklets.html#%28def._%28%28lib._racket%2Flinklet..rkt%29._instance-variable-value%29%29" class="RktValLink" data-pltdoc="x">instance-variable-value</a></span>. A <a href="linklets.html#%28tech._linklet._instance%29" class="techoutside" data-pltdoc="x"><span class="techinside">linklet
|
||
|
instance</span></a> can be synthesized directly with <span class="RktSym"><a href="linklets.html#%28def._%28%28lib._racket%2Flinklet..rkt%29._make-instance%29%29" class="RktValLink" data-pltdoc="x">make-instance</a></span>.</p><p>A linklet is created by compiling an enriched S-expression
|
||
|
representation of its source. Since linklets exist below the layer of
|
||
|
macros and syntax objects, linklet compilation does not use
|
||
|
<a href="syntax-model.html#%28tech._syntax._object%29" class="techoutside" data-pltdoc="x"><span class="techinside">syntax objects</span></a>. Instead, linklet compilation uses
|
||
|
<a name="(tech._correlated._object)"></a><span style="font-style: italic">correlated objects</span>, which are like <a href="syntax-model.html#%28tech._syntax._object%29" class="techoutside" data-pltdoc="x"><span class="techinside">syntax objects</span></a>
|
||
|
without lexical-context information and without the constraint that
|
||
|
content is coerced to correlated objects. Using an S-expression or
|
||
|
<a href="linklets.html#%28tech._correlated._object%29" class="techoutside" data-pltdoc="x"><span class="techinside">correlated object</span></a>, the grammar of a linklet as recognized by
|
||
|
<span class="RktSym"><a href="linklets.html#%28def._%28%28lib._racket%2Flinklet..rkt%29._compile-linklet%29%29" class="RktValLink" data-pltdoc="x">compile-linklet</a></span> is</p><blockquote class="leftindent"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><table cellspacing="0" cellpadding="0" class="RktBlk"><tr><td><span class="RktPn">(</span><span class="RktSym">linklet</span><span class="hspace"> </span><span class="RktPn">[</span><span class="RktPn">[</span><span class="RktVar">imported-id/renamed</span><span class="hspace"> </span><span class="RktMeta">...</span><span class="RktPn">]</span><span class="hspace"> </span><span class="RktMeta">...</span><span class="RktPn">]</span></td></tr><tr><td><span class="hspace"> </span><span class="RktPn">[</span><span class="RktVar">exported-id/renamed</span><span class="hspace"> </span><span class="RktMeta">...</span><span class="RktPn">]</span></td></tr><tr><td><span class="hspace"> </span><span class="RktVar">defn-or-expr</span><span class="hspace"> </span><span class="RktMeta">...</span><span class="RktPn">)</span></td></tr></table></td></tr><tr><td><span class="stt"> </span></td></tr><tr><td><table cellspacing="0" cellpadding="0" class="specgrammar"><tr><td align="right" valign="baseline"><span class="RktVar">imported-id/renamed</span></td><td align="left" valign="baseline"><span class="stt"> </span></td><td align="center" valign="baseline">=</td><td align="left" valign="baseline"><span class="stt"> </span></td><td align="left" valign="baseline"><span class="RktVar">imported-id</span></td></tr><tr><td align="right" valign="baseline"><span class="stt"> </span></td><td align="left" valign="baseline"><span class="stt"> </span></td><td align="center" valign="baseline">|</td><td align="left" valign="baseline"><span class="stt"> </span></td><td align="left" valign="baseline"><span class="RktPn">(</span><span class="RktVar">external-imported-id</span><span class="hspace"> </span><span class="RktVar">internal-imported-id</span><span class="RktPn">)</span></td></tr><tr><td align="right" valign="baseline"><span class="stt"> </span></td><td align="left" valign="baseline"><span class="stt"> </span></td><td align="center" valign="baseline"><span class="stt"> </span></td><td align="left" valign="baseline"><span class="stt"> </span></td><td align="left" valign="baseline"><span class="stt"> </span></td></tr><tr><td align="right" valign="baseline"><span class="RktVar">exported-id/renamed</span></td><td align="left" valign="baseline"><span class="stt"> </span></td><td align="center" valign="baseline">=</td><td align="left" valign="baseline"><span class="stt"> </span></td><td align="left" valign="baseline"><span class="RktVar">exported-id</span></td></tr><tr><td align="right" valign="baseline"><span class="stt"> </span></td><td align="left" valign="baseline"><span class="stt"> </span></td><td align="center" valign="baseline">|</td><td align="left" valign="baseline"><span class="stt"> </span></td><td align="left" valign="baseline"><span class="RktPn">(</span><span class="RktVar">internal-exported-id</span><span class="hspace"> </span><span class="RktVar">external-exported-id</span><span class="RktPn">)</span></td></tr></table></td></tr></table></blockquote></blockquote><p>Each import set <span class="RktPn">[</span><span class="RktVar">imported-id/renamed</span><span class="stt"> </span><span class="RktSym"><a href="stx-patterns.html#%28form._%28%28lib._racket%2Fprivate%2Fstxcase-scheme..rkt%29._......%29%29" class="RktStxLink" data-pltdoc="x">...</a></span><span class="RktPn">]</span> refers to a single
|
||
|
imported instance, and each <span class="RktVar">import-id/renamed</span> corresponds to
|
||
|
a variable from that instance. If separate
|
||
|
<span class="RktVar">external-imported-id</span> and <span class="RktVar">internal-imported-id</span> are
|
||
|
specified, then <span class="RktVar">external-imported-id</span> is the name of the
|
||
|
variable as exported by the instance, and
|
||
|
<span class="RktVar">internal-imported-id</span> is the name used to refer to the
|
||
|
variable in the <span class="RktVar">defn-or-expr</span>s. For exports, separate
|
||
|
<span class="RktVar">internal-exported-id</span> and <span class="RktVar">external-exported-id</span>
|
||
|
names corresponds to the variable name as exported as referenced
|
||
|
in the <span class="RktVar">defn-or-expr</span>s, respectively.</p><p>The grammar of an <span class="RktVar">defn-or-expr</span> is similar to the expander’s
|
||
|
grammar of fully expanded expressions (see <a href="syntax-model.html#%28part._fully-expanded%29" data-pltdoc="x">Fully Expanded Programs</a>)
|
||
|
with some exceptions: <span class="RktSym"><a href="Syntax_Quoting__quote-syntax.html#%28form._%28%28quote._~23~25kernel%29._quote-syntax%29%29" class="RktStxLink" data-pltdoc="x">quote-syntax</a></span> and <span class="RktSym"><a href="__top.html#%28form._%28%28quote._~23~25kernel%29._~23~25top%29%29" class="RktStxLink" data-pltdoc="x">#%top</a></span> are not allowed;
|
||
|
<span class="RktSym"><a href="lambda.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._~23~25plain-lambda%29%29" class="RktStxLink" data-pltdoc="x">#%plain-lambda</a></span> is spelled <span class="RktSym"><a href="lambda.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._lambda%29%29" class="RktStxLink" data-pltdoc="x">lambda</a></span>;
|
||
|
<span class="RktSym"><a href="application.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._~23~25plain-app%29%29" class="RktStxLink" data-pltdoc="x">#%plain-app</a></span> is omitted (i.e., application is implicit);
|
||
|
<span class="RktSym"><a href="lambda.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._lambda%29%29" class="RktStxLink" data-pltdoc="x">lambda</a></span>, <span class="RktSym"><a href="lambda.html#%28form._%28%28quote._~23~25kernel%29._case-lambda%29%29" class="RktStxLink" data-pltdoc="x">case-lambda</a></span>, <span class="RktSym"><a href="let.html#%28form._%28%28quote._~23~25kernel%29._let-values%29%29" class="RktStxLink" data-pltdoc="x">let-values</a></span>, and
|
||
|
<span class="RktSym"><a href="let.html#%28form._%28%28quote._~23~25kernel%29._letrec-values%29%29" class="RktStxLink" data-pltdoc="x">letrec-values</a></span> can have only a single body expression; and
|
||
|
numbers, booleans, strings, and byte strings are self-quoting.
|
||
|
Primitives are accessed directly by name, and shadowing is not allowed
|
||
|
within a <span class="RktSym">linklet</span> form for primitive names (see
|
||
|
<span class="RktSym"><a href="linklets.html#%28def._%28%28lib._racket%2Flinklet..rkt%29._linklet-body-reserved-symbol~3f%29%29" class="RktValLink" data-pltdoc="x">linklet-body-reserved-symbol?</a></span>), imported variables, defined
|
||
|
variables, or local variables.</p><p>When an <span class="RktVar">exported-id/renamed</span> has no corresponding definition
|
||
|
among the <span class="RktVar">defn-or-expr</span>s, then the variable is effectively
|
||
|
defined as uninitialized; referencing the variable will trigger
|
||
|
<span class="RktSym"><a href="exns.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._exn~3afail~3acontract~3avariable%29%29" class="RktValLink" data-pltdoc="x">exn:fail:contract:variable</a></span>, the same as referencing a
|
||
|
variable before it is defined. When a target instance is provided to
|
||
|
<span class="RktSym"><a href="linklets.html#%28def._%28%28lib._racket%2Flinklet..rkt%29._instantiate-linklet%29%29" class="RktValLink" data-pltdoc="x">instantiate-linklet</a></span>, any existing variable with the same name
|
||
|
will be left as-is, instead of set to undefined. This treatment of
|
||
|
uninitialized variables provides core support for top-level evaluation
|
||
|
where variables may be referenced and then defined in a separate
|
||
|
element of compilation.</p><p class="SHistory">Added in version 6.90.0.1 of package <span class="stt">base</span>.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._racket/linklet..rkt)._linklet~3f))"></a><span title="Provided from: racket/linklet | Package: base"><span class="RktSym"><a href="linklets.html#%28def._%28%28lib._racket%2Flinklet..rkt%29._linklet~3f%29%29" class="RktValDef RktValLink" data-pltdoc="x">linklet?</a></span></span><span class="hspace"> </span><span class="RktVar">v</span><span class="RktPn">)</span><span class="hspace"> </span>→<span class="hspace"> </span><span class="RktSym"><a href="booleans.html#%28def._%28%28quote._~23~25kernel%29._boolean~3f%29%29" class="RktValLink" data-pltdoc="x">boolean?</a></span></p></blockquote></td></tr><tr><td><span class="hspace"> </span><span class="RktVar">v</span><span class="hspace"> </span>:<span class="hspace"> </span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%2Fc%29%29" class="RktValLink" data-pltdoc="x">any/c</a></span></td></tr></table></blockquote></div><div class="SIntrapara">Returns <span class="RktVal">#t</span> if <span class="RktVar">v</span> is a <a href="linklets.html#%28tech._linklet%29" class="techoutside" data-pltdoc="x"><span class="techinside">linklet</span></a>, <span class="RktVal">#f</span>
|
||
|
otherwise.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><table cellspacing="0" cellpadding="0" class="prototype RForeground"><tr><td valign="top"><span class="RktPn">(</span><a name="(def._((lib._racket/linklet..rkt)._compile-linklet))"></a><span title="Provided from: racket/linklet | Package: base"><span class="RktSym"><a href="linklets.html#%28def._%28%28lib._racket%2Flinklet..rkt%29._compile-linklet%29%29" class="RktValDef RktValLink" data-pltdoc="x">compile-linklet</a></span></span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="RktVar">form</span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td></tr><tr><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span><span class="RktOpt">[</span></td><td valign="top"><span class="RktVar">name</span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td></tr><tr><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="RktVar">import-keys</span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td></tr><tr><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="RktVar">get-import</span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td></tr><tr><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="RktVar">options</span><span class="RktOpt">]</span><span class="RktPn">)</span></td><td valign="top"><span class="hspace"> </span></td><td valign="top">→</td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="RktSym"><a href="linklets.html#%28def._%28%28lib._racket%2Flinklet..rkt%29._linklet~3f%29%29" class="RktValLink" data-pltdoc="x">linklet?</a></span></td></tr></table></blockquote></td></tr><tr><td><span class="hspace"> </span><span class="RktVar">form</span><span class="hspace"> </span>:<span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._or%2Fc%29%29" class="RktValLink" data-pltdoc="x">or/c</a></span><span class="hspace"> </span><span class="RktSym"><a href="linklets.html#%28def._%28%28lib._racket%2Flinklet..rkt%29._correlated~3f%29%29" class="RktValLink" data-pltdoc="x">correlated?</a></span><span class="hspace"> </span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%2Fc%29%29" class="RktValLink" data-pltdoc="x">any/c</a></span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace"> </span><span class="RktVar">name</span><span class="hspace"> </span>:<span class="hspace"> </span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%2Fc%29%29" class="RktValLink" data-pltdoc="x">any/c</a></span><span class="hspace"> </span>=<span class="hspace">
|
||
|
<span class="RktSym">linklet</span> form and produces a <a href="linklets.html#%28tech._linklet%29" class="techoutside" data-pltdoc="x"><span class="techinside">linklet</span></a>.
|
||
|
As long as <span class="RktVal">'</span><span class="RktVal">serializable</span> included in <span class="RktVar">options</span>, the
|
||
|
resulting linklet can be marshaled to and from a byte stream when it is
|
||
|
part of a <a href="linklets.html#%28tech._linklet._bundle%29" class="techoutside" data-pltdoc="x"><span class="techinside">linklet bundle</span></a> (possibly in a <a href="linklets.html#%28tech._linklet._directory%29" class="techoutside" data-pltdoc="x"><span class="techinside">linklet directory</span></a>).</div></p><p>The optional <span class="RktVar">name</span> is associated to the linklet for debugging
|
||
|
purposes and as the default name of the linklet’s instance.</p><p>The optional <span class="RktVar">import-keys</span> and <span class="RktVar">get-import</span> arguments
|
||
|
support cross-linklet optimization. If <span class="RktVar">import-keys</span> is a
|
||
|
vector, it must have as many elements as sets of imports in
|
||
|
<span class="RktVar">form</span>. If the compiler becomes interested in optimizing a
|
||
|
reference to an imported variable, it passes back to
|
||
|
<span class="RktVar">get-import</span> (if non-<span class="RktVal">#f</span>) the element of <span class="RktVar">import-keys</span> that
|
||
|
corresponds to the variable’s import set. The <span class="RktVar">get-import</span>
|
||
|
function can then return a linklet or instance that represents an instance to be
|
||
|
provided to the compiled linklet when it is eventually instantiated;
|
||
|
ensuring consistency between reported linklet or instance and the eventual
|
||
|
instance is up to the caller of <span class="RktSym"><a href="linklets.html#%28def._%28%28lib._racket%2Flinklet..rkt%29._compile-linklet%29%29" class="RktValLink" data-pltdoc="x">compile-linklet</a></span>. If
|
||
|
<span class="RktVar">get-import</span> returns <span class="RktVal">#f</span> as its first value, the
|
||
|
compiler will be prevented from making any assumptions about the
|
||
|
imported instance. The second result from <span class="RktVar">get-import</span> is an
|
||
|
optional vector of keys to provide transitive information on a
|
||
|
returned linklet’s imports (and is not allowed for a returned instance);
|
||
|
the returned vector must have the same
|
||
|
number of elements as the linklet has imports. When vector elements
|
||
|
are <span class="RktSym"><a href="Equality.html#%28def._%28%28quote._~23~25kernel%29._eq~3f%29%29" class="RktValLink" data-pltdoc="x">eq?</a></span> and non-<span class="RktVal">#f</span>, the compiler can assume that
|
||
|
they correspond to the same run-time instance. A <span class="RktVal">#f</span>
|
||
|
value for <span class="RktVar">get-import</span> is equivalent to a function that
|
||
|
always returns two <span class="RktVal">#f</span> results.</p><p>When <span class="RktVar">import-keys</span> is not <span class="RktVal">#f</span>, then the compiler is
|
||
|
allowed to grow or shrink the set of imported instances for the
|
||
|
linklet. The result vector specifies the keys of the imports for the
|
||
|
returned linklet. Any key that is <span class="RktVal">#f</span> or a <a href="linklets.html#%28tech._linklet._instance%29" class="techoutside" data-pltdoc="x"><span class="techinside">linklet instance</span></a>
|
||
|
must be preserved intact, however.</p><p>If <span class="RktVal">'</span><span class="RktVal">unsafe</span> is included in <span class="RktVar">options</span>, then the linklet
|
||
|
is compiled in <a name="(tech._unsafe._mode)"></a><span style="font-style: italic">unsafe mode</span>: uses of safe operations within
|
||
|
the linklet can be converted to unsafe operations on the assumption
|
||
|
that the relevant contracts are satisfied. For example, <span class="RktSym"><a href="pairs.html#%28def._%28%28quote._~23~25kernel%29._car%29%29" class="RktValLink" data-pltdoc="x">car</a></span>
|
||
|
is converted to <span class="RktSym"><a href="unsafe.html#%28def._%28%28lib._racket%2Funsafe%2Fops..rkt%29._unsafe-car%29%29" class="RktValLink" data-pltdoc="x">unsafe-car</a></span>. Some substituted unsafe
|
||
|
operations may not have directly accessible names, such as the unsafe
|
||
|
variant of <span class="RktSym"><a href="sequences.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._in-list%29%29" class="RktValLink" data-pltdoc="x">in-list</a></span> that can be substituted in <a href="linklets.html#%28tech._unsafe._mode%29" class="techoutside" data-pltdoc="x"><span class="techinside">unsafe
|
||
|
mode</span></a>. An unsafe operation is substituted only if its (unchecked)
|
||
|
contract is subsumed by the safe operation’s contract. The fact that
|
||
|
the linklet is compiled in <a href="linklets.html#%28tech._unsafe._mode%29" class="techoutside" data-pltdoc="x"><span class="techinside">unsafe mode</span></a> can be exposed through
|
||
|
<span class="RktSym"><a href="Namespaces.html#%28def._%28%28quote._~23~25kernel%29._variable-reference-from-unsafe~3f%29%29" class="RktValLink" data-pltdoc="x">variable-reference-from-unsafe?</a></span> using a variable reference
|
||
|
produced by a <span class="RktSym"><a href="Locations____variable-reference.html#%28form._%28%28quote._~23~25kernel%29._~23~25variable-reference%29%29" class="RktStxLink" data-pltdoc="x">#%variable-reference</a></span> form within the module
|
||
|
body.</p><p>If <span class="RktVal">'</span><span class="RktVal">static</span> is included in <span class="RktVar">options</span>, then the linklet
|
||
|
must be instantiated only once; if the linklet is serialized, then any
|
||
|
individual instance read from the serialized form must be instantiated
|
||
|
at most once. Compilation with <span class="RktVal">'</span><span class="RktVal">static</span> is intended to improve
|
||
|
the performance of references within the linklet to defined and
|
||
|
imported variables.</p><p>If <span class="RktVal">'</span><span class="RktVal">quick</span> is included in <span class="RktVar">options</span>, then linklet
|
||
|
compilation may trade run-time performance for compile-time
|
||
|
performance—<wbr></wbr>that is, spend less time compiling the linklet, but the
|
||
|
resulting linklet may run more slowly.</p><p>If <span class="RktVal">'</span><span class="RktVal">use-prompt</span> is included in <span class="RktVar">options</span>, then
|
||
|
instantiating resulting linklet always wraps a prompt around each
|
||
|
definition and immediate expression in the linklet. Otherwise,
|
||
|
supplying <span class="RktVal">#t</span> as the <span class="RktVar">use-prompt?</span> argument to
|
||
|
<span class="RktSym"><a href="linklets.html#%28def._%28%28lib._racket%2Flinklet..rkt%29._instantiate-linklet%29%29" class="RktValLink" data-pltdoc="x">instantiate-linklet</a></span> may only wrap a prompt around the entire
|
||
|
instantiation.</p><p>If <span class="RktVal">'</span><span class="RktVal">uninterned-literal</span> is included in <span class="RktVar">options</span>, then
|
||
|
literals in <span class="RktVar">form</span> will not necessarily be interned via
|
||
|
<span class="RktSym"><a href="stxops.html#%28def._%28%28quote._~23~25kernel%29._datum-intern-literal%29%29" class="RktValLink" data-pltdoc="x">datum-intern-literal</a></span> when compiling or loading the linklet.
|
||
|
Disabling the use of <span class="RktSym"><a href="stxops.html#%28def._%28%28quote._~23~25kernel%29._datum-intern-literal%29%29" class="RktValLink" data-pltdoc="x">datum-intern-literal</a></span> can be especially
|
||
|
useful of the linklet includes a large string or byte string constant
|
||
|
that is not meant to be shared.</p><p>The symbols in <span class="RktVar">options</span> must be distinct, otherwise
|
||
|
<span class="RktSym"><a href="exns.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._exn~3afail~3acontract%29%29" class="RktValLink" data-pltdoc="x">exn:fail:contract</a></span> exception is raised.</p><p class="SHistory">Changed in version 7.1.0.8 of package <span class="stt">base</span>: Added the <span class="RktVal">'</span><span class="RktVal">use-prompt</span> option.<br/>Changed in version 7.1.0.10: Added the <span class="RktVal">'</span><span class="RktVal">uninterned-literal</span> option.<br/>Changed in version 7.5.0.14: Added the <span class="RktVal">'</span><span class="RktVal">quick</span> option.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><table cellspacing="0" cellpadding="0" class="prototype RForeground"><tr><td valign="top"><span class="RktPn">(</span><a name="(def._((lib._racket/linklet..rkt)._recompile-linklet))"></a><span title="Provided from: racket/linklet | Package: base"><span class="RktSym"><a href="linklets.html#%28def._%28%28lib._racket%2Flinklet..rkt%29._recompile-linklet%29%29" class="RktValDef RktValLink" data-pltdoc="x">recompile-linklet</a></span></span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="RktVar">linklet</span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td></tr><tr><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span><span class="RktOpt">[</span></td><td valign="top"><span class="RktVar">name</span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td></tr><tr><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="RktVar">import-keys</span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td></tr><tr><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="RktVar">get-import</span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td></tr><tr><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="RktVar">options</span><span class="RktOpt">]</span><span class="RktPn">)</span></td><td valign="top"><span class="hspace"> </span></td><td valign="top">→</td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="RktSym"><a href="linklets.html#%28def._%28%28lib._racket%2Flinklet..rkt%29._linklet~3f%29%29" class="RktValLink" data-pltdoc="x">linklet?</a></span></td></tr></table></blockquote></td></tr><tr><td><span class="hspace"> </span><span class="RktVar">linklet</span><span class="hspace"> </span>:<span class="hspace"> </span><span class="RktSym"><a href="linklets.html#%28def._%28%28lib._racket%2Flinklet..rkt%29._linklet~3f%29%29" class="RktValLink" data-pltdoc="x">linklet?</a></span></td></tr><tr><td><span class="hspace"> </span><span class="RktVar">name</span><span class="hspace"> </span>:<span class="hspace"> </span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29
|
||
|
and potentially optimizes it further.</div></p><p class="SHistory">Changed in version 7.1.0.6 of package <span class="stt">base</span>: Added the <span class="RktVar">options</span> argument.<br/>Changed in version 7.1.0.8: Added the <span class="RktVal">'</span><span class="RktVal">use-prompt</span> option.<br/>Changed in version 7.1.0.10: Added the <span class="RktVal">'</span><span class="RktVal">uninterned-literal</span> option.<br/>Changed in version 7.5.0.14: Added the <span class="RktVal">'</span><span class="RktVal">quick</span> option.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._racket/linklet..rkt)._eval-linklet))"></a><span title="Provided from: racket/linklet | Package: base"><span class="RktSym"><a href="linklets.html#%28def._%28%28lib._racket%2Flinklet..rkt%29._eval-linklet%29%29" class="RktValDef RktValLink" data-pltdoc="x">eval-linklet</a></span></span><span class="hspace"> </span><span class="RktVar">linklet</span><span class="RktPn">)</span><span class="hspace"> </span>→<span class="hspace"> </span><span class="RktSym"><a href="linklets.html#%28def._%28%28lib._racket%2Flinklet..rkt%29._linklet~3f%29%29" class="RktValLink" data-pltdoc="x">linklet?</a></span></p></blockquote></td></tr><tr><td><span class="hspace"> </span><span class="RktVar">linklet</span><span class="hspace"> </span>:<span class="hspace"> </span><span class="RktSym"><a href="linklets.html#%28def._%28%28lib._racket%2Flinklet..rkt%29._linklet~3f%29%29" class="RktValLink" data-pltdoc="x">linklet?</a></span></td></tr></table></blockquote></div><div class="SIntrapara">Returns a variant of a <span class="RktVar">linklet</span> that is prepared for JIT
|
||
|
compilation such that every later use of the result linklet with
|
||
|
<span class="RktSym"><a href="linklets.html#%28def._%28%28lib._racket%2Flinklet..rkt%29._instantiate-linklet%29%29" class="RktValLink" data-pltdoc="x">instantiate-linklet</a></span> shares the JIT-generated code. However,
|
||
|
the result of <span class="RktSym"><a href="linklets.html#%28def._%28%28lib._racket%2Flinklet..rkt%29._eval-linklet%29%29" class="RktValLink" data-pltdoc="x">eval-linklet</a></span> cannot be marshaled to a byte
|
||
|
stream as part of a <a href="linklets.html#%28tech._linklet._bundle%29" class="techoutside" data-pltdoc="x"><span class="techinside">linklet bundle</span></a>, and it cannot be used with
|
||
|
<span class="RktSym"><a href="linklets.html#%28def._%28%28lib._racket%2Flinklet..rkt%29._recompile-linklet%29%29" class="RktValLink" data-pltdoc="x">recompile-linklet</a></span>.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><table cellspacing="0" cellpadding="0" class="prototype RForeground"><tr><td valign="top"><span class="RktPn">(</span><a name="(def._((lib._racket/linklet..rkt)._instantiate-linklet))"></a><span title="Provided from: racket/linklet | Package: base"><span class="RktSym"><a href="linklets.html#%28def._%28%28lib._racket%2Flinklet..rkt%29._instantiate-linklet%29%29" class="RktValDef RktValLink" data-pltdoc="x">instantiate-linklet</a></span></span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="RktVar">linklet</span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td></tr><tr><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="RktVar">import-instances</span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td></tr><tr><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span><span class="RktOpt">[</span></td><td valign="top"><span class="RktVar">target-instance?</span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td></tr><tr><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="RktVar">use-prompt?</span><span class="RktOpt">]</span><span class="RktPn">)</span></td><td valign="top"><span class="hspace"> </span></td><td valign="top">→</td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="RktSym"><a href="linklets.html#%28def._%28%28lib._racket%2Flinklet..rkt%29._instance~3f%29%29" class="RktValLink" data-pltdoc="x">instance?</a></span></td></tr></table></blockquote></td></tr><tr><td><span class="hspace"> </span><span class="RktVar">linklet</span><span class="hspace"> </span>:<span class="hspace"> </span><span class="RktSym"><a href="linklets.html#%28def._%28%28lib._racket%2Flinklet..rkt%29._linklet~3f%29%29" class="RktValLink" data-pltdoc="x">linklet?</a></span></td></tr><tr><td><span class="hspace"> </span><span class="RktVar">import-instances</span><span class="hspace"> </span>:<span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._listof%29%29" class="RktValLink" data-pltdoc="x">listof</a></span><span class="hspace"> </span><span class="RktSym"><a href="linklets.html#%28def._%28%28lib._racket%2Flinklet..rkt%29._instance~3f%29%29" class="RktValLink" data-pltdoc="x">instance?</a></span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace"> </span><span class="RktVar">target-instance?</span><span class="hspace"> </span>:<span class="hspace"> </span><span class="RktVal">#f</span><span class="hspace"> </span>=<span class="hspace"> </span><span class="RktVal">#f</span></td></tr><tr><td><span class="hspace"> </span><span class="RktVar">use-prompt?</span><span class="hspace"> </span>:<span class="hspace"> </span><span class="RktSym"><a hre
|
||
|
expressions, using the given <span class="RktVar">import-instances</span> for its
|
||
|
imports. The number of instances in <span class="RktVar">import-instances</span> must
|
||
|
match the number of import sets in <span class="RktVar">linklet</span>.</div></p><p>If <span class="RktVar">target-instance</span> is <span class="RktVal">#f</span> or not provided, the result
|
||
|
is a fresh instance for the linklet. If <span class="RktVar">target-instance</span> is an
|
||
|
instance, then the instance is used and modified for the linklet
|
||
|
definitions and expressions, and the result is the value of the last
|
||
|
expression in the linklet.</p><p>The linklet’s exported variables are accessible in the result instance
|
||
|
or in <span class="RktVar">target-instance</span> using the linklet’s external name for
|
||
|
each export. If <span class="RktVar">target-instance</span> is provided as
|
||
|
non-<span class="RktVal">#f</span>, its existing variables remain intact if they are not
|
||
|
modified by a linklet definition.</p><p>If <span class="RktVar">use-prompt?</span> is true, then a a <a href="eval-model.html#%28tech._prompt%29" class="techoutside" data-pltdoc="x"><span class="techinside">prompt</span></a> is wrapped
|
||
|
around the linklet instantiation in same ways as an expression in a
|
||
|
module body. If the linklet contains multiple definitions or immediate
|
||
|
expressions, then a prompt may or may not be wrapped around each
|
||
|
definition or expression; supply <span class="RktVal">'</span><span class="RktVal">use-prompt</span> to
|
||
|
<span class="RktSym"><a href="linklets.html#%28def._%28%28lib._racket%2Flinklet..rkt%29._compile-linklet%29%29" class="RktValLink" data-pltdoc="x">compile-linklet</a></span> to ensure that a prompt is used around each
|
||
|
definition and expression.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._racket/linklet..rkt)._linklet-import-variables))"></a><span title="Provided from: racket/linklet | Package: base"><span class="RktSym"><a href="linklets.html#%28def._%28%28lib._racket%2Flinklet..rkt%29._linklet-import-variables%29%29" class="RktValDef RktValLink" data-pltdoc="x">linklet-import-variables</a></span></span><span class="hspace"> </span><span class="RktVar">linklet</span><span class="RktPn">)</span><span class="hspace"> </span>→<span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._listof%29%29" class="RktValLink" data-pltdoc="x">listof</a></span><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._listof%29%29" class="RktValLink" data-pltdoc="x">listof</a></span><span class="hspace"> </span><span class="RktSym"><a href="symbols.html#%28def._%28%28quote._~23~25kernel%29._symbol~3f%29%29" class="RktValLink" data-pltdoc="x">symbol?</a></span><span class="RktPn">)</span><span class="RktPn">)</span></p></blockquote></td></tr><tr><td><span class="hspace"> </span><span class="RktVar">linklet</span><span class="hspace"> </span>:<span class="hspace"> </span><span class="RktSym"><a href="linklets.html#%28def._%28%28lib._racket%2Flinklet..rkt%29._linklet~3f%29%29" class="RktValLink" data-pltdoc="x">linklet?</a></span></td></tr></table></blockquote></div><div class="SIntrapara">Returns a description of a linklet’s imports. Each element of the
|
||
|
result list corresponds to an import set as satisfied by a single
|
||
|
instance on instantiation, and each member of the set is a variable
|
||
|
name that is used from the corresponding imported instance.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._racket/linklet..rkt)._linklet-export-variables))"></a><span title="Provided from: racket/linklet | Package: base"><span class="RktSym"><a href="linklets.html#%28def._%28%28lib._racket%2Flinklet..rkt%29._linklet-export-variables%29%29" class="RktValDef RktValLink" data-pltdoc="x">linklet-export-variables</a></span></span><span class="hspace"> </span><span class="RktVar">linklet</span><span class="RktPn">)</span><span class="hspace"> </span>→<span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._listof%29%29" class="RktValLink" data-pltdoc="x">listof</a></span><span class="hspace"> </span><span class="RktSym"><a href="symbols.html#%28def._%28%28quote._~23~25kernel%29._symbol~3f%29%29" class="RktValLink" data-pltdoc="x">symbol?</a></span><span class="RktPn">)</span></p></blockquote></td></tr><tr><td><span class="hspace"> </span><span class="RktVar">linklet</span><span class="hspace"> </span>:<span class="hspace"> </span><span class="RktSym"><a href="linklets.html#%28def._%28%28lib._racket%2Flinklet..rkt%29._linklet~3f%29%29" class="RktValLink" data-pltdoc="x">linklet?</a></span></td></tr></table></blockquote></div><div class="SIntrapara">Returns a description of a linklet’s exports. Each element of the list
|
||
|
corresponds to a variable that is made available by the linklet in its
|
||
|
instance.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._racket/linklet..rkt)._linklet-directory~3f))"></a><span title="Provided from: racket/linklet | Package: base"><span class="RktSym"><a href="linklets.html#%28def._%28%28lib._racket%2Flinklet..rkt%29._linklet-directory~3f%29%29" class="RktValDef RktValLink" data-pltdoc="x">linklet-directory?</a></span></span><span class="hspace"> </span><span class="RktVar">v</span><span class="RktPn">)</span><span class="hspace"> </span>→<span class="hspace"> </span><span class="RktSym"><a href="booleans.html#%28def._%28%28quote._~23~25kernel%29._boolean~3f%29%29" class="RktValLink" data-pltdoc="x">boolean?</a></span></p></blockquote></td></tr><tr><td><span class="hspace"> </span><span class="RktVar">v</span><span class="hspace"> </span>:<span class="hspace"> </span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%2Fc%29%29" class="RktValLink" data-pltdoc="x">any/c</a></span></td></tr></table></blockquote></div><div class="SIntrapara">Returns <span class="RktVal">#t</span> if <span class="RktVar">v</span> is a <a href="linklets.html#%28tech._linklet._directory%29" class="techoutside" data-pltdoc="x"><span class="techinside">linklet directory</span></a>,
|
||
|
<span class="RktVal">#f</span> otherwise.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._racket/linklet..rkt)._hash-~3elinklet-directory))"></a><span title="Provided from: racket/linklet | Package: base"><span class="RktSym"><a href="linklets.html#%28def._%28%28lib._racket%2Flinklet..rkt%29._hash-~3elinklet-directory%29%29" class="RktValDef RktValLink" data-pltdoc="x">hash->linklet-directory</a></span></span><span class="hspace"> </span><span class="RktVar">content</span><span class="RktPn">)</span><span class="hspace"> </span>→<span class="hspace"> </span><span class="RktSym"><a href="linklets.html#%28def._%28%28lib._racket%2Flinklet..rkt%29._linklet-directory~3f%29%29" class="RktValLink" data-pltdoc="x">linklet-directory?</a></span></p></blockquote></td></tr><tr><td><span class="hspace"> </span><span class="RktVar">content</span><span class="hspace"> </span>:<span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._and%2Fc%29%29" class="RktValLink" data-pltdoc="x">and/c</a></span><span class="hspace"> </span><span class="RktSym"><a href="hashtables.html#%28def._%28%28quote._~23~25kernel%29._hash~3f%29%29" class="RktValLink" data-pltdoc="x">hash?</a></span><span class="hspace"> </span><span class="RktSym"><a href="hashtables.html#%28def._%28%28quote._~23~25kernel%29._hash-eq~3f%29%29" class="RktValLink" data-pltdoc="x">hash-eq?</a></span><span class="hspace"> </span><span class="RktSym"><a href="booleans.html#%28def._%28%28quote._~23~25kernel%29._immutable~3f%29%29" class="RktValLink" data-pltdoc="x">immutable?</a></span><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._not%2Fc%29%29" class="RktValLink" data-pltdoc="x">not/c</a></span><span class="hspace"> </span><span class="RktSym"><a href="chaperones.html#%28def._%28%28quote._~23~25kernel%29._impersonator~3f%29%29" class="RktValLink" data-pltdoc="x">impersonator?</a></span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr></table></blockquote></div><div class="SIntrapara">Constructs a <a href="linklets.html#%28tech._linklet._directory%29" class="techoutside" data-pltdoc="x"><span class="techinside">linklet directory</span></a> given mappings in the form of a
|
||
|
<a href="hashtables.html#%28tech._hash._table%29" class="techoutside" data-pltdoc="x"><span class="techinside">hash table</span></a>. Each key of <span class="RktVar">content</span> must be either a
|
||
|
symbol or <span class="RktVal">#f</span>, each symbol must be mapped to a <a href="linklets.html#%28tech._linklet._directory%29" class="techoutside" data-pltdoc="x"><span class="techinside">linklet
|
||
|
directory</span></a>, and <span class="RktVal">#f</span> must be mapped to a <a href="linklets.html#%28tech._linklet._bundle%29" class="techoutside" data-pltdoc="x"><span class="techinside">linklet bundle</span></a>
|
||
|
or not mapped.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._racket/linklet..rkt)._linklet-directory-~3ehash))"></a><span title="Provided from: racket/linklet | Package: base"><span class="RktSym"><a href="linklets.html#%28def._%28%28lib._racket%2Flinklet..rkt%29._linklet-directory-~3ehash%29%29" class="RktValDef RktValLink" data-pltdoc="x">linklet-directory->hash</a></span></span><span class="hspace"> </span><span class="RktVar">linklet-directory</span><span class="RktPn">)</span></p></blockquote></td></tr><tr><td><span class="hspace"> </span>→<span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._and%2Fc%29%29" class="RktValLink" data-pltdoc="x">and/c</a></span><span class="hspace"> </span><span class="RktSym"><a href="hashtables.html#%28def._%28%28quote._~23~25kernel%29._hash~3f%29%29" class="RktValLink" data-pltdoc="x">hash?</a></span><span class="hspace"> </span><span class="RktSym"><a href="hashtables.html#%28def._%28%28quote._~23~25kernel%29._hash-eq~3f%29%29" class="RktValLink" data-pltdoc="x">hash-eq?</a></span><span class="hspace"> </span><span class="RktSym"><a href="booleans.html#%28def._%28%28quote._~23~25kernel%29._immutable~3f%29%29" class="RktValLink" data-pltdoc="x">immutable?</a></span><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._not%2Fc%29%29" class="RktValLink" data-pltdoc="x">not/c</a></span><span class="hspace"> </span><span class="RktSym"><a href="chaperones.html#%28def._%28%28quote._~23~25kernel%29._impersonator~3f%29%29" class="RktValLink" data-pltdoc="x">impersonator?</a></span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace"> </span><span class="RktVar">linklet-directory</span><span class="hspace"> </span>:<span class="hspace"> </span><span class="RktSym"><a href="linklets.html#%28def._%28%28lib._racket%2Flinklet..rkt%29._linklet-directory~3f%29%29" class="RktValLink" data-pltdoc="x">linklet-directory?</a></span></td></tr></table></blockquote></div><div class="SIntrapara">Extracts the content of a <a href="linklets.html#%28tech._linklet._directory%29" class="techoutside" data-pltdoc="x"><span class="techinside">linklet directory</span></a> into a <a href="hashtables.html#%28tech._hash._table%29" class="techoutside" data-pltdoc="x"><span class="techinside">hash
|
||
|
table</span></a>.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._racket/linklet..rkt)._linklet-bundle~3f))"></a><span title="Provided from: racket/linklet | Package: base"><span class="RktSym"><a href="linklets.html#%28def._%28%28lib._racket%2Flinklet..rkt%29._linklet-bundle~3f%29%29" class="RktValDef RktValLink" data-pltdoc="x">linklet-bundle?</a></span></span><span class="hspace"> </span><span class="RktVar">v</span><span class="RktPn">)</span><span class="hspace"> </span>→<span class="hspace"> </span><span class="RktSym"><a href="booleans.html#%28def._%28%28quote._~23~25kernel%29._boolean~3f%29%29" class="RktValLink" data-pltdoc="x">boolean?</a></span></p></blockquote></td></tr><tr><td><span class="hspace"> </span><span class="RktVar">v</span><span class="hspace"> </span>:<span class="hspace"> </span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%2Fc%29%29" class="RktValLink" data-pltdoc="x">any/c</a></span></td></tr></table></blockquote></div><div class="SIntrapara">Returns <span class="RktVal">#t</span> if <span class="RktVar">v</span> is a <a href="linklets.html#%28tech._linklet._bundle%29" class="techoutside" data-pltdoc="x"><span class="techinside">linklet bundle</span></a>,
|
||
|
<span class="RktVal">#f</span> otherwise.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._racket/linklet..rkt)._hash-~3elinklet-bundle))"></a><span title="Provided from: racket/linklet | Package: base"><span class="RktSym"><a href="linklets.html#%28def._%28%28lib._racket%2Flinklet..rkt%29._hash-~3elinklet-bundle%29%29" class="RktValDef RktValLink" data-pltdoc="x">hash->linklet-bundle</a></span></span><span class="hspace"> </span><span class="RktVar">content</span><span class="RktPn">)</span><span class="hspace"> </span>→<span class="hspace"> </span><span class="RktSym"><a href="linklets.html#%28def._%28%28lib._racket%2Flinklet..rkt%29._linklet-bundle~3f%29%29" class="RktValLink" data-pltdoc="x">linklet-bundle?</a></span></p></blockquote></td></tr><tr><td><span class="hspace"> </span><span class="RktVar">content</span><span class="hspace"> </span>:<span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._and%2Fc%29%29" class="RktValLink" data-pltdoc="x">and/c</a></span><span class="hspace"> </span><span class="RktSym"><a href="hashtables.html#%28def._%28%28quote._~23~25kernel%29._hash~3f%29%29" class="RktValLink" data-pltdoc="x">hash?</a></span><span class="hspace"> </span><span class="RktSym"><a href="hashtables.html#%28def._%28%28quote._~23~25kernel%29._hash-eq~3f%29%29" class="RktValLink" data-pltdoc="x">hash-eq?</a></span><span class="hspace"> </span><span class="RktSym"><a href="booleans.html#%28def._%28%28quote._~23~25kernel%29._immutable~3f%29%29" class="RktValLink" data-pltdoc="x">immutable?</a></span><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._not%2Fc%29%29" class="RktValLink" data-pltdoc="x">not/c</a></span><span class="hspace"> </span><span class="RktSym"><a href="chaperones.html#%28def._%28%28quote._~23~25kernel%29._impersonator~3f%29%29" class="RktValLink" data-pltdoc="x">impersonator?</a></span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr></table></blockquote></div><div class="SIntrapara">Constructs a <a href="linklets.html#%28tech._linklet._bundle%29" class="techoutside" data-pltdoc="x"><span class="techinside">linklet bundle</span></a> given mappings in the form of a
|
||
|
<a href="hashtables.html#%28tech._hash._table%29" class="techoutside" data-pltdoc="x"><span class="techinside">hash table</span></a>. Each key of <span class="RktVar">content</span> must be either a
|
||
|
symbol or a <a href="numbers.html#%28tech._fixnum%29" class="techoutside" data-pltdoc="x"><span class="techinside">fixnum</span></a>. Values in the hash table are unconstrained,
|
||
|
but the intent is that they are all <a href="linklets.html#%28tech._linklet%29" class="techoutside" data-pltdoc="x"><span class="techinside">linklets</span></a> or values that can
|
||
|
be recovered from <span class="RktSym"><a href="Writing.html#%28def._%28%28quote._~23~25kernel%29._write%29%29" class="RktValLink" data-pltdoc="x">write</a></span> output by <span class="RktSym"><a href="Reading.html#%28def._%28%28quote._~23~25kernel%29._read%29%29" class="RktValLink" data-pltdoc="x">read</a></span>.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._racket/linklet..rkt)._linklet-bundle-~3ehash))"></a><span title="Provided from: racket/linklet | Package: base"><span class="RktSym"><a href="linklets.html#%28def._%28%28lib._racket%2Flinklet..rkt%29._linklet-bundle-~3ehash%29%29" class="RktValDef RktValLink" data-pltdoc="x">linklet-bundle->hash</a></span></span><span class="hspace"> </span><span class="RktVar">linklet-bundle</span><span class="RktPn">)</span></p></blockquote></td></tr><tr><td><span class="hspace"> </span>→<span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._and%2Fc%29%29" class="RktValLink" data-pltdoc="x">and/c</a></span><span class="hspace"> </span><span class="RktSym"><a href="hashtables.html#%28def._%28%28quote._~23~25kernel%29._hash~3f%29%29" class="RktValLink" data-pltdoc="x">hash?</a></span><span class="hspace"> </span><span class="RktSym"><a href="hashtables.html#%28def._%28%28quote._~23~25kernel%29._hash-eq~3f%29%29" class="RktValLink" data-pltdoc="x">hash-eq?</a></span><span class="hspace"> </span><span class="RktSym"><a href="booleans.html#%28def._%28%28quote._~23~25kernel%29._immutable~3f%29%29" class="RktValLink" data-pltdoc="x">immutable?</a></span><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._not%2Fc%29%29" class="RktValLink" data-pltdoc="x">not/c</a></span><span class="hspace"> </span><span class="RktSym"><a href="chaperones.html#%28def._%28%28quote._~23~25kernel%29._impersonator~3f%29%29" class="RktValLink" data-pltdoc="x">impersonator?</a></span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace"> </span><span class="RktVar">linklet-bundle</span><span class="hspace"> </span>:<span class="hspace"> </span><span class="RktSym"><a href="linklets.html#%28def._%28%28lib._racket%2Flinklet..rkt%29._linklet-bundle~3f%29%29" class="RktValLink" data-pltdoc="x">linklet-bundle?</a></span></td></tr></table></blockquote></div><div class="SIntrapara">Extracts the content of a <a href="linklets.html#%28tech._linklet._bundle%29" class="techoutside" data-pltdoc="x"><span class="techinside">linklet bundle</span></a> into a <a href="hashtables.html#%28tech._hash._table%29" class="techoutside" data-pltdoc="x"><span class="techinside">hash
|
||
|
table</span></a>.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._racket/linklet..rkt)._linklet-body-reserved-symbol~3f))"></a><span title="Provided from: racket/linklet | Package: base"><span class="RktSym"><a href="linklets.html#%28def._%28%28lib._racket%2Flinklet..rkt%29._linklet-body-reserved-symbol~3f%29%29" class="RktValDef RktValLink" data-pltdoc="x">linklet-body-reserved-symbol?</a></span></span><span class="hspace"> </span><span class="RktVar">sym</span><span class="RktPn">)</span><span class="hspace"> </span>→<span class="hspace"> </span><span class="RktSym"><a href="booleans.html#%28def._%28%28quote._~23~25kernel%29._boolean~3f%29%29" class="RktValLink" data-pltdoc="x">boolean?</a></span></p></blockquote></td></tr><tr><td><span class="hspace"> </span><span class="RktVar">sym</span><span class="hspace"> </span>:<span class="hspace"> </span><span class="RktSym"><a href="symbols.html#%28def._%28%28quote._~23~25kernel%29._symbol~3f%29%29" class="RktValLink" data-pltdoc="x">symbol?</a></span></td></tr></table></blockquote></div><div class="SIntrapara">Return <span class="RktVal">#t</span> if <span class="RktVar">sym</span> is a primitive name or other
|
||
|
identifier that is not allowed as a binding within a linklet,
|
||
|
<span class="RktVal">#f</span> otherwise.</div></p><p class="SHistory">Added in version 8.2.0.1 of package <span class="stt">base</span>.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._racket/linklet..rkt)._instance~3f))"></a><span title="Provided from: racket/linklet | Package: base"><span class="RktSym"><a href="linklets.html#%28def._%28%28lib._racket%2Flinklet..rkt%29._instance~3f%29%29" class="RktValDef RktValLink" data-pltdoc="x">instance?</a></span></span><span class="hspace"> </span><span class="RktVar">v</span><span class="RktPn">)</span><span class="hspace"> </span>→<span class="hspace"> </span><span class="RktSym"><a href="booleans.html#%28def._%28%28quote._~23~25kernel%29._boolean~3f%29%29" class="RktValLink" data-pltdoc="x">boolean?</a></span></p></blockquote></td></tr><tr><td><span class="hspace"> </span><span class="RktVar">v</span><span class="hspace"> </span>:<span class="hspace"> </span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%2Fc%29%29" class="RktValLink" data-pltdoc="x">any/c</a></span></td></tr></table></blockquote></div><div class="SIntrapara">Returns <span class="RktVal">#t</span> if <span class="RktVar">v</span> is a <a href="linklets.html#%28tech._linklet._instance%29" class="techoutside" data-pltdoc="x"><span class="techinside">linklet instance</span></a>,
|
||
|
<span class="RktVal">#f</span> otherwise.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><table cellspacing="0" cellpadding="0" class="prototype RForeground"><tr><td valign="top"><span class="RktPn">(</span><a name="(def._((lib._racket/linklet..rkt)._make-instance))"></a><span title="Provided from: racket/linklet | Package: base"><span class="RktSym"><a href="linklets.html#%28def._%28%28lib._racket%2Flinklet..rkt%29._make-instance%29%29" class="RktValDef RktValLink" data-pltdoc="x">make-instance</a></span></span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="RktVar">name</span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td></tr><tr><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span><span class="RktOpt">[</span></td><td valign="top"><span class="RktVar">data</span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td></tr><tr><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="RktVar">mode</span><span class="RktOpt">]</span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td></tr><tr><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="RktVar">variable-name</span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td></tr><tr><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="RktVar">variable-value</span><span class="hspace"> </span><span class="RktMeta">...</span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td></tr><tr><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="RktMeta">...</span><span class="RktPn">)</span></td><td valign="top"><span class="hspace"> </span></td><td valign="top">→</td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="RktSym"><a href="linklets.html#%28def._%28%28lib._racket%2Flinklet..rkt%29._instance~3f%29%29" class="RktValLink" data-pltdoc="x">instance?</a></span></td></tr></table></blockquote></td></tr><tr><td><span class="hspace"> </span><span class="RktVar">name</span><span class="hspace"> </span>:<span class="hspace"> </span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%2Fc%29%29" class="RktValLink" data-pltdoc="x">any/c</a></span></td></tr><tr><td><span class="hspace"> </span><span class="RktVar">data</span><span class="hspace"> </span>:<span class="hspace"> </span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%2Fc%29%29" class="RktValLink" data-pltdoc="x">any/c</a></span><span class="hspace"> </
|
||
|
arbitrary <span class="RktVar">name</span> and <span class="RktVar">data</span> value to the instance, the
|
||
|
instance is populated with variables as specified by
|
||
|
<span class="RktVar">variable-name</span> and <span class="RktVar">variable-value</span>.</div></p><p>The optional <span class="RktVar">data</span> and <span class="RktVar">mode</span> arguments must be
|
||
|
provided if any <span class="RktVar">variable-name</span> and <span class="RktVar">variable-value</span>
|
||
|
arguments are provided. The <span class="RktVar">mode</span> argument is used as in
|
||
|
<span class="RktSym"><a href="linklets.html#%28def._%28%28lib._racket%2Flinklet..rkt%29._instance-set-variable-value%21%29%29" class="RktValLink" data-pltdoc="x">instance-set-variable-value!</a></span> for every
|
||
|
<span class="RktVar">variable-name</span>.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._racket/linklet..rkt)._instance-name))"></a><span title="Provided from: racket/linklet | Package: base"><span class="RktSym"><a href="linklets.html#%28def._%28%28lib._racket%2Flinklet..rkt%29._instance-name%29%29" class="RktValDef RktValLink" data-pltdoc="x">instance-name</a></span></span><span class="hspace"> </span><span class="RktVar">instance</span><span class="RktPn">)</span><span class="hspace"> </span>→<span class="hspace"> </span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%2Fc%29%29" class="RktValLink" data-pltdoc="x">any/c</a></span></p></blockquote></td></tr><tr><td><span class="hspace"> </span><span class="RktVar">instance</span><span class="hspace"> </span>:<span class="hspace"> </span><span class="RktSym"><a href="linklets.html#%28def._%28%28lib._racket%2Flinklet..rkt%29._instance~3f%29%29" class="RktValLink" data-pltdoc="x">instance?</a></span></td></tr></table></blockquote></div><div class="SIntrapara">Returns the value associated to <span class="RktVar">instance</span> as its name—<wbr></wbr>either
|
||
|
the first value provided to <span class="RktSym"><a href="linklets.html#%28def._%28%28lib._racket%2Flinklet..rkt%29._make-instance%29%29" class="RktValLink" data-pltdoc="x">make-instance</a></span> or the name of a
|
||
|
linklet that was instantiated to create the instance.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._racket/linklet..rkt)._instance-data))"></a><span title="Provided from: racket/linklet | Package: base"><span class="RktSym"><a href="linklets.html#%28def._%28%28lib._racket%2Flinklet..rkt%29._instance-data%29%29" class="RktValDef RktValLink" data-pltdoc="x">instance-data</a></span></span><span class="hspace"> </span><span class="RktVar">instance</span><span class="RktPn">)</span><span class="hspace"> </span>→<span class="hspace"> </span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%2Fc%29%29" class="RktValLink" data-pltdoc="x">any/c</a></span></p></blockquote></td></tr><tr><td><span class="hspace"> </span><span class="RktVar">instance</span><span class="hspace"> </span>:<span class="hspace"> </span><span class="RktSym"><a href="linklets.html#%28def._%28%28lib._racket%2Flinklet..rkt%29._instance~3f%29%29" class="RktValLink" data-pltdoc="x">instance?</a></span></td></tr></table></blockquote></div><div class="SIntrapara">Returns the value associated to <span class="RktVar">instance</span> as its data—<wbr></wbr>either
|
||
|
the second value provided to <span class="RktSym"><a href="linklets.html#%28def._%28%28lib._racket%2Flinklet..rkt%29._make-instance%29%29" class="RktValLink" data-pltdoc="x">make-instance</a></span> or the default
|
||
|
<span class="RktVal">#f</span>.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._racket/linklet..rkt)._instance-variable-names))"></a><span title="Provided from: racket/linklet | Package: base"><span class="RktSym"><a href="linklets.html#%28def._%28%28lib._racket%2Flinklet..rkt%29._instance-variable-names%29%29" class="RktValDef RktValLink" data-pltdoc="x">instance-variable-names</a></span></span><span class="hspace"> </span><span class="RktVar">instance</span><span class="RktPn">)</span><span class="hspace"> </span>→<span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="pairs.html#%28def._%28%28quote._~23~25kernel%29._list%29%29" class="RktValLink" data-pltdoc="x">list</a></span><span class="hspace"> </span><span class="RktSym"><a href="symbols.html#%28def._%28%28quote._~23~25kernel%29._symbol~3f%29%29" class="RktValLink" data-pltdoc="x">symbol?</a></span><span class="RktPn">)</span></p></blockquote></td></tr><tr><td><span class="hspace"> </span><span class="RktVar">instance</span><span class="hspace"> </span>:<span class="hspace"> </span><span class="RktSym"><a href="linklets.html#%28def._%28%28lib._racket%2Flinklet..rkt%29._instance~3f%29%29" class="RktValLink" data-pltdoc="x">instance?</a></span></td></tr></table></blockquote></div><div class="SIntrapara">Returns a list of all names for all variables accessible from
|
||
|
<span class="RktVar">instance</span>.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><table cellspacing="0" cellpadding="0" class="prototype RForeground"><tr><td valign="top"><span class="RktPn">(</span><a name="(def._((lib._racket/linklet..rkt)._instance-variable-value))"></a><span title="Provided from: racket/linklet | Package: base"><span class="RktSym"><a href="linklets.html#%28def._%28%28lib._racket%2Flinklet..rkt%29._instance-variable-value%29%29" class="RktValDef RktValLink" data-pltdoc="x">instance-variable-value</a></span></span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="RktVar">instance</span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td></tr><tr><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="RktVar">name</span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td></tr><tr><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span><span class="RktOpt">[</span></td><td valign="top"><span class="RktVar">fail-k</span><span class="RktOpt">]</span><span class="RktPn">)</span></td><td valign="top"><span class="hspace"> </span></td><td valign="top">→</td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="RktSym"><a href="data-structure-contracts.html#%28form._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%29%29" class="RktStxLink" data-pltdoc="x">any</a></span></td></tr></table></blockquote></td></tr><tr><td><span class="hspace"> </span><span class="RktVar">instance</span><span class="hspace"> </span>:<span class="hspace"> </span><span class="RktSym"><a href="linklets.html#%28def._%28%28lib._racket%2Flinklet..rkt%29._instance~3f%29%29" class="RktValLink" data-pltdoc="x">instance?</a></span></td></tr><tr><td><span class="hspace"> </span><span class="RktVar">name</span><span class="hspace"> </span>:<span class="hspace"> </span><span class="RktSym"><a href="symbols.html#%28def._%28%28quote._~23~25kernel%29._symbol~3f%29%29" class="RktValLink" data-pltdoc="x">symbol?</a></span></td></tr><tr><td><span class="hspace"> </span><span class="RktVar">fail-k</span><span class="hspace"> </span>:<span class="hspace"> </span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%2Fc%29%29" class="RktValLink" data-pltdoc="x">any/c</a></span><span class="hspace"> </span>=<span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="lambda.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._lambda%29%29" class="RktStxLink" data-pltdoc="x">lambda</a></span><span class="hspace"> </span><span class="RktPn">(</span><span class="RktPn">)</span><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="exns.html#%28def._%28%28quote._~23~25kernel%29._error%29%29" class="RktValLink" data-pltdoc="x">error</a></span><span class="hspace"> </span><span class="RktSym">....</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr></table></blockquote></div><div class="SIntrapara">Returns the value of the variable exported as <span class="RktVar">name</span> from
|
||
|
<span class="RktVar">instance</span>. If no such variable is exported, then
|
||
|
<span class="RktVar">fail-k</span> is used in the same way as by <span class="RktSym"><a href="hashtables.html#%28def._%28%28quote._~23~25kernel%29._hash-ref%29%29" class="RktValLink" data-pltdoc="x">hash-ref</a></span>.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><table cellspacing="0" cellpadding="0" class="prototype RForeground"><tr><td valign="top"><span class="RktPn">(</span><a name="(def._((lib._racket/linklet..rkt)._instance-set-variable-value!))"></a><span title="Provided from: racket/linklet | Package: base"><span class="RktSym"><a href="linklets.html#%28def._%28%28lib._racket%2Flinklet..rkt%29._instance-set-variable-value%21%29%29" class="RktValDef RktValLink" data-pltdoc="x">instance-set-variable-value!</a></span></span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="RktVar">instance</span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td></tr><tr><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="RktVar">name</span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td></tr><tr><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="RktVar">v</span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td></tr><tr><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span><span class="RktOpt">[</span></td><td valign="top"><span class="RktVar">mode</span><span class="RktOpt">]</span><span class="RktPn">)</span></td><td valign="top"><span class="hspace"> </span></td><td valign="top">→</td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="RktSym"><a href="void.html#%28def._%28%28quote._~23~25kernel%29._void~3f%29%29" class="RktValLink" data-pltdoc="x">void?</a></span></td></tr></table></blockquote></td></tr><tr><td><span class="hspace"> </span><span class="RktVar">instance</span><span class="hspace"> </span>:<span class="hspace"> </span><span class="RktSym"><a href="linklets.html#%28def._%28%28lib._racket%2Flinklet..rkt%29._instance~3f%29%29" class="RktValLink" data-pltdoc="x">instance?</a></span></td></tr><tr><td><span class="hspace"> </span><span class="RktVar">name</span><span class="hspace"> </span>:<span class="hspace"> </span><span class="RktSym"><a href="symbols.html#%28def._%28%28quote._~23~25kernel%29._symbol~3f%29%29" class="RktValLink" data-pltdoc="x">symbol?</a></span></td></tr><tr><td><span class="hspace"> </span><span class="RktVar">v</span><span class="hspace"> </span>:<span class="hspace"> </span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%2Fc%29%29" class="RktValLink" data-pltdoc="x">any/c</a></span></td></tr><tr><td><span class="hspace"> </span><span class="RktVar">mode</span><span class="hspace"> </span>:<span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._or%2Fc%29%29" class="RktValLink" data-pltdoc="x">or/c</a></span><span class="hspace"> </span><span class="RktVal">
|
||
|
<span class="RktVar">instance</span> so that its value is <span class="RktVar">v</span>, as long as the
|
||
|
variable does not exist already as constant. If a variable for
|
||
|
<span class="RktVar">name</span> exists as constant, the <span class="RktSym"><a href="exns.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._exn~3afail~3acontract%29%29" class="RktValLink" data-pltdoc="x">exn:fail:contract</a></span> exception is raised.</div></p><p>If <span class="RktVar">mode</span> is <span class="RktVal">'</span><span class="RktVal">constant</span> or <span class="RktVal">'</span><span class="RktVal">consistent</span>, then
|
||
|
the variable is created or changed to be constant. Furthermore, when
|
||
|
the instance is reported for a linklet’s import though a
|
||
|
<span class="RktVar">get-import</span> callback to <span class="RktSym"><a href="linklets.html#%28def._%28%28lib._racket%2Flinklet..rkt%29._compile-linklet%29%29" class="RktValLink" data-pltdoc="x">compile-linklet</a></span>, the
|
||
|
compiler can assume that the variable will be constant in all future
|
||
|
instances that are used to satisfy a linklet’s imports.</p><p>If <span class="RktVar">mode</span> is <span class="RktVal">'</span><span class="RktVal">consistent</span>, when the instance is
|
||
|
reported though a callback to <span class="RktSym"><a href="linklets.html#%28def._%28%28lib._racket%2Flinklet..rkt%29._compile-linklet%29%29" class="RktValLink" data-pltdoc="x">compile-linklet</a></span>, the compiler
|
||
|
can further assume that the variable’s value will be the same for
|
||
|
future instances. For compilation purposes, “the same” can mean that
|
||
|
a procedure value will have the same arity and implementation details,
|
||
|
a <a href="structures.html#%28tech._structure._type%29" class="techoutside" data-pltdoc="x"><span class="techinside">structure type</span></a> value will have the same configuration, a
|
||
|
marshalable constant will be <span class="RktSym"><a href="Equality.html#%28def._%28%28quote._~23~25kernel%29._equal~3f%29%29" class="RktValLink" data-pltdoc="x">equal?</a></span> to the current value, and
|
||
|
so on.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._racket/linklet..rkt)._instance-unset-variable!))"></a><span title="Provided from: racket/linklet | Package: base"><span class="RktSym"><a href="linklets.html#%28def._%28%28lib._racket%2Flinklet..rkt%29._instance-unset-variable%21%29%29" class="RktValDef RktValLink" data-pltdoc="x">instance-unset-variable!</a></span></span><span class="hspace"> </span><span class="RktVar">instance</span><span class="hspace"> </span><span class="RktVar">name</span><span class="RktPn">)</span><span class="hspace"> </span>→<span class="hspace"> </span><span class="RktSym"><a href="void.html#%28def._%28%28quote._~23~25kernel%29._void~3f%29%29" class="RktValLink" data-pltdoc="x">void?</a></span></p></blockquote></td></tr><tr><td><span class="hspace"> </span><span class="RktVar">instance</span><span class="hspace"> </span>:<span class="hspace"> </span><span class="RktSym"><a href="linklets.html#%28def._%28%28lib._racket%2Flinklet..rkt%29._instance~3f%29%29" class="RktValLink" data-pltdoc="x">instance?</a></span></td></tr><tr><td><span class="hspace"> </span><span class="RktVar">name</span><span class="hspace"> </span>:<span class="hspace"> </span><span class="RktSym"><a href="symbols.html#%28def._%28%28quote._~23~25kernel%29._symbol~3f%29%29" class="RktValLink" data-pltdoc="x">symbol?</a></span></td></tr></table></blockquote></div><div class="SIntrapara">Changes <span class="RktVar">instance</span> so that it does not export a variable as
|
||
|
<span class="RktVar">name</span>, as long as <span class="RktVar">name</span> does not exist as a constant
|
||
|
variable. If a variable for <span class="RktVar">name</span> exists as constant, the
|
||
|
<span class="RktSym"><a href="exns.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._exn~3afail~3acontract%29%29" class="RktValLink" data-pltdoc="x">exn:fail:contract</a></span> exception is raised.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><table cellspacing="0" cellpadding="0" class="prototype RForeground"><tr><td valign="top"><span class="RktPn">(</span><a name="(def._((lib._racket/linklet..rkt)._instance-describe-variable!))"></a><span title="Provided from: racket/linklet | Package: base"><span class="RktSym"><span class="RktSymDef RktSym">instance-describe-variable!</span></span></span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="RktVar">instance</span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td></tr><tr><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="RktVar">name</span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td></tr><tr><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="RktVar">desc-v</span><span class="RktPn">)</span></td><td valign="top"><span class="hspace"> </span></td><td valign="top">→</td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="RktSym"><a href="void.html#%28def._%28%28quote._~23~25kernel%29._void~3f%29%29" class="RktValLink" data-pltdoc="x">void?</a></span></td></tr></table></blockquote></td></tr><tr><td><span class="hspace"> </span><span class="RktVar">instance</span><span class="hspace"> </span>:<span class="hspace"> </span><span class="RktSym"><a href="linklets.html#%28def._%28%28lib._racket%2Flinklet..rkt%29._instance~3f%29%29" class="RktValLink" data-pltdoc="x">instance?</a></span></td></tr><tr><td><span class="hspace"> </span><span class="RktVar">name</span><span class="hspace"> </span>:<span class="hspace"> </span><span class="RktSym"><a href="symbols.html#%28def._%28%28quote._~23~25kernel%29._symbol~3f%29%29" class="RktValLink" data-pltdoc="x">symbol?</a></span></td></tr><tr><td><span class="hspace"> </span><span class="RktVar">desc-v</span><span class="hspace"> </span>:<span class="hspace"> </span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%2Fc%29%29" class="RktValLink" data-pltdoc="x">any/c</a></span></td></tr></table></blockquote></div><div class="SIntrapara">Registers information about <span class="RktVar">name</span> in <span class="RktVar">instance</span> that
|
||
|
may be useful for compiling linklets where the instance is return via
|
||
|
the <span class="RktVar">get-import</span> callback to <span class="RktSym"><a href="linklets.html#%28def._%28%28lib._racket%2Flinklet..rkt%29._compile-linklet%29%29" class="RktValLink" data-pltdoc="x">compile-linklet</a></span>. The
|
||
|
<span class="RktVar">desc-v</span> description can be any value; the recognized
|
||
|
descriptions depend on virtual machine, but may include the following:</div></p><ul><li><p><span class="RktVal">`</span><span class="RktVal">(</span><span class="RktVal">procedure</span><span class="stt"> </span><span class="RktRdr">,</span><span class="RktSym">arity-mask</span><span class="RktVal">)</span> —<wbr></wbr> the value is always a
|
||
|
procedure that is not impersonated and not a structure, and its
|
||
|
arity in the style of <span class="RktSym"><a href="procedures.html#%28def._%28%28quote._~23~25kernel%29._procedure-arity-mask%29%29" class="RktValLink" data-pltdoc="x">procedure-arity-mask</a></span> is
|
||
|
<span class="RktSym">arity-mask</span>.</p></li><li><p><span class="RktVal">`</span><span class="RktVal">(</span><span class="RktVal">procedure/succeeds</span><span class="stt"> </span><span class="RktRdr">,</span><span class="RktSym">arity-mask</span><span class="RktVal">)</span> —<wbr></wbr> like
|
||
|
<span class="RktVal">`</span><span class="RktVal">(</span><span class="RktVal">procedure</span><span class="stt"> </span><span class="RktRdr">,</span><span class="RktSym">arity-mask</span><span class="RktVal">)</span>, but for a procedure that
|
||
|
never raises an exception of otherwise captures or escapes the
|
||
|
calling context.</p></li><li><p><span class="RktVal">`</span><span class="RktVal">(</span><span class="RktVal">procedure/pure</span><span class="stt"> </span><span class="RktRdr">,</span><span class="RktSym">arity-mask</span><span class="RktVal">)</span> —<wbr></wbr> like
|
||
|
<span class="RktVal">`</span><span class="RktVal">(</span><span class="RktVal">procedure/succeeds</span><span class="stt"> </span><span class="RktRdr">,</span><span class="RktSym">arity-mask</span><span class="RktVal">)</span>, but with no
|
||
|
observable side effects, so a call to the procedure can be
|
||
|
reordered.</p></li></ul><p class="SHistory">Added in version 7.1.0.8 of package <span class="stt">base</span>.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><table cellspacing="0" cellpadding="0" class="prototype RForeground"><tr><td valign="top"><span class="RktPn">(</span><a name="(def._((lib._racket/linklet..rkt)._variable-reference-~3einstance))"></a><span title="Provided from: racket/linklet | Package: base"><span class="RktSym"><a href="linklets.html#%28def._%28%28lib._racket%2Flinklet..rkt%29._variable-reference-~3einstance%29%29" class="RktValDef RktValLink" data-pltdoc="x">variable-reference->instance</a></span></span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="RktVar">varref</span></td><td valign="top"><span class="hspace"> </span></td></tr><tr><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span><span class="RktOpt">[</span></td><td valign="top"><span class="RktVar">ref-site?</span><span class="RktOpt">]</span><span class="RktPn">)</span></td><td valign="top"><span class="hspace"> </span></td></tr></table></blockquote></td></tr><tr><td><span class="hspace"> </span>→<span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="if.html#%28form._%28%28quote._~23~25kernel%29._if%29%29" class="RktStxLink" data-pltdoc="x">if</a></span><span class="hspace"> </span><span class="RktVar">ref-site?</span><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._or%2Fc%29%29" class="RktValLink" data-pltdoc="x">or/c</a></span><span class="hspace"> </span><span class="RktSym"><a href="linklets.html#%28def._%28%28lib._racket%2Flinklet..rkt%29._instance~3f%29%29" class="RktValLink" data-pltdoc="x">instance?</a></span><span class="hspace"> </span><span class="RktVal">#f</span><span class="hspace"> </span><span class="RktSym"><a href="symbols.html#%28def._%28%28quote._~23~25kernel%29._symbol~3f%29%29" class="RktValLink" data-pltdoc="x">symbol?</a></span><span class="RktPn">)</span><span class="hspace"> </span><span class="RktSym"><a href="linklets.html#%28def._%28%28lib._racket%2Flinklet..rkt%29._instance~3f%29%29" class="RktValLink" data-pltdoc="x">instance?</a></span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace"> </span><span class="RktVar">varref</span><span class="hspace"> </span>:<span class="hspace"> </span><span class="RktSym"><a href="Namespaces.html#%28def._%28%28quote._~23~25kernel%29._variable-reference~3f%29%29" class="RktValLink" data-pltdoc="x">variable-reference?</a></span></td></tr><tr><td><span class="hspace"> </span><span class="RktVar">ref-site?</span><span class="hspace"> </span>:<span class="hspace"> </span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%2Fc%29%29" class="RktValLink" data-pltdoc="x">any/c</a></span><span class="hspace"> </span>=<span class="hspace"> </span><span class="RktVal">#f</span></td></tr></table></blockquote></div><div class="SIntrapara">Extracts the instance where the variable of <span class="RktVar">varref</span> is defined
|
||
|
if <span class="RktVar">ref-site?</span> is <span class="RktVal">#f</span>, and returns the instance where
|
||
|
<span class="RktVar">varref</span> itself resides if <span class="RktVar">ref-site?</span> is true. This
|
||
|
notion of <a href="Locations____variable-reference.html#%28tech._variable._reference%29" class="techoutside" data-pltdoc="x"><span class="techinside">variable reference</span></a> is the same as at the module level
|
||
|
and can reflect the linklet instance that implements a particular
|
||
|
phase of a module instance.</div></p><p>When <span class="RktVar">ref-site?</span> is <span class="RktVal">#f</span>, the result is <span class="RktVal">#f</span> when
|
||
|
<span class="RktVar">varref</span> is from <span class="RktPn">(</span><span class="RktSym"><a href="Locations____variable-reference.html#%28form._%28%28quote._~23~25kernel%29._~23~25variable-reference%29%29" class="RktStxLink" data-pltdoc="x">#%variable-reference</a></span><span class="RktPn">)</span> with no
|
||
|
identifier. The result is a symbol if <span class="RktVar">varref</span> refers to a
|
||
|
primitive.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><table cellspacing="0" cellpadding="0" class="together"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._racket/linklet..rkt)._correlated~3f))"></a><span title="Provided from: racket/linklet | Package: base"><span class="RktSym"><a href="linklets.html#%28def._%28%28lib._racket%2Flinklet..rkt%29._correlated~3f%29%29" class="RktValDef RktValLink" data-pltdoc="x">correlated?</a></span></span><span class="hspace"> </span><span class="RktVar">v</span><span class="RktPn">)</span><span class="hspace"> </span>→<span class="hspace"> </span><span class="RktSym"><a href="booleans.html#%28def._%28%28quote._~23~25kernel%29._boolean~3f%29%29" class="RktValLink" data-pltdoc="x">boolean?</a></span></p></blockquote></td></tr><tr><td><span class="hspace"> </span><span class="RktVar">v</span><span class="hspace"> </span>:<span class="hspace"> </span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%2Fc%29%29" class="RktValLink" data-pltdoc="x">any/c</a></span></td></tr></table></td></tr><tr><td><table cellspacing="0" cellpadding="0" class="together"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._racket/linklet..rkt)._correlated-source))"></a><span title="Provided from: racket/linklet | Package: base"><span class="RktSym"><a href="linklets.html#%28def._%28%28lib._racket%2Flinklet..rkt%29._correlated-source%29%29" class="RktValDef RktValLink" data-pltdoc="x">correlated-source</a></span></span><span class="hspace"> </span><span class="RktVar">crlt</span><span class="RktPn">)</span><span class="hspace"> </span>→<span class="hspace"> </span><span class="RktSym"><a href="data-structure-contracts.html#%28form._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%29%29" class="RktStxLink" data-pltdoc="x">any</a></span></p></blockquote></td></tr><tr><td><span class="hspace"> </span><span class="RktVar">crlt</span><span class="hspace"> </span>:<span class="hspace"> </span><span class="RktSym"><a href="linklets.html#%28def._%28%28lib._racket%2Flinklet..rkt%29._correlated~3f%29%29" class="RktValLink" data-pltdoc="x">correlated?</a></span></td></tr></table></td></tr><tr><td><table cellspacing="0" cellpadding="0" class="together"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._racket/linklet..rkt)._correlated-line))"></a><span title="Provided from: racket/linklet | Package: base"><span class="RktSym"><a href="linklets.html#%28def._%28%28lib._racket%2Flinklet..rkt%29._correlated-line%29%29" class="RktValDef RktValLink" data-pltdoc="x">correlated-line</a></span></span><span class="hspace"> </span><span class="RktVar">crlt</span><span class="RktPn">)</span><span class="hspace"> </span>→<span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._or%2Fc%29%29" class="RktValLink" data-pltdoc="x">or/c</a></span><span class="hspace"> </span><span class="RktSym"><a href="number-types.html#%28def._%28%28quote._~23~25kernel%29._exact-positive-integer~3f%29%29" class="RktValLink" data-pltdoc="x">exact-positive-integer?</a></span><span class="hspace"> </span><span class="RktVal">#f</span><span class="RktPn">)</span></p></blockquote></td></tr><tr><td><span class="hspace"> </span><span class="RktVar">crlt</span><span class="hspace">&nbs
|
||
|
<span class="RktSym"><a href="stxops.html#%28def._%28%28quote._~23~25kernel%29._syntax-column%29%29" class="RktValLink" data-pltdoc="x">syntax-column</a></span>, <span class="RktSym"><a href="stxops.html#%28def._%28%28quote._~23~25kernel%29._syntax-position%29%29" class="RktValLink" data-pltdoc="x">syntax-position</a></span>,
|
||
|
<span class="RktSym"><a href="stxops.html#%28def._%28%28quote._~23~25kernel%29._syntax-span%29%29" class="RktValLink" data-pltdoc="x">syntax-span</a></span>, <span class="RktSym"><a href="stxops.html#%28def._%28%28quote._~23~25kernel%29._syntax-e%29%29" class="RktValLink" data-pltdoc="x">syntax-e</a></span>, <span class="RktSym"><a href="stxops.html#%28def._%28%28quote._~23~25kernel%29._syntax-~3edatum%29%29" class="RktValLink" data-pltdoc="x">syntax->datum</a></span>,
|
||
|
<span class="RktSym"><a href="stxops.html#%28def._%28%28quote._~23~25kernel%29._datum-~3esyntax%29%29" class="RktValLink" data-pltdoc="x">datum->syntax</a></span>, <span class="RktSym"><a href="stxprops.html#%28def._%28%28quote._~23~25kernel%29._syntax-property%29%29" class="RktValLink" data-pltdoc="x">syntax-property</a></span>, and
|
||
|
<span class="RktSym"><a href="stxprops.html#%28def._%28%28quote._~23~25kernel%29._syntax-property-symbol-keys%29%29" class="RktValLink" data-pltdoc="x">syntax-property-symbol-keys</a></span>, but for <a href="linklets.html#%28tech._correlated._object%29" class="techoutside" data-pltdoc="x"><span class="techinside">correlated
|
||
|
objects</span></a>.</div></p><p>Unlike <span class="RktSym"><a href="stxops.html#%28def._%28%28quote._~23~25kernel%29._datum-~3esyntax%29%29" class="RktValLink" data-pltdoc="x">datum->syntax</a></span>, <span class="RktSym"><a href="linklets.html#%28def._%28%28lib._racket%2Flinklet..rkt%29._datum-~3ecorrelated%29%29" class="RktValLink" data-pltdoc="x">datum->correlated</a></span> does not
|
||
|
recur through the given S-expression and convert pieces to
|
||
|
<a href="linklets.html#%28tech._correlated._object%29" class="techoutside" data-pltdoc="x"><span class="techinside">correlated objects</span></a>. Instead, a <a href="linklets.html#%28tech._correlated._object%29" class="techoutside" data-pltdoc="x"><span class="techinside">correlated object</span></a> is
|
||
|
simply wrapped around the immediate value. In contrast,
|
||
|
<span class="RktSym"><a href="linklets.html#%28def._%28%28lib._racket%2Flinklet..rkt%29._correlated-~3edatum%29%29" class="RktValLink" data-pltdoc="x">correlated->datum</a></span> recurs through its argument (which is not
|
||
|
necessarily a <a href="linklets.html#%28tech._correlated._object%29" class="techoutside" data-pltdoc="x"><span class="techinside">correlated object</span></a>) to discover any
|
||
|
<a href="linklets.html#%28tech._correlated._object%29" class="techoutside" data-pltdoc="x"><span class="techinside">correlated objects</span></a> and convert them to plain S-expressions.</p><p class="SHistory">Changed in version 7.6.0.6 of package <span class="stt">base</span>: Added the <span class="RktVar">prop</span> argument
|
||
|
to <span class="RktSym"><a href="linklets.html#%28def._%28%28lib._racket%2Flinklet..rkt%29._datum-~3ecorrelated%29%29" class="RktValLink" data-pltdoc="x">datum->correlated</a></span>.</p><div class="navsetbottom"><span class="navleft"><form class="searchform"><input class="searchbox" id="searchbox" type="text" tabindex="1" placeholder="...search manuals..." title="Enter a search string to search the manuals" onkeypress="return DoSearchKey(event, this, "8.6", "../");"/></form> <a href="https://docs.racket-lang.org/index.html" title="up to the documentation top" data-pltdoc="x" onclick="return GotoPLTRoot("8.6");">top</a><span class="tocsettoggle"> <a href="javascript:void(0);" title="show/hide table of contents" onclick="TocsetToggle();">contents</a></span></span><span class="navright"> <a href="repl-module.html" title="backward to "14.13 The racket/repl Library"" data-pltdoc="x">← prev</a> <a href="security.html" title="up to "14 Reflection and Security"" data-pltdoc="x">up</a> <a href="os.html" title="forward to "15 Operating System"" data-pltdoc="x">next →</a></span> </div></div></div><div id="contextindicator"> </div></body></html>
|