  [[title
                 Core Data Types for Librified `tla'
  ]]


  Most APIs in librified `tla' will accept ordinary and parameters of
  only a very few generic types.

  Great is going into making these types general enough to not be a
  limitation, simple, robust, and fast.   The interfaces are being
  designed to make memory managment for these data structures easy for
  clients to get right.

  API documentation for the new types is not ready yet.  This is just
  a high level description.


* Values

  A /Value/ is an immutable, boxed scalar type.  The scalar contained
  in a /Value/ may be a (constant) string, a number, a boolean value,
  or other type.  A /Value/ carries a type tag which records the type
  of data it contains.

  /Example:/ In `tla 1.2', the "arch namespace functions" accept and
  return string arguments of type `t_uchar *' (pointer to unsigned
  character).  In librified `tla', the analogous functions will accept
  and return generic /Values/.


  
* Lists

  /Lists/ are random-access, list-editable, finite sequences of
  /Values/.

  For access patterns with a high degree of locality, and in the
  absense of list insertion and deletion operations, /Lists/ have
  access patterns similar to packed arrays.   For insertions and
  deletions with a high degree of locality, /Lists/ have performance
  characteristics comparable to interval splay trees or gap buffers.

* Arrays

  /Arrays/ are random-access, list-editable, finite sequences of
  /Lists/.  They have performance characteristics analogous to those
  of lists.



* Associative Tables

  /Associative Tables/ are mutable, explicitly enumerated mappings
  from /Values/ to /Values/.


* Additional Value Kinds -- Maybe

  Future additions to the kinds of Value (besides strings and numbers,
  for example) include:

  [[blockquote
    [[styled-lines
      /streams/ -- file descriptors and similar entities.

      /paths/ -- file names as abstract things rather than strings

      /immutable lists/
      /immutable arrays/
      /immutable associative tables/ -- this would allow, for 
         example, an associative table whose values include
         other associative tables without risking the possibilitiy
         of circular references
    ]]
  ]]


* Memory Management Trick

  The `ARCH_FN_' macros (see the <"function template" --
  ./fn-anatomy.html>) include facilities for automatically freeing
  temporary Values, Lists, Array, and Associative tables which 
  are allocated as local variable values during a function call.

  /In other words:/ far less reason to have to write so many
  `lim_free' calls and `str_free' calls and `free_rel_table' calls and
  ....  !!

* Copyright

 /Copyright (C) 2004 Tom Lord/

 This program is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation; either version 2, or (at your option)
 any later version.

 This program is distributed in the hope that it will be useful,
 but /WITHOUT ANY WARRANTY/; without even the implied warranty of
 /MERCHANTABILITY/ or /FITNESS FOR A PARTICULAR PURPOSE/.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with this program; if not, write to the Free Software Foundation,
 Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

 See the file `COPYING' for further information about
 the copyright and warranty status of this work.

  [[null
    ; arch-tag: Tom Lord Thu Mar  3 13:23:28 2005 (librification-notes/core-types.txt)
  ]]

