r2885: *** empty log message ***
[uffi.git] / doc / intro.sgml
1 <!-- -*- DocBook -*- -->
2
3 <chapter>
4   <title>Introduction</title>
5   <sect1>
6     <title>Purpose</title>
7     <para> This reference guide describes
8       &uffi;, a package that provides a cross-implementation
9       interface from Common Lisp to C-language compatible libraries.
10     </para>
11   </sect1>
12
13   <sect1>
14     <title>Background
15     </title>
16     <para>
17       Every Common Lisp implementation has
18       a method for interfacing to C-language compatible
19       libraries. These methods are often termed a 
20       <emphasis>Foreign Function Library Interface</emphasis>
21       (&ffi;). Unfortunately, these methods vary widely
22       amongst
23       implementations, thus preventing the writing of a portable FFI to a 
24 particular C-library. 
25     </para>
26     <para>
27       &uffi; gathers a common subset of functionality between Common Lisp
28       implementations. &uffi; wraps this common subset of functionality with
29       it's own syntax and provides macro translation of uffi functions into
30       the specific syntax of supported Common Lisp implementations.
31     </para>
32     <para>
33       Developers who use &uffi; to interface with C libraries will
34       automatically have their code function in each of uffi's supported
35       implementations.
36     </para>
37   </sect1>
38
39   <sect1>
40     <title>Supported Implementations</title> 
41     <para>The primary tested and supported platforms for &uffi; are: 
42     </para>
43     <itemizedlist mark="opencircle">
44       <listitem><para>&acl; v6.2 on Debian GNU/Linux
45 FreeBSD 4.5, Solaris v2.8, and Microsoft Windows XP.</para></listitem>
46       <listitem><para>&lw; v4.2 on Debian GNU/Linux and Microsoft Windows XP.</para></listitem>
47       <listitem><para>&cmucl; 18d-pre on Debian GNU/Linux, FreeBSD 4.5, and Solaris 2.8</para></listitem>
48       <listitem><para>&openmcl; 0.13 on Debian GNU/Linux for PowerPC</para></listitem>
49     </itemizedlist>
50     <para>Beta code is included with &uffi; for
51     </para>
52     <itemizedlist mark="opencircle">
53       <listitem><para>&openmcl; and &mcl; with MacOSX</para></listitem>
54     </itemizedlist>
55   </sect1>
56
57     <sect1>
58       <title>Design</title>
59       <sect2>
60         <title>Overview</title>
61         <para>
62           &uffi; was designed as a cross-implementation 
63           compatible <emphasis>Foreign Function Interface</emphasis>.
64           Necessarily,
65           only a common subset of functionality can be
66           provided. Likewise, not every optimization for that a specific
67           implementation provides can be supported. Wherever possible,
68           though, implementation-specific optimizations are invoked.
69         </para> 
70       </sect2>
71
72       <sect2>
73         <title>Priorities</title>
74         <para>
75           The design of &uffi; is dictated by the order of these priorities:
76         </para>
77         <itemizedlist>
78           <listitem>
79             <para>
80               Code using &uffi; must operate correctly on all
81               supported implementations.
82             </para>
83           </listitem>
84           <listitem>
85             <para>
86               Take advantage of implementation-specific optimizations. Ideally, 
87               there will not a situation where an implementation-specific
88               &ffi; will be chosen due to lack of optimizations in &uffi;.
89             </para>
90           </listitem>
91           <listitem>
92             <para>Provide a simple interface to developers using
93 &uffi;.  This priority is quite a bit lower than the above priorities.
94 This lower priority is manifest by programmers having to pass types in
95 pointer and array dereferencing, needing to use
96 <constant>cstring</constant> wrapper functions, and the use of
97 ensure-char-character and ensure-char-integer functions. My hope is
98 that the developer inconvenience will be outweighed by the generation
99 of optimized code that is cross-implementation compatible.
100             </para>
101           </listitem>
102         </itemizedlist>
103       </sect2>
104     </sect1>
105
106 </chapter>