5.5 Defining New Types (Smobs)

Smobs are Guile’s mechanism for adding new primitive types to
the system. The term “smob” was coined by Aubrey Jaffer, who says
it comes from “small object”, referring to the fact that they are
quite limited in size: they can hold just one pointer to a larger
memory block plus 16 extra bits.

To define a new smob type, the programmer provides Guile with some
essential information about the type — how to print it, how to
garbage collect it, and so on — and Guile allocates a fresh type tag
for it. The programmer can then use scm_c_define_gsubr to make
a set of C functions visible to Scheme code that create and operate on
these objects.

(You can find a complete version of the example code used in this
section in the Guile distribution, in doc/example-smob. That
directory includes a makefile and a suitable main function, so
you can build a complete interactive Guile shell, extended with the
datatypes described here.)