As Section 1.2 explained, the C-FFI defines some Dylan classes to designate C types and to describe how they are passed to and from Dylan. These designator classes carry with them static information about the C type they designate.
The C-FFI library provides an initial set of designator classes corresponding to C's fundamental types, as well as macros for generating designator classes corresponding to C's pointer types and for extending the translation between C data and Dylan objects.
Designator classes that correspond to fundamental numeric types are not instantiable. When you pass a numeric value to Dylan from C, the C-FFI simply generates a Dylan number with the same value. Similarly, a Dylan number passed to C is converted to a C number of the appropriate type and value.
Each of the fundamental designator classes indicate a conversion to or from a unique Dylan class. The conversions that take place are described in detail in the documentation for each designator class.
The main reasons for this design are increased efficiency, simplified implementation, and added convenience when working with numeric values. The designator classes for the numeric types could have been made instantiable and placed beneath the appropriate number protocol classes in Dylan, but these extra representations in such a fundamental area could cause problems for Dylan compilers. In addition, to make these instantiable designator classes convenient to work with, the C-FFI would also have to define methods on the standard arithmetic and comparison operators. It is simpler to represent these fundamental types with existing Dylan objects.
However, the designator classes that correspond to pointer types are instantiable. When you pass a pointer from C to Dylan, the C-FFI constructs an instance of the appropriate designator class that contains the raw address. A wrapped pointer like this can be passed out to some C code that is expecting a compatible pointer -- the C-FFI extracts the raw address before handing it to C code. The documentation for the abstract class <C-pointer> describes the compatibility rules for pointer types.
This feature of pointer designator classes allows Dylan code to be typed to a specific kind of pointer. For example, you can define methods that specialize on different kinds of pointer on the same generic function.