[Top] | [Contents] | [Index] | [ ? ] |
Footnotes
(1)
These definitions are approximate. For the whole and detailed truth, see R5RS syntax in The Revised(5) Report on the Algorithmic Language Scheme.
(2)
In Guile 1.8, a thread blocking in guile mode would prevent garbage collection to occur. Thus, threads had to leave guile mode whenever they could block. This is no longer needed with Guile 2.0.
(3)
A white box test plan is one that incorporates knowledge of the internal design of the application under test.
(4)
Of course, in the world of free software, you always have the freedom to modify the application’s source code to your own requirements. Here we are concerned with the extension options that the application has provided for without your needing to modify its source code.
(5)
Big-endian and little-endian are the most common “endiannesses”, but others do exist. For instance, the GNU MP library allows word order to be specified independently of byte order (see Integer Import and Export in The GNU Multiple Precision Arithmetic Library Manual).
(6)
Strictly speaking, Scheme does not have a real datatype list. Lists are made up of chained pairs, and only exist by definition—a list is a chain of pairs which looks like a list.
(7)
Note that there is no separation character between the list elements, like a comma or a semicolon.
(8)
Conversely, in Guile up to the 1.8 series, the marking procedure was always required. The reason is that Guile’s GC would only look for pointers in the memory area used for built-in types (the cell heap), not in user-allocated or statically allocated memory. This approach is often referred to as precise marking.
(9)
Working definitions would be:
(define foo-ref vector-ref) (define foo-set! vector-set!) (define f (make-vector 2 #f))
(10)
These days such embedded languages are often referred to as embedded domain-specific languages, or EDSLs.
(11)
Language
lawyers probably see the need here for use of literal-identifier=?
rather
than free-identifier=?
, and would probably be correct. Patches
accepted.
(12)
Described in the paper Keeping it Clean with Syntax Parameters by Barzilay, Culpepper and Flatt.
(13)
Guile 2.0.0 to 2.0.7 would do this by default. This behavior was deemed inappropriate and disabled starting from Guile 2.0.8.
(14)
This is similar in spirit to Guile’s soft ports (see section Soft Ports).
(15)
In Guile up to version 1.8, C global variables were not
scanned by the garbage collector; hence, scm_gc_protect_object
was the only way in C to prevent a Scheme object from being freed.
(16)
In
Guile up to version 1.8, memory allocated with scm_gc_malloc
had to be freed with scm_gc_free
.
(17)
In Guile up to 1.8,
memory allocated with scm_gc_malloc
was not scanned.
Consequently, the GC had to be told explicitly about pointers to live
objects contained in the memory block, e.g., via SMOB mark functions
(see section scm_set_smob_mark
)
(18)
Some people also refer to the final linking stage at program startup as ‘dynamic linking’, so if you want to make yourself perfectly clear, it is probably best to use the more technical term dlopening, as suggested by Gordon Matzigkeit in his libtool documentation.
(19)
A contribution to Guile in the form of a high-level FFI would be most welcome.
(20)
For concision and style, programmers often like to refer to internationalization as “i18n”.
(21)
In effect, it is the default program which is run when no commands or script file are specified on the Guile command line.
(22)
This module is only available on systems where the
fork
feature is provided (see section Common Feature Symbols).
(23)
Yes, the P is for protocol, but this phrase appears repeatedly in RFC 2616.
(24)
On Unicode-capable ports, the ellipsis is represented by character ‘HORIZONTAL ELLIPSIS’ (U+2026), otherwise it is represented by three dots.
(25)
The ~h
format specifier first
appeared in Guile version 2.0.6.
(26)
This example is taken from a paper by
Krishnamurthi et al. Their paper was the first to show the usefulness of the
syntax-rules
style of pattern matching for transformation of XML, though
the language described, XT3D, is an XML language.
(27)
Usually — but
see also the #:allocation
slot option.
(28)
Of course Guile already
provides complex numbers, and <complex>
is in fact a predefined
class in GOOPS; but the definition here is still useful as an
example.
(29)
<number>
is the direct superclass of
the predefined class <complex>
; <complex>
is the
superclass of <real>
, and <real>
is the superclass of
<integer>
.
(30)
But note that x
in
(math 2D-vectors)
doesn’t share methods with x
in
(math 3D-vectors)
, so modularity is still preserved.
(31)
The parameter list for a define-method
follows the conventions used for Scheme procedures. In particular it can
use the dot notation or a symbol to denote an arbitrary number of
parameters
(32)
This section is an adaptation of material from Jeff Dalton’s (J.Dalton@ed.ac.uk) Brief introduction to CLOS
(33)
PAIP is the common abbreviation for Paradigms of Artificial Intelligence Programming, an old but still useful text on Lisp. Norvig’s retrospective sums up the lessons of PAIP, and can be found at http://norvig.com/Lisp-retro.html.
[Top] | [Contents] | [Index] | [ ? ] |
This document was generated on April 20, 2013 using texi2html 5.0.