Overview of changes in Iguana 0.1.2
===================================

Release date: 18 Aug 2003 (never made available publicly)

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

- New operations for tuples:
    "A + B"  returns a new tuple consisting of the concatenation of A and B
    "A * n"  returns a new tuple consisting of n-concatenated copies of A

- New operations for strings:
    "S[n]"   returns the n-th character of the string S
    "s in S" returns True is s is in S, False otherwise
  The operation "S[n] = c" is not supported because, actually, strings are
  immutable objects.

- Arrays, tuples, methods, modules, types objects, booleans and None can now  
  be compared. Follow a table with the supported operators:
     
      Operator   Types that support it                            Note
      ========   =====================                            ====
      >          Array, tuple                                     (1)
      <          Array, tuple                                     (1)
      >=         Array, tuple                                     (1)
      <=         Array, tuple                                     (1)
      ==         Array, tuple, bool, method, type, module, None
      !=         Array, tuple, bool, method, type, module, None 
  
(1) This is allowed only if you are comparing sequences (arrays or tuples)
    with different sizes.

- The repr() of string objects will use double quotes if the string contains
  a single quote and no double quotes. And repr(string) is easier to read:

  >>> repr("\texample \r\n")
  '       example
  '                     # Iguana 0.1.1
  '\texample \r\n'      # Iguana 0.1.2

- Added count(), index() and sort() built-in methods. Built-in vars() is gone.

