This appendix is about Guile-RPC’s portability. Of course, Guile-RPC can be ported to any OS/architecture Guile runs on. What this section deals with is portability among Scheme implementations.
Although implemented on top of GNU Guile, Guile-RPC uses mostly portable APIs such as SRFIs. Thus, it should be relatively easy to port to other Scheme implementations or to systems like Snow. Below are a few notes on portability, listing APIs and tools Guile-RPC depends on.
use-moduleclauses to some other Scheme.
(rnrs io ports)modules of Guile-R6RS-Libs (also included in Guile 2.x). MzScheme, Larceny, Ikarus (among others) provide these APIs.
(rpc xdr)module uses Guile’s generalized vectors API (see Generalized Vectors in The GNU Guile Reference Manual). This allows applications to use regular vectors, SRFI-4 homogeneous vectors, arrays, etc., to represent XDR variable-length arrays (see
make-xdr-vector-type). On Scheme implementations that do not support generalized vectors, regular vectors can be used instead.
(rpc compiler)module uses Andrew K. Wright’s pattern matcher, known as
(ice-9 match)in Guile. This pattern matcher is portable and available in many Scheme implementations; alternative, compatible pattern matchers are also available sometimes, e.g., in MzScheme.
(rpc compiler parser)module uses Dominique Boucher’s LALR parser generator, known as
(system base lalr)in Guile 2.0. This package is available on most Scheme implementations and as a “snowball”.
(rpc compiler lexer)module was automatically generated using Danny Dubé’s SILex, a portable lexer generator.
(rpc compiler parser)uses Guile’s “source property” API, which allows such information to be attached to pairs (see Source Properties in The GNU Guile Reference Manual). Behind the scenes, source properties are implemented using a weak hash table, so it should be easy to port them to other Scheme implementations.
(rpc rpc server), which contains a server event loop. This part of the module would need porting to the target system, but it would be quite easy to isolate the few features it depends on.
Portability patches can be posted to the Guile-RPC mailing list where they will be warmly welcomed!