first cut at a glossary
diff --git a/Doc/tut/glossary.tex b/Doc/tut/glossary.tex
new file mode 100644
index 0000000..a77ade8
--- /dev/null
+++ b/Doc/tut/glossary.tex
@@ -0,0 +1,265 @@
+\chapter{Glossary\label{glossary}}
+
+%%% keep the entries sorted and include at least one \index{} item for each
+
+\begin{description}
+
+\index{...}
+\item[...]{The typical Python prompt of the interactive shell when entering
+code for an indented code block.}
+
+\index{>>>}
+\item[>>>]{The typical Python prompt of the interactive shell.  Often seen
+for code examples that can be tried right away in the interpreter.}
+
+\index{__slots__}
+\item[__slots__]{A declaration inside a new-style class that saves
+memory by pre-declaring space for instance attributes and eliminating
+instance dictionaries.  Though popular, the technique is somewhat tricky to
+get right and is best reserved for rare cases where there are large numbers
+of instances in a memory critical application.}
+
+\index{BDFL}
+\item[BDFL]{Benevolent Dictator For Life, a.k.a. \ulink{Guido van
+Rossum}{http://www.python.org/~guido/}, Python's creator.}
+
+\index{byte code}
+\item[byte code]{The internal represenatation of a Python program in the
+interpreter.  The byte code is also cached in the \code{.pyc} and
+{}\code{.pyo} files so that executing the same file is faster the second
+time (compilation from source to byte code can be saved).  This
+"intermediate language" is said to run on a "virtual machine" that calls the
+subroutines corresponding to each bytecode.}
+
+\index{classic class}
+\item[classic class]{Any class which does not inherit from \class{object}.
+See new-style class.}
+
+\index{coercion}
+\item[coercion]{Converting data from one type to another.  For example,
+int(3.15) coerces the floating point number to the integer, 3.  Most
+mathematical operations have rules for coercing their arguments to a common
+type.  For instance, adding 3 + 4.5, causes the integer 3 to be coerced to
+be a float (3.0) before adding to 4.5 resulting in the float 7.5.}
+
+\index{descriptor}
+\item[descriptor]{Any object that defines the methods __get__(), __set__(),
+or __delete__().  When a class attribute is a descriptor, its special
+binding behavior is triggered upon attribute lookup.  Normally, writing
+{}\var{a.b} looks up the object \var{b} in the class dictionary for \var{a},
+but if \var{b} is a descriptor, the defined method gets called.
+Understanding descriptors is a key to a deep understanding of Python because
+they are the basis for many features including functions,
+methods,properties, class methods, static methods, and reference to super
+classes.}
+
+\index{dictionary}
+\item[dictionary]{An associative array, where arbitrary keys are mapped to
+values.  The use of `dict` much resembles that for `list`, but the keys can
+be any object with a `__hash__` function, not just integers starting from
+zero.  Called a hash in Perl.}
+
+\index{EAFP}
+\item[EAFP]{Easier to ask for forgiveness than permission.  This common
+Python coding style assumes the existance of valid keys or attributes and
+catches exceptions if the assumption proves false.  This clean and fast
+style is characterized by the presence of many `try` and `except` statments.
+The technique contrasts with the '''LBYL''' style that is common in many
+other languages such as C.}
+
+\index{__future__}
+\item[__future__]{A pseudo module which programmers can use to enable
+new language features which are not compatible with the current interpreter.
+For example, the expression \code{11 / 4} currently evaluates to \code{2}.
+If the module in which it is executed had enabled ``true division`` by
+executing}
+
+\begin{verbatim}
+from __future__ import division
+\end{verbatim}
+
+the expression \code{11 / 4} would evaluate to \code{2.75}.  By actually
+importing the __future__ module and evaluating its variables, you can see
+when a new feature was first added to the language and when it will becode
+the default:
+
+\begin{verbatim}
+>>> import __future__
+>>> __future__.division
+_Feature((2, 2, 0, 'alpha', 2), (3, 0, 0, 'alpha', 0), 8192)
+\end{verbatim}
+
+\index{generator}
+\item[generator]{A function that returns an iterator.  It looks like a
+normal function except that the \keyword{yield} keyword is used instead of
+{}\keyword{return}.  Generator functions often contain one or more
+{}\keyword{for} or \keyword{while} loops that \keyword{yield} elements back to
+the caller.  The function execution is stopped at the \keyword{yield} keyword
+(returning the result) and is resumed there when the next element is
+requested by calling the \function{next()} method of the returned iterator.}
+
+\index{GIL}
+\item[GIL]{See \em{global interpreter lock}.}
+
+\index{global interpreter lock}
+\item[global interpreter lock]{the lock used by Python threads to assure
+that only one thread can be run at a time.  This simplifies Python by
+assuring that no two processes can access the same memory at the same time.
+Locking the entire interpreter makes it easier for the interpreter to be
+multi-threaded, at the expense of some parallelism on multi-processor
+machines.  Efforts have been made in the past to create a "free-threaded"
+interpreter (one which locks shared data at a much finer granularity), but
+performance suffered in the common single-processor case.}
+
+\index{IDLE}
+\item[IDLE]{an Integrated Development Environment for Python.  IDLE is a
+basic editor and intepreter environment that ships with the standard
+distribution of Python.  Good for beginners and those on a budget, it also
+serves as clear example code for those wanting to implement a moderately
+sophisticated, multi-platform GUI application.}
+
+\index{immutable}
+\item[immutable]{A object with fixed value.  Immutable objects are numbers,
+strings or tuples (and more).  Such an object cannot be altered.  A new object
+has to be created if a different value has to be stored.  They play an
+important role in places where a constant hash value is needed.  For example
+as a key in a dictionary.}
+
+\index{integer division}
+\item[integer division]{Mathematical division discarding any remainder.  For
+example, the expression \code{11 / 4} currently evaluates to 2 in contrast
+to the 2.75 returned by float division.  Also called "floor division".  When
+dividing two integers the outcome will always be another integer (having the
+floor function applied to it).  However, if one of the operands is another
+numeric type (such as a float), the result will be coerced (see coercion) to
+a common type.  For example, a integer divided by a float will result in a
+float value, possibly with a decimal fraction.  Integer division can be
+forced by using the \code{//} operator instead of the \code{/} operator.
+See also, __future__.}
+
+\index{interactive}
+\item[interactive]{Python has an interactive interpreter which means that
+you can try out things and directly see its result.  Just launch
+{}\code{python} with no arguments (possibly by selecting it from your
+computer's main menu).  It is a very powerful way to test out new ideas or
+inspect modules and packages (remember \code{help(x)}).}
+
+\index{interpreted}
+\item[interpreted]{Python is an interpreted language, opposed to a compiled
+one.  This means that the source files can be run right away without first
+making an executable which is then run.  Interpreted languages typicaly have
+a shorter development/debug cycle than compiled ones.  See also
+{}\em{interactive}.}
+
+\index{iterable}
+\item[iterable]{A container object capable of returning its members one at a
+time.  Examples of iterables include all sequence types (\class{list},
+{}\class{str}, \class{tuple}, etc.) and some non-sequence types like
+{}\class{dict} and \class{file} and objects of any classes you define with
+an \function{__iter__} or \function{__getitem__} method.  Iterables can be
+used in a \keyword{for} loop and in many other places where a sequence is
+needed (\function{zip}, \function{map}, ...).  When an iterable object is
+passed as an argument to the builtin function \function{iter()}, it returns
+an iterator for the object.  This iterator is good for one pass over the set
+of values.  When using iterables, it is usually not necessary to call
+{}\function{iter()} or deal with iterator objects yourself - the \code{for}
+statement does that automatically for you, creating a temporary unnamed
+variable to hold the iterator for the duration of the loop.  See also
+iterator, sequence and generator.}
+
+\index{iterator}
+\item[iterator]{An object representing a stream of data.  Repeated calls to
+the iterator's \function{next()} method return successive items in the
+stream.  When no more data is available a \exception{StopIteration}
+exception is raised instead.  At this point the iterator object is exhausted
+and any further calls to its \function{next()} method just raise
+{}\exception{StopIteration} again.  Iterators are required to have an
+{}\function{__iter__()} method that returns the iterator object itself so
+every iterator is also iterable and may be used in most places where other
+iterables are accepted.  One notable exception is code that attempts
+multiple iteration passes.  A container object (such as a list) produces a
+fresh new iterator each time you pass it to the \function{iter()} function
+or use it in a \function{for} loop.  Attempting this with an iterator will
+just return the same exhausted iterator object from the second iteration
+pass and on, making it appear like an empty container.}
+
+\index{list comprehension}
+\item[list comprehension]{A compact way to process all or a subset of elements
+in a sequence and return a list with the results.  \code{result = ["0x\%02x"
+\% x for x in range(256) if x \% 2 == 0]} generates a list of strings
+containing hex numbers (0x..) that are even and in the range from 0 to 255.
+The \keyword{if} clause is optional.  If omitted, all elements in
+{}\code{range(256)} are processed in that case.}
+
+\index{mapping}
+\item[mapping]{A container object (such as \class{dict}) that supports
+arbitrary key lookups using the special method \function{__getitem__()}.}
+
+\index{metaclass}
+\item[metaclass]{The class of a class.  Class definitions create a class
+name, a class dictionary, and a list of base classes.  The metaclass is
+responsible for taking those three arguments and creating the class.  Most
+object oriented programming languages provide a default implementation.
+What makes Python special is that it is possible to create custom
+metaclasses.  Most users never need this tool, but when the need arises,
+metaclasses can provide powerful, elegant solutions.  They have been used
+for logging attribute access, adding thread-safety, tracking object
+creation, implementing singletons, and many other tasks.}
+
+\index{LBYL}
+\item[LBYL]{Look before you leap.  This coding style explicitly tests for
+pre-conditions before making calls or lookups.  This style contrasts with
+the EAFP approach and is characterized the presence of many \keyword{if}
+statements.}
+
+\index{mutable}
+\item[mutable]{Mutable objects can change their value but keep their
+\function{id()}.  See also immutable.}
+
+\index{namespace}
+\item[namespace]{The place where a variable is stored.  Namespaces are
+implemented as dictionary.  There is the local, global and builtins
+namespace and the nested namespaces in objects (in methods).  Namespaces
+support modularity by preventing naming conflicts.  For instance, the
+functions \function{__builtins__.open()} and \function{os.open()} are
+distinguished by their namespaces.  Namespaces also aid readability and
+maintainabilty by making it clear which modules implement a function.  For
+instance, writing \function{random.seed()} or \function{itertools.izip()}
+makes it clear that those functions are implemented by the \module{random}
+and \module{itertools} modules respectively.}
+
+\index{nested scope}
+\item[nested scope]{The ability to refer to a variable in an enclosing
+definition.  For instance, a function defined inside another function can
+refer to variables in the outer function.  Note that nested scopes work only
+for reference and not for assignment which will always write to the
+innermost scope.  In contrast, local variables both read and write in the
+innermost scope.  Likewise, global variables read and write to the global
+namespace.}
+
+\index{new-style class}
+\item[new-style class]{Any class that inherits from \class{object}.  This
+includes all built-in types like \class{list} and \class{dict}.  Only new
+style classes can use Python's newer, versatile features like
+{}\var{__slots__}, descriptors, properties, \var{__getattribute__}, class
+methods, and static methods.}
+
+\index{Python3000}
+\item[Python3000]{A mythical python release, allowed not to be backward
+compatible, with telepathic interface.}
+
+\index{sequence}
+\item[sequence]{An iterable which supports efficient element access using
+integer indices via the \function{__getitem__} and \function{__len()__}
+special methods.  Some builtin sequence types are \class{list}, \class{str},
+{}\class{tuple}, and \class{unicode}.  Note that \class{dict} also supports
+{}\function{__getitem__} and \function{__len__}, but is considered a mapping
+rather than a sequence because the lookups use arbitrary immutable keys
+rather than integers.}
+
+\index{Zen of Python}
+\item[Zen of Python]{listing of Python design principles and philosophies
+that are helpful in understanding and using the language.  The listing can
+be found by typing "import this" at the interactive prompt.}
+
+\end{description}