RScheme Library

This page contains brief descriptions and pointers to some of the most interesting modules in the RScheme library.

Table of Contents

Module Name Short Description
rs.sys.threads.manager User-space Threads
gui.x An X11 interface
rs.db.rstore A persistent object store An interface to PostgresQL An extensible graphics editor
graphics.geometry 2D Graphics Data Types and Operations
graphics.afm Adobe Font Metrics support
rs.sys.multimethod Multiple-argument generic function dispatch

Short Descriptions

User-space Threads

The rs.sys.threads.manager module provides an implementation of user-space threads for RScheme, built using a select() loop for managing asynchronous operations. This module also provides the facilities for synchronizing threads, including the core one used in RScheme, the mailbox.

An X11 interface

The gui.x module provides an API for RScheme applications for talking to an X-windows server. This API is along the lines of the Common Lisp X interface (CLX).

The implementation is completely within the RScheme framework (i.e., not an adaption into Xlib), and hence interoperates nicely with the user threads system.

A persistent object store

This is a persistent object store, inspired by the work of Paul Wilson on the Texas persistent store.

An interface to PostgresQL

This module implements an adaption interface to the PostgresQL programming library.

An extensible graphics editor

The dV GUI application is an extensible graphics editor, and is designed to support high quality technical illustration and publication.

The dV graphics model includes standard primitives such as lines, rectangles, arbitrary bezier paths, text, etc. Graphical elements can be rendered with definable fill and stroke styles.

The graphics model is extensible using small scripts that procedurally render themselves with lower-level graphical elements. Furthermore, dV includes a rich set of scripts for common graphical elements such as arrows, page frames, callouts.

2D Graphics Data Types and Operations

The graphics.geometry module provides a collection of data types and procedures for manipulating geometric objects in two dimensions.

Included are facilities for working with points, lines, rectangles, bezier curves, as well as defining regions using constructive planar geometry from primitive objects.

For some short examples, see the baseline unit tests. You can also look at the graphics.device tests.

Adobe Font Metrics support

The graphics.afm module provides facilities for reading and processing the contents of AFM (Adobe Font Metrics) files.

Multiple-argument generic function dispatch

Built-in RScheme generic functions require at least one argument at run time, and dispatch to the appropriate method based only on the class of the first argument. This is fine for many cases, but sometimes it's not enough. For example, math libraries are often organized around dispatching on both of the arguments of binary operators. The rs.sys.multimethod module provides an implementation of generic functions which can dispatch on the entire argument sequence.

All the programmer needs to do is define the generic function with define-mm-generic-function instead of the usual define-generic-function (which is implicit if you just define methods on an undefined generic).