Page Menu
Home
Xreate
Search
Configure Global Search
Log In
Docs
Questions
Repository
Issues
Patches
Internal API
Files
F4003368
modules-api.xml
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Thu, Jul 9, 8:16 AM
Size
3 KB
Mime Type
text/xml
Expires
Sat, Jul 11, 8:16 AM (11 h, 43 m)
Engine
blob
Format
Raw Data
Handle
273664
Attached To
rXR Xreate
modules-api.xml
View Options
<?xml version="1.0" encoding="UTF-8"?>
<chapter version="5.1" xmlns="http://docbook.org/ns/docbook"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:xila="http://www.w3.org/2001/XInclude/local-attributes"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:trans="http://docbook.org/ns/transclusion"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:m="http://www.w3.org/1998/Math/MathML"
xmlns:html="http://www.w3.org/1999/xhtml"
xmlns:db="http://docbook.org/ns/docbook">
<title>Modules API</title>
<para>Modules Resolution is a process of finding out which modules should be
preloaded for a correct compilation of a given module.</para>
<para>Resolution expected to use <code>bind_module</code>,
<code>modules_require</code> as an input and produce results in form of
<code>modules_resolution</code> data table.</para>
<section>
<title>Module Annotations: 'bind_module'</title>
<synopsis>SYNTAX:
**bind_module**(//module-ref//, //annotation//)</synopsis>
<itemizedlist>
<listitem>
<para><emphasis>module-ref</emphasis> module's path</para>
</listitem>
</itemizedlist>
<para>Declares module annotations.</para>
<para>Example:</para>
<programlisting>module:: status(obsolete).</programlisting>
<para>Produced fact:
<code>bind_module(path/to/module, status(obsolete))</code></para>
</section>
<section>
<title>Requesting Modules: 'modules_require'</title>
<synopsis>SYNTAX:
**modules_require**(//module-ref//, //request//)</synopsis>
<itemizedlist>
<listitem>
<para><emphasis>module-ref</emphasis> module's path</para>
</listitem>
<listitem>
<para><emphasis>request</emphasis> expressed by annotation</para>
</listitem>
</itemizedlist>
<para>Module can request other modules necessary for correct work.
Declared requests can be processed to find a resolution.</para>
<para>Example:</para>
<programlisting>module
{
require(logger).
}</programlisting>
<para>Produced declaration:
<code>modules_require(/path/to/module, logger)</code></para>
</section>
<section>
<title>Modules Resolution: 'modules_resolution'</title>
<synopsis>SYNTAX:
**modules_resolution**(//request//, //module-resolved-ref//) (1)
**modules_resolution**(//request//, //module-resolved-ref//, //module-context-ref//) (2)
</synopsis>
<itemizedlist>
<listitem>
<para><emphasis>request</emphasis> expressed by annotation</para>
</listitem>
<listitem>
<para><emphasis>module-resolved-ref</emphasis> resolved module's
path</para>
</listitem>
<listitem>
<para><emphasis>module-context-ref</emphasis> context module's
path</para>
</listitem>
</itemizedlist>
<para>Xreate uses the data table to find correspondent modules for each
request.</para>
<para>Form (1) assigns resolved module to a request and assumes that
assignment is valid in all cases, i.e. whenever compiler encounters
request it loads associated module.</para>
<para>Form (2) assigns resolution valid only in a specific context.
Compiler uses particular resolution only for requests that came from a
module specified in a context. In other words, form (2) allows to resolve
the same request differently for different modules depending on resolution
strategy, thus implementing <emphasis>polymorphism on module
level</emphasis>.</para>
</section>
<section>
<title>See Also</title>
<para>Syntax: <link xlink:href="/w/syntax/modules">Modules</link></para>
</section>
</chapter>
Event Timeline
Log In to Comment