X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=doc%2Fintro.sgml;h=0aecce09d2025033912b387fbb17b724cb5b4dc3;hb=b0b263f7735028b6198593365c8285a6367882af;hp=a42cc8d1d4ec744a0f18598bd9ac76209ce536c8;hpb=192193db6e4fbda90a840474d4aa2e8762597927;p=uffi.git diff --git a/doc/intro.sgml b/doc/intro.sgml index a42cc8d..0aecce0 100644 --- a/doc/intro.sgml +++ b/doc/intro.sgml @@ -5,8 +5,8 @@ Purpose This reference guide describes - &uffi;, a Lisp package that provides persistent cross-implementation - support of C-language compatible libraries. + &uffi;, a package that provides a cross-implementation + interface from Common Lisp to C-language compatible libraries. @@ -16,10 +16,12 @@ Every Common Lisp implementation has a method for interfacing to C-language compatible - libraries. Unfortunately, these method vary widely amongst - implementations. Currently, to support multiple implementations, - developers must write a different interface library for each Common - Lisp implementation. + libraries. These methods are often termed a + Foreign Function Library Interface + (&ffi;). Unfortunately, these methods vary widely + amongst + implementations, thus preventing the writing of a portable FFI to a +particular C-library. &uffi; gathers a common subset of functionality between Common Lisp @@ -36,29 +38,68 @@ Supported Implementations - The primary tested and supported platforms for &uffi; are: + The primary tested and supported platforms for &uffi; are: - &acl; v6.1 on Redhat Linux 7.2 and Microsoft Windows. - &lw; v4.2 on Redhat Linux 7.2 and Microsoft Windows. - &cmucl; 18c on Redhat Linux 7.2. + &acl; v6.1 and v6.2.beta on Redhat Linux 7.2, Debian Woody, +FreeBSD 4.5, Solaris v2.8, and Microsoft Windows XP. + &lw; v4.2 on Redhat Linux 7.2 and Microsoft Windows XP. + &cmucl; 18d-pre on Redhat Linux 7.2, FreeBSD 4.5, and Solaris 2.8 - - - - Installation - - Installation is fairly simple. The main requirement is that you - have a copy of &defsystem;. You can download the latest version - of &defsystem; from the - CLOCC - CVS tree. After installing &defsystem;, simply - push the - directory containing &uffi; into - mk:*central-registry*. Whenever you -want to load the &uffi; package, use the function - (mk:oos :uffi 'load). + Beta code is included with &uffi; for + + &mcl; with MacOSX + + + + Design + + Overview + + &uffi; was designed as a cross-implementation + compatible Foreign Function Interface. + Necessarily, + only a common subset of functionality can be + provided. Likewise, not every optimization for that a specific + implementation provides can be supported. Wherever possible, + though, implementation-specific optimizations are invoked. + + + + + Priorities + + The design of &uffi; is dictated by the order of these priorities: + + + + + Code using &uffi; must operate correctly on all + supported implementations. + + + + + Take advantage of implementation-specific optimizations. Ideally, + there will not a situation where an implementation-specific + &ffi; will be chosen due to lack of optimizations in &uffi;. + + + + Provide a simple interface to developers using +&uffi;. This priority is quite a bit lower than the above priorities. +This lower priority is manifest by programmers having to pass types in +pointer and array dereferencing, needing to use +cstring wrapper functions, and the use of +ensure-char-character and ensure-char-integer functions. My hope is +that the developer inconvenience will be outweighed by the generation +of optimized code that is cross-implementation compatible. + + + + + +