   History of Changes

     Latest version first (32 stable releases since July 1995).


                                   [Line]

   Release  2.3  beta  #1  [Antoine-Auguste Parmentier] - Monday February
   ??^th, 2007
   Again, a lot of novelties for this release.
     * New  typing  rules  have  been  revisited. See wiki page [1]Typing
       policy for details.
     * The new eiffeltest tools is now available.
     * The new eiffeldoc tools is now available too.
     * Old  style "rename.se" files are no longer considered. You can now
       use the same class name in different clusters.
     * The  NONE  type  mark must no longer be used. Just use an empty {}
       exportation  list  to  indicate  that  the corresponding following
       features are not exported. This is better for newcomers.
     * In  class COLLECTION, features index_of and fast_index_of now have
       an  extra  argument to indicate where the search must start (as in
       class STRING).
     * Microsoft's Visual C++ 2005 compiler is now supported.
     * The debuging sections can be turned on with the new -debug option,
       in  all compilation modes other than -boost. The -debug_check mode
       has been deprecated.
     * The regular expression library has been added.

                                   [Line]

   Release 2.2 [Pomme de terre] - Monday December 19^th, 2005
   Again, a lot of novelties for this release.
       First, the new eiffeldoc command has been completely revisited and
       the  eiffeldoc  command is now part of the delivery. The eiffeldoc
       command  is the one used to generate our [2]library documentation.
       We have also included the whole documentation of [3]all classes of
       our tools generated with eiffeldoc. Obviously, it can also be used
       for your own library.
       The  second  important  novelty  is  that  we now have a brand new
       introspection  mechanism  which  allow  us  to  implement  the new
       persistency  facility.  Warning:  this  functionality is a work in
       progress  in  this  beta release. Wait until the final 2.2 release
       for a complete implementation (end-october is a possible date).
       There are many other novelties bescribed below.
       Please,  take  the  time  to  read carefully the following list of
       modifications  before  updating  to  this new SmartEiffel release.
       Actually,  we removed many features from ANY and it was not always
       the  best choice to use the obsolete mechanism. So, it is possible
       that  your  code  won't  compile out of the box, but you have been
       warned. Sorry about that.
     * Added  a new command, [4]se, which is meant to be the only command
       you ever need to put in your PATH!
     * Added  a  new  command, [5]eiffeldoc, that you can use to document
       your project. Currently only HTML output is supported.
     * The  plugins system is vastly improved and should now be preferred
       over older external specifications. See [6]this page for details.
     * Improved   error   messages   readability   in   order   to  avoid
       missunderstanding.
     * Added  a  new  OpenGL  widget for Vision. Unix-based programs only
       have  to  inherit from [7]UNIX_GL_WIDGET and define all the OpenGL
       related routines.
     * Added  new  abstract  class named [8]BIJECTIVE_DICTIONARY which is
       actually  a  replacement  for  the  now obsolete DOUBLE_DICTIONARY
       class.  At  time  being,  there  is  only  one  implementation  of
       BIJECTIVE_DICTIONARY   named   [9]HASHED_BIJECTIVE_DICTIONARY   (a
       hash_code-based implementation).
     * Removed  class  GENERAL  as well as some obsolete features of that
       class.  In  the  past, GENERAL was inherited by PLATFORM which was
       inherited  by  [10]ANY.  Now,  ANY  has  no more parent at all (no
       conforming  parent  and no non-conforming parents). The removal of
       GENERAL  is  better  for  newcomers because they just need to know
       about  ANY  and  it  is  also  better  for  the  underlying  model
       consistency.  Because  we  have  now  removed  equals,  clone  and
       deep_clone  you  must  now  only  use  is_equal,  twin, deep_twin,
       is_deep_equal, standard_is_equal or standard_twin.
     * Removed  the  file_tools  feature from GENERAL. Also note that all
       other  file  manipulation  features  from GENERAL are now obsolete
       (use class [11]FILE_TOOLS instead).
     * No  more  feature argument and argument_count in class [12]ANY. In
       order   to   access  command-line  arguments,  just  insert  class
       [13]ARGUMENTS.
     * The  -case_insensitive flag is no longer supported. SmartEiffel is
       now completely case sensitive: upper case letters are allowed only
       for  class  names.  This  allows us to have better error messages,
       better  error recovery. Furthermore, we think it is better too for
       readability of our code.
     * You now get a warning for using the all lower-case spelling of the
       keywords  current,  result  and  void. Please use the initial-caps
       spellings Current, Result and Void instead.
     * The  old style manifest array marked as obsolete in release 2.1 is
       now  accepted again, but only when the type of items are identical
       or   can   be  statically  computed  without  ambiguity.  See  the
       SmartEiffel/tutorial/manifest_notation.e  for  examples of the new
       notation introduced in release 2.1.
     * The  input/output  has  been  slightly  redesigned to allow better
       performance and better modularity. `io', `std_input', `std_output'
       and  `std_error'  are back to their basic version, but streams are
       available too.
     * The  network  library  now  fully works for POSIX systems. It even
       contains  a (currently tiny, not well tested!) HTTP server. An FTP
       server  and  a Telnet server are expected to follow, as well as at
       least a Win32 implementation. See the tutorial.
     * The  like argument anchoring notation no longer change with actual
       arguments.  It  is just a local substitution which does not change
       for each call site.
     * Feature  is_equal  is now redefined in class [14]HASHABLE. The new
       definition adds an ensure then assertion to check consistency with
       the  hash_code function. Note that the redefinition is deferred to
       force clients to select their preferred implementation.
     * Added  a  new feature called set_storage in class [15]STRING. This
       low-level feature is only exported to [16]STRING_HANDLER.
     * Added   a  new  features  in  class  [17]COLLECTION:  remove_head,
       remove_tail,   reverse_index_of,   last_index_of,  first_index_of,
       fast_reverse_index_of and fast_last_index_of
     * Added  a  new features in class [18]DICTIONARY: fast_reference_at,
       fast_put and fast_remove.
     * Added  a new Eiffel mode description for the Vim text editor. This
       mode  is compatible with our emacs mode. File "misc/eiffel.vim" is
       for the Vim editor while file "misc/eiffel.el" is for emacs.

                                   [Line]

   Release 2.1 [Poirot] - Wednesday February 9^th, 2005
   This  release  is  the  result  of  a  huge  cleaning operation of the
       previous  release.  We have now experimented much more intensively
       the  new  non-conforming  inheritance mechanism as well as all the
       related  issues  (multiple conforming parents, exportation policy,
       etc.).  Floating  point  numbers  have  been  revisited,  manifest
       expressions  have  been revisited with a new notation, downcasting
       possibilities  improved, and usage of expanded type is now cristal
       clear.
       In  one  word,  release  2.1  is better and better, with much more
       static  checks  in  order  to help you to produce safer and faster
       code.
       More details about changes from 2.0
     * The  non-conforming  inheritance  mechanism  has been revisited in
       order to allow multiple conforming pathes between two nodes of the
       conforming-inheritance  graph.  Syntax  has  not changed. You must
       give  first all your conforming parents just after the traditional
       "inherit"  keyword.  After  that, you can use the "insert" keyword
       followed  by  the  list  of  non-conforming  parents.  Like in the
       previous  release,  when  a  class  has no "inherit" clause and no
       "insert" clause, the default insert ANY is automatically added.
       The  new compiler do not warn you anymore when multiple conforming
       pathes are found between two types. When it is safe to do so (i.e.
       when  no  possibly ambiguous dynamic dispatch exists), the code is
       accepted  silently.  When a possible ambiguity exists, the code is
       rejected  at  compile-time  with a clear explanation (at least, we
       tried  to  make  it  as  clear as possible which is not a piece of
       cake).
     * We  introduced a brand new notation to generalize the old manifest
       array  notation.  You  can  now  creates an ARRAY initialized with
       letters as follows:
        {ARRAY[CHARACTER] 1, << 'a', 'b', 'c', 'd' >> }
       or a LINKED_LIST doing:
        {LINKED_LIST[CHARACTER] << 'a', 'b', 'c', 'd' >> }
       as well as any kind of COLLECTION:
        {RING_ARRAY[CHARACTER] 1, << 'a', 'b', 'c', 'd' >>}
       Any user class can be equiped with this new powerful mechanism. We
       have  already  equiped  many  classes  of  our  library.  See  the
       SmartEiffel/tutorial/manifest_notation.e for more examples.
     * Classes  to manipulate floating point numbers have been completely
       revisited. Floating point number manipulation now uses REAL_32 for
       32  bits  floating points, REAL_64 which is equivalent of REAL for
       64  bits  floating  points, REAL_80 for architecture supporting 80
       bits,   REAL_128   for   architecture  supporting  128  bits  and,
       REAL_EXTENDED which is automatically mapped on REAL_80 or REAL_128
       depending  on the architecture actually used. The old DOUBLE class
       is  now  obsolete  and  is automatically replaced with simply REAL
       (you  got  a  warning  for  each  automatic  replacement). We also
       changed  the  constant  notation  in  order  to denote any kind of
       floating point constant. Basic notation is always of type REAL. As
       an  example,  1.5  is  of type REAL where {REAL_32 1.5} is of type
       REAL_32  and  {REAL_EXTENDED  1.5}  is of type REAL_80 or REAL_128
       depending of your hardware. See again
       SmartEiffel/tutorial/manifest_notation.e   for  details.  Finally,
       also  note  that  scientific  notation  has  been added to display
       floating point.
     * To  handle  downcasting  in  a better way than the still supported
       "?="  statement  (i.e.  the assignment attempt statement), we have
       added  a  new kind of assignment and a new built-in predicate. The
       new built-in predicate "?:=" allows you to test if the downcasting
       can  be  safely  done  and  the  new "::=" assignment can actually
       perform  the  downcasting.  In debug modes, the "?:=" predicate is
       considered  as  a  require  assertion of the "::=" assignment. The
       "?:="  predicate  accepts  type name for its left-hand side and is
       useful  too  in assertions. See SmartEiffel/tutorial/downcasting.e
       for examples.
     * Command  short improved: assertions are displayed according to the
       client's point of view (i.e. you do not see what you cannot call).
     * Added  classes  STACK and QUEUE. Thanks to the "insert" mechanism,
       it  is  now safe and efficient to do so (STACK share the efficient
       implementation of FAST_ARRAY and QUEUE insert RING_ARRAY).
     * Improved     memory     usage     for     classes     LINKED_LIST,
       TWO_WAY_LINKED_LIST,   AVL_SET,   AVL_DICTIONARY,  HASHED_SET  and
       HASHED_DICTIONARY.  Free  cells are automatically recycled between
       various  instances  of the same generic derivation. Thoses classes
       are now using our WEAK_REFERENCE class silently.
     * Removed  obsolete class BIT. Now, just use existing bit operations
       from  INTEGER_8,  INTEGER_16,  INTEGER_32, INTEGER, INTEGER_64 or,
       for   very  long  sequences  of  bits,  the  completely  revisited
       BIT_STRING class.
     * It  is  no  longer possible to assign an expanded entity into some
       reference  writable  or  argument.  The model is now pretty clean,
       safe and efficient. Yes, we got rid of dangerous automatic boxing!
     * Thanks  to  the  strict  notation  we  enforce  for floating point
       notation, it is no longer necessary to enclose constants when they
       are the target of some call. You can now for example write:
        3.to_string
        3.5.print_on(io)
        "foo".print_on(io)
     * A  new  network library has been recently added. This is brand new
       work  which  is  still  in  progress.  See SmartEiffel/lib/net for
       details.
     * The old Eiffel strip expression is no longer supported.

                                   [Line]

   Release 2.0 [Hercule] - Monday September 27^th, 2004
   Actually,  this  new  2.0  release  is  the  beginning of a new era in
       SmartEiffel's life!
       The  architecture  of  the  compiler has been completely revisited
       during  this  long  period  of hard work (more than one year since
       previous   release).   The   most   important  goal  of  this  new
       architecture  is to improve compilation time of very large systems
       and  to  take into account repeated inheritance as well as the new
       non-conforming inheritance mechanism. For the latest point, please
       note  that  the  SmartEiffel  compiler  is  the  very first one to
       implement  such Eiffel novelties. Implementation of non-conforming
       inheritance  is  not  a piece of cake and we think we made a great
       job  to  experiment  this  new feature of the Eiffel language (see
       after for details).
       Also,  and  not  the  least, the new vision library, our graphical
       Eiffel  toolkit,  is  now part of the standard release. The vision
       library makes intensive usage of the new agent mechanism and allow
       you  to write graphical applications in pure Eiffel. The generated
       C  code  can  run  both  on  X windows and Windows api without any
       modification.
       More details about changes from 1.1
     * Very  large systems are handled far more efficiently (but maybe at
       a cost for smaller systems).
     * The  new  non-conforming inheritance mechanism is now implemented.
       For  code  portatbility,  we  decided  to stick with the "inherit"
       keyword for conforming parents. So just start your class as usual.
       Then,  to  describe  the  non-conforming  parents,  just  use  the
       "insert"  keyword  followed by the list of non-conforming parents.
       Just use the same syntax as in the inherit part. Note that we have
       removed  the  "select"  clause (you'll be warned by the compiler).
       Also keep in mind that when a class has no "inherit" clause and no
       "insert"  clause,  the  default insert ANY is automatically added.
       Finally, the latest thing to know is that, at time being, only one
       conforming  path  (i.e.  an  inherit  path) is allowed between two
       points of the inheritance graph.
     * Repeated inheritance is now correctly handled.
     * The optimizer is rewritten and can do more optimizations.
     * Pretty  style  improved, all provided classes have been handled by
       pretty.  If you like the style as we does, you can apply pretty to
       your  files.  You can set your favorite editor with as many spaces
       as you want for TAB character (old look is 3 spaces).
     * The  new  debugger  as abilities to print attributes of an object.
       You  can  use  dotted notation such as x.y.storage.0 (numbers give
       access  to  elements  of  NATIVE_ARRAYs). Command such as p ..1 is
       useful to get another element of the array or another attribute of
       the same object.
     * Dead  code  is now checked, which explains the compiler takes more
       time and memory.
     * The  directory  structure  of the general purpose library has been
       completely  revisited.  The  old structure was, well, old, and did
       not scale efficiently when we wanted to add more classes; and some
       classes were not in the "good" cluster.
       The  new  organization  splits the classes by logical topics. Note
       that  each  cluster may contain two special clusters: "low_level",
       containing   classes  that  you  might  use  if  you  need  better
       performance  (generally  when  you  build  some utility or library
       classes);  "internal" containing support classes, and not meant to
       be used directly.
       Now, the organization itself:
          + "abilities"   contains   the   "able"   classes  (COMPARABLE,
            HASHABLE, and so on);
          + "io"  contains  the  input-out  classes; this cluster has but
            changed from the old one (see below for more details);
          + "iterator"  still  contains  the  iterator on storage classes
            (see the "storage" cluster);
          + "kernel"  contains the few general-purpose which could not be
            put  in  other  clusters,  and  are  quite  mandatory for the
            compiler to work;
          + "numeric"  contains  all  the  classes  that  can  be  use to
            manipulate  numbers;  you will find here INTEGERs, REALs, but
            also  NUMBERs (the infinite-precision integers); This cluster
            also  includes  the new MUTABLE_BIG_INTEGER class which is an
            efficient tools for fast integer number crunching.
          + "random"   contains   the   pseudo-random  number  generation
            classes;
          + "scoop"  contains  the  SCOOP utilities (not that SCOOP works
            better than in SE 1.1...);
          + "storage"   contains   all   the  classes  that  store  data:
            COLLECTION,  DICTIONARY,  SET...  (Note:  see  below for more
            details on DICTIONARY and SET);
          + "string"  contains  the  STRING  and  related  classes  (also
            Unicode strings);
          + "time" contains the TIME-related classes;
          + "vision" contains the vision graphical library classes;
          + "sorting" contains most common algorithm to sort COLLECTIONs;
          + "misc" contains some useful classes that cannot be easily put
            elsewhere short of having their own cluster.
     * The  DICTIONARY class is now deferred and the DICTIONARY class has
       no more generic constraint. The library now includes two different
       implementations for class DICTIONARY.
          + The  HASHED_DICTIONARY  implementation is the hash_code based
            implementation  (the generic constraint for HASHED_DICTIONARY
            is HASHABLE).
          + The  AVL_DICTIONARY  implementation  is a balanced tree based
            implementation (the generic constraint for this implemetation
            is COMPARABLE).
       You  should  update  all  your  create  instructions  by selecting
       HASHED_DICTIONARY  or  AVL_DICTIONARY.  In order to ease this code
       update,  the  compiler  will  warn  you  that HASHED_DICTIONARY is
       selected  by  default.  Please  update your code because this is a
       temporary warning of the compiler.
       Some   more  DICTIONARY  classes  were  also  added  (among  them:
       DOUBLE_DICTIONARY can be of interest).
     * The  SET  class  has undergone the same transformation (HASHED_SET
       and AVL_SET).
     * A  RING_ARRAY class was added. This COLLECTION is quite similar to
       an   ARRAY   that   performs   well   for   all  queue  operations
       (add|remove)_(first|last)   thanks   to   its   circular  internal
       representation.
     * The  TUPLE  class  is  now  defined  in Eiffel. Thanks to this new
       source  code  implementation, we have added the definition for the
       `item' feature definition.
     * The  ROUTINE,  PROCEDURE  and FUNCTION classes are also defined in
       Eiffel.
     * Added  a  new  WEAK_REFERENCE  class  with the appropriate garbage
       collector support.
     * Split  has  been  improved  in order to reduce C files compilation
       after a change.
     * Added  a  new "-profile" option for some profiling. This option is
       also available in the ace file (see tutorial/ace/template.ace) and
       as a SmartEiffel option in a C mode of the configuration file.
       Provided features:
          + the profiling output is written in the "profile.se" file;
          + for  each  entry,  the  "own"  and  "cumul"  times, total and
            average,  are given; also, the caller features and the called
            ones are displayed;
          + the  times  are  displayed  to  the  microsecond (even if the
            internal structures allow for nanoseconds, we're not aware of
            any systems using that precision);
          + the Eiffel called features are sorted by decreasing number of
            calls;
          + the  three  runtime  functions (root, runinit and atexit) are
            displayed  first.  Those three functions, and above all , are
            quite  interesting  since  they give overall figures ( is the
            time  used  in  initializing  parts of the application before
            creating  the main feature, while does some tidying-up before
            the program exits).
       Beware that:
          + profiled programs take MUCH longer to execute (a lot of, hem,
            time, is spent in the kernel merely to, hem, track time...)
          + externals  are  not profiled; they are accounted in the "own"
            time of their caller;
          + inlined features are not profiled either (only in -boost)
          + only  POSIX  and Windows implementations are available. Users
            of  other systems are welcome to provide implementations (for
            details:  drop  a mail to the SmartEiffel mailing list). Note
            that  it  only  affect  times  (them being null), but feature
            calls are still counted.
       Thanks to Lothar Scholz for having the idea in the first place.
     * Revamped  the input-output system to make it more general and more
       extensible. Provided features:
          + now  streams can be "filtered". It means you can nest them to
            bring  extra  features  such as encoding or encryption (among
            many other things)
          + the  system streams (std_input, std_output and std_error) can
            now    be    modified    or    redirected    (see   the   new
            GENERAL.standard_streams  entity).  The  `io' entity is now a
            real wrapper that redirects from std_input and to std_output.
       See also the cluster description on the SmartEiffel site.
     * Visitors  revisited.  The architecture is now ready to be used (in
       1.1 it was but a draft).

                                   [Line]

   Release 1.1 [Charlemagne] - Monday June 16^th, 2003
     * Thoroughly  changed  the configuration handling. The new scheme is
       more complete, and much more flexible.
          + Along   with   the   configuration,  wrote  a  new-generation
            installer.  This  tool is also more complete, but also really
            user-oriented:  the  simplest  way  to use it is to keep your
            finger  on  the  <Enter>  key.  For  more  informations about
            installation  and  all new configuration capabilities, please
            have a look to [19]install page.
          + Added  the  -c_mode  option,  in  conjunction  with  the  new
            configuration handling.
          + Added a -loadpath flag to read an extra loadpath.
     * A  new  tool,  class_check,  allows  to check the syntax and local
       semantics  of  one  or  many classes. The whole class is staticaly
       checked  whereas  compilation  using a test program does not fully
       check  unused features. Note that checking many files at a time is
       much faster than checking all the files separately.
     * Added  a  small  expression evaluator to sedb. One can now display
       the  attributes  of  the objects on the stack. Be sure to read the
       "more-help"  section  on  data  display  (for  once functions, the
       result is unavailable if it has not yet been called).
     * The optimizer was rewritten to be more thorough. It now works with
       both  C  and Java backends, and does a far better job than the old
       optimizer.
     * Implemented inspect on STRINGs.
     * Added  require  clause to operators in integer_general. We can now
       do  safe  computing  with integers, just like we do safe access to
       arrays with bound checking!
     * Pretty significantly updated.
     * The  C  files  produced  by  the  compiler  now should work on any
       platform, even with the GC turned on.
     * Added      Unicode     support     in     STRINGs     (see     the
       SmartEiffel/tutorial/unicode      and      SmartEiffel/lib/unicode
       directories).
     * Added new abstract class FILE and new features in class DIRECTORY.
     * Added   hexadecimal  notation  for  INTEGER  constants,  CHARACTER
       constants  and inside manifest STRINGs as well. See the example in
       file SmartEiffel/tutorial/hexadecimal.e for more information.
     * Added  agent  facilities  on  STRING  and UNICODE_STRING (warning,
       those facilities are non-standard extensions).
     * Visitor  pattern  support  was  added  (yes,  the design pattern).
       Beware, it's currently alpha code. You can play with it, but don't
       use  it  for  production code yet. Expect it to change somewhat in
       the  next  releases. There will be examples (later!) of how to use
       this pattern to add new plugin tools in SmartEiffel.
     * Moved the bin_c directory to install/germ.
     * Reorganized the SmartEiffel/sys/runtime directory:
          + Clearly separated C and Java backend helpers
          + Split  SmartEiffelRuntime.java  in  smaller  chunks.  To  use
            programs     built     with     compile_to_jvm,    add    the
            SmartEiffel/sys/runtime/java/smarteiffel.jar   file  to  your
            CLASSPATH
     * Added the -compact option which produces much more compact C code.
     * same_type  from  GENERAL  is  now  obsolete. Use same_dynamic_type
       instead.
     * Obsoleted operators "and", "or", "xor" and "not" for INTEGERs, and
       added prefix operator "~".
     * MEMORY.allocated_bytes is more accurate.
     * Generated object files are now removed before calling C compiler.
     * Various   bug   fixes   and   improvements  (see  details  in  the
       [20]SmartZilla bug tracker).

                                   [Line]

   Release 1.0 - Friday December 6^th, 2002

   This is the very first release with the name SmartEiffel!
   ([21]Previous releases were named SmallEiffel.)

   The main changes between SmallEiffel -0.74 and SmartEiffel 1.0 are:
     * Name changed from SmallEiffel to SmartEiffel!
     * Version  numbering:  now,  versions  are  numbered from 1.0 beta 1
       upward
     * The  new  and  significantly  updated  web site for SmartEiffel is
       [22]http://SmartEiffel.loria.fr.  (The  web  site  for  the former
       SmallEiffel remains, but is not updated any more).
     * The    new    Reference    keyword   is   now   implemented.   Use
       reference INTEGER  instead of INTEGER_REF. INTEGER_REF will become
       obsolete.
     * The   new   INTEGER_GENERAL,  INTEGER_8,  INTEGER_16,  INTEGER_32,
       INTEGER_64 types are now implemented.
     * After  long  discussions, we have decided to stick to our decision
       for  the  type of integer constants (as an example, 127 is of type
       INTEGER_8  and  128 is of type INTEGER_16 and so on). Actually, we
       think  that  this  is  the most consistent choice. We also noticed
       that it does not break a lot of code. The only one exception seems
       to  be the manifest array <<>> notation. For this latest point, we
       are  going  to  propose  to  ECMA  a new notation which allows the
       creation  of  any  kind  of  collection  and  which  removes  this
       INTEGER_* problem. Sorry for the inconvenience and stay tuned :)
     * 64-bit architectures supported.
     * Internal improvements in the type system (better C code produced)
     * Buffered  I/O. You may get big improvements on programs performing
       lots of file reading or writing (STD_INPUT and STD_OUTPUT are also
       buffered).
     * The  short  command  now  has  the "-client" option (see [23]short
       command manual for more details).
     * The  "tcc"  C  compiler  is  now  supported, use release 0.9.14 or
       better  (see [24]http://www.tinycc.org). Always using -no_split is
       probably a good choice.
     * New  bug  reporting tool. Now you can see all known bugs and their
       state.  Allways  refers  to the [25]bug report page on SmartEiffel
       site.
     * As suggested on our mailing list, there are now two new classes in
       order   to   remove  some  definitions  from  GENERAL  (see  class
       MATH_CONSTANTS and class CHARACTER_CONSTANTS).
     * As  asked  recently on our mailing list, the new notation for free
       operators  is now implemented. Even if our implementation is quite
       close to the new and upcoming ETL, it does not follow it exactely.
       Sorry.  In  order to avoid parsing problems we decided for example
       to  reject  >>  as  a  possible  free operator. We also decided to
       accept  more  free  operators  to  remain  compatible with the old
       syntax (as an example, there are a lot of such operators in gobo).
       Note: free operators must not include letters nor digits.
     * Type mark must now follow the Precursor keyword.
     * Fixed the bug recently reported by Wolfgang Jansen. (Well isolated
       bug  report, thanks!) This bug was related to expanded objects and
       the twin feature.
     * Fixed  the  -manifest_string_trace bug recently reported by Alexis
       Saettler. (Well isolated bug as well, thanks!)
     * Relaxed  the  redefinition  rule  for  like  Current  (a brand new
       decision  just  made  during  the  very  last  18th Nov. 2002 ECMA
       meeting).  In a few words, the new rules now allow you to redefine
       a  "like  Current"  type mark into some hard-coded type mark (e.g.
       "FOO").  Note  that  we think this new rule significantly improves
       things  for  is_equal  (which  should  be of interest for the NICE
       group   members).   So   we  applied  it  in  our  NUMBER  library
       implementation of is_equal (like Current is now changed to NUMBER)
       and  changed  the  postcondition  of  is_equal  in GENERAL (ensure
       assertion relaxed to no longer call standard_is_equal).
     * If  you're using lcc-win32 as a C compiler with SmartEiffel, a bug
       was  present  in  lcc  that  caused problems with our new release.
       Jacob  Navia  was  kind enough to fix it and provide a new version
       dated  Friday,  29-Nov-2002. So please use the most recent version
       of lcc-win32 from [26]http://www.cs.virginia.edu/~lcc-win32/
     * New  Cygwin  directory  notation  is  now supported. Recent Cygwin
       systems will be automatically detected while install.
     * Other  "secret"  goodies maturing in the source code, which should
       be  available in a future release. If you're curious, you may want
       to hunt them down to see what's going on.
     * Improved  internal lab process to more easily provide professional
       support contracts (see [27]premium support for more details).
     * New   functions  in  COLLECTION_SORTER  classes  using  dichotomic
       search.
     * GC support for the Elate system updated.
     * Various bug fixes and improvements.

                                   [Line]

   SmallEiffel History of Changes

   From  this  point,  history  is  relative  to the previous SmallEiffel
   project.  Here,  version  numbering is negative (from -0.99 to -0.74).
   Changes  are  listed  in  reverse  chronological order, the oldest one
   being at the bottom of the page.
   Release - 0.74 - Tuesday May 7^th, 2002
     * The  new  agent  mechanism  is now implemented. See tutorial/agent
       directory for examples.
     * Added   agent   based   features   in   class  COLLECTION,  ARRAY,
       FIXED_ARRAY,  LINKED_LIST,  TWO_WAY_LINKED_LIST,  DICTIONARY,  and
       SET.  Names  and  signatures  comes  from  ETL:  actually, do_all,
       for_all and exists.
     * The new create instruction/expression is now fully implemented and
       correctly pretty-printed. The new default_create feature mechanism
       is also implemented.
     * The  new  manifest string notation for verbatim manifest string is
       now implemented as well as the new optional once keyword which may
       precede   the   manifest   string   itself.   See   also  the  new
       [28]-manifest_string_trace  flag  documentation  to track non-once
       manifest strings creations.
     * Added examples for the new TUPLE type in directory tutorial/tuple.
     * Added  many  new  features  in  class  MEMORY  to tune the garbage
       collector. Those features may be useful for embedded applications.
       (See tutorial/memory for examples.)
     * The  external  C  interface  is  now  compatible  with the new ETL
       definition. (See directory tutorial/external/C for examples.)
     * Added flag [29]-high_memory_compiler to compile_to_c.
     * The new name of class BASIC_TIME is now simply TIME (the old class
       is  still  there  and tagged with the obsolete keyword). Added two
       new  classes  in SmallEiffel/lib/time: CLOCK and MICROSECOND_TIME.
       (See tutorial/time for examples.)
     * Added  class  BINARY_FILE_READ,  class BINARY_FILE_WRITE and class
       BINARY_FILE_READ_WRITE.    Class    STD_FILE_READ    is    renamed
       TEXT_FILE_READ.  Class  STD_FILE_WRITE is renamed TEXT_FILE_WRITE.
       Class  STD_FILE_READ_WRITE  is  renamed  TEXT_FILE_READ_WRITE. Old
       class are obsoleted.
     * Added  feature connect_append_to both in class TEXT_FILE_WRITE and
       BINARY_FILE_WRITE.
     * Added  a  new  class  called  SYSTEM which contains various system
       features:        execute_command,        get_environment_variable,
       set_environment_variable,  etc. By the way, the old system feature
       of  class  GENERAL  as well as the old get_environment_variable of
       class GENERAL are now obsolete.
     * Added   feature   size_of  and  feature  last_change_of  in  class
       FILE_TOOLS (see also tutorial/basic_time for examples).
     * Added  feature  append_decimal_in  and feature to_decimal in class
       NUMBER as well as a new example the tutorial/number directory.
     * Added  feature  add  both  in class COLLECTION_SORTER and in class
       REVERSE_COLLECTION_SORTER.
     * Added feature reference_at in class DICTIONARY.
     * Added feature infix "+" in class POINTER.
     * Various bug fixes and improvements.

                                   [Line]

   Release - 0.75 - Thursday July 16^th, 2001
     * Added  ACE  file  support  (ACE  stands for Assembly of Classes in
       Eiffel).  The  most  important  advantage  is that assertion level
       checking  can  now be selected differently for each class. This is
       also  true  for  the  runtime trace mechanism ([30]-trace). In ACE
       file  mode  you  have to provide a special *.ace file to drive the
       compiler.  See  tutorial/ace directory for examples. Note that the
       traditional command line mode will continue to be supported.
     * There  is  now  a powerful Eiffel level debugger with on-line help
       documentation.  This  debugger  features  step  by step execution,
       navigation  into the run-time stack, multi-conditions breakpoints,
       garbage collector invocation, profiling support, etc.. To use sedb
       (SmallEiffel  DeBugger),  just  add  the  [31]-trace  flag in your
       traditional command line of compilation or activate the trace mode
       in your ACE file.
     * Added a traditional -help flag for all commands to print a summary
       of available options.
     * In   ACE   files   as  well  as  in  "[32]loadpath.se"  files  the
       ${SmallEiffelDirectory}   environment  variable  is  automatically
       defined   using   the  value  of  the  ${SmallEiffel}  environment
       variable.
     * Full  compatibility  with  the  new  ELKS'2001  STRING class. Most
       modifications are simple renamings which are automatically pointed
       out  by  obsolete  warnings.  For obvious uniformity reasons, some
       other  classes  of  the  library  have  also been modified (ARRAY,
       LINKED_LIST,  DICTIONARY,  etc.). As an example, nb_occurrences of
       ARRAY  is  now  obsolete  and  the obsolete warning tells you that
       occurrences  is the new name to be used. This work is still a work
       in  progress. Please, contact Arno Wagner (in charge of the STRING
       class modification) on our [33]mailing list.
     * The new TUPLE type is now implemented.
     * Added  class TIME_IN_GERMAN to handle date and time in German. See
       tutorial/basic_time for examples.
     * Feature is_equal of class COMPARABLE is now ELKS compatible.
     * Added feature internal_key in class DICTIONARY.
     * Various bug fixes and improvements.

                                   [Line]

   Release - 0.76 - Saturday November 11^th, 2000
     * Full  compatibility  with  the  new  ELKS'2000  ARRAY  class. Most
       modifications are simple renamings which are automatically pointed
       out  by  obsolete  warnings.  For obvious uniformity reasons, some
       other  classes  of  the  library  have  also  been modified. As an
       example,  empty  is  always replaced with is_empty in all classes.
       The name all_cleared is always replaced with all_default. The most
       difficult  problem  is  due  to the fact that is_equal in ARRAY no
       longer  uses  the elements is_equal to compare them, but the basic
       '='  infix  operator.  For  uniformity reasons, this has also been
       done for all COLLECTIONs as well as class DICTIONARY.
     * Added   feature   is_equal_map   for   all   COLLECTIONs   (ARRAY,
       FIXED_ARRAY,   LINKED_LIST,  TWO_WAY_LINKED_LIST)  and  for  class
       DICTIONARY.  This is the replacement for the old implementation of
       is_equal (ie. is_equal_map use is_equal to compare elements).
     * Added feature reindex in class ARRAY.
     * Added a brand new class SET[E->HASHABLE].
     * Added  support  for the Elate (Amiga) system as well as the vpcc C
       compiler.
     * Added support for the QNX real time operating system.
     * For  feature  dispose  of class MEMORY (as well as redefinitions),
       the class invariant is no longer triggered.
     * Added features atan2 and pow both in class REAL and DOUBLE.
     * Internal  implementation  of  BASIC_TIME  revisited  (using  now a
       double for memorization).
     * Implementation  of  class  DICTIONARY  completely  revisited. Also
       added  features  add,  item_map_in and key_map_in in the new class
       DICTIONARY.
     * Added  feature  reverse in class COLLECTION (thus, this feature is
       available   for   all   subclasses   of  COLLECTION  (i.e.  ARRAY,
       FIXED_ARRAY, LINKED_LIST and TWO_WAY_LINKED_LIST).
     * Various bug fixes and improvements.

                                   [Line]

   Release - 0.77 - Saturday February 12^th, 2000
     * Added  in directory SmallEiffel the new [34]install command (class
       install.e  with  a  precompiled  install.exe  for  Windows).  This
       install.e  class  is the code for the installer of the SmallEiffel
       distribution  it  comes with, and is designed to be as portable as
       possible.  This  automatic  installation  program has already been
       tested    for    Windows/lcc-win32,    Windows/bcc32,   Linux/gcc,
       Solaris/gcc, DEC-Alpha/gcc and FreeBSD/gcc, ...
       To install SmallEiffel under some UNIX like system, just type make
       in the SmallEiffel directory.
       To install SmallEiffel under Windows, just run install.exe.
       On other systems, C compile and run the install.c file.
     * Added  C++ externals support (creation of C++ objects, deletion of
       C++  objects,  member function calls, static function calls etc.).
       See tutorial/external/C++ for examples.
     * Added  NUMBER library, for infinite precision and infinitely large
       numbers. See tutorial/number for examples.
     * Added ITERATOR library, for external iterators on data structures.
       See tutorial/iterator for examples.
     * Added  class  BASIC_DIRECTORY  and  class DIRECTORY to handle in a
       portable  way  directories  as  well as system path notations. See
       tutorial/basic_directory   for   examples.   This  class  is  also
       implemented for Java bytecode (command [35]compile_to_jvm).
     * Added   class   BASIC_TIME,   TIME_IN_FRENCH  TIME_IN_ENGLISH  and
       TIME_IN_ITALIAN  to  handle date and time. See tutorial/basic_time
       for  examples.  Low  level routines for Java byte-code are not yet
       implemented If you have some time to do this, you just have to add
       the   missing  Java  code  in  sys/runtime/SmallEiffelRuntime.java
       (please contribute your work on the SmallEiffel mailing list).
     * Added   class  BIT_STRING  for  very  large  bit  sequences,  with
       reference semantics.
     * Features  deep_clone  and  deep_equal  of  class  GENERAL  are now
       implemented  for  the  C  compilation mode (does not work yet with
       compile_to_jvm).
     * Added feature skip_remainder_of_line and feature reach_and_skip in
       class  INPUT_STREAM. Warning: in order to be consistent with other
       features,   the   behavior   of   features   skip_separators   and
       skip_separators_using has changed.
     * Added  feature  to_hexadecimal  and  feature  to_hexadecimal_in in
       class INTEGER.
     * Improved  incremental  recompilation of the generated C code (also
       fixed a very old bug in incrementality).
     * Exceptions handling: the default_rescue feature is now supported.
     * Various   bug   fixes   and  improvements  (type  inference  score
       increased, ...).

                                   [Line]

   Release - 0.78 - Saturday June 05^th, 1999.
     * New -html2 flag for command short generates a colorized HTML short
       form for classes.
     * The  garbage  collector  now takes into account feature dispose of
       class MEMORY for reference objects.
     * Obsolete classes (obsolete keyword) now supported.
     * Assertion tags are now displayed when an assertion fails.
     * Added environment variable in loadpath files. Syntax: ${SOME_VAR}
     * Added  the  -no_style_warning  flag  to suppress warnings when the
       recommended   styles   guidelines  for  Eiffel  are  not  strictly
       followed.
     * Added the -version flag to show SmallEiffel's version.
     * Enhanced  ease of use with and adaptability to various C compilers
       (SYSTEM_TOOLS).    Files    compiler.system,   linker.system   and
       o_suffix.system  are  now  obsolete  and replaced by a unique file
       compiler.se   common   to   all   systems.   See   the  [36]System
       configuration page for more information.
     * Class  LINKED_LIST  now  replaces obsolete class LINK_LIST (simple
       renaming).
       Class  TWO_WAY_LINKED_LIST  now replaces obsolete class LINK2_LIST
       (simple renaming).
     * Fixed "implicit renaming" bug.
     * Cleaned  all source code of tabulations at beginning of line (made
       code look ugly when using an editor whose tabs were not 8).
     * Some new ELKS'95 features implemented.
     * Validity rule VEEN fixed.
     * Added class COLLECTION_SORTER and REVERSE_COLLECTION_SORTER to the
       library.
     * Fixed file renaming portability bug (".d files bug").
     * Validity rule VCFG.1 is now enforced.
     * Validity rule VAPE is now enforced.
     * Classes  mentioned  in  a cecil.se file are now automatically made
       live. Makes it easier to link with external libraries.
     * Various other bug fixes.

                                   [Line]

   Release - 0.79 - Tuesday December 22^nd, 1998.
     * The  new  Eiffel  construct  Precursor  as  described OOSC2 is now
       implemented.
     * The Eiffel expression strip is now implemented.
     * Nested loadpath files now allowed.
     * Extended  anchored  definition  to accept infix and prefix feature
       names.  For  example,  this  kind of declaration is now accepted :
         foo: like infix "+".
     * Classes   COLLECTION2,   ARRAY2   and   FIXED_ARRAY2  of  lib/base
       completely revisited.
     * Fixed  a  bug  related  to  calls  of  the form f.g.h; on expanded
       objects.
     * Fixed a bug related to inheritance of generic classes.
     * Fixed  bugs  related  to assertions checking in case of exceptions
       (rescue clause, retry). Improved cycle detection in assertions.
     * Fixed  bug  in  GC  related to recycling of "monsters" (very large
       resizable objets).
     * Fixed  an incredible bug in the implementation of the like Current
       type mark. ;-).
     * Fixed many others bugs ($ operator, GC for alpha DEC, ...).
     * System  customization  file for the BeOS system added in the "sys"
       sub-directory (more on [37]system customization).
     * Contents  of  the environment variable SmallEiffel must be now set
       with  the  absolute  path  of the file "system.se" which is in the
       sub-directory "sys" of the installation directory.
       Under a UNIX-like system, the value of the SmallEiffel environment
       variable may be for example: /usr/lib/SmallEiffel/sys/system.se
       Commands  are  also  more  robust  when  this environment variable
       contains non-alphanumeric characters.
     * No more ensure assertion in GENERAL.get_environment_variable.
     * Commands  [38]compile_to_jvm  and  [39]print_jvm_class  completely
       revisited.  Java  byte-code  can be now used with the -verify Java
       option).
     * Validity rule VDRD.6 is now enforced.
     * Balancing  rule (automatic promotion) for INTEGER, DOUBLE and REAL
       is now implemented.
     * Recursive once routines now work correctly.
     * Unmodified generated C files are not touched anymore.
     * Assertions correctly checked for all external C routines.
     * Exception  handling now works when an exception occurs in external
       C code.
     * Cleaned the compiler and decreased its memory footprint.

                                   [Line]

   Release - 0.80 - Thursday July 9^th, 1998.
     * Exception   handling   implemented.   Class  EXCEPTIONS  added  in
       lib/kernel.
     * Execution  trace  stack  implementation completely revisited: more
       comprehensive  information  is  now  available,  and  the overhead
       incurred by this stack is greatly reduced (executables are about 3
       times faster when running in -all_check mode).
     * Added   option  -no_main  in  command  [40]compile_to_c  to  avoid
       generation  of  the C main function. This is useful when one wants
       to  start  execution  from  outside  before  calling  some  Eiffel
       routines via the [41]cecil interface.
     * Behavior  of  compilation  flag [42]-trace of command compile_to_c
       changed  to  allow step-by-step execution (embryo of Eiffel source
       code debugger).
     * Feature  ARRAY.resize  completely revisited (added two features in
       class NATIVE_ARRAY: clear and move).
     * Garbage  Collector  optimized (the GC should be more agressive and
       some benchmarks are included in directory
       SmallEiffel/misc/benchmarks/gc/*/bench.e).
     * Associativity of infix operator "^" is now correctly handled.
     * Fixed  bugs  in  PLATFORM  for  Minimum_double,  Minimum_real  and
       Minimum_character_code.
     * Fixed  some others bugs about export rules, about expanded objects
       with expanded attributes.
     * Fixed bugs in pretty.

                                   [Line]

   Release - 0.81 - Thursday April 9^th, 1998
     * First  finalized  version  of  the  garbage  collector.  Currently
       supported  architectures  are  SPARC Solaris, HP-UX, Linux, MacOS,
       Windows 95 and NT (see file SmallEiffel/sys/gc for details). Added
       flag -no_gc to suppress the GC (see [43]man/compile_to_c).
     * Changed  the default for the generation of C code. Now, the C code
       and  object  files  are kept by default. (This previously required
       using option -c_code, which becomes obsolete.)
       Added  flag -clean which removes all the C and object files of the
       system. (This corresponds to the old default behavior.)
     * Fixed a bug related to buffered input under Windows/MS VC.
     * Fixed a bug in misc/INSTALL.SH script.
     * Added  require  is_connected  for  all  features  put_*  of  class
       OUTPUT_STREAM.
     * Fixed  a  bug  in  command  [44]short (require/ensure assertion of
       deferred routines are now printed).
     * Added  one  useful  hook for mode -html1 in command [45]short (see
       hook Mcn).
     * Added  directory  SmallEiffel/sys/runtime  which  contains  the  C
       runtime.
     * Fixed a bug about instanciation of class ANY itself (not so common
       !).
     * Fixed a bug about inlining of operator $.
     * Fixed a bug about cyclic anchored definitions.

                                   [Line]

   Release - 0.82 - Friday January 16^th, 1998
     * Became the official GNU Eiffel compiler.
     * Added first HTML mode to command [46]short. Flag -html1. Thanks to
       Matthias Klause.
     * Fixed bugs in command [47]pretty.
     * It  is  now  possible  to  rename/redefine  external "SmallEiffel"
       features.
     * Files *.hlp of directory SmallEiffel/man no longer exists. All the
       documentation   is   now   in   *.html  files  plus  corresponding
       automatically generated *.txt files.
     * Manifest arrays creation has been optimized.
     * Validity rule VHRC.2 is now enforced.
     * Fixed bugs about export clause.
     * Feature  GENERAL.hash_code  no  longer  exists.  Added  ELKS class
       HASHABLE    in    order    to    be    compatible    with   others
       compilers/libraries.
     * Fixed a bug in pre-computed once functions.
     * Fixed a bug in REAL/DOUBLE keybord input.
     * Reintroduced left hand side cast in C code for better performances
       (allowed by the C ANSI standard).
     * Obsolete features (obsolete keyword) now generate a Warning.

                                   [Line]

   Release - 0.83 - Friday September 19^th, 1997
     * Added command short to the distribution.
     * Added  directory  contrib  in  the  distribution.  This  directory
       contains  some  scripts  to  use  gdb as source level debugger for
       SmallEiffel.
     * Added  flag  -no_warning  to  commands:  compile_to_c, pretty, and
       compile_to_jvm.
     * Added flag -case_insensitive to command compile_to_c.
     * Fixed a bug for inherit/select.
     * Fixed a bug for some pre-computed once function.

                                   [Line]

   Release - 0.84 - Monday August 18^th, 1997
     * Class   BIT   is   now   implemented  in  Java  bytecode  (command
       compile_to_jvm).
     * Added  external  specification  to  call  Java  code  (when  using
       compile_to_jvm).
     * To  fit  on  a single 3.5 inches disk, unsplitted C code for large
       commands  (compile_to_c  and  compile_to_jvm)  is no longer in the
       distribution as well as the old lib_test directory.
     * Changed the algorithm to load classes in order to allow upper case
       letters  in  files  names  (priority is always given to lower case
       file names).
     * Added   STRING.substring_index  (from  ELKS  written  by  Fridtjof
       SIEBERT).
     * Added  one  more  file  in  SmallEiffel/sys/ directory in order to
       customize  object  files suffix (thus, using Borland C compiler on
       Windows is now possible).
     * Changed the behavior of end_of_input of INPUT_STREAM (this flag is
       true _after_ last character has been read).
     * Fixed a bug in manifest arrays (mixed objects including Void).
     * Fixed a bug dealing with some statically computed expressions.
     * Fixed a bug in repeated inheritance.

                                   [Line]

   Release - 0.85 - Thursday July 3^rd, 1997
     * First beta-release of commands compile_to_jvm and print_jvm_class!
     * The  new  name  for  class C_ARRAY is now NATIVE_ARRAY (because it
       works  both  with Java and C). The old C_ARRAY name is temporarily
       accepted with a warning from the compiler.
     * For  readability  and to avoid confusion with Java names, external
       tags  have  changed  (see for new names in [48]man/external file).
       Old  names  are temporarily accepted with a warning giving the new
       name to use.
     * Added  feature  to_hexadecimal  and  feature  to_hexadecimal_in in
       class CHARACTER.
     * Feature  io,  std_input, std_output and std_error of class GENERAL
       are no longer frozen.
     * Some   changes   in   STD_FILE_READ   for  features  read_integer,
       read_double and read_real (added comments, precondition and solved
       the problem with the trailing separator).
     * Feature die_with_code of GENERAL now accepts any INTEGER code (not
       just predefined exit_success_code and exit_failure_code).
     * Fixed  a  bug  in  STRING.  The  following expression is now true:
       ("a%/0/b").count = 3
       Just try this on your favorite Eiffel compiler ;-)
     * Many  changes in basic input/output in order to be compatible with
       Java:  No  more  class  STD_FILE (the name is now free for an ELKS
       implementation). Two new classes: INPUT_STREAM and OUTPUT_STREAM.
     * Feature  unread_character of class INPUT_STREAM is now implemented
       in Eiffel.
     * Added OUTPUT_STREAM.put_pointer to view a POINTER.

                                   [Line]

   Release - 0.86 - Sunday April 13^th, 1997
     * All reported bugs at this time have been fixed.
     * Added  flag -verbose to commands: compile, compile_to_c and clean.
       When  this  new  flag  is  not present, commands now work silently
       unless some error (or warning) occurs.
     * Features  BOOLEAN.infix  "or"  and  BOOLEAN.infix  "and"  are  now
       written in pure Eiffel. As a consequence, it is very important for
       the   SmallEiffel  programmer  to  make  the  distinction  between
       BOOLEAN.infix "and then" and BOOLEAN.infix "and" (respectively for
       BOOLEAN.infix    "or   else"   and   BOOLEAN.infix   "or").   When
       left-hand-side  argument  produces no side effect, the semi-strict
       operator (BOOLEAN.infix"and then"/"or else") may run faster.
     * Fixed REAL.sin (the old one was calling sqrt :-).
     * Fixed   a   bug   in   INTEGER.append_in   (you   can   now  print
       Minimum_integer).
     * Added feature in_range in class COMPARABLE.
     * Result   type   of   REAL.infix   "^"   is  now  DOUBLE  for  ELKS
       compatibility.
     * Feature  remove is now implemented in all subclasses of COLLECTION
       (i.e. ARRAY, FIXED_ARRAY, LINK_LIST and LINK2_LIST).
     * Added feature add for all subclasses of COLLECTION.
     * Conversion  DOUBLE/STRING  : ANSI C sscanf and sprintf is now used
       to avoid loss of precision.
     * Added  some more class invariant code generation when compiling in
       -invariant_check  mode. Class invariant is now also checked before
       exit of a routine.
     * Added  feature file_tools in class GENERAL to ease access to class
       FILE_TOOLS.
     * Changed  printing  format  for  basic  *_REF classes. For example,
       instruction print(1); now prints 1.
     * Feature  truncated_to_integer  of  DOUBLE  is  now ELKS compatible
       (added  feature  rounded  in  class  DOUBLE  to  replace  the  old
       truncated_to_integer). Same changes in class REAL.

                                   [Line]

   Release - 0.87 - Tuesday January 7^th, 1997
     * Added  a  new  flag -trace to ease debug (see [49]man/compile_to_c
       file).
     * More inlining at Eiffel level (-boost mode only).
     * Class BIT_N completely revisited. It may be as fast as C.
     * Added  class  C_ARRAY[E]  to deal directly with C arrays at Eiffel
       level.  Thus  there  are  no  more external "CSE" or c_inline_c in
       classes  STRING/ARRAY/FIXED_ARRAY  (only full Eiffel). Eiffel code
       is nice and STRING/ARRAY/FIXED_ARRAY may run faster.
     * Fixed a bug in STD_FILE_READ.read_double.
     * Ordering of C output to increase gcc inlining.
     * According  to  [50]man/compile_to_c) , flag -debug_check now works
       (debug instructions are no longer generated in mode -all_check).
     * Unused  local variables removed at Eiffel level (warning added for
       -debug_check mode only).
     * Default class ANY now inherits PLATFORM (as in ETL).
     * Fixed a bug in floating-point constants.
     * Added  directory  sys  to  customize default C compiler, default C
       linker and default loading path.
     * Fixed some bugs with outside expanded types.
     * Fixed a bug with rename/select.
     * Redefinition of once routine is now allowed.
     * Feature GENERAL.conforms_to is now implemented.
     * Rule VFFD.7 is now enforced.
     * Feature force implemented for all COLLECTION.
     * Added   conversions   features  CHARACTER.to_bit,  INTEGER.to_bit,
       BIT_N.to_character and BIT_N.to_integer.

                                   [Line]

   Release - 0.88 - Wednesday October 30^th, 1996
     * Fixed bugs dealing with inherit/rename/select.
     * Added warning for missing colon in actual arguments list.
     * Warning  :  INSTALL  procedure  has  changed  and  you have to set
       manually the default loading path (see misc/INSTALL for details).
     * Added some VMS customization.
     * Fixed bugs when printing run-time stack.
     * Warning added for missing colon in actual parameter list.
     * Added flush in class STD_FILE_WRITE.
     * No  more  left  hand side cast in C code (because some C compilers
       don't like them).

                                   [Line]

   Release - 0.89 - Sunday September 15^th, 1996
     * Calling  Eiffel  from  C  is  now  implemented (see [51]man/cecil)
       file).
     * Object creation uses C calloc instead malloc+memset.
     * Object creation is inlined.
     * ARRAY/FIXED_ARRAY put and item are now inlined (-boost only).
     * Added feature capacity and resize in FIXED_ARRAY.
     * Added  some  classes in std_lib: LINK2_LIST (two way linked list),
       COLLECTION2     (deferred),     ARRAYED_COLLECTION     (deferred),
       LINKED_COLLECTION (deferred) and FIXED_ARRAY2 in std_lib.
     * More user's routines are inlined (-boost only).

                                   [Line]

   Release - 0.90 - Friday August 23^rd, 1996
     * Added random number generator library (SmallEiffel/lib_rand).
     * Added checking of assertions for external "CSE" features.
     * Anchoring on expanded types are now allowed.
     * Multiple level of anchoring definition allowed.
     * Fixed a bug in STRING.from_external.
     * Fixed a bug with mixed rename/redefine.
     * Inheritance loop detection.
     * Anchoring loop detection.
     * Fixed a bug with renaming infix/prefix.
     * Command clean also use the make suffix.
     * Added ELKS95 sign in INTEGER/REAL/DOUBLE.
     * Feature make is the default root feature name for compile.
     * Optimized ARRAY.add_last and STRING.extend.
     * Changed STRING.out (no more enclosing %" printed).
     * Remove warning gcc messages for 64 bit machines (alpha/DEC).
     * Added   option   -no_split   for   a   better   finalization  (see
       [52]man/compile_to_c) file).

                                   [Line]

   Release - 0.91 - Wednesday July 24^th, 1996
     * Incremental  C  compiling  mode implemented (see option -c_code in
       help file [53]man/compile) .
     * Added command clean in help file [54]man/clean.
     * Added class FILE_TOOLS.
     * No more empty C struct in generated C code (to avoid problems with
       Microsoft Windows C compiler).
     * Fixed one more bug with conformance rule VNCG.

                                   [Line]

   Release - 0.92 - Saturday July 20^th, 1996
     * Fixed some more bugs with conformance rule VNCG.
     * Added  math  functions  in DOUBLE/REAL (sin, cos, tan, asin, acos,
       atan, ... ANSI C names).

                                   [Line]

   Release - 0.93 - Thursday July 18^th, 1996
     * Fixed some more bugs with conformance rule VNCG.
     * Type BIT is now implemented.
     * Added ELKS 95 STRING.left_adjust and STRING.right_adjust.

                                   [Line]

   Release - 0.94 - Friday July 5^th, 1996
     * Fixed some bugs with conformance rule VNCG.
     * Static   expressions   are  used  to  detect  pre-computable  once
       routines.
     * Added features to_external and from_external both in classes ARRAY
       and FIXED_ARRAY.
     * Fixed a bug for inheritance of ARRAY or FIXED_ARRAY.
     * Contents of end of class comment checked.
     * Added  documentation  file  for  external  calls  (see  help  file
       [55]man/external ).

                                   [Line]

   Release - 0.95 - Thursday May 30^th, 1996
     * It is now possible to inherit ARRAY.
     * It is now possible to inherit STRING.
     * Flag -cc of compile_to_c has changed.
     * The PLATFORM class is now conform to ELKS95.
     * Added feature twin (like the one of TowerEiffel) in GENERAL.
     * Added features to_external and from_external in class STRING.
     * Fixed some bugs in once pre-computed routines.

                                   [Line]

   Release - 0.96 - Friday May 10^th, 1996
     * Internal  renaming  to  suppress  some  warning messages and for a
       smooth integration with C++ software.
     * DOS and Macintosh better portability.

                                   [Line]

   Release - 0.97 - Thursday May 2^nd, 1996
     * Inside of compiler cleaned.
     * Pre-Computing of some once functions.
     * Added class COLLECTION, LINK_LIST and FIXED_ARRAY in lib/base.

                                   [Line]

   Release - 0.98 - Friday March 15^th, 1996
     * Command pretty added.
     * Implements Eiffel expanded clause.

                                   [Line]

   Release - 0.99 - Saturday February 17^th, 1996
     * The  first  version  available  on  the  net.  Before  being  made
       available,  the  very  first  SmallEiffel  had  been  tested since
       September 1995 by students of the University Henri Poincar

                                   [Line]

   Release - 1.00 - July 1995
     * The very first bootstrap. SmallEiffel is born.


                                   [Line]

       Copyright  The SmartEiffel Team - [56]<SmartEiffel@loria.fr>
                Last modified: Sat Dec 10 10:29:40 CET 2005

References

   1. http://SmartEiffel.loria.fr/wiki/en/index.php/Typing_policy
   2. file://localhost/home/colnet/SmartEiffel/libraries/index.html
   3. file://localhost/home/colnet/SmartEiffel/tools/index.html
   4. file://localhost/home/colnet/SmartEiffel/man/se.html
   5. file://localhost/home/colnet/SmartEiffel/man/eiffeldoc.html
   6. file://localhost/home/colnet/SmartEiffel/man/plugins.html
   7. file://localhost/home/colnet/SmartEiffel/libraries/_class@UNIX_GL_WIDGET.html
   8. file://localhost/home/colnet/SmartEiffel/libraries/_class@BIJECTIVE_DICTIONARY.html
   9. file://localhost/home/colnet/SmartEiffel/libraries/_class@HASHED_BIJECTIVE_DICTIONARY.html
  10. file://localhost/home/colnet/SmartEiffel/libraries/_class@ANY.html
  11. file://localhost/home/colnet/SmartEiffel/libraries/_class@FILE_TOOLS.html
  12. file://localhost/home/colnet/SmartEiffel/libraries/_class@ANY.html
  13. file://localhost/home/colnet/SmartEiffel/libraries/_class@ARGUMENTS.html
  14. file://localhost/home/colnet/SmartEiffel/libraries/_class@HASHABLE.html
  15. file://localhost/home/colnet/SmartEiffel/libraries/_class@STRING.html
  16. file://localhost/home/colnet/SmartEiffel/libraries/_class@STRING_HANDLER.html
  17. file://localhost/home/colnet/SmartEiffel/libraries/_class@COLLECTION.html
  18. file://localhost/home/colnet/SmartEiffel/libraries/_class@DICTIONARY.html
  19. file://localhost/home/colnet/SmartEiffel/man/install.html
  20. http://SmartEiffel.loria.fr/support/bug_report.html
  21. file://localhost/home/colnet/SmartEiffel/misc/HISTORY.html#SmallEiffel
  22. http://SmartEiffel.loria.fr/
  23. file://localhost/home/colnet/SmartEiffel/man/short.html
  24. http://www.tinycc.org/
  25. http://SmartEiffel.loria.fr/support/bug_report.html
  26. http://www.cs.virginia.edu/~lcc-win32/
  27. http://SmartEiffel.loria.fr/support/support.html#premium
  28. file://localhost/home/colnet/SmartEiffel/man/compile_to_c.html#manifest_string_trace
  29. file://localhost/home/colnet/SmartEiffel/man/compile_to_c.html#high_memory_compiler
  30. file://localhost/home/colnet/SmartEiffel/man/compile_to_c.html#trace
  31. file://localhost/home/colnet/SmartEiffel/man/compile_to_c.html#trace
  32. file://localhost/home/colnet/SmartEiffel/man/system.html#loadpath
  33. http://SmartEiffel.loria.fr/support/mailing-list.html
  34. file://localhost/home/colnet/SmartEiffel/man/install.html
  35. file://localhost/home/colnet/SmartEiffel/man/compile_to_jvm.html
  36. file://localhost/home/colnet/SmartEiffel/man/system.html
  37. file://localhost/home/colnet/SmartEiffel/man/system.html
  38. file://localhost/home/colnet/SmartEiffel/man/compile_to_jvm.html
  39. file://localhost/home/colnet/SmartEiffel/man/print_jvm_class.html
  40. file://localhost/home/colnet/SmartEiffel/man/compile_to_c.html
  41. file://localhost/home/colnet/SmartEiffel/man/cecil.html
  42. file://localhost/home/colnet/SmartEiffel/man/compile_to_c.html#trace
  43. file://localhost/home/colnet/SmartEiffel/man/compile_to_c.html
  44. file://localhost/home/colnet/SmartEiffel/man/short.html
  45. file://localhost/home/colnet/SmartEiffel/man/short.html
  46. file://localhost/home/colnet/SmartEiffel/man/short.html
  47. file://localhost/home/colnet/SmartEiffel/man/pretty.html
  48. file://localhost/home/colnet/SmartEiffel/man/external.html
  49. file://localhost/home/colnet/SmartEiffel/man/compile_to_c.html
  50. file://localhost/home/colnet/SmartEiffel/man/compile_to_c.html
  51. file://localhost/home/colnet/SmartEiffel/man/cecil.html
  52. file://localhost/home/colnet/SmartEiffel/man/compile_to_c.html
  53. file://localhost/home/colnet/SmartEiffel/man/compile.html
  54. file://localhost/home/colnet/SmartEiffel/man/clean.html
  55. file://localhost/home/colnet/SmartEiffel/man/external.html
  56. mailto:SmartEiffel@loria.fr