- range() built-in now is more flexible. Now it can be called with one, two
  or three arguments. The required argument is always end (it assumes that
  both begin and step are one. The complete call is range(begin, end, step).
  For example:
    range(10)        -> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    range(10, 20)    -> [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
    range(10, 20, 2) -> [10, 12, 14, 16, 18, 20]
  Michael Somos had suggested to start always from 1, *never* from 0 (if the
  begin parameter isn't used).

- The divmod() and ratio() built-in methods (previously they were provided by
  the nt module) now return an array instead of a tuple. Ditto for
  nt.factorize(). Thanks to Michael Somos for his precious feedback.

- divmod() now also works for floats.

- inspect() output was improved and printed as an Iguana comment (#). 

- dir() output now is sorted (by name).

- Integer power overflow are now properly detected (however I'm not sure that
  this is portable). Whereas now the float power method check for errno != EDOM
  after the pow() call.

- The interpreter was significantly speedup by inlining some common opcodes
  for common operand types (e.g. int+int and int*int).

- The parser now generates directly the comparison opcode. This give a
  significative speedup since there are no runtime checks on the
  comparison opcode.

- New exceptions, including:
    SystemError
    RuntimeWarning
    DeprecationWarning

- Few other small bugs were fixed (shared integers, few documentation strings,
  bad format characters, dict object sizes).


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

- The readline module now does *not* immediately exit when ^C is hit. Now it
  raise the KeyboardInterrupt exception instead. Added also readline.version
  attribute (rl_library_version). This addition requires GNU readline 2.2 or
  later. Finally the use of stifle_history() was removed.

- The string module now is full documented and each method now returns a
  freshly allocated string. Also the reverse() method was fixed.

- The nt module now is full documented via documentation strings.

- Now the math module provide the following functions *also* for systems that
  don't have them: acosh, asinh, atanh, hypot, expm1 and log1p.

- The util module is being "deprecated". It's functionality will be removed
  in the next release cycle (0.2.x).


C API
-----

- The API version now is 1012 due changes to both the Iguana API and the new
  parser/tokenizer interface. For more information see Include/api.h.

- IgErr_BadInternalCall() and IgErr_NullInternalArg() were replaced by
  Ig_ASSERT() and Ig_ASSERT_NOT_REACHED() and they were also removed from
  the Iguana library.

- The macros IgTuple_DATA and IgArray_DATA were removed.

- There is a new API IgErr_SetFromErrno(). It is used only by me, at the moment,  to catch uname() return code in the sys module and in few other places.

- Added new string API IgString_FromStringAndSize(). 

- Added new API for numeric types. They are:
    IgNumber_IsZero()
    IgNumber_IsPositive()
    IgNumber_IsNegative()

- Ig_Half object was added. It is a statically allocated float object and
  a public API is available for embedders/extenders (Ig_Half).

- Ig_GetArgs() now recognize more formatters:
     "M" for module object
     "d" for dict object
     "m" for method object

- New API: IgArray_Dup() and IgTuple_Dup(). These functions return a
  copy of its argument.


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

- The documentation Makefile (Doc/Makefile) was largely improved. Now you can
  build the entire documentation in several formats (at the moment only: dvi,
  ps, pdf and html). For more information see both Doc/README and Doc/Makefile.

- The "Hacking" guide (Misc/HACKING) was updated. Now it contains few new
  section, including "Documenting Iguana" and more about the coding style.


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

- Added a simple C++ embedding demo. It is placed in Demo/Embed/hello.cc.

- The demo script stats.ig (Demo/Scripts/stats.ig) was re-writed.

- The demo script foreach.ig was renamed to apply.ig.


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

- Many portability bugs fixed and undoubtedly new ones added :-)

- The configure script now checks also for the flex and bison version numbers.
  They should be 2.5.4 for flex and 1.875 for bison. This change is required
  because Iguana can no longer be built by a K&R C compiler.

- Now you can specify an alternative name to the configure script for the
  Iguana interpreter via the --with-program-name switch. The default is
  "iguana".

- Top-level README was updated with contact information.

- LICENSE file now is writable (again!).


Overview of changes in Iguana 0.1.1
===================================

Release date: 23 May 2003

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

- The '**' (power) operator was fixed. Now it gives always the expected result:
  try running "4**-3" or "4**0.5". Thanks to Leandro Cova.

- The unary operators '+' and '-' now is computed before any other operator.
  Thanks to Leandro Cova.

- New operation for arrays:
    "A + B"  returns a new array consisting of the concatenation of A and B
    "A * n"  returns a new array consisting of n-concatenated copies of A

- New built-in methods: ceil(), floor(), median(), product(), range() and
  sum(). For more information try "help(ceil)", "help(product)" etc.

- The built-ins fill() and foreach() now don't modify it's argument. Instead
  they try to allocate a new object (of the same size) and computation are
  performed on this new object that is also returned. For more information try
  "help(fill)" and "help(foreach)".

- The array type now allow to store mixed int and float objects. There are
  also many improvements to the array type such as better error checks and a
  *shared* empty array object (that is used internally, for optimize memory
  usage).

- Built-in methods dir(), vars(), inspect() and help() now works only in the
  interactive mode. However they are always defined.

- The size() built-in was removed. It's functionality was replaced by the
  "|S|" syntax.

- Better type error messages: the ordinal position now is also printed.

- The traceback mechanism was re-visioned. Now when an exception is raised
  within a method a complete traceback of the error is printed. It works fine
  in the interactive mode but additional work still needed for scripts.

- The interpreter was protected against stack overflows and interrupts.

- The environment variable IGUANAHOME now can override all other module's
  search paths.

- Many internal cleanups in the abstract object protocol (abstract.c).

- There are also many minor changes to existing files, but I'm too lazy
  to run a diff and note the differences -- you can do this yourself if
  you save the old distribution.


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

- New modules: mks, cgs and stats.

- The nt module was improved. Two new method were added: isprime() and
  factorize().

- math.radiants() was renamed to math.radians(). Thanks to Michael Somos.

- added some euro conversion constant to the util module. Try
  "import util; dir(util)" to see them.

- Add sys.wordsize and sys.uname constants. For more information see the
  Demo/Scripts/myiguana.ig sample script.


C API
-----

- The API version now is 1011. For more information see Include/api.h.

- Now IgSequence_Size() returns the *ALLOCATED* size of the sequence, not the
  non-NULL objects count.

- Implemented other Ig_GetArgs() formatters such as: "a" for arrays,
  "t" for tuples as well as "N" for numeric objects and "S" for sequential
  objects.

- IgTraceBack_Clear() was renamed to IgTraceBack_Cleanup().

- Now IgRun_String() append a single '\n' to the string to evaluat

- There some few new global shared objects: they are Ig_Zero, Ig_One and
  Ig_Two. They are allocated statically (like Ig_True and Ig_False). Probably
  other should be added such as Ig_Half (1/2), Ig_Three and so on. These
  objects are very useful to implement other modules (I've already used them
  in the new stats module).


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

- The tutorial is almost complete.

- Almost all the documentation was improved or fixed. Thanks to Michael Somos.


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

- Added two simple embedding demos. They are placed in Demo/Embed. Note that
  you'll need to install Iguana to be able to compile them. Please not that
  you must link them with "-liguana -lm -ldl" on most GNU/Linux (and probably
  other platforms).

- Added Demo/Scripts/stats.ig.

- Demo/Scripts/myiguana.ig was updated with the new sys constants "wordsize"
  and "uname".

- Demo/Scripts/earth-mars.ig was re-writed in order to show the usage of the
  new "mks" module.


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

- The configure script can finally correctly find the readline library in a
  non-standard location. The LDFLAGS variable is passed on the the Makefile
  from the configure script as well as CFLAGS and CPPFLAGS. Finally the
  configure script defines two new variables: CCSHARED and LDSHARED. They are
  used in the dynamic modules build. Thanks to Michael Somos.

- Many file were updated, including the man page (Misc/iguana.1), Misc/INSTALL,
  Misc/HACKING, READMEs, and probably others. Thanks to Michael Somos.

- Added xxobject.h. This is meant to be the interface for xxobject.c (available
  in the Objects/ sub-directory).

- The config.h and traceback.h headers now are installed with `make install'.
  It wasn't in Iguana 0.1.0 due to oversight.

- Fixed a long-waited bug: `iguana < myscript.ig' now works.



Overview of changes in Iguana 0.1.0
===================================

Release date: 4 May 2003 

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

- The major change in this release is the introduction of the objects. Many
  parts of the current Iguana implementation was updated, rewritten or deleted.
  Now almost everything (string, modules, integers, dictionaries) are objects.

- A simple interpreter was implemented as stack machine.

- The Bison grammar and flex scanner were rewritten and several parsing bugs
  have been fixed. There are some new keywords (and, or, not, in, import) and
  the const keyword is gone away.

- String escape codes were implemented. Now you can use most of the C string
  escape codes like "\n", "\t", "\v", "\r" etc, in any Iguana string whereas
  the simple string enclosed by "'" do not eval for escape codes.

- Now the grammar allows adding a trailing , at the end of a list of args:
        a = 3; print a,
        import math; math.atan2(9,2,)
  This a feature, not a bug.

- The syntax of floating-point literals has been liberalized, to allow
  leading zeroes. Examples of literals now legal that were SyntaxErrors
  before:

      00.0    0e3   0100j   07.5   00000000000000000008.

  and an old tokenizer bug allowed floating point literals with an incomplete
  exponent, such as 1e and 3.1e-, now raise SyntaxError too.

- Identifiers marked as future keywords: "from", "as", "del". When you try
  to assign a value to these symbols a SyntaxWarning exception is raised.

- The special identifier "_" is used in the interactive interpreter to store
  the result of the last evaluation; it is stored as variable. When not in
  interactive mode, "_" has no special meaning and is not defined.

- All the old built-in method were removed. To see all the new builtins type:

        dir(__builtin__)

  in the interactive mode.

- Added the -q command line option which do not print the introductory and
  copyright messages).

- Added the -i command line option. This is useful when you want to inspect
  interactively a script after it's execution.

- Added more bugs and many memory leaks for debugging fun :-)


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

- This release cures one of the most apparent shortcomings in earlier Iguana
  versions: the lack of decent support for modules. The new module system is
  both simple and effective. Modules are considered as separate entities, each
  with their own namespace, and you must *always* explicitly include a module
  to gain access to the public symbols of that module.

  The new syntax for including modules is:

        import id1, id2, ... idn

  Modules can be specified using their name (e.g. math, sys, util, etc.), which
  must be also a valid Iguana identifier.

- The interpreter now defines two modules that are always present:
    __main__    main code or user code (don't needs the namespace)
    __builtin__ builtin methods, constants, etc. (don't needs the namespace)

- There are several new mod les, including: iguana, nt, string, sys, util. To
  see what they provides use both the help() and dir() built-in methods.


Iguana C API
------------

- The objects API.

- This is the first release using the current naming conventions.
  Summarizing, all externally visible symbols get (at least) a "Ig" prefix,
  and most functions are renamed to the standard form:

     IgModule_FunctionName()

     IgModule_Action()

  Apply these conventions also to the variables names and most variables
  are renamed to the standard m for a module object, d for a dict object,
  v, w, and u for a operand objects, etc. In the future this parametes name
  conventions maybe more strong and documented too. Other minor code updates
  and cleanups (i.e. added const to many function args, strong naming convention  s, etc.).

- All C code was converted to ANSI C; we got rid of all uses of the __P()
  macro, which makes the header files a lot more readable. Now Iguana compiles
  also on GCC 3.1 more ANSI C compatibility will be provided in later versions.

- Added Ig_API_VERSION and Ig_API macros. The API version is maintained
  independently from the Iguana version so we can detect mismatches between
  the interpreter and dynamically loaded modules. These are diagnosed by an
  error message but the module is still loaded because the mismatch can only
  be tested after loading the module. The error message is intended to
  explain the core dump a few moments later. Instead, the Ig_API macro is
  intended to export an Iguana public symbol.

- All of the portability hacks were moved to a new header file,
  system.h; several other new header files were added and some old
  header files were removed, in an attempt to create a more rational set
  of header files. (Few of these ever need to be included explicitly;
  they are all included by Iguana.h).

- Modules init function now returns an int. This return value is used by
  the import mechanism to make sure that all is ok.


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

- Directory Docs/ was renamed to Doc/.

- Now the documentation is distributes as LaTeX source (against the old SGML
  format). The website always contains the latest documentation (available
  both as LyX sources and navigable HTML) whereas the source distribution
  contains no HTML (which can be build with latex2html).

- Added an HACKING document under Misc/. Read it if you want start working
  on Iguana.

- Top-level README reworked. Most of the plain text documents were
  rewritten/corrected and some were added, such as INSTALL, logo.txt and others.

- The man page (Misc/iguana.1) was almost rewritten. Now it looks better and
  more useful.


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

- Demos/Scripts/ directory contains several examples and a README file that
  indexes all files.

- The embedding demos were removed due to the massive API changes. They will
  be re-added later with also a document that explain the Iguana C API.


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

Several cleanup jobs were carried out throughout the source code and in the
build process. Special thanks to Michael Somos who continue to send me bug 
reports and suggestions :-)

- The tarball now starts with a capital letter (i.e. Iguana-0.1.0.tar.gz).

- Versus the 0.0.x serie, the build system has been much improved. You should
  notice the Makefile reorganization and configure.ac updates.

- There is a new and more complete testing suite. It is available at Tests/
  directory and can be launched with "make test".

- An GDB init file "Misc/gdbinit" is provided to facilitate debugging
  the interpreter with the GNU Debugger. I'm providing also an indent.pro
  file (for GNU indent) and also a iguana.vim, that is a Vim syntax file
  for Iguana.

- "XXX: " and "TODO: " comments was in-lined and formatted to allow easy
  grep-ping and beautification by scripts.

- I'm providing also a RPM spec file. It is available at Misc/iguana.spec for
  general use. However I've not the time to make RPMs, SRPMs and other binary
  packages. I hope that you will find it useful. Thanks to Andrey Semenov.

- The optional compile flag "Ig_WITH_CHECKS" was removed as well as the
  Ig_RETURN_IF_FAIL and Ig_RETURN_VAL_IF_FAIL macros. Also the old
  Ig_WITH_COUNT_ALLOCS compile was removed because now I'm using valgrind to
  all memory related problems.


Overview of Changes in Iguana 0.0.1
===================================

Release date: 24 Aug 2002

- First public release.
