Latest version first (31 stable releases since July 1995).
Release 2.2 [Pomme de terre] - Monday December 19th, 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
library documentation.
We have also included the whole documentation of
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, se,
which is meant to be the only command you ever need to put in your
PATH!
Added a new command, 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 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
UNIX_GL_WIDGET
and define all the OpenGL related routines.
Added new abstract class named BIJECTIVE_DICTIONARY
which is actually a replacement for the now obsolete
DOUBLE_DICTIONARY class. At time beeing, there is only one
implementation of BIJECTIVE_DICTIONARY named 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 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
FILE_TOOLS instead).
No more feature argument and argument_count in
class ANY.
In order to access command-line arguments, just insert
class 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
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
STRING.
This low-level feature is only exported to
STRING_HANDLER.
Added a new features in class 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 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.
Release 2.1 [Poirot] - Wednesday February 9th, 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:
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.
Release 2.0 [Hercule] - Monday September 27th, 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 beeing, 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).
Release 1.1 [Charlemagne] - Monday June 16th, 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
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
SmartZilla
bug tracker).
Release 1.0 - Friday December 6th, 2002
This is the very first release with the name SmartEiffel!
(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 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 short command manual for more details).
The "tcc" C compiler is now supported, use release 0.9.14 or better
(see 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 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
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 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.
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 7th, 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
-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.)
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.
Release - 0.75 - Thursday July 16th, 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
(-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
-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
"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 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.
Release - 0.76 - Saturday November 11th, 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.
Release - 0.77 - Saturday February 12th, 2000
Added in directory SmallEiffel the new
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
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, ...).
Release - 0.78 - Saturday June 05th, 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 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.
Classes mentioned in a cecil.se file are now automatically made live.
Makes it easier to link with external libraries.
Various other bug fixes.
Release - 0.79 - Tuesday December 22nd, 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
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 compile_to_jvm
and 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.
Release - 0.80 - Thursday July 9th, 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
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 cecil interface.
Behavior of compilation flag -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.
Release - 0.81 - Thursday April 9th, 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
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
short (require/ensure
assertion of deferred routines are now printed).
Added one useful hook for mode -html1 in command
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.
Release - 0.82 - Friday January 16th, 1998
Became the official GNU Eiffel compiler.
Added first HTML mode to command short.
Flag -html1. Thanks to Matthias Klause.
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.
Release - 0.83 - Friday September 19th, 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.
Release - 0.84 - Monday August 18th, 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.
Release - 0.85 - Thursday July 3rd, 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
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.
Release - 0.86 - Sunday April 13th, 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.
Release - 0.87 - Tuesday January 7th, 1997
Added a new flag -trace to ease debug (see
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 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.
Release - 0.88 - Wednesday October 30th, 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).
Release - 0.89 - Sunday September 15th, 1996
Calling Eiffel from C is now implemented (see
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).
Release - 0.90 - Friday August 23rd, 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
man/compile_to_c)
file).
Release - 0.91 - Wednesday July 24th, 1996
Incremental C compiling mode implemented (see option -c_code in
help file man/compile) .
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.
Release - 0.92 - Saturday July 20th, 1996
Fixed some more bugs with conformance rule VNCG.
Added math functions in DOUBLE/REAL (sin, cos, tan,
asin, acos, atan, ... ANSI C names).
Release - 0.93 - Thursday July 18th, 1996
Fixed some more bugs with conformance rule VNCG.
Type BIT is now implemented.
Added ELKS 95 STRING.left_adjust and STRING.right_adjust.
Release - 0.94 - Friday July 5th, 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
man/external
).
Release - 0.95 - Thursday May 30th, 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.
Release - 0.96 - Friday May 10th, 1996
Internal renaming to suppress some warning messages and for a smooth
integration with C++ software.
DOS and Macintosh better portability.
Release - 0.97 - Thursday May 2nd, 1996
Inside of compiler cleaned.
Pre-Computing of some once functions.
Added class COLLECTION, LINK_LIST and FIXED_ARRAY in lib/base.
Release - 0.98 - Friday March 15th, 1996
Command pretty added.
Implements Eiffel expanded clause.
Release - 0.99 - Saturday February 17th, 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é