Importing.xhtml 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509
  1. <?xml version="1.0" encoding="UTF-8" standalone="no"?>
  2. <!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:pls="http://www.w3.org/2005/01/pronunciation-lexicon" xmlns:ssml="http://www.w3.org/2001/10/synthesis" xmlns:svg="http://www.w3.org/2000/svg">
  3. <head>
  4. <title>Importing from a library</title>
  5. <link rel="stylesheet" type="text/css" href="docbook-epub.css"/>
  6. <link rel="stylesheet" type="text/css" href="kawa.css"/>
  7. <script src="kawa-ebook.js" type="text/javascript"/>
  8. <meta name="generator" content="DocBook XSL-NS Stylesheets V1.79.1"/>
  9. <link rel="prev" href="Module-classes.xhtml" title="Modules and how they are compiled to classes"/>
  10. <link rel="next" href="Record-types.xhtml" title="Record types"/>
  11. </head>
  12. <body>
  13. <header/>
  14. <section class="sect1" title="Importing from a library" epub:type="subchapter" id="Importing">
  15. <div class="titlepage">
  16. <div>
  17. <div>
  18. <h2 class="title" style="clear: both">Importing from a library</h2>
  19. </div>
  20. </div>
  21. </div>
  22. <span id="require"/>
  23. <p>You can import a module into the current namespace with <code class="literal">import</code> or <code class="literal">require</code>. This adds the exported bindings (or a subset of them) to the
  24. current lexical scope. It follows that these bindings (which are said
  25. to be imported) are determined at compile-time.
  26. </p>
  27. <span id="meta-import-declaration"/>
  28. <p class="synopsis" kind="Syntax"><span class="kind">Syntax</span><span class="ignore">: </span><a id="idm139667871383728" class="indexterm"/> <code class="function">import</code> <em class="replaceable"><code><a class="link" href="Importing.xhtml#meta-import-set"><em class="replaceable"><code>import-set</code></em></a></code></em><em class="replaceable"><code><sup>*</sup></code></em></p>
  29. <div class="blockquote">
  30. <blockquote class="blockquote">
  31. <p>An <code class="literal">import</code> declaration provides a way to import identifiers
  32. exported by a library (module). Each <em class="replaceable"><code>import-set</code></em> names a set of
  33. bindings from a library and possibly specifies local names
  34. for the imported bindings.
  35. </p>
  36. <div class="literallayout">
  37. <p><a id="idm139667871378560" class="indexterm"/><span id="meta-import-set"/><em class="replaceable"><code>import-set</code></em> <code class="literal">::=</code><br/>
  38.     <em class="replaceable"><code>classname</code></em><br/>
  39.   | <a class="link" href="Importing.xhtml#meta-library-reference"><em class="replaceable"><code>library-reference</code></em></a><br/>
  40.   | <code class="literal"><span class="bold"><strong>(library</strong></span></code> <a class="link" href="Importing.xhtml#meta-library-reference"><em class="replaceable"><code>library-reference</code></em></a> <code class="literal"><span class="bold"><strong>)</strong></span></code><br/>
  41.   | <code class="literal"><span class="bold"><strong>(class</strong></span></code> <em class="replaceable"><code>class-prefix</code></em> <em class="replaceable"><code>import-only-name</code></em><sup>*</sup><code class="literal"><span class="bold"><strong>)</strong></span></code><br/>
  42.   | <code class="literal"><span class="bold"><strong>(only</strong></span></code> <a class="link" href="Importing.xhtml#meta-import-set"><em class="replaceable"><code>import-set</code></em></a> <em class="replaceable"><code>import-only-name</code></em><sup>*</sup><code class="literal"><span class="bold"><strong>)</strong></span></code><br/>
  43.   | <code class="literal"><span class="bold"><strong>(except</strong></span></code> <a class="link" href="Importing.xhtml#meta-import-set"><em class="replaceable"><code>import-set</code></em></a> <em class="replaceable"><code>identifier</code></em><sup>*</sup><code class="literal"><span class="bold"><strong>)</strong></span></code><br/>
  44.   | <code class="literal"><span class="bold"><strong>(prefix</strong></span></code> <a class="link" href="Importing.xhtml#meta-import-set"><em class="replaceable"><code>import-set</code></em></a> <em class="replaceable"><code>identifier</code></em> <code class="literal"><span class="bold"><strong>)</strong></span></code><br/>
  45.   | <code class="literal"><span class="bold"><strong>(rename</strong></span></code> <a class="link" href="Importing.xhtml#meta-import-set"><em class="replaceable"><code>import-set</code></em></a> <a class="link" href="Importing.xhtml#meta-rename-pair"><em class="replaceable"><code>rename-pair</code></em></a><sup>*</sup><code class="literal"><span class="bold"><strong>)</strong></span></code><br/>
  46. <a id="idm139667871358032" class="indexterm"/><span id="meta-library-reference"/><em class="replaceable"><code>library-reference</code></em> <code class="literal">::=</code> <code class="literal"><span class="bold"><strong>(</strong></span></code> <a class="link" href="Module-classes.xhtml#meta-library-name-parts"><em class="replaceable"><code>library-name-parts</code></em></a> [<a class="link" href="Importing.xhtml#meta-explicit-source-name"><em class="replaceable"><code>explicit-source-name</code></em></a>]<code class="literal"><span class="bold"><strong>)</strong></span></code><br/>
  47. <a id="idm139667871352832" class="indexterm"/><span id="meta-import-only-name"/><em class="replaceable"><code>import-only-name</code></em> <code class="literal">::=</code> <em class="replaceable"><code>identifier</code></em>|<a class="link" href="Importing.xhtml#meta-rename-pair"><em class="replaceable"><code>rename-pair</code></em></a><br/>
  48. <a id="idm139667871349616" class="indexterm"/><span id="meta-explicit-source-name"/><em class="replaceable"><code>explicit-source-name</code></em> <code class="literal">::=</code> <a class="link" href="String-literals.xhtml#meta-string"><em class="replaceable"><code>string</code></em></a><br/>
  49. <a id="idm139667871346800" class="indexterm"/><span id="meta-rename-pair"/><em class="replaceable"><code>rename-pair</code></em> <code class="literal">::=</code> <code class="literal"><span class="bold"><strong>(</strong></span></code> <em class="replaceable"><code>identifier</code></em><sub>1</sub> <em class="replaceable"><code>identifier</code></em><sub>2</sub><code class="literal"><span class="bold"><strong>)</strong></span></code><br/>
  50. </p>
  51. </div>
  52. <p>A <em class="replaceable"><code>library-reference</code></em> is mapped to a class name by concatenating
  53. all the identifiers, separated by dots.
  54. For example:
  55. </p>
  56. <pre class="screen">(import (gnu kawa slib srfi37))
  57. </pre>
  58. <p>is equivalent to:
  59. </p>
  60. <pre class="screen">(import gnu.kawa.slib.srfi37)
  61. </pre>
  62. <p>as well as to:
  63. </p>
  64. <pre class="screen">(require gnu.kawa.slib.srfi37)
  65. </pre>
  66. <p>By default, all of an imported library’s exported bindings are made
  67. visible within an importing library using the names given to the
  68. bindings by the imported library. The precise set of bindings to be
  69. imported and the names of those bindings can be adjusted with the
  70. <code class="literal">only</code>, <code class="literal">except</code>, <code class="literal">prefix</code>, and <code class="literal"> rename</code> forms as
  71. described below.
  72. </p>
  73. <div class="itemizedlist" epub:type="list">
  74. <ul style="list-style-type: disc; " class="itemizedlist">
  75. <li class="listitem" epub:type="list-item">
  76. <p>An <code class="literal">only</code> form produces a subset of the bindings from another
  77. <em class="replaceable"><code>import-set</code></em>, including only the listed <em class="replaceable"><code>identifier</code></em>s. The
  78. included <em class="replaceable"><code>identifier</code></em>s must be in the original <em class="replaceable"><code>import-set</code></em>.
  79. If a <em class="replaceable"><code>rename-pair</code></em> is used, then the <code class="literal"><em class="replaceable"><code>identifier</code></em><sub>1</sub></code>
  80. must be in the original <em class="replaceable"><code>import-set</code></em>,
  81. and is renamed to <code class="literal"><em class="replaceable"><code>identifier</code></em><sub>2</sub></code>. For example:
  82. </p>
  83. <pre class="screen">(import (only (kawa example) A (B1 B2) C (D1 D2)))
  84. </pre>
  85. <p>is equivalent to:
  86. </p>
  87. <pre class="screen">(import (rename (only (kawa example) A B1 C D1)
  88. (B1 B2) (D1 D2)))
  89. </pre>
  90. <p>The names <code class="literal">A</code>, <code class="literal">B1</code>, <code class="literal">C</code>, and <code class="literal">D1</code> must
  91. exist in the library <code class="literal">(kawa example)</code>. The bindings are
  92. accessible using the names <code class="literal">A</code>, <code class="literal">B2</code>, <code class="literal">C</code>, and <code class="literal">D2</code>.
  93. </p>
  94. </li>
  95. <li class="listitem" epub:type="list-item">
  96. <p>An <code class="literal">except</code> form produces a subset of the bindings from another
  97. <em class="replaceable"><code>import-set</code></em>, including all but the listed <em class="replaceable"><code>identifier</code></em>s. All
  98. of the excluded <em class="replaceable"><code>identifier</code></em>s must be in the original <em class="replaceable"><code>import-set</code></em>.
  99. </p>
  100. </li>
  101. <li class="listitem" epub:type="list-item">
  102. <p>A <code class="literal">prefix</code> form adds the <em class="replaceable"><code>identifier</code></em> prefix to each name from
  103. another <em class="replaceable"><code>import-set</code></em>.
  104. </p>
  105. </li>
  106. <li class="listitem" epub:type="list-item">
  107. <p>A <code class="literal">rename</code> form:
  108. </p>
  109. <pre class="screen">(rename (<em class="replaceable"><code>identifier</code></em><sub>1</sub> <em class="replaceable"><code>identifier</code></em><sub>2</sub>) …)
  110. </pre>
  111. <p>removes the bindings for <code class="literal"><em class="replaceable"><code>identifier</code></em><sub>1</sub> …</code> to form an
  112. intermediate <em class="replaceable"><code>import-set</code></em>, then adds the bindings back for the
  113. corresponding <code class="literal"><em class="replaceable"><code>identifier</code></em><sub>2</sub> …</code> to form the final
  114. <em class="replaceable"><code>import-set</code></em>. Each <code class="literal"><em class="replaceable"><code>identifier</code></em><sub>1</sub></code> must be in the original
  115. <em class="replaceable"><code>import-set</code></em>, each <em class="replaceable"><code>identifier</code></em><sub>2</sub> must not be in the
  116. intermediate <em class="replaceable"><code>import-set</code></em>, and the <em class="replaceable"><code>identifier</code></em><sub>2</sub>s must be
  117. distinct.
  118. </p>
  119. </li>
  120. </ul>
  121. </div>
  122. <p>A <code class="literal">class</code> form is a convenient way to define abbreviations
  123. for class names; it may be more convenient than <code class="literal">define-alias</code>.
  124. The <em class="replaceable"><code>class-prefix</code></em> is concatenated with each <em class="replaceable"><code>identifier</code></em>
  125. (with a period in between) to produce a classname.
  126. Each <em class="replaceable"><code>identifier</code></em> becomes an alias for the class.
  127. For example:
  128. </p>
  129. <pre class="screen">(import (class java.util Map (HashMap HMap)))
  130. </pre>
  131. <p>This defines <code class="literal">Map</code> as an alias for <code class="literal">java.util.Map</code>,
  132. and <code class="literal">HMap</code> as an alias for <code class="literal">java.util.HashMap</code>.
  133. (You can think of the <code class="literal">class</code> form as similar to a <code class="literal">only</code> form,
  134. where the <em class="replaceable"><code>class-prefix</code></em> names a special kind of
  135. library represented of a Java package, and whose exported
  136. bindings are the classes in the package.)
  137. </p>
  138. <p>You can combine the <code class="literal">class</code> form with
  139. <code class="literal">only</code>, <code class="literal">except</code>, <code class="literal">rename</code>, and <code class="literal">prefix</code>,
  140. though only <code class="literal">prefix</code> is likely to be useful. For example:
  141. </p>
  142. <pre class="screen">(import (prefix (class java.lang Long Short) jl-))
  143. </pre>
  144. <p>is equivalent to
  145. </p>
  146. <pre class="screen">(import (class java.lang (Long jl-Long) (Short jl-Short)))
  147. </pre>
  148. <p>which is equivalent to:
  149. </p>
  150. <pre class="screen">(define-private-alias jl-Short java.lang.Short)
  151. (define-private-alias jl-Long java.lang.Long)
  152. </pre>
  153. </blockquote>
  154. </div>
  155. <p class="synopsis" kind="Syntax"><span class="kind">Syntax</span><span class="ignore">: </span><a id="idm139667871301104" class="indexterm"/> <code class="function">require</code> <em class="replaceable"><code><span class="bold"><strong>’</strong></span></code></em><em class="replaceable"><code>featureName</code></em></p>
  156. <p class="synopsis" kind="Syntax"><span class="kind">Syntax</span><span class="ignore">: </span><a id="idm139667871297584" class="indexterm"/> <code class="function">require</code> <em class="replaceable"><code>classname</code></em> [<em class="replaceable"><code><a class="link" href="Importing.xhtml#meta-explicit-source-name"><em class="replaceable"><code>explicit-source-name</code></em></a></code></em>]</p>
  157. <p class="synopsis" kind="Syntax"><span class="kind">Syntax</span><span class="ignore">: </span><a id="idm139667871293664" class="indexterm"/> <code class="function">require</code> <em class="replaceable"><code><a class="link" href="Importing.xhtml#meta-explicit-source-name"><em class="replaceable"><code>explicit-source-name</code></em></a></code></em>]</p>
  158. <div class="blockquote">
  159. <blockquote class="blockquote">
  160. <p>Search for a matching module (class), and add the names
  161. exported by that module to the current set of visible names.
  162. Normally, the module is specified using <em class="replaceable"><code>classname</code></em>.
  163. </p>
  164. <p>The form <code class="literal">require</code> has similar functionality as <code class="literal">import</code>,
  165. but with a different syntax, and without options like <code class="literal">rename</code>.
  166. </p>
  167. <p>If a <code class="literal"><code class="literal"><span class="bold"><strong>"</strong></span></code><em class="replaceable"><code>sourcepath</code></em><code class="literal"><span class="bold"><strong>"</strong></span></code></code> is specified then
  168. that is used to locate the source file for the module, and if necessary,
  169. compile it.
  170. </p>
  171. <p>If a <code class="literal">'<em class="replaceable"><code>featurename</code></em></code> is specified then the
  172. <em class="replaceable"><code>featurename</code></em> is looked up (at compile time) in the "feature table"
  173. which yields the implementing <em class="replaceable"><code>classname</code></em>.
  174. </p>
  175. </blockquote>
  176. </div>
  177. <p class="synopsis" kind="Syntax"><span class="kind">Syntax</span><span class="ignore">: </span><a id="idm139667871282608" class="indexterm"/> <code class="function">provide</code> <em class="replaceable"><code><span class="bold"><strong>’</strong></span></code></em><em class="replaceable"><code>featurename</code></em></p>
  178. <div class="blockquote">
  179. <blockquote class="blockquote">
  180. <p>Declare that <code class="literal">'<em class="replaceable"><code>featurename</code></em></code> is available.
  181. A following <code class="literal">cond-expand</code> in this scope will match <em class="replaceable"><code>featurename</code></em>.
  182. </p>
  183. </blockquote>
  184. </div>
  185. <p>Using <code class="literal">require</code> and <code class="literal">provide</code> with <em class="replaceable"><code>featurename</code></em>s is
  186. similar to the same-named macros in SLib, Emacs, and Common Lisp.
  187. However, in Kawa these are not functions, but instead they
  188. are syntax forms that are processed at compile time. That is
  189. why only quoted <em class="replaceable"><code>featurename</code></em>s are supported.
  190. This is consistent with Kawa emphasis on compilation and
  191. static binding.
  192. </p>
  193. <p>For some examples, you may want to look in the <code class="literal">gnu/kawa/slib</code>
  194. directory.
  195. </p>
  196. <section class="sect2" title="Searching for modules" epub:type="division" id="idm139667871273696">
  197. <div class="titlepage">
  198. <div>
  199. <div>
  200. <h3 class="title">Searching for modules</h3>
  201. </div>
  202. </div>
  203. </div>
  204. <p>When Kawa sees a <code class="literal">import</code> or <code class="literal">require</code> it searches for
  205. either a matching source file or a previously-compiled class with a
  206. matching name.
  207. </p>
  208. <p>For <code class="literal">import</code> we generate a classname by converting it in the same
  209. way <code class="literal">module-name</code> does: taking each identifier in the
  210. <em class="replaceable"><code>library-name-parts</code></em>, mangling if needed, and concatenating the parts
  211. separated by periods.
  212. </p>
  213. <p>If there is a matching module in any <em class="replaceable"><code>program-unit</code></em> that is
  214. in the process of being compiled, we use that. This may be
  215. a file requested to be compiled with the <code class="literal">-C</code> command-line switch,
  216. or an extra <em class="replaceable"><code>library-definition</code></em> in a file already parsed.
  217. Kawa will attempt to finish compiling the module and load the class,
  218. but if there are circular dependencies it will use the uncompiled definitions.
  219. </p>
  220. <p>Next Kawa looks for a matching class in the context classpath.
  221. (There is special handling if the library-name starts with <code class="literal">srfi</code>,
  222. and certain builtin classes will have <code class="literal">kawa.lib.</code> prepended.)
  223. </p>
  224. <p>Kawa also searches for a matching source file, described below.
  225. It uses the implicit source name (formed by concatenating the
  226. library-name parts, separated by <code class="literal">"/"</code>), as well as
  227. any <em class="replaceable"><code>explicit-source-name</code></em>. The source file is parsed as
  228. a <a class="link" href="Bodies.xhtml#meta-program-unit"><em class="replaceable"><code>program-unit</code></em></a>. It is an error if the <em class="replaceable"><code>program-unit</code></em>
  229. does not declare a library (explicit or implicit) with the
  230. matching name.
  231. </p>
  232. <p>If Kawa finds both a matching source file and a class, it will pick one
  233. based on which is newer.
  234. </p>
  235. </section>
  236. <section class="sect2" title="Searching for source files" epub:type="division" id="idm139667871262528">
  237. <div class="titlepage">
  238. <div>
  239. <div>
  240. <h3 class="title">Searching for source files</h3>
  241. </div>
  242. </div>
  243. </div>
  244. <p>The Java property <code class="literal">kawa.import.path</code> controls how <code class="literal">import</code>
  245. and <code class="literal">require</code> search for a suitable source file. Example usage:
  246. </p>
  247. <pre class="screen">$ kawa -Dkawa.import.path=".:&lt;foo fo&gt;/opt/fo-libs/*.scm:/usr/local/kawa"
  248. </pre>
  249. <p>The value of the <code class="literal">kawa.import.path</code> property is a list of
  250. path elements, separated by <code class="literal">":"</code>.
  251. Each path element is combined with either the explicit source name
  252. or the implicit source name to produce a filename.
  253. If a matching file exists, then we have found a source file.
  254. </p>
  255. <p>If a path element contains a <code class="literal">"*"</code> then the <code class="literal">"*"</code>
  256. is replaced by the implicit source name (without an extension).
  257. (Any explicit source name is ignored in this case.)
  258. For example, for <code class="literal">(import (foo bar))</code> or <code class="literal">(require foo.bar)</code>
  259. the implicit source name is <code class="literal">"foo/bar"</code>. If the path element is
  260. <code class="literal">"/opt/kawa/*.sc"</code> then the resulting filename is <code class="literal">"/opt/kawa/foo/bar.sc"</code>.
  261. </p>
  262. <p>If there is no <code class="literal">"*"</code> in the path element, and there is an
  263. explicit source, then it is appended to the path element
  264. (or replaces the path element if the explicit source is absolute).
  265. Otherwise we use the implicit source, followed by the default file extension.
  266. (The default file extension is that of the current source if that is a
  267. named file; otherwise the default for the current language, which
  268. is <code class="literal">".scm"</code> for Scheme.)
  269. </p>
  270. <p>A path element that starts with a selector of the
  271. form <code class="literal">"&lt;<a class="link" href="Module-classes.xhtml#meta-library-name-parts"><em class="replaceable"><code>library-name-parts</code></em></a>&gt;"</code> is only applicable if a prefix
  272. of the requested module name matches the <em class="replaceable"><code>library-name-parts</code></em>. If there
  273. is <code class="literal">"*"</code> in the path element, that is replaced by the corresponding rest
  274. of the implicit source name. For example if importing <code class="literal">(fee fo foo fum</code>)
  275. and the path element is <code class="literal">"&lt;fee fo&gt;/opt/fo-libs/*.scm"</code> then the
  276. resulting filename is <code class="literal">"/opt/fo-libs/foo/fum.scm"</code>.
  277. If there is a selector but no <code class="literal">"*"</code>, then the rest of the path element
  278. following the selector is combined with the explicit or implicit source
  279. as if there were no selector (assuming of course that the selector matches).
  280. </p>
  281. <p>If the resulting filename is relative, then it is resolved
  282. relative to the <em class="firstterm">current root</em>. For example the source to
  283. a library with the name <code class="literal">(x y)</code> that compiles to
  284. a class <code class="literal">x.y</code> might be a file named <code class="literal">/a/b/x/y.scm</code>.
  285. Then the current root would be <code class="literal">/a/b/</code>
  286. - that is the directory that results from removing the library name
  287. suffix from the file name.
  288. </p>
  289. <p>More generally: assume the current module has <span class="mathphrase">N</span> name components.
  290. For example the name <code class="literal">(x y)</code>
  291. (with the class name <code class="literal">x.y</code>) has 2 components.
  292. The current root is what you get when you take the current file name
  293. (say <code class="literal">"/a/b/c/d.scm"</code>), and remove everything after
  294. the <span class="mathphrase">N</span>’th slash (<code class="literal">"/"</code>) from the end (say <code class="literal">"c/d.scm"</code>;
  295. what remains (e.g. <code class="literal">"/a/b/"</code> is the current root.
  296. (If the current input source is not a named file,
  297. use the value of <code class="literal">(current-path)</code> with a <code class="literal">"/"</code> appended.)
  298. </p>
  299. <p>The default search path is <code class="literal">"."</code> - i.e. just search relative
  300. to the current root.
  301. </p>
  302. </section>
  303. <section class="sect2" title="Builtin libraries" epub:type="division" id="idm139667871238240">
  304. <div class="titlepage">
  305. <div>
  306. <div>
  307. <h3 class="title">Builtin libraries</h3>
  308. </div>
  309. </div>
  310. </div>
  311. <p>The following libraries are bundled with Kawa:
  312. </p>
  313. <div class="variablelist" epub:type="list">
  314. <dl class="variablelist">
  315. <dt class="term"><code class="literal">(scheme base)</code>
  316. </dt>
  317. <dt class="term"><code class="literal">(scheme case-lambda)</code>
  318. </dt>
  319. <dt class="term"><code class="literal">(scheme char)</code>
  320. </dt>
  321. <dt class="term"><code class="literal">(scheme complex)</code>
  322. </dt>
  323. <dt class="term"><code class="literal">(scheme cxr)</code>
  324. </dt>
  325. <dt class="term"><code class="literal">(scheme cxr)</code>
  326. </dt>
  327. <dt class="term"><code class="literal">(scheme eval)</code>
  328. </dt>
  329. <dt class="term"><code class="literal">(scheme inexact)</code>
  330. </dt>
  331. <dt class="term"><code class="literal">(scheme lazy)</code>
  332. </dt>
  333. <dt class="term"><code class="literal">(scheme load)</code>
  334. </dt>
  335. <dt class="term"><code class="literal">(scheme process-context)</code>
  336. </dt>
  337. <dt class="term"><code class="literal">(scheme read)</code>
  338. </dt>
  339. <dt class="term"><code class="literal">(scheme repl)</code>
  340. </dt>
  341. <dt class="term"><code class="literal">(scheme time)</code>
  342. </dt>
  343. <dt class="term"><code class="literal">(scheme write)</code>
  344. </dt>
  345. <dt class="term"><code class="literal">(scheme r5rs)</code>
  346. </dt>
  347. <dd>
  348. <p>The above are standard libraries as defined by R7RS.
  349. </p>
  350. </dd>
  351. <dt class="term"><code class="literal">(rnrs arithmetic bitwise)</code>
  352. </dt>
  353. <dt class="term"><code class="literal">(rnrs hashtables)</code>
  354. </dt>
  355. <dt class="term"><code class="literal">(rnrs lists)</code>
  356. </dt>
  357. <dt class="term"><code class="literal">(rnrs programs)</code>
  358. </dt>
  359. <dt class="term"><code class="literal">(rnrs sorting)</code>
  360. </dt>
  361. <dt class="term"><code class="literal">(rnrs unicode)</code>
  362. </dt>
  363. <dd>
  364. <p>The above are standard libraries as defined by R6RS.
  365. </p>
  366. </dd>
  367. <dt class="term"><code class="literal">(kawa reflect)</code>
  368. </dt>
  369. <dd>
  370. <p>Defines procedures and syntax for acessing Java objects and members:
  371. <code class="literal">as</code>
  372. <code class="literal">field</code>
  373. <code class="literal">instance?</code>
  374. <code class="literal">invoke</code>
  375. <code class="literal">invoke-static</code>
  376. <code class="literal">invoke-special</code>
  377. <code class="literal">make</code>
  378. <code class="literal">primitive-throw</code>
  379. <code class="literal">set-field!</code>
  380. <code class="literal">set-static-field!</code>
  381. <code class="literal">static-field</code>
  382. </p>
  383. </dd>
  384. <dt class="term"><code class="literal">(kawa expressions)</code>
  385. </dt>
  386. <dt class="term"><code class="literal">(kawa hashtable)</code>
  387. </dt>
  388. <dt class="term"><code class="literal">(kawa quaternions)</code>
  389. </dt>
  390. <dt class="term"><code class="literal">(kawa rotations)</code>
  391. </dt>
  392. <dt class="term"><code class="literal">(kawa regex)</code>
  393. </dt>
  394. <dt class="term"><code class="literal">(kawa string-cursors)</code>
  395. </dt>
  396. <dd>
  397. <p>Various Kawa libraries <span class="emphasis"><em>add details</em></span>.
  398. </p>
  399. </dd>
  400. <dt class="term"><code class="literal">(kawa base)</code>
  401. </dt>
  402. <dd>
  403. <p>All the bindings by default available to the kawa top-level.
  404. </p>
  405. </dd>
  406. </dl>
  407. </div>
  408. </section>
  409. <section class="sect2" title="Importing a SRFI library" epub:type="division" id="idm139667871212272">
  410. <div class="titlepage">
  411. <div>
  412. <div>
  413. <h3 class="title">Importing a SRFI library</h3>
  414. </div>
  415. </div>
  416. </div>
  417. <p>Importing a supported SRFI numbered <em class="replaceable"><code>N</code></em> is conventionally
  418. doing using a <code class="literal">(import (srfi <em class="replaceable"><code>N</code></em>))</code>
  419. or the older R6RS syntax <code class="literal">(import (srfi :<em class="replaceable"><code>N</code></em>))</code> (with a colon, for historical reasons). You can also give it
  420. a name, as specified by <a class="ulink" href="http://srfi.schemers.org/srfi-95/srfi-95.html" target="_top">SRFI 95</a>. For example, any of these work:
  421. </p>
  422. <pre class="screen">(import (srfi 95))
  423. (import (srfi 95 sorting-and-merging))
  424. (import (srfi :95))
  425. (import (srfi :95 sorting-and-merging))
  426. </pre>
  427. <p>You can also use <code class="literal">(require 'srfi-<em class="replaceable"><code>N</code></em>)</code>:
  428. </p>
  429. <pre class="screen">(require 'srfi-95)
  430. </pre>
  431. </section>
  432. <section class="sect2" title="Importing from a plain class" epub:type="division" id="idm139667871206048">
  433. <div class="titlepage">
  434. <div>
  435. <div>
  436. <h3 class="title">Importing from a plain class</h3>
  437. </div>
  438. </div>
  439. </div>
  440. <p>Note you can import from many classes, even if they weren’t
  441. compiled from a library-definition. The set of <code class="literal">public</code> fields
  442. in a class are considered as the set of exported definitions,
  443. with the names demangled as needed.
  444. </p>
  445. <p>The module can be static module (all public fields must be static),
  446. or an instance module (it has a public default constructor).
  447. </p>
  448. <p>If an imported definition is a non-static field and if no module
  449. instance for that class
  450. has been registered in the current environment, then a new instance
  451. is created and registered (using a "magic" identifier).
  452. If the module class either inherits from <code class="literal">gnu.expr.ModuleBody</code>
  453. or implements <code class="literal">java.lang.Runnable</code> then the corresponding <code class="literal">run</code>
  454. method is executed. (This is done <span class="emphasis"><em>after</em></span> the instance is
  455. registered so that cycles can be handled.) These actions (creating,
  456. registering, and running the module instance) are done both at compile
  457. time and at run time, if necessary.
  458. </p>
  459. <p>All the imported fields of the module class are then incorporated
  460. in the current set of local visible names in the current module.
  461. (This is for both instance and static modules.)
  462. This is done at compile time - no new bindings are created at run-time
  463. (except for the magic binding used to register the module instance),
  464. and the imported bindings are private to the current module.
  465. References to the imported bindings will be compiled as field
  466. references, using the module instance (except for static fields).
  467. </p>
  468. </section>
  469. </section>
  470. <footer>
  471. <div class="navfooter">
  472. <ul>
  473. <li>
  474. <b class="toc">
  475. <a href="Importing.xhtml#idm139667871273696">Searching for modules</a>
  476. </b>
  477. </li>
  478. <li>
  479. <b class="toc">
  480. <a href="Importing.xhtml#idm139667871262528">Searching for source files</a>
  481. </b>
  482. </li>
  483. <li>
  484. <b class="toc">
  485. <a href="Importing.xhtml#idm139667871238240">Builtin libraries</a>
  486. </b>
  487. </li>
  488. <li>
  489. <b class="toc">
  490. <a href="Importing.xhtml#idm139667871212272">Importing a SRFI library</a>
  491. </b>
  492. </li>
  493. <li>
  494. <b class="toc">
  495. <a href="Importing.xhtml#idm139667871206048">Importing from a plain class</a>
  496. </b>
  497. </li>
  498. </ul>
  499. <p>
  500. Up: <a accesskey="u" href="Objects-Classes-and-Modules.xhtml">Object, Classes and Modules</a></p>
  501. <p>
  502. Previous: <a accesskey="p" href="Module-classes.xhtml">Modules and how they are compiled to classes</a></p>
  503. <p>
  504. Next: <a accesskey="n" href="Record-types.xhtml">Record types</a></p>
  505. </div>
  506. </footer>
  507. </body>
  508. </html>