Library-combinator.html 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html401/loose.dtd">
  2. <html>
  3. <!-- Created on November 8, 2012 by texi2html 1.82
  4. texi2html was written by:
  5. Lionel Cons <[email protected]> (original author)
  6. Karl Berry <[email protected]>
  7. Olaf Bachmann <[email protected]>
  8. and many others.
  9. Maintained by: Many creative people.
  10. Send bugs and suggestions to <[email protected]>
  11. -->
  12. <head>
  13. <title>avram - a virtual machine code interpreter: 2.7.16.1 Library combinator</title>
  14. <meta name="description" content="avram - a virtual machine code interpreter: 2.7.16.1 Library combinator">
  15. <meta name="keywords" content="avram - a virtual machine code interpreter: 2.7.16.1 Library combinator">
  16. <meta name="resource-type" content="document">
  17. <meta name="distribution" content="global">
  18. <meta name="Generator" content="texi2html 1.82">
  19. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  20. <style type="text/css">
  21. <!--
  22. a.summary-letter {text-decoration: none}
  23. blockquote.smallquotation {font-size: smaller}
  24. pre.display {font-family: serif}
  25. pre.format {font-family: serif}
  26. pre.menu-comment {font-family: serif}
  27. pre.menu-preformatted {font-family: serif}
  28. pre.smalldisplay {font-family: serif; font-size: smaller}
  29. pre.smallexample {font-size: smaller}
  30. pre.smallformat {font-family: serif; font-size: smaller}
  31. pre.smalllisp {font-size: smaller}
  32. span.roman {font-family:serif; font-weight:normal;}
  33. span.sansserif {font-family:sans-serif; font-weight:normal;}
  34. ul.toc {list-style: none}
  35. -->
  36. </style>
  37. </head>
  38. <body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000">
  39. <a name="Library-combinator"></a>
  40. <table cellpadding="1" cellspacing="1" border="0">
  41. <tr><td valign="middle" align="left">[<a href="Interfaces-to-External-Code.html#Interfaces-to-External-Code" title="Previous section in reading order"> &lt; </a>]</td>
  42. <td valign="middle" align="left">[<a href="Have-combinator.html#Have-combinator" title="Next section in reading order"> &gt; </a>]</td>
  43. <td valign="middle" align="left"> &nbsp; </td>
  44. <td valign="middle" align="left">[<a href="Virtual-Machine-Specification.html#Virtual-Machine-Specification" title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
  45. <td valign="middle" align="left">[<a href="Interfaces-to-External-Code.html#Interfaces-to-External-Code" title="Up section"> Up </a>]</td>
  46. <td valign="middle" align="left">[<a href="Library-Reference.html#Library-Reference" title="Next chapter"> &gt;&gt; </a>]</td>
  47. <td valign="middle" align="left"> &nbsp; </td>
  48. <td valign="middle" align="left"> &nbsp; </td>
  49. <td valign="middle" align="left"> &nbsp; </td>
  50. <td valign="middle" align="left"> &nbsp; </td>
  51. <td valign="middle" align="left">[<a href="avram.html#Top" title="Cover (top) of document">Top</a>]</td>
  52. <td valign="middle" align="left">[<a href="avram_toc.html#SEC_Contents" title="Table of contents">Contents</a>]</td>
  53. <td valign="middle" align="left">[<a href="Function-Index.html#Function-Index" title="Index">Index</a>]</td>
  54. <td valign="middle" align="left">[<a href="avram_abt.html#SEC_About" title="About (help)"> ? </a>]</td>
  55. </tr></table>
  56. <hr size="1">
  57. <a name="Library-combinator-1"></a>
  58. <h4 class="subsubsection">2.7.16.1 Library combinator</h4>
  59. <p>The simplest and fastest method of interfacing to an external library
  60. is by way of a virtual machine combinator called <code>library</code>. It
  61. takes two non-empty character strings as arguments to a virtual code
  62. program of the form implied by the following property.
  63. </p><dl compact="compact">
  64. <dt> <em>T33</em></dt>
  65. <dd><p>[[<code>library</code>]] (<code><var>x</var></code>,<code><var>y</var></code>) = <code>((nil,nil),((<var>x</var>,<var>y</var>),(nil,nil)))</code>
  66. </p></dd>
  67. </dl>
  68. <p>Intuitively, <var>x</var> is the name of a library and <var>y</var> is the name
  69. of a function within the library. For example, if <var>x</var> is
  70. <code>'math'</code> and <var>y</var> is <code>'sqrt'</code>, then
  71. <code>library</code>(<var>x</var>,<var>y</var>) represents the function that computes
  72. the square root of a floating point number as defined by the host
  73. machine&rsquo;s native C implementation, normally in IEEE double precision
  74. format. Different functions and libraries may involve other argument
  75. and result types, such as complex numbers, arrays, sparse matrices, or
  76. arbitrary precision numbers. A list of currently supported external
  77. library names with their functions and calling conventions is given in
  78. <a href="External-Libraries.html#External-Libraries">External Libraries</a>.
  79. </p>
  80. <p>On the virtual code side, all function arguments and results
  81. regardless of their types are encoded as nested pairs of <code>nil</code>,
  82. as always, and may be manipulated or stored as any other data,
  83. including storage and retrieval from files in &lsquo;<tt>.avm</tt>&rsquo; virtual
  84. code format (<a href="File-Format.html#File-Format">File Format</a>). However, on the C side,
  85. various memory management and caching techniques are employed to
  86. maintain this facade while allowing the libraries to operate on data
  87. in their native format. The details are given more fully in the API
  88. documentation, particularly in <a href="Type-Conversions.html#Type-Conversions">Type Conversions</a> and
  89. <a href="External-Library-Maintenance.html#External-Library-Maintenance">External Library Maintenance</a>.
  90. </p>
  91. <p>While this style is fast and convenient, it is limited either to
  92. libraries that have already been built into the virtual machine, or to
  93. those for which the user is prepared to implement a new interface
  94. module in C as described in <a href="Implementing-new-library-functions.html#Implementing-new-library-functions">Implementing new library functions</a>.
  95. </p>
  96. <hr size="1">
  97. <table cellpadding="1" cellspacing="1" border="0">
  98. <tr><td valign="middle" align="left">[<a href="Interfaces-to-External-Code.html#Interfaces-to-External-Code" title="Previous section in reading order"> &lt; </a>]</td>
  99. <td valign="middle" align="left">[<a href="Have-combinator.html#Have-combinator" title="Next section in reading order"> &gt; </a>]</td>
  100. <td valign="middle" align="left"> &nbsp; </td>
  101. <td valign="middle" align="left">[<a href="Virtual-Machine-Specification.html#Virtual-Machine-Specification" title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
  102. <td valign="middle" align="left">[<a href="Interfaces-to-External-Code.html#Interfaces-to-External-Code" title="Up section"> Up </a>]</td>
  103. <td valign="middle" align="left">[<a href="Library-Reference.html#Library-Reference" title="Next chapter"> &gt;&gt; </a>]</td>
  104. <td valign="middle" align="left"> &nbsp; </td>
  105. <td valign="middle" align="left"> &nbsp; </td>
  106. <td valign="middle" align="left"> &nbsp; </td>
  107. <td valign="middle" align="left"> &nbsp; </td>
  108. <td valign="middle" align="left">[<a href="avram.html#Top" title="Cover (top) of document">Top</a>]</td>
  109. <td valign="middle" align="left">[<a href="avram_toc.html#SEC_Contents" title="Table of contents">Contents</a>]</td>
  110. <td valign="middle" align="left">[<a href="Function-Index.html#Function-Index" title="Index">Index</a>]</td>
  111. <td valign="middle" align="left">[<a href="avram_abt.html#SEC_About" title="About (help)"> ? </a>]</td>
  112. </tr></table>
  113. <p>
  114. <font size="-1">
  115. This document was generated on <i>November 8, 2012</i> using <a href="http://www.nongnu.org/texi2html/"><i>texi2html 1.82</i></a>.
  116. </font>
  117. <br>
  118. </p>
  119. </body>
  120. </html>