DOC HOME SITE MAP MAN PAGES GNU INFO SEARCH
 

(guile.info.gz) Fluids

Info Catalog (guile.info.gz) Threads (guile.info.gz) Scheduling
 
 32.5 Fluids
 ===========
 
 Fluids are objects to store values in.  They have a few properties which
 make them useful in certain situations: Fluids can have one value per
 dynamic root ( Dynamic Roots), so that changes to the value in a
 fluid are only visible in the same dynamic root.  Since threads are
 executed in separate dynamic roots, fluids can be used for thread local
 storage ( Threads).
 
    Fluids can be used to simulate dynamically scoped variables.  These
 are used in several (especially in older) dialects of lisp, such as in
 Emacs Lisp, and they work a bit like global variables in that they can
 be modified by the caller of a procedure, and the called procedure will
 see the changes.  With lexically scoped variables--which are normally
 used in Scheme--this cannot happen.  See the description of
 `with-fluids*' below for details.
 
    New fluids are created with `make-fluid' and `fluid?' is used for
 testing whether an object is actually a fluid.
 
  -- Scheme Procedure: make-fluid
  -- C Function: scm_make_fluid ()
      Return a newly created fluid.  Fluids are objects of a certain
      type (a smob) that can hold one SCM value per dynamic root.  That
      is, modifications to this value are only visible to code that
      executes within the same dynamic root as the modifying code.  When
      a new dynamic root is constructed, it inherits the values from its
      parent.  Because each thread executes in its own dynamic root, you
      can use fluids for thread local storage.
 
  -- Scheme Procedure: fluid? obj
  -- C Function: scm_fluid_p (obj)
      Return `#t' iff OBJ is a fluid; otherwise, return `#f'.
 
    The values stored in a fluid can be accessed with `fluid-ref' and
 `fluid-set!'.
 
  -- Scheme Procedure: fluid-ref fluid
  -- C Function: scm_fluid_ref (fluid)
      Return the value associated with FLUID in the current dynamic
      root.  If FLUID has not been set, then return `#f'.
 
  -- Scheme Procedure: fluid-set! fluid value
  -- C Function: scm_fluid_set_x (fluid, value)
      Set the value associated with FLUID in the current dynamic root.
 
    `with-fluids*' temporarily changes the values of one or more fluids,
 so that the given procedure and each procedure called by it access the
 given values.  After the procedure returns, the old values are restored.
 
  -- Scheme Procedure: with-fluids* fluids values thunk
  -- C Function: scm_with_fluids (fluids, values, thunk)
      Set FLUIDS to VALUES temporary, and call THUNK.  FLUIDS must be a
      list of fluids and VALUES must be the same number of their values
      to be applied.  Each substitution is done one after another.
      THUNK must be a procedure with no argument.
 
Info Catalog (guile.info.gz) Threads (guile.info.gz) Scheduling
automatically generated byinfo2html