Overview of changes in Iguana 0.1.3
===================================

Release date: XX XXX XXXX 

See also Misc/HISTORY for changes in the 0.1.2 release.


Core language, Built-ins and Interpreter
----------------------------------------

- Added `del' keyword:
    del name1, name2, ..., nameN
  If name is a variable name it will be removed, so later to this name will
  raise NameError. It is not allowed to delete modules or built-ins.

- help() now return a string when called non-interactively.

- int() built-in can now get an optional base.

- Added permute(), size(), bin(), oct() and hex() built-ins.

- apply() now can accept also a type as first argument. For example:
    iguana> a = range(2,20,2)
    iguana> print a
    [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
    iguana> b = apply(str,a)
    iguana> print b
    ['2', '4', '6', '8', '10', '12', '14', '16', '18', '20']

- Tuples and Arrays now allows arbitrary sizes. The previous limit of 10000
  items was removed. 

- Better integer multiplication overflow check.

- bug fixes in float and integer power operators (again!).

- fast comparing between two integers.

- String `in' operator now uses strchr() when the left operand has size 1.
  Otherwise strstr() is used.

- the string terminator '\0' now is handled internally. The interpreter don't
  allow to use it and therefore the string size always don't counts it.

- Added warning mode (-w switch).

- Now the interpreter read and executes the file ~/.iguanarc.ig (if exists).
  A sample file is provided in Demo/Scripts/iguanarc.ig.

- Saving history between interactive sessions.

- The new IGUANAPATH environment variable now has a different syntax (the same
  of a UNIX search path) and when available it *replaces* the predefined
  search path (".:./Modules:/usr/local/lib/iguana0.1/"). IGUANAHOME was gone.

- Tracing of import statements was greatly improved. Thanks to Michael Somos. 

- A plethora of other minor bugfixes (memory leaks, format strings and 
  traceback overflow). Memory leaks were squashed with Valgrind, a tool that 
  helps to find memory-management problems. Added new memory leaks for 
  debugging fun :-)


Standard Modules
----------------

- Added word completion for GNU readline module. This requires the latest 
  GNU readline version (4.3). It completes keywords, built-ins and module's 
  attribute in a selectable namespace (which defaults to __main__ and 
  __builtin__); when completing NAME.NAME, it evaluates (!) the expression 
  up to the dot and try to complete its attributes.

  It's very cool to do "import math" type "math.", hit the completion key  
  TAB (twice), and see the list of names defined by the math module!

  This features was inspired by the Python's rlcompleter, but the
  implementation was written from scratch. 

- Added a new module: mtrng. It is a Mersenne-Twister random number generator.

- Added a new module: yow. Quotations from Zippy the Pinhead (from various 
  comic books and strips by Bill Griffith). Have fun!

- Added a new module: timer. This module is embarrassingly trivial, but 
  somebody asked for it so here it is :-)

- Added a new module: time. It provides C standard time library wrappers 
  for Iguana. Many thanks to Nicola Gigante who have contributed it.

- the nt module was improved. Several new methods were added:
    bincoeff()
    C()
    P()

- The math module was completely documented. 

- math.asinh() and math.atanh() were fixed.

- the string module was greatly improved. Several new methods and attributes
  were added:
    chomp()
    chug()   
    strip()
  and for ctype.h-like character classification, the following attributes:
    whitespace
    uppercase
    lowercase
    alpha
    digit  
  Finally the following method where renamed because they names conflicts with 
  `lowercase' and `uppercase', respectively:
    downcase() -> lower()
    upcase() -> upper()

- sys.uname() now is always of size 5, on all platforms, even if _GNU_SOURCE
  is defined. Thanks to David Pardo.


C API
-----

- The API version was changed (again!) to 1013. This was needed because
  some internal structures were changed and some API function and symbols 
  were renamed.

- Added some sanity check around IgObject_Print().

- IgObject_Del() doesn't raise anymore an exception if the caller type
  doesn't provide a tp_del method. These types are known to be "immortal" 
  (or statically allocated) such as Ig_None, Ig_True, Ig_False and type objects.

- I'm providing an experimental platform-independent random() API. It consists
  of three functions: 
    long IgSys_srandom(long);
    long IgSys_random(void);
    long IgSys_random_range(long, long);
  IgSys_srandom() uses /dev/urandom, if available, otherwise it uses 
  time().IgSys_random() returns a long within the range 0..RAND_MAX 
  whereas IgSys_random_range() returns a long within the specified range. 

- IgDict_SIZE and IgDict_ITEM were removed.

- Added IgDict_Keys() and IgDict_Values().

- IgSys_strdup() replaces strdup() in all the supported platforms.

- Ig_GetPrefix() was removed because it was never used outside getpath.c.

- IgRun_Stdin() was removed and replaced by IgRun_File("stdin"). 

- IgRun_InteractiveLoop() was renamed to IgRun_Interactive().

- Ig_Main() was removed from the library.

- Method objects now have a `module' attribute that is bound to the name of 
  the module in which the method was defined or imported. In Iguana 0.1.2  
  the following code:
      
        import math
        print repr(math.cos)
 
  returns '<built-in method `cos'>'. Now the same code returns a more accurate 
  method representation: '<method `cos' from module `math'>'.

- New debug utilities. See Misc/gdbinit. 

- added new C API IgImport_GetModulesNames(). This function return an array
  containing all the modules names. It was added for the new readline 
  completer.


Documentation
-------------

- Gilberto Ficara has contributed a very handy Perl script. It extract 
  documentation string from an Iguana module and make an .tex file. It
  was called iguanadoc and it was placed under Tools/.

- The Iguana modules now are documented in Doc/modules.tex.

- Added target `dist' to Doc/Makefile.


Demos and Examples
------------------

- iguanarc.ig was rewrited to show how to use the new yow module.

- Modules/xxmodule.c and Objects/xxobject.c were updated. Thanks to Nicola
  Gigante.


Build and distribution
----------------------

- Finally we have turned the modules build to libtool and it's convenience
  library ltdl. [more comments here] 

- Misc/gdbinit was rewrited. Now it provides new commands, including
  wrappers for _IgObject_Inspect(), Ig_INCREF() and Ig_DECREF().

- Iguana now compile also on QNX and the port for FreeBSD is almost complete. 
  Thanks to David Pardo.

- Now configure.ac check for the existence of /dev/urandom. This is needed
  in various places (specifically Iguana/myrandom.c and Modules/mtrngmodule.c).

- configure.ac: all calls to "cut -c 0,27" was modified in "cut -c 27" 
  because FreeBSD's cut doesn't allow two arguments for -c. Thanks to
  David Pardo.

- Iguana/bltinmodule.c was renamed to Iguana/builtinmodule.c, whereas 
  Iguana/dynload.c was gone (replaced by libltdl). Finally Iguana/iguanamain.c    was renamed in Iguana/main.c. 

- Now Iguana will use only strtod() to convert strings to double. atof()
  replacement was gone (Iguana/atof.c).

- Now the Ig_API macro is defined conditionally by Ig_BUILD_CORE.

- Added a replacements for:
  
  Function    Source                Notes
  ========    ======                =====

  isatty()    Iguana/isatty.c
  memcpy()    Iguana/memcpy.c       (1)
  memmove()   Iguana/memmove.c      (1)
  strchr()    Iguana/strchr.c	    (2) 
  strcmp()    Iguana/strcmp.c
  strrchr()   Iguana/strrchr.c      (3)
  
  (1) bcopy(), if available, is used instead
  (2) index(), if available, is used instead
  (3) rindex(), if available, is used instead

- Tools/ was renamed to Build/ because the directory "Tools" is used 
  as place-holder for Iguana extensions and contributions (such as 
  the perl script `iguanadoc' and the GTK 2.x GUI).

