<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.liberty-eiffel.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Cadrian</id>
	<title>Liberty Eiffel Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.liberty-eiffel.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Cadrian"/>
	<link rel="alternate" type="text/html" href="https://wiki.liberty-eiffel.org/index.php/Special:Contributions/Cadrian"/>
	<updated>2026-05-24T09:39:31Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.37.0</generator>
	<entry>
		<id>https://wiki.liberty-eiffel.org/index.php?title=Mock&amp;diff=2259</id>
		<title>Mock</title>
		<link rel="alternate" type="text/html" href="https://wiki.liberty-eiffel.org/index.php?title=Mock&amp;diff=2259"/>
		<updated>2016-05-01T20:02:59Z</updated>

		<summary type="html">&lt;p&gt;Cadrian: Created page with &amp;quot;== Introduction ==  While testing, it is frequently useful to be able to isolate the component being tested, and making it interact with &amp;quot;fake&amp;quot; objects, known as ''mocks'' in ...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
While testing, it is frequently useful to be able to isolate the component being tested, and making it interact with &amp;quot;fake&amp;quot; objects, known as ''mocks'' in the Object-Oriented literature.&lt;br /&gt;
&lt;br /&gt;
LibertyEiffel's mock implementation is quite straightforward: it takes a class to mock, and produce two classes: the mock implementation, and a test driver.&lt;br /&gt;
&lt;br /&gt;
* Instances of the mock implementation class will be used to interact with the component being tested.&lt;br /&gt;
* Instances of the test driver class will be used by the test scenario to &amp;quot;prepare&amp;quot; the behavior of the mock implementation instances.&lt;br /&gt;
&lt;br /&gt;
There is only one requirement: the class to be mocked must be deferred.&lt;br /&gt;
&lt;br /&gt;
[[eiffeltest]] is also able to automatically generate mocks.&lt;br /&gt;
&lt;br /&gt;
== Calling ''mock'' directly ==&lt;br /&gt;
&lt;br /&gt;
The tool takes one parameter: the name of the class to mock, which must be deferred. It generates two classes:&lt;br /&gt;
&lt;br /&gt;
* the _MOCK class, which is the implementation of the class to mock;&lt;br /&gt;
* the _EXPECT class, which is the test driver, used in test scenarios.&lt;br /&gt;
&lt;br /&gt;
There are options to change the name of the generated classes.&lt;br /&gt;
&lt;br /&gt;
== Using the test driver ==&lt;br /&gt;
&lt;br /&gt;
The test driver, or ''expect class'', allows to prepare the behavior of the mock instance.&lt;br /&gt;
&lt;br /&gt;
When the tester creates an ''expect'' instance, a ''mock'' instance is created by the test driver. It is available using the ''mock'' feature.&lt;br /&gt;
&lt;br /&gt;
For each deferred feature of the class to mock, the test driver exposes:&lt;br /&gt;
&lt;br /&gt;
* A feature with the same name, that takes the same arguments as the original function, and returns an expectation object (more on that below);&lt;br /&gt;
* A feature with the same name and a ''__match'' suffix, only if the original feature takes arguments. In that case, the arguments are matchers, thus allowing a greater liberty on how to match arguments. The feature also returns an expectation object.&lt;br /&gt;
&lt;br /&gt;
The expectation object is used when the corresponding feature is called on the mock object (presumably by the component being tested). When building the test scenario, the expectation object is used to tune how the mock object behaves when the feature is called:&lt;br /&gt;
&lt;br /&gt;
* What object to return (if it is a function)&lt;br /&gt;
* If a function must be called as side-effect&lt;br /&gt;
* The number of times the feature is expected to be called&lt;br /&gt;
&lt;br /&gt;
== Using eiffeltest ==&lt;br /&gt;
&lt;br /&gt;
Eiffeltest brings the following features:&lt;br /&gt;
&lt;br /&gt;
* ''.mock'' files are read by [[eiffeltest]]. Each line must be a file name of a class to mock. Eiffeltest will call ''mock'' on each class.&lt;br /&gt;
* [[EIFFELTEST_TOOLS]] contains a feature ''scenario'', used to prepare the test scenario using mocks&lt;br /&gt;
&lt;br /&gt;
There is an example of such a usage in the &amp;lt;TT&amp;gt;test/tools/mocker&amp;lt;/TT&amp;gt; directory in LibertyEiffel source tree.&lt;/div&gt;</summary>
		<author><name>Cadrian</name></author>
	</entry>
	<entry>
		<id>https://wiki.liberty-eiffel.org/index.php?title=Tools&amp;diff=2258</id>
		<title>Tools</title>
		<link rel="alternate" type="text/html" href="https://wiki.liberty-eiffel.org/index.php?title=Tools&amp;diff=2258"/>
		<updated>2016-05-01T19:43:00Z</updated>

		<summary type="html">&lt;p&gt;Cadrian: /* Debugging */ section renamed as Testing; adding mock&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Tool]]&lt;br /&gt;
LibertyEiffel provides many tools besides the [[compile|compiler]].&lt;br /&gt;
&lt;br /&gt;
All these tools use the [[configuration file]].&lt;br /&gt;
&lt;br /&gt;
== The tools ==&lt;br /&gt;
&lt;br /&gt;
=== Tool box ===&lt;br /&gt;
&lt;br /&gt;
* [[se]]: a facade to all those tools&lt;br /&gt;
&lt;br /&gt;
=== Compiling ===&lt;br /&gt;
&lt;br /&gt;
* [[clean]]: remove the useless C files&lt;br /&gt;
* [[compile]]: the compiler (calls [[compile_to_c]])&lt;br /&gt;
* [[compile_to_c]]: the C compiler core&lt;br /&gt;
* [[extract_internals]]: the tentative inter-program object sharing tool&lt;br /&gt;
* [[wrappers_generator]]: a tools to generate low-level Eiffel wrappers for C code&lt;br /&gt;
&lt;br /&gt;
=== Searching and documenting ===&lt;br /&gt;
&lt;br /&gt;
* [[eiffeldoc]]: generates the whole documentation of a project&lt;br /&gt;
* [[finder]]: finds a class&lt;br /&gt;
* [[pretty]]: makes your source file pretty&lt;br /&gt;
* [[short]]: generates the interface documentation of a single class&lt;br /&gt;
&lt;br /&gt;
=== Testing ===&lt;br /&gt;
&lt;br /&gt;
* [[ace_check]]: checks an [[ACE|ACE file]]&lt;br /&gt;
* [[class_check]]: checks the [[parsing|syntax]] and the [[semantics]] of a source code&lt;br /&gt;
* [[eiffeltest]]: the LibertyEiffel testing tool&lt;br /&gt;
* [[mock]]: the LibertyEiffel mock tool&lt;br /&gt;
&lt;br /&gt;
=== Installing ===&lt;br /&gt;
&lt;br /&gt;
* [[install]]: installs the LibertyEiffel tools&lt;br /&gt;
&lt;br /&gt;
== The system core ==&lt;br /&gt;
&lt;br /&gt;
If you are interested by how the system works, either by sheer curiosity, or because you want to modify it, here are some explanations.&lt;br /&gt;
&lt;br /&gt;
If you want to create a new LibertyEiffel-oriented tool, this information is important too; also look at [[tool_class:EXTERNAL_TOOL|&amp;lt;tt&amp;gt;EXTERNAL_TOOL&amp;lt;/tt&amp;gt;]].&lt;br /&gt;
&lt;br /&gt;
* [[class loading]]&lt;br /&gt;
* [[parsing|syntactic analysis]]&lt;br /&gt;
* [[semantics|semantic analysis]]&lt;br /&gt;
* the [[optimizer]]&lt;br /&gt;
* the [[visitor|visitors]]&lt;br /&gt;
* code generation&lt;br /&gt;
** [[compile_to_c#Generation|compile_to_c]]&lt;br /&gt;
** [[compile_to_jvm#Generation|compile_to_jvm (obsolete)]]&lt;/div&gt;</summary>
		<author><name>Cadrian</name></author>
	</entry>
	<entry>
		<id>https://wiki.liberty-eiffel.org/index.php?title=Release_Checklist&amp;diff=2257</id>
		<title>Release Checklist</title>
		<link rel="alternate" type="text/html" href="https://wiki.liberty-eiffel.org/index.php?title=Release_Checklist&amp;diff=2257"/>
		<updated>2016-05-01T19:33:21Z</updated>

		<summary type="html">&lt;p&gt;Cadrian: debian build&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is WIP. Please update if you think of any missing detail. The target is to include all necessary command line commands (where applicable)&lt;br /&gt;
&lt;br /&gt;
* cleanup Testsuite&lt;br /&gt;
* update LIBERTY_VERSION&lt;br /&gt;
* create new bootstrap germ code&lt;br /&gt;
 resources/smarteiffel-germ/make_germ.sh&lt;br /&gt;
* create a local branch for the next release&lt;br /&gt;
 git branch bell&lt;br /&gt;
* create a bell branch in the github repo (via web interface?)&lt;br /&gt;
* push it to savannah&lt;br /&gt;
 git checkout bell&lt;br /&gt;
 git push upstream bell&lt;br /&gt;
* remove all tools and libraries which are not sufficiently mature to be included in the release&lt;br /&gt;
** for Bell these are:&lt;br /&gt;
 cluster smarteiffel/generation/run&lt;br /&gt;
 smarteiffel/commands/run.e&lt;br /&gt;
 edc-new, edc&lt;br /&gt;
 lib/mmi?&lt;br /&gt;
 mock, effect tool? (at least we have no documentation about them, have they been in adler?)&lt;br /&gt;
 src/staging&lt;br /&gt;
 src/lib/net/ezmq&lt;br /&gt;
 wrappers: cairo, database/postgresql, ewlc, llvm, zmq, xml&lt;br /&gt;
* switch ET to use the new branch&lt;br /&gt;
* create release candidate&lt;br /&gt;
 git tag &amp;lt;release_name&amp;gt;-rc1&lt;br /&gt;
 work/packaging/build_debian.sh -rc1&lt;br /&gt;
* collect RC feedback on our mailing list&lt;br /&gt;
* create the final release tag&lt;br /&gt;
 git tag &amp;lt;release_name&amp;gt;&lt;br /&gt;
* create release debian packages&lt;br /&gt;
 work/packaging/build_debian.sh -release&lt;br /&gt;
* create tarball and put on FTP server&lt;br /&gt;
* write announce email to our mailing list and as news on savannah&lt;br /&gt;
* switch ET back to use the master branch&lt;br /&gt;
* prepare changelog for the third release&lt;br /&gt;
* plan the next release (tickets on savannah)&lt;/div&gt;</summary>
		<author><name>Cadrian</name></author>
	</entry>
	<entry>
		<id>https://wiki.liberty-eiffel.org/index.php?title=Install&amp;diff=1989</id>
		<title>Install</title>
		<link rel="alternate" type="text/html" href="https://wiki.liberty-eiffel.org/index.php?title=Install&amp;diff=1989"/>
		<updated>2014-09-08T13:00:03Z</updated>

		<summary type="html">&lt;p&gt;Cadrian: obsolete&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; The LibertyEiffel '''install''' tool is '''not used anymore''', as it is&amp;lt;BR&amp;gt;replaced by a shell script [http://git.savannah.gnu.org/cgit/liberty-eiffel.git/tree/install.sh install.sh] and its [[Getting Started|manual]].&lt;br /&gt;
&lt;br /&gt;
The eiffel ''install'' tool is still available in the Liberty repository, but it is - like this page here - obsolete. Maybe once upon a time it may resurrect, so we keep this page until it's buried.&lt;br /&gt;
&lt;br /&gt;
[[Category:Tool]]&lt;br /&gt;
[[Category:Obsolete]]&lt;br /&gt;
&lt;br /&gt;
= Usage =&lt;br /&gt;
The install command is the installation program for LibertyEiffel The GNU Eiffel Compiler. &lt;br /&gt;
This command does not support any option.&lt;br /&gt;
This command (class install.e) is written entirely in Eiffel and is the one recommended for installing LibertyEiffel The GNU Eiffel Compiler. &lt;br /&gt;
&lt;br /&gt;
The install.e source code as well as the generated C code install.c are in the LibertyEiffel directory. &lt;br /&gt;
&lt;br /&gt;
The very first step in installing LibertyEiffel is to unpack the LibertyEiffel directory somewhere on disk. The second step (not mandatory) is to set the LibertyEiffel environment variable to the full path leading to the SmartEiffel/sys/system.se file. The last step is to compile the install.c file (it is pre-compiled for Windows) and to run it from the LibertyEiffel directory. &lt;br /&gt;
&lt;br /&gt;
For Unix, Elate and OpenVMS people, a Makefile is also provided, that does just that. Look at the comments in the Makefile itself for details. &lt;br /&gt;
&lt;br /&gt;
The install command will do the rest of the work and will try to report possible problems. See the examples below. &lt;br /&gt;
&lt;br /&gt;
See also at the end of the page for more details on how to use the interactive installer. &lt;br /&gt;
&lt;br /&gt;
= Example for UNIX =&lt;br /&gt;
&lt;br /&gt;
As an example, we assume below that we want to install LibertyEiffel in the directory /foo/SmartEiffel/. If you are using bash, add the following two lines to your .bashrc file:&lt;br /&gt;
&lt;br /&gt;
 export SmartEiffel=/foo/SmartEiffel/sys/system.se&lt;br /&gt;
 export PATH=/foo/SmartEiffel/bin:$PATH&lt;br /&gt;
&lt;br /&gt;
If you are using csh or tcsh, add the following two lines to your .cshrc file:&lt;br /&gt;
&lt;br /&gt;
 setenv SmartEiffel /foo/SmartEiffel/sys/system.se&lt;br /&gt;
 setenv PATH /foo/SmartEiffel/bin:$PATH&lt;br /&gt;
&lt;br /&gt;
Don't forget to open a new terminal window in order to take into account the new settings of the SmartEiffel and PATH variables. Then, in this new terminal window, just type the following commands: &lt;br /&gt;
&lt;br /&gt;
 cd /foo&lt;br /&gt;
 gunzip se.tgz (or bunzip2 se.tar.bz2)&lt;br /&gt;
 tar xvf se.tar&lt;br /&gt;
 cd SmartEiffel&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
You now just have to wait for the compiler installation to complete. Actually, it may take some time because all of the tools are recompiled from scratch using the Eiffel source code of SmartEiffel itself. &lt;br /&gt;
&lt;br /&gt;
If you want to use the menus (as explained below), you should consider typing make interactive instead of just make. If your system has no gcc installed, compile install.c yourself and run it. &lt;br /&gt;
&lt;br /&gt;
= Example for Windows =&lt;br /&gt;
&lt;br /&gt;
The first step under Windows is to get a C compiler working on your computer. If you don't already have a C compiler installed, we recommend the LCC-Win32 compiler (a free C compiler system for Windows by Jacob Navia, http://www.cs.virginia.edu/~lcc-win32/ or http://www.q-software-solutions.com/lccwin32/). &lt;br /&gt;
&lt;br /&gt;
At this point, it is assumed you have a C compiler installed. Further, we assume below that we want to install SmartEiffel in the C:\SmartEiffel directory. &lt;br /&gt;
&lt;br /&gt;
The last step is to open an explorer window, go to C:\SmartEiffel, and double-click INSTALL.EXE. &lt;br /&gt;
&lt;br /&gt;
You now go along the menu options (as described below), then you have to wait for the compiler installation to complete. Actually, it may take some time because all of the tools are recompiled from scratch using the Eiffel source code of SmartEiffel itself. &lt;br /&gt;
&lt;br /&gt;
= Example for Other Systems =&lt;br /&gt;
For elate and OpenVMS systems, you can use make elate or make openvms.&lt;br /&gt;
On other systems, the very first step for installation is to compile the install.c file in order to run it. &lt;br /&gt;
 &lt;br /&gt;
= Using the installer =&lt;br /&gt;
The installer helps you install SmartEiffel in the smartest way possible: yours :) &lt;br /&gt;
&lt;br /&gt;
Except when using the plain make on Unix/Linux (which just picks default options and goes ahead), the installer asks help from you to install SmartEiffel. Of course, in many cases, the installer is Smart enough to choose good default values; those values are but defaults, though. It's up to you to tune them, or go along with them. &lt;br /&gt;
&lt;br /&gt;
The install process is split in six phases, each of which is accessed via an entry in the main menu. The first three concern tuning the configuration; the rest deals with the installation itself. &lt;br /&gt;
&lt;br /&gt;
Note that when a phase completes gracefully, the default option is to do the next one. Of course, you can skip phases, or go back to some, at your convenience (indeed, it's a menu) :) Also note that if the installer successfully computes acceptable default values, the first default value will be to verify the configuration (phase 3). &lt;br /&gt;
&lt;br /&gt;
Furthermore, if SmartEiffel finds a valid configuration file (either at a default place or because you provided it via the SmartEiffel environment variable), the first default value will be to start the installation! You've been warned... &lt;br /&gt;
== 1. General configuration ==&lt;br /&gt;
This phase can be automatically computed. &lt;br /&gt;
&lt;br /&gt;
In that first phase, you are asked to provide: &lt;br /&gt;
&lt;br /&gt;
*The operating system SmartEiffel is to be installed on (generally the one you're currently running...); &lt;br /&gt;
*The path to the configuration file (a good idea is to accept the default; otherwise, you will always have to set the SmartEiffel environment variable); &lt;br /&gt;
*Various paths pointing to parts of the SmartEiffel installation: &lt;br /&gt;
**the path to the binaries,&lt;br /&gt;
**the path to the sys directory,&lt;br /&gt;
**the path to the short directory;&lt;br /&gt;
* Default loadpath files: it is a sub-menu that lets you see, add, and remove default loadpath files. Remember that all those loadpaths will be read at each compilation; keep your hand light! (more about that in the finder man page) &lt;br /&gt;
&lt;br /&gt;
== 2: C modes configuration ==&lt;br /&gt;
This phase can be automatically computed. &lt;br /&gt;
&lt;br /&gt;
In that menu you can add and modify C modes. Removing them are not allowed; be careful if you add a new one. Default C modes are provided, one for each assertion level. &lt;br /&gt;
&lt;br /&gt;
Each C mode lets you set the following values: &lt;br /&gt;
* The C compiler type. The currently supported lists are: &lt;br /&gt;
** '''gcc''' The GNU Compiler Collection; specifically, the C/C++ compiler.&lt;br /&gt;
** '''lcc-win32''' The C compiler developed by Jacob Navia.&lt;br /&gt;
** '''tcc''' The Tiny C Compiler, developed by Fabrice Bellard.&lt;br /&gt;
** '''wcl386''' The Open Watcom C/C++ compiler.&lt;br /&gt;
** '''bcc32''' The Borland C/C++ compiler (needs free registration).&lt;br /&gt;
** '''cc-unix''' The vanilla Unix C compiler. There are as many flavours of cc as of Unix... This one is generic; if some specific support is needed, please file an enhancement request in SmartZilla.&lt;br /&gt;
** '''cc-openvms''' The Open VMS C compiler.&lt;br /&gt;
** '''vpcc''' The Elate C compiler.&lt;br /&gt;
** '''cl'''  The Microsoft C/C++ compiler.&lt;br /&gt;
** '''sas_c'''  ?&lt;br /&gt;
** '''dice'''  ?&lt;br /&gt;
** '''vbcc'''  ?&lt;br /&gt;
** '''ccc'''  ?&lt;br /&gt;
* The C compiler path (e.g. for gcc, you can use /usr/bin/gcc-2.7.2) &lt;br /&gt;
* The C compiler options (e.g. for gcc, -ggdb3 -fomit-frame-pointers) &lt;br /&gt;
* The C linker path (e.g. for lcc, lcclnk) &lt;br /&gt;
* The C linker options (e.g. -lmylib) &lt;br /&gt;
* The SmartEiffel extra options for this mode. Only a subset of the command line options are recognised. Those are: &lt;br /&gt;
**-no_gc&lt;br /&gt;
**-no_strip&lt;br /&gt;
**-no_split&lt;br /&gt;
**-sedb&lt;br /&gt;
&lt;br /&gt;
== 3: Verification ==&lt;br /&gt;
This phase is skipped by default if the previous two were automatically computed. &lt;br /&gt;
&lt;br /&gt;
In that phase, all the options you chose are displayed again, as a verification. &lt;br /&gt;
&lt;br /&gt;
== 4: Writing the configuration file ==&lt;br /&gt;
In that phase, the configuration file is written to the place you chose in phase one. &lt;br /&gt;
&lt;br /&gt;
== 5: Installing SmartEiffel itself ==&lt;br /&gt;
This is the most important phase! Indeed, now the installer can compile the SmartEiffel tools. &lt;br /&gt;
&lt;br /&gt;
Just before starting the compilation, you are asked with which C mode the tools should be compiled. It is not always useful, except if you're in a hurry (not a good idea, that) :) &lt;br /&gt;
&lt;br /&gt;
== 6: Exit! ==&lt;br /&gt;
If you successfully installed SmartEiffel, then you can exit the installer and enjoy your new Eiffel compiler.&lt;/div&gt;</summary>
		<author><name>Cadrian</name></author>
	</entry>
	<entry>
		<id>https://wiki.liberty-eiffel.org/index.php?title=Category:Library&amp;diff=1988</id>
		<title>Category:Library</title>
		<link rel="alternate" type="text/html" href="https://wiki.liberty-eiffel.org/index.php?title=Category:Library&amp;diff=1988"/>
		<updated>2014-09-08T12:36:08Z</updated>

		<summary type="html">&lt;p&gt;Cadrian: dummy intro text&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Liberty Eiffel libraries.&lt;/div&gt;</summary>
		<author><name>Cadrian</name></author>
	</entry>
	<entry>
		<id>https://wiki.liberty-eiffel.org/index.php?title=ECMA&amp;diff=1838</id>
		<title>ECMA</title>
		<link rel="alternate" type="text/html" href="https://wiki.liberty-eiffel.org/index.php?title=ECMA&amp;diff=1838"/>
		<updated>2014-07-07T07:17:47Z</updated>

		<summary type="html">&lt;p&gt;Cadrian: /* These ISE features are also implemented: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In [http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-367.pdf ECMA-367] the ECMA committee TC39-TG4 defines an Eiffel standard. Liberty is not committed to fully implement this standard, but there will be much more of the improvements as in SmartEiffel. Liberty will implement those parts of ECMA that match the effective, efficient and simple design of previous versions of Eiffel. The parts requiring an extensive run-time model will not be currently implemented; those that needlessly complicates the language to comply to widespread programming conventions will be evaluated case-by-case.&lt;br /&gt;
&lt;br /&gt;
==These ECMA features are already implemented:==&lt;br /&gt;
&lt;br /&gt;
With small deviations:&lt;br /&gt;
* Non-conforming inheritance (but using '''insert''' instead of '''inherit {NONE}'''); see [[Typing policy]]&lt;br /&gt;
* [https://github.com/LibertyEiffel/Liberty/issues/78 Assigners] with the following deviations:&lt;br /&gt;
** VFAC is not enforced (let the standard rules of the replacing procedure call play instead)&lt;br /&gt;
** assigners are inherited with proper renames (ECMA does not explicit the rules in either way)&lt;br /&gt;
* [[task:12666|Cosmetic syntax changes]]:&lt;br /&gt;
** '''is''' is now optional&lt;br /&gt;
** '''alias''' is implemented, including '''alias &amp;quot;[]&amp;quot;'''&lt;br /&gt;
** '''note''' replaces '''indexing''' and can be placed at the start and end of a class, and at the start of a feature&lt;br /&gt;
** '''create''' replaces '''creation'''&lt;br /&gt;
* [[task:12661|generic creation]]&lt;br /&gt;
&lt;br /&gt;
==These ISE features are also implemented:==&lt;br /&gt;
&lt;br /&gt;
[[task:13103|Those features]] are not (yet) in the ECMA standard:&lt;br /&gt;
* the newer '''alias &amp;quot;()&amp;quot;'''&lt;br /&gt;
* its companion implicit tuples&lt;br /&gt;
* '''if-then-else''' expressions&lt;br /&gt;
&lt;br /&gt;
==These features are planned:==&lt;br /&gt;
* [[task:12662|generic inheritance]]&lt;br /&gt;
* [[task:12660|conversions]] - maybe with a slightly stricter interpretation&lt;br /&gt;
* [[task:12653|named TUPLE elements]]&lt;br /&gt;
* [[task:12664|void-safety]] (Liberty implementation will probably differ from ECMA)&lt;br /&gt;
* '''attached''' vs '''detached'''&lt;br /&gt;
* '''across'''&lt;br /&gt;
&lt;br /&gt;
==These ECMA features are not planned in Liberty:==&lt;br /&gt;
* No-variant agent arguments.&lt;br /&gt;
&lt;br /&gt;
==These features are not in ECMA but implemented in Liberty:==&lt;br /&gt;
* [[task:12671|inline agents are closures]]&lt;br /&gt;
* explicit agent conformance rules (see [http://www.jot.fm/issues/issue_2004_04/article7/ this JOT paper])&lt;br /&gt;
&lt;br /&gt;
==Not yet decided:==&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;TYPE[G]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; and explicit conversion&lt;br /&gt;
&lt;br /&gt;
See also [[Compatibility]].&lt;/div&gt;</summary>
		<author><name>Cadrian</name></author>
	</entry>
	<entry>
		<id>https://wiki.liberty-eiffel.org/index.php?title=ECMA&amp;diff=1837</id>
		<title>ECMA</title>
		<link rel="alternate" type="text/html" href="https://wiki.liberty-eiffel.org/index.php?title=ECMA&amp;diff=1837"/>
		<updated>2014-07-07T07:17:33Z</updated>

		<summary type="html">&lt;p&gt;Cadrian: /* These ECMA features are already implemented: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In [http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-367.pdf ECMA-367] the ECMA committee TC39-TG4 defines an Eiffel standard. Liberty is not committed to fully implement this standard, but there will be much more of the improvements as in SmartEiffel. Liberty will implement those parts of ECMA that match the effective, efficient and simple design of previous versions of Eiffel. The parts requiring an extensive run-time model will not be currently implemented; those that needlessly complicates the language to comply to widespread programming conventions will be evaluated case-by-case.&lt;br /&gt;
&lt;br /&gt;
==These ECMA features are already implemented:==&lt;br /&gt;
&lt;br /&gt;
With small deviations:&lt;br /&gt;
* Non-conforming inheritance (but using '''insert''' instead of '''inherit {NONE}'''); see [[Typing policy]]&lt;br /&gt;
* [https://github.com/LibertyEiffel/Liberty/issues/78 Assigners] with the following deviations:&lt;br /&gt;
** VFAC is not enforced (let the standard rules of the replacing procedure call play instead)&lt;br /&gt;
** assigners are inherited with proper renames (ECMA does not explicit the rules in either way)&lt;br /&gt;
* [[task:12666|Cosmetic syntax changes]]:&lt;br /&gt;
** '''is''' is now optional&lt;br /&gt;
** '''alias''' is implemented, including '''alias &amp;quot;[]&amp;quot;'''&lt;br /&gt;
** '''note''' replaces '''indexing''' and can be placed at the start and end of a class, and at the start of a feature&lt;br /&gt;
** '''create''' replaces '''creation'''&lt;br /&gt;
* [[task:12661|generic creation]]&lt;br /&gt;
&lt;br /&gt;
==These ISE features are also implemented:==&lt;br /&gt;
&lt;br /&gt;
[task:13103|Those features] are not (yet) in the ECMA standard:&lt;br /&gt;
* the newer '''alias &amp;quot;()&amp;quot;'''&lt;br /&gt;
* its companion implicit tuples&lt;br /&gt;
* '''if-then-else''' expressions&lt;br /&gt;
&lt;br /&gt;
==These features are planned:==&lt;br /&gt;
* [[task:12662|generic inheritance]]&lt;br /&gt;
* [[task:12660|conversions]] - maybe with a slightly stricter interpretation&lt;br /&gt;
* [[task:12653|named TUPLE elements]]&lt;br /&gt;
* [[task:12664|void-safety]] (Liberty implementation will probably differ from ECMA)&lt;br /&gt;
* '''attached''' vs '''detached'''&lt;br /&gt;
* '''across'''&lt;br /&gt;
&lt;br /&gt;
==These ECMA features are not planned in Liberty:==&lt;br /&gt;
* No-variant agent arguments.&lt;br /&gt;
&lt;br /&gt;
==These features are not in ECMA but implemented in Liberty:==&lt;br /&gt;
* [[task:12671|inline agents are closures]]&lt;br /&gt;
* explicit agent conformance rules (see [http://www.jot.fm/issues/issue_2004_04/article7/ this JOT paper])&lt;br /&gt;
&lt;br /&gt;
==Not yet decided:==&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;TYPE[G]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; and explicit conversion&lt;br /&gt;
&lt;br /&gt;
See also [[Compatibility]].&lt;/div&gt;</summary>
		<author><name>Cadrian</name></author>
	</entry>
	<entry>
		<id>https://wiki.liberty-eiffel.org/index.php?title=ECMA&amp;diff=1836</id>
		<title>ECMA</title>
		<link rel="alternate" type="text/html" href="https://wiki.liberty-eiffel.org/index.php?title=ECMA&amp;diff=1836"/>
		<updated>2014-07-07T07:17:19Z</updated>

		<summary type="html">&lt;p&gt;Cadrian: update for Bell&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In [http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-367.pdf ECMA-367] the ECMA committee TC39-TG4 defines an Eiffel standard. Liberty is not committed to fully implement this standard, but there will be much more of the improvements as in SmartEiffel. Liberty will implement those parts of ECMA that match the effective, efficient and simple design of previous versions of Eiffel. The parts requiring an extensive run-time model will not be currently implemented; those that needlessly complicates the language to comply to widespread programming conventions will be evaluated case-by-case.&lt;br /&gt;
&lt;br /&gt;
==These ECMA features are already implemented:==&lt;br /&gt;
&lt;br /&gt;
With small deviations:&lt;br /&gt;
* Non-conforming inheritance (but using '''insert''' instead of '''inherit {NONE}'''); see [[Typing policy]]&lt;br /&gt;
* [https://github.com/LibertyEiffel/Liberty/issues/78 Assigners] with the following deviations:&lt;br /&gt;
** VFAC is not enforced (let the standard rules of the replacing procedure call play instead)&lt;br /&gt;
** assigners are inherited with proper renames (ECMA does not explicit the rules in either way)&lt;br /&gt;
* [[task:12666|Cosmetic syntax changes]:&lt;br /&gt;
** '''is''' is now optional&lt;br /&gt;
** '''alias''' is implemented, including '''alias &amp;quot;[]&amp;quot;'''&lt;br /&gt;
** '''note''' replaces '''indexing''' and can be placed at the start and end of a class, and at the start of a feature&lt;br /&gt;
** '''create''' replaces '''creation'''&lt;br /&gt;
* [[task:12661|generic creation]]&lt;br /&gt;
&lt;br /&gt;
==These ISE features are also implemented:==&lt;br /&gt;
&lt;br /&gt;
[task:13103|Those features] are not (yet) in the ECMA standard:&lt;br /&gt;
* the newer '''alias &amp;quot;()&amp;quot;'''&lt;br /&gt;
* its companion implicit tuples&lt;br /&gt;
* '''if-then-else''' expressions&lt;br /&gt;
&lt;br /&gt;
==These features are planned:==&lt;br /&gt;
* [[task:12662|generic inheritance]]&lt;br /&gt;
* [[task:12660|conversions]] - maybe with a slightly stricter interpretation&lt;br /&gt;
* [[task:12653|named TUPLE elements]]&lt;br /&gt;
* [[task:12664|void-safety]] (Liberty implementation will probably differ from ECMA)&lt;br /&gt;
* '''attached''' vs '''detached'''&lt;br /&gt;
* '''across'''&lt;br /&gt;
&lt;br /&gt;
==These ECMA features are not planned in Liberty:==&lt;br /&gt;
* No-variant agent arguments.&lt;br /&gt;
&lt;br /&gt;
==These features are not in ECMA but implemented in Liberty:==&lt;br /&gt;
* [[task:12671|inline agents are closures]]&lt;br /&gt;
* explicit agent conformance rules (see [http://www.jot.fm/issues/issue_2004_04/article7/ this JOT paper])&lt;br /&gt;
&lt;br /&gt;
==Not yet decided:==&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;TYPE[G]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; and explicit conversion&lt;br /&gt;
&lt;br /&gt;
See also [[Compatibility]].&lt;/div&gt;</summary>
		<author><name>Cadrian</name></author>
	</entry>
	<entry>
		<id>https://wiki.liberty-eiffel.org/index.php?title=Author_guidelines&amp;diff=1835</id>
		<title>Author guidelines</title>
		<link rel="alternate" type="text/html" href="https://wiki.liberty-eiffel.org/index.php?title=Author_guidelines&amp;diff=1835"/>
		<updated>2014-07-07T06:31:10Z</updated>

		<summary type="html">&lt;p&gt;Cadrian: liberty-eiffel@gnu.org&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Concise usage guide for contributors to the [[Table of contents|LibertyEiffelWiki]].&lt;br /&gt;
&lt;br /&gt;
Everyone is invited to participate in the creation of the documentation of LibertyEiffel in this wiki. Just ask on the [[Get in touch#Mailing list|mailing list]] [mailto:liberty-eiffel@gnu.org liberty-eiffel@gnu.org] for an account.&lt;br /&gt;
&lt;br /&gt;
The text below is from SmartEiffel wiki and not up to date.&lt;br /&gt;
[[Category:Smarteiffel]]&lt;br /&gt;
&amp;lt;div id=&amp;quot;GoalsOfTheSmartEiffelWiki&amp;quot;&amp;gt;&lt;br /&gt;
==Objectives of the SmartEiffel Wiki==&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Beyond being a place of research, exchange and sharing of information,&lt;br /&gt;
the principle objective of the [[Main Page|SmartEiffelWiki]] consists of producing a real book that can be printed, if desired, on paper.&lt;br /&gt;
The program capable of verifying and then automatically extracting the Grand SmartEiffel Book doesn't exist yet, but if we follow a few conventions and editing rules that will become possible.&lt;br /&gt;
Of course, the Grand SmartEiffel Book will always be available in electronic form.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;TopicsOfTheBook&amp;quot;&amp;gt;&lt;br /&gt;
==The topics addressed (and what should be addressed) in the Grand Book==&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
First and foremost, that which concerns Eiffel and SmartEiffel.&lt;br /&gt;
Without pretending otherwise, it's a matter of promoting Eiffel as well as programming with contracts in Eiffel.&lt;br /&gt;
And equally it's to educate about Eiffel and to make Eiffel known.&lt;br /&gt;
All topics tied to Software Engineering are equally welcome in the Grand SmartEiffel Book: testing techniques with Eiffel,&lt;br /&gt;
program validation with Eiffel, object oriented programming concepts with Eiffel, (etc. with Eiffel).&lt;br /&gt;
&lt;br /&gt;
If the topic that you wish to address in the Grand SmartEiffel Book doesn't have anything to do with Eiffel, don't be surprised if perchance your article is rejected. You have been warned!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;AdvicesAndRules&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Conventions that we should follow==&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
A certain number of conventions to follow have already been mentioned in the&lt;br /&gt;
[[FAQ#SmartEiffelWiki|FAQ of the Grand SmartEiffel Book]].&lt;br /&gt;
The conventions and rules which follow should be equally respected.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;TableOfContents&amp;quot;&amp;gt;&lt;br /&gt;
===Place each page in the &amp;quot;Table of contents&amp;quot;===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Except for purely interactive pages, the '''vast majority''' of pages should&lt;br /&gt;
find their place in the &amp;quot;[[Table of contents]]&amp;quot; page.&lt;br /&gt;
In fact, only the pages referenced in the &amp;quot;[[Table of contents]]&amp;quot; will become part of the printed version of the Grand SmartEiffel Book.&lt;br /&gt;
&lt;br /&gt;
Of course, a Wiki is by its nature a place of discussion and exchange.&lt;br /&gt;
Certain pages should therefore be utilized for these interactions and exchanges and should not be included in the Grand SmartEiffel Book.&lt;br /&gt;
So, the pages of the SmartEiffelWiki will be classified into two categories.&lt;br /&gt;
The [[:Category:Book|Book]] category for pages to go into the Grand SmartEiffel Book.&lt;br /&gt;
The [[:Category:Community|Community]] category for pages intended, for example, &lt;br /&gt;
for news, discussions and/or exchanges in progress.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;PivotIsEnglish&amp;quot;&amp;gt;&lt;br /&gt;
===Using English as the pivot language===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Besides [[FAQ#PageNaming|page names]], it is simpler to always&lt;br /&gt;
use the same language, and so to use English, for all similar&lt;br /&gt;
page items like navigation tags.&lt;br /&gt;
This is a [[#PivotIsEnglish|good example]] with respect to this&lt;br /&gt;
rule.&lt;br /&gt;
We note that following this rule is nearly as important as following&lt;br /&gt;
the rule for having page names in English.&lt;br /&gt;
Like page names, navigation tags can also be made part&lt;br /&gt;
of the URL and so also serve as a means of correspondence between different &lt;br /&gt;
translations.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;AvoidExternalLinks&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Avoid external links===&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
Bearing in mind that we wish to be able to print the book, it is&lt;br /&gt;
preferable to limit the use of external links as much as possible.&lt;br /&gt;
We will use internal links as much as possible.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;LanguageSync&amp;quot;&amp;gt;&lt;br /&gt;
===Linking between different languages===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
It's up to you whether we have a translation in your favorite language.&lt;br /&gt;
Nevertheless, it is desirable to always ensure that a minimum of linkage&lt;br /&gt;
exists between pages in different languages.&lt;br /&gt;
Of course, the utility that will be responsible for producing the paper document  derived from the on-line Grand SmartEiffel book will be capable of letting us know that, for example, section numbers in the French version aren't in agreement with the section numbers in the English version.&lt;br /&gt;
Certainly, the utility will be able to warn us of the error, but it would be a day or two (or more) before one of us would get around to making the correction ... manually.&lt;br /&gt;
It's therefore asked that each of us use without exception the radio buttons that permit going between one language in order to minimize the amount of manual rework needed later.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;Style&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Corrections concerning style===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Of course, it is not always necessary to ask the author's permission to correct spelling or an error on a page!&lt;br /&gt;
&lt;br /&gt;
With regard to changes converning style or the turn of a phrase,&lt;br /&gt;
we propose to adopt a preference for a style that is relatively neutral and fairly simple, above all as clear as possible, and finally, not too pedantic.&lt;br /&gt;
Don't lose the point of view that the goal of the Grand SmartEiffel Book is to&lt;br /&gt;
[[#TopicsOfTheBook|promote and educate about Eiffel]] and not to be a candidate for the Pulitzer prize.&lt;br /&gt;
&lt;br /&gt;
Finally, it's good to keep in mind that it's always possible to return later to make style modifications with a few clicks of the mouse.&lt;br /&gt;
The simplest means to convince an author of the pertinence of a modification often consists of making the change directly in the text.&lt;br /&gt;
&lt;br /&gt;
To finish, we note that a bit of humor never did anyone any harm.&lt;br /&gt;
It's up to you to find your own unique writing style.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;Bibliography&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Bibliographical References===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
The page that contains the&lt;br /&gt;
[[Bibliography|bibliographic references]] must be&lt;br /&gt;
exactly the same for all languages: same number of entries,&lt;br /&gt;
identical tags, and classification order completely&lt;br /&gt;
identical.&lt;br /&gt;
Here is the format that is used in the text of [[Bibliography#ETL 1992|[ETL 1992]]] &lt;br /&gt;
for citations.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;ManualGlossary&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===The manual index and the glossary===&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
The [[Manual index|manual index]] as well as the [[Glossary|glossary]] are understood to be special pages because they are not in the same order when one changes languages.&lt;br /&gt;
For example, the glossary is put into alphabetical order according to the language of the page; the &lt;br /&gt;
terms defined are not put into the same order for all languages.&lt;br /&gt;
&lt;br /&gt;
That being so, like for the other pages, the navigation tags must be common.&lt;br /&gt;
For example, there must be as many navigation tags in the French glossary as in the English glossary.&lt;br /&gt;
Like everywhere else, navigation tags are [[#PivotIsEnglish|always in English]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;InCaseOfConflict&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===In case of any sort of conflict between authors===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
In the case of multiple authors not being in agreement among themselves as to what should be written, they must continue to discuss among themselves as well as with the entire community in order to arrive at a consensus. &lt;br /&gt;
&lt;br /&gt;
In the event of an impasse, the SmartEiffel team has the final say as to what decision to make or what to do.&lt;br /&gt;
&lt;br /&gt;
Finally, if the SmartEiffel team itself cannot come to a consensus, &lt;br /&gt;
[[Utilisateur:Colnet|Dominique Colnet]] has the last word.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;LastWord&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Final rule==&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Don't hesitate to complete or amend these rules and conventions.&lt;br /&gt;
And above all, '''thanks in advance for your participation''' to the Grand SmartEiffel Book.&lt;/div&gt;</summary>
		<author><name>Cadrian</name></author>
	</entry>
	<entry>
		<id>https://wiki.liberty-eiffel.org/index.php?title=Garbage_collector&amp;diff=1825</id>
		<title>Garbage collector</title>
		<link rel="alternate" type="text/html" href="https://wiki.liberty-eiffel.org/index.php?title=Garbage_collector&amp;diff=1825"/>
		<updated>2014-01-05T19:21:24Z</updated>

		<summary type="html">&lt;p&gt;Cadrian: /* Native GC */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Liberty Eiffel provides two garbage collector implementations.&lt;br /&gt;
&lt;br /&gt;
Most core libraries are also well equipped to minimize memory requirements in the case that ''no'' GC is used.&lt;br /&gt;
&lt;br /&gt;
== Native GC ==&lt;br /&gt;
&lt;br /&gt;
The native GC is generated at the same time as the rest of the code, allowing efficient use of the memory by splitting it in chunks of known size.&lt;br /&gt;
&lt;br /&gt;
[[Papers#Compiler_Support_to_Customize_the_Mark_and_Sweep_Algorithm.|See this paper]] for details.&lt;br /&gt;
&lt;br /&gt;
From the source code:&lt;br /&gt;
&lt;br /&gt;
The `mark_stack_and_registers' C function is called by the Garbage&lt;br /&gt;
Collector (GC) of SmartEiffel. It has to be customized for some systems,&lt;br /&gt;
but also for some C compilers. This file provides some definitions in the&lt;br /&gt;
end and has to be completed for systems which need specific work.&lt;br /&gt;
&lt;br /&gt;
On some architectures, addresses increase as the stack grows; or,&lt;br /&gt;
conversely, addresses decrease as the stack grows. A C compiler may be&lt;br /&gt;
clever enough to hide some root object inside registers. Unfortunately all&lt;br /&gt;
registers are not always accessible via the C `setjmp' function!&lt;br /&gt;
&lt;br /&gt;
Thus, in order to be able to use the GC on your architecture/C-compiler,&lt;br /&gt;
you have to provide the correct `mark_stack_and_registers' function.&lt;br /&gt;
&lt;br /&gt;
What is the `mark_stack_and_registers' function supposed to do?  The&lt;br /&gt;
`mark_stack_and_registers' function is supposed to notify the GC with all&lt;br /&gt;
the possible roots one can find in the C stack and registers by calling the&lt;br /&gt;
`gc_mark' function. A root is an object which must not be collected.  The&lt;br /&gt;
SmartEiffel GC already knows about some root objects like once function&lt;br /&gt;
results or manifest strings. The `mark_stack_and_registers' function has to&lt;br /&gt;
notify the other possible roots. Obviously, one can find in the C stack any&lt;br /&gt;
kind of adresses, but the `gc_mark' function is clever enough to determine&lt;br /&gt;
if the passed pointer is an Eiffel object or not.  When the passed pointer&lt;br /&gt;
reaches some Eiffel object, this object as well as its descendant(s) are&lt;br /&gt;
automatically marked as un-collectable.&lt;br /&gt;
&lt;br /&gt;
In order to provide the most appropriate `mark_stack_and_registers'&lt;br /&gt;
function, the very first question is to know about the way the C stack is&lt;br /&gt;
managed (addresses of the stack may increase or decrease as the C stack&lt;br /&gt;
grows). The DEFAULT BEHAVIOUR FOR UNKNOWN SYSTEMS is to consider ADDRESSES&lt;br /&gt;
DECREASE AS THE STACK GROWS, as it's the most common case.  The global C&lt;br /&gt;
variable `stack_bottom' is set with some pointer which is supposed to be&lt;br /&gt;
the bottom of the stack (this variable is automatically initialized in the&lt;br /&gt;
C main function).  Note: using the current stack pointer inside&lt;br /&gt;
`mark_stack_and_registers', it is quite obvious to determine if addresses&lt;br /&gt;
increase or not as the C stack grows.  Note2: on some systems, the stack is&lt;br /&gt;
not in contiguous addresses. In such case, `mark_stack_and_registers' has&lt;br /&gt;
to go through all the stack fragments.&lt;br /&gt;
&lt;br /&gt;
Some roots may be stored only in registers and not in the C stack.  In&lt;br /&gt;
order to reach the registers as well, the first attempt is to use setjmp,&lt;br /&gt;
in the hope that setjmp will save registers in the stack!  Note: this&lt;br /&gt;
technique do not work on processors using windows registers (such as sparc&lt;br /&gt;
processors).&lt;br /&gt;
&lt;br /&gt;
== BDW GC ==&lt;br /&gt;
&lt;br /&gt;
The Boehm-Demers-Weiser conservative collector is also supported. The minimal required version is currently 7.2.&lt;br /&gt;
&lt;br /&gt;
See [https://github.com/ivmai/bdwgc/ the github repository]&lt;br /&gt;
&lt;br /&gt;
The missing parts are:&lt;br /&gt;
* a lot of testing (esp. dynamic arrays, weak references, agents)&lt;br /&gt;
* total GC cycle at the end of the program (Eiffel requires that all the objects are disposed at exit, and some programs or libraries rely on that behaviour, usually for checks — is it important?)&lt;br /&gt;
* Liberty does not make use of the parallel or incremental collectors&lt;/div&gt;</summary>
		<author><name>Cadrian</name></author>
	</entry>
	<entry>
		<id>https://wiki.liberty-eiffel.org/index.php?title=Garbage_collector&amp;diff=1824</id>
		<title>Garbage collector</title>
		<link rel="alternate" type="text/html" href="https://wiki.liberty-eiffel.org/index.php?title=Garbage_collector&amp;diff=1824"/>
		<updated>2014-01-05T18:36:00Z</updated>

		<summary type="html">&lt;p&gt;Cadrian: /* BDW GC */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Liberty Eiffel provides two garbage collector implementations.&lt;br /&gt;
&lt;br /&gt;
Most core libraries are also well equipped to minimize memory requirements in the case that ''no'' GC is used.&lt;br /&gt;
&lt;br /&gt;
== Native GC ==&lt;br /&gt;
&lt;br /&gt;
The native GC is generated at the same time as the rest of the code, allowing efficient use of the memory by splitting it in chunks of known size.&lt;br /&gt;
&lt;br /&gt;
[[Papers#Compiler_Support_to_Customize_the_Mark_and_Sweep_Algorithm.|See this paper]] for details.&lt;br /&gt;
&lt;br /&gt;
== BDW GC ==&lt;br /&gt;
&lt;br /&gt;
The Boehm-Demers-Weiser conservative collector is also supported. The minimal required version is currently 7.2.&lt;br /&gt;
&lt;br /&gt;
See [https://github.com/ivmai/bdwgc/ the github repository]&lt;br /&gt;
&lt;br /&gt;
The missing parts are:&lt;br /&gt;
* a lot of testing (esp. dynamic arrays, weak references, agents)&lt;br /&gt;
* total GC cycle at the end of the program (Eiffel requires that all the objects are disposed at exit, and some programs or libraries rely on that behaviour, usually for checks — is it important?)&lt;br /&gt;
* Liberty does not make use of the parallel or incremental collectors&lt;/div&gt;</summary>
		<author><name>Cadrian</name></author>
	</entry>
	<entry>
		<id>https://wiki.liberty-eiffel.org/index.php?title=Garbage_collector&amp;diff=1823</id>
		<title>Garbage collector</title>
		<link rel="alternate" type="text/html" href="https://wiki.liberty-eiffel.org/index.php?title=Garbage_collector&amp;diff=1823"/>
		<updated>2014-01-04T21:48:31Z</updated>

		<summary type="html">&lt;p&gt;Cadrian: /* Native GC */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Liberty Eiffel provides two garbage collector implementations.&lt;br /&gt;
&lt;br /&gt;
Most core libraries are also well equipped to minimize memory requirements in the case that ''no'' GC is used.&lt;br /&gt;
&lt;br /&gt;
== Native GC ==&lt;br /&gt;
&lt;br /&gt;
The native GC is generated at the same time as the rest of the code, allowing efficient use of the memory by splitting it in chunks of known size.&lt;br /&gt;
&lt;br /&gt;
[[Papers#Compiler_Support_to_Customize_the_Mark_and_Sweep_Algorithm.|See this paper]] for details.&lt;br /&gt;
&lt;br /&gt;
== BDW GC ==&lt;br /&gt;
&lt;br /&gt;
The Boehm-Demers-Weiser conservative collector is also supported. The minimal required version is currently 7.2.&lt;br /&gt;
&lt;br /&gt;
See [https://github.com/ivmai/bdwgc/ the github repository]&lt;br /&gt;
&lt;br /&gt;
The missing parts are:&lt;br /&gt;
* a lot of testing (esp. dynamic arrays, weak references, agents)&lt;br /&gt;
* total GC cycle at the end of the program (Eiffel requires that all the objects are disposed at exit, and some programs or libraries rely on that behaviour)&lt;br /&gt;
* Liberty does not make use of the parallel or incremental collectors&lt;/div&gt;</summary>
		<author><name>Cadrian</name></author>
	</entry>
	<entry>
		<id>https://wiki.liberty-eiffel.org/index.php?title=Garbage_collector&amp;diff=1822</id>
		<title>Garbage collector</title>
		<link rel="alternate" type="text/html" href="https://wiki.liberty-eiffel.org/index.php?title=Garbage_collector&amp;diff=1822"/>
		<updated>2014-01-04T21:43:20Z</updated>

		<summary type="html">&lt;p&gt;Cadrian: Created page with &amp;quot;Liberty Eiffel provides two garbage collector implementations.  Most core libraries are also well equipped to minimize memory requirements in the case that ''no'' GC is used. ...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Liberty Eiffel provides two garbage collector implementations.&lt;br /&gt;
&lt;br /&gt;
Most core libraries are also well equipped to minimize memory requirements in the case that ''no'' GC is used.&lt;br /&gt;
&lt;br /&gt;
== Native GC ==&lt;br /&gt;
&lt;br /&gt;
The native GC is generated at the same time as the rest of the code, allowing efficient use of the memory by splitting it in chunks of known size.&lt;br /&gt;
&lt;br /&gt;
See [http://www.liberty-eiffel.org/papers/ismm98.pdf this paper] for details.&lt;br /&gt;
&lt;br /&gt;
== BDW GC ==&lt;br /&gt;
&lt;br /&gt;
The Boehm-Demers-Weiser conservative collector is also supported. The minimal required version is currently 7.2.&lt;br /&gt;
&lt;br /&gt;
See [https://github.com/ivmai/bdwgc/ the github repository]&lt;br /&gt;
&lt;br /&gt;
The missing parts are:&lt;br /&gt;
* a lot of testing (esp. dynamic arrays, weak references, agents)&lt;br /&gt;
* total GC cycle at the end of the program (Eiffel requires that all the objects are disposed at exit, and some programs or libraries rely on that behaviour)&lt;br /&gt;
* Liberty does not make use of the parallel or incremental collectors&lt;/div&gt;</summary>
		<author><name>Cadrian</name></author>
	</entry>
	<entry>
		<id>https://wiki.liberty-eiffel.org/index.php?title=Release_Notes_(Versions_history)&amp;diff=1817</id>
		<title>Release Notes (Versions history)</title>
		<link rel="alternate" type="text/html" href="https://wiki.liberty-eiffel.org/index.php?title=Release_Notes_(Versions_history)&amp;diff=1817"/>
		<updated>2013-12-04T10:05:46Z</updated>

		<summary type="html">&lt;p&gt;Cadrian: /* Adler (not yet released, named after Charles Adler, Jr.) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== LibertyEiffel (latest release first) ==&lt;br /&gt;
For upcoming releases see the [[upcoming releases|list of names]].&lt;br /&gt;
&lt;br /&gt;
=== Adler (2013.11, named after [http://en.wikipedia.org/wiki/Charles_Adler,_Jr. Charles Adler, Jr.]) ===&lt;br /&gt;
* First release as LibertyEiffel&lt;br /&gt;
* User-visible changes:&lt;br /&gt;
** Added [[library_class:NATURAL_8|&amp;lt;tt&amp;gt;NATURAL_8&amp;lt;/tt&amp;gt;]], [[library_class:NATURAL_16|&amp;lt;tt&amp;gt;NATURAL_16&amp;lt;/tt&amp;gt;]], [[library_class:NATURAL_32|&amp;lt;tt&amp;gt;NATURAL_32&amp;lt;/tt&amp;gt;]], and [[library_class:NATURAL_64|&amp;lt;tt&amp;gt;NATURAL_64&amp;lt;/tt&amp;gt;]] classes. See &amp;lt;tt&amp;gt;tutorial/natural.e&amp;lt;/tt&amp;gt; for examples.&lt;br /&gt;
** Even low-level features (i.e. &amp;lt;tt&amp;gt;external &amp;quot;built_in&amp;quot;&amp;lt;/tt&amp;gt;) are now checking their assertions. As an example, division by zero is now checked by assertions.&lt;br /&gt;
** Inlined dynamic dispatch for better performance&lt;br /&gt;
** A missing export clause is deprecated. Use &amp;lt;tt&amp;gt;{ANY}&amp;lt;/tt&amp;gt; instead.&lt;br /&gt;
** New core libraries: cli, json, log, parse (beware, those libraries are not yet tuned to be used without GC)&lt;br /&gt;
** Improved libraries: string (with notably a new [[library_class:FIXED_STRING|&amp;lt;tt&amp;gt;FIXED_STRING&amp;lt;/tt&amp;gt;]] class)&lt;br /&gt;
** Wrapper libraries: gtk, gdk, readline, ffi...&lt;br /&gt;
** A new tool that can generate mocks to help unit testing&lt;br /&gt;
** [http://www.hpl.hp.com/personal/Hans_Boehm/gc/ BDW] GC support&lt;br /&gt;
* Developer changes:&lt;br /&gt;
** The web site now belongs to the repository&lt;br /&gt;
** Automatic testing tools (ET on the web, and &amp;lt;tt&amp;gt;watch_eiffeltest.sh&amp;lt;/tt&amp;gt; in the shell)&lt;br /&gt;
** Automatic Debian packages generation&lt;br /&gt;
* Known bugs:&lt;br /&gt;
** BDW GC is not well tested; currently weak references seem not to work properly; and the GC is not run at program exit (it should run all finalizers)&lt;br /&gt;
** Sometimes SmartEiffel's native GC behaves wrongly, analysis is welcome&lt;br /&gt;
** Some of the newer core libraries do not work very well when there is no GC&lt;br /&gt;
** See the [https://savannah.gnu.org/bugs/?group=liberty-eiffel bugs page]&lt;br /&gt;
&lt;br /&gt;
== SmartEiffel (all releases which are predecessors of Liberty) ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Release 2.3 [Antoine-Auguste Parmentier] - Wednesday July 11th 2007 ===&lt;br /&gt;
&lt;br /&gt;
Again, a lot of novelties for this release:&lt;br /&gt;
&lt;br /&gt;
* New [[Typing policy|typing rules]] have been revisited and are now crystal clear. See [[Typing policy|this page]] for details.&lt;br /&gt;
* Implemented a new [[class loading]] algorithm, which takes into account the &amp;quot;distance&amp;quot; between classes, thus reifying the notion of clusters and sub-clusters. Everything is transparent, there is no new keyword to learn.&lt;br /&gt;
* Installation: SmartEiffel now provides a streamlined installer for package maintainers. Of course, the interactive installer is still available via &amp;quot;make interactive&amp;quot;.&lt;br /&gt;
* Configuration: in the same spirit to simplify package maintainers' life, the configuration &amp;quot;file&amp;quot; can now be a directory.&lt;br /&gt;
* The new [[eiffeltest]] tool is now available too.&lt;br /&gt;
* Old style &amp;quot;rename.se&amp;quot; files are no longer considered. You can now use the same class name in different clusters.&lt;br /&gt;
* The &amp;lt;tt&amp;gt;NONE&amp;lt;/tt&amp;gt; type mark must no longer be used. Just use an empty &amp;lt;tt&amp;gt;{}&amp;lt;/tt&amp;gt; exportation list to indicate that the corresponding following features are not exported. This is better for newcomers.&lt;br /&gt;
* In class [[library_class:COLLECTION|&amp;lt;tt&amp;gt;COLLECTION&amp;lt;/tt&amp;gt;]], features &amp;lt;tt&amp;gt;index_of&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;fast_index_of&amp;lt;/tt&amp;gt; now have an extra argument to indicate where the search must start (as in class [[library_class:STRING|&amp;lt;tt&amp;gt;STRING&amp;lt;/tt&amp;gt;]]). See also &amp;lt;tt&amp;gt;first_index_of&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;fast_first_index_of&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* Microsoft's Visual C++ 2005 compiler is now supported.&lt;br /&gt;
* The debugging sections can be turned on with the new &amp;lt;tt&amp;gt;-debug&amp;lt;/tt&amp;gt; option, in all compilation modes other than &amp;lt;tt&amp;gt;-boost&amp;lt;/tt&amp;gt;. The &amp;lt;tt&amp;gt;-debug_check&amp;lt;/tt&amp;gt; mode has been deprecated.&lt;br /&gt;
* The regular expression library has been added.&lt;br /&gt;
* Sequencer's &amp;lt;tt&amp;gt;READY_DESCRIPTION&amp;lt;/tt&amp;gt; is now renamed as [[library_class:EVENTS_SET|&amp;lt;tt&amp;gt;EVENTS_SET&amp;lt;/tt&amp;gt;]] and has a unified interface for all kinds of events.&lt;br /&gt;
* Some work on the network cluster.&lt;br /&gt;
* Last but not least: SmartEiffel now has a logo that will help it fly!&lt;br /&gt;
&lt;br /&gt;
=== Release 2.2 [Pomme de terre] - Monday December 19th, 2005 ===&lt;br /&gt;
&lt;br /&gt;
Again, a lot of novelties for this release.&lt;br /&gt;
&lt;br /&gt;
First, the new [[eiffeldoc]] command has been completely revisited and is now part of the delivery. That command is 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.&lt;br /&gt;
&lt;br /&gt;
The second important novelty is that we now have a brand new introspection mechanism which allows us to implement the new persistency facility.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
* Added a new command, [[se]], which is meant to be the only command you ever need to put in your PATH!&lt;br /&gt;
* Added a new command, [[eiffeldoc]], that you can use to document your project. Currently only HTML output is supported.&lt;br /&gt;
* The [[plugins]] system is vastly improved and should now be preferred over older external specifications. See [[plugins|this page]] for details.&lt;br /&gt;
* Improved error messages legibility in order to avoid missunderstanding.&lt;br /&gt;
* Added a new OpenGL widget for Vision. Unix-based programs only have to inherit from [[library_class:UNIX_GL_WIDGET|&amp;lt;tt&amp;gt;UNIX_GL_WIDGET&amp;lt;/tt&amp;gt;]] and define all the OpenGL related routines.&lt;br /&gt;
* Added new abstract class named [[library_class:BIJECTIVE_DICTIONARY|&amp;lt;tt&amp;gt;BIJECTIVE_DICTIONARY&amp;lt;/tt&amp;gt;]] which is actually a replacement for the now obsolete [[library_class:DOUBLE_DICTIONARY|&amp;lt;tt&amp;gt;DOUBLE_DICTIONARY&amp;lt;/tt&amp;gt;]] class. At time being, there is only one implementation of [[library_class:BIJECTIVE_DICTIONARY|&amp;lt;tt&amp;gt;BIJECTIVE_DICTIONARY&amp;lt;/tt&amp;gt;]] named [[library_class:HASHED_BIJECTIVE_DICTIONARY|&amp;lt;tt&amp;gt;HASHED_BIJECTIVE_DICTIONARY&amp;lt;/tt&amp;gt;]] (a hash_code-based implementation).&lt;br /&gt;
* Removed class &amp;lt;tt&amp;gt;GENERAL&amp;lt;/tt&amp;gt; as well as some obsolete features of that class. In the past, &amp;lt;tt&amp;gt;GENERAL&amp;lt;/tt&amp;gt; was inherited by [[library_class:PLATFORM|&amp;lt;tt&amp;gt;PLATFORM&amp;lt;/tt&amp;gt;]] which was inherited by [[library_class:ANY.|&amp;lt;tt&amp;gt;ANY.&amp;lt;/tt&amp;gt;]] Now, [[library_class:ANY|&amp;lt;tt&amp;gt;ANY&amp;lt;/tt&amp;gt;]] has no more parent at all (no conforming parent and no non-conforming parents). The removal of &amp;lt;tt&amp;gt;GENERAL&amp;lt;/tt&amp;gt; is better for newcomers because they just need to know about [[library_class:ANY|&amp;lt;tt&amp;gt;ANY&amp;lt;/tt&amp;gt;]] and it is also better for the underlying model consistency. Because we have now removed &amp;lt;tt&amp;gt;equals&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;clone&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;deep_clone&amp;lt;/tt&amp;gt; you must now only use &amp;lt;tt&amp;gt;is_equal&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;twin&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;deep_twin&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;is_deep_equal&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;standard_is_equal&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;standard_twin&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* Removed the &amp;lt;tt&amp;gt;file_tools&amp;lt;/tt&amp;gt; feature from [[library_class:ANY.|&amp;lt;tt&amp;gt;ANY.&amp;lt;/tt&amp;gt;]] Also note that all other file manipulation features from [[library_class:ANY|&amp;lt;tt&amp;gt;ANY&amp;lt;/tt&amp;gt;]] are now obsolete (use the class [[library_class:FILE_TOOLS|&amp;lt;tt&amp;gt;FILE_TOOLS&amp;lt;/tt&amp;gt;]] instead).&lt;br /&gt;
* No more feature &amp;lt;tt&amp;gt;argument&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;argument_count&amp;lt;/tt&amp;gt; in class [[library_class:ANY.|&amp;lt;tt&amp;gt;ANY.&amp;lt;/tt&amp;gt;]] In order to access command-line arguments, just insert the class [[library_class:ARGUMENTS.|&amp;lt;tt&amp;gt;ARGUMENTS.&amp;lt;/tt&amp;gt;]]&lt;br /&gt;
* The &amp;lt;tt&amp;gt;-case_insensitive&amp;lt;/tt&amp;gt; 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 legibility of our code.&lt;br /&gt;
* You now get a warning for using the all lower-case spelling of the keywords &amp;lt;tt&amp;gt;current&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;result&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;void&amp;lt;/tt&amp;gt;. Please use the initial-caps spellings &amp;lt;tt&amp;gt;Current&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;Result&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;Void&amp;lt;/tt&amp;gt; instead.&lt;br /&gt;
* 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.&lt;br /&gt;
* 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.&lt;br /&gt;
* 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.&lt;br /&gt;
* 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.&lt;br /&gt;
* Feature &amp;lt;tt&amp;gt;is_equal&amp;lt;/tt&amp;gt; is now redefined in class [[library_class:HASHABLE|&amp;lt;tt&amp;gt;HASHABLE&amp;lt;/tt&amp;gt;]]. The new definition adds an ensure then assertion to check consistency with the &amp;lt;tt&amp;gt;hash_code&amp;lt;/tt&amp;gt; function. Note that the redefinition is deferred to force clients to select their preferred implementation.&lt;br /&gt;
* Added a new feature called &amp;lt;tt&amp;gt;set_storage&amp;lt;/tt&amp;gt; in class [[library_class:STRING.|&amp;lt;tt&amp;gt;STRING.&amp;lt;/tt&amp;gt;]] This low-level feature is only exported to [[library_class:STRING_HANDLER|&amp;lt;tt&amp;gt;STRING_HANDLER&amp;lt;/tt&amp;gt;]].&lt;br /&gt;
* Added a new features in class [[library_class:COLLECTION|&amp;lt;tt&amp;gt;COLLECTION&amp;lt;/tt&amp;gt;]]: &amp;lt;tt&amp;gt;remove_head&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;remove_tail&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;reverse_index_of&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;last_index_of&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;first_index_of&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;fast_reverse_index_of&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;fast_last_index_of&amp;lt;/tt&amp;gt;&lt;br /&gt;
* Added a new features in class [[library_class:DICTIONARY|&amp;lt;tt&amp;gt;DICTIONARY&amp;lt;/tt&amp;gt;]]: &amp;lt;tt&amp;gt;fast_reference_at&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;fast_put&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;fast_remove&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* Added a new Eiffel mode description for the Vim text editor. This mode is compatible with our emacs mode. File &amp;quot;misc/eiffel.vim&amp;quot; is for the Vim editor while file &amp;quot;misc/eiffel.el&amp;quot; is for emacs.&lt;br /&gt;
&lt;br /&gt;
=== Release 2.1 [Poirot] - Wednesday February 9th, 2005 ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
More details about changes from 2.0:&lt;br /&gt;
&lt;br /&gt;
* 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 &amp;quot;inherit&amp;quot; keyword. After that, you can use the &amp;quot;insert&amp;quot; keyword followed by the list of non-conforming parents. Like in the previous release, when a class has no &amp;quot;inherit&amp;quot; clause and no &amp;quot;insert&amp;quot; clause, the default insert ANY is automatically added.&lt;br /&gt;
The new compiler does not warn you anymore when multiple conforming paths 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).&lt;br /&gt;
* We introduced a brand new notation to generalize the old manifest array notation. You can now create an [[library_class:ARRAY|&amp;lt;tt&amp;gt;ARRAY&amp;lt;/tt&amp;gt;]] initialized with letters as follows:&lt;br /&gt;
        {ARRAY[CHARACTER] 1, &amp;lt;&amp;lt; 'a', 'b', 'c', 'd' &amp;gt;&amp;gt; }&lt;br /&gt;
or a LINKED_LIST doing:&lt;br /&gt;
        {LINKED_LIST[CHARACTER] &amp;lt;&amp;lt; 'a', 'b', 'c', 'd' &amp;gt;&amp;gt; }&lt;br /&gt;
as well as any kind of COLLECTION:&lt;br /&gt;
        {RING_ARRAY[CHARACTER] 1, &amp;lt;&amp;lt; 'a', 'b', 'c', 'd' &amp;gt;&amp;gt;}&lt;br /&gt;
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.&lt;br /&gt;
* Classes to manipulate floating point numbers have been completely revisited. Floating point number manipulation now uses [[library_class:REAL_32|&amp;lt;tt&amp;gt;REAL_32&amp;lt;/tt&amp;gt;]] for 32 bits floating points, [[library_class:REAL_64|&amp;lt;tt&amp;gt;REAL_64&amp;lt;/tt&amp;gt;]] which is equivalent of &amp;lt;tt&amp;gt;REAL&amp;lt;/tt&amp;gt; for 64 bits floating points, [[library_class:REAL_80|&amp;lt;tt&amp;gt;REAL_80&amp;lt;/tt&amp;gt;]] for architecture supporting 80 bits, [[library_class:REAL_128|&amp;lt;tt&amp;gt;REAL_128&amp;lt;/tt&amp;gt;]] for architecture supporting 128 bits and, [[library_class:REAL_EXTENDED|&amp;lt;tt&amp;gt;REAL_EXTENDED&amp;lt;/tt&amp;gt;]] which is automatically mapped on [[library_class:REAL_80|&amp;lt;tt&amp;gt;REAL_80&amp;lt;/tt&amp;gt;]] or [[library_class:REAL_128|&amp;lt;tt&amp;gt;REAL_128&amp;lt;/tt&amp;gt;]] depending on the architecture actually used. The old &amp;lt;tt&amp;gt;DOUBLE&amp;lt;/tt&amp;gt; class is now obsolete and is automatically replaced with simply &amp;lt;tt&amp;gt;REAL&amp;lt;/tt&amp;gt; (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 &amp;lt;tt&amp;gt;REAL&amp;lt;/tt&amp;gt;. As an example, ''1.5'' is of type &amp;lt;tt&amp;gt;REAL&amp;lt;/tt&amp;gt; whereas ''{REAL_32 1.5}'' is of type [[library_class:REAL_32|&amp;lt;tt&amp;gt;REAL_32&amp;lt;/tt&amp;gt;]] and ''{REAL_EXTENDED 1.5}'' is of type [[library_class:REAL_80|&amp;lt;tt&amp;gt;REAL_80&amp;lt;/tt&amp;gt;]] or [[library_class:REAL_128|&amp;lt;tt&amp;gt;REAL_128&amp;lt;/tt&amp;gt;]] depending on your hardware. See again SmartEiffel/tutorial/manifest_notation.e for details. Finally, also note that scientific notation has been added to display floating point.&lt;br /&gt;
* To handle downcasting in a better way than the still supported &amp;quot;?=&amp;quot; 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 &amp;quot;?:=&amp;quot; allows you to test if the downcasting can be safely done and the new &amp;quot;::=&amp;quot; assignment can actually perform the downcasting. In debug modes, the &amp;quot;?:=&amp;quot; predicate is considered as a require assertion of the &amp;quot;::=&amp;quot; assignment. The &amp;quot;?:=&amp;quot; predicate accepts type name for its left-hand side and is useful too in assertions. See SmartEiffel/tutorial/downcasting.e for examples.&lt;br /&gt;
* Command short improved: assertions are displayed according to the client's point of view (i.e. you do not see what you cannot call).&lt;br /&gt;
* Added classes [[library_class:STACK|&amp;lt;tt&amp;gt;STACK&amp;lt;/tt&amp;gt;]] and [[library_class:QUEUE|&amp;lt;tt&amp;gt;QUEUE&amp;lt;/tt&amp;gt;]]. Thanks to the &amp;quot;insert&amp;quot; mechanism, it is now safe and efficient to do so ([[library_class:STACK|&amp;lt;tt&amp;gt;STACK&amp;lt;/tt&amp;gt;]] shares the efficient implementation of [[library_class:FAST_ARRAY|&amp;lt;tt&amp;gt;FAST_ARRAY&amp;lt;/tt&amp;gt;]] and [[library_class:QUEUE|&amp;lt;tt&amp;gt;QUEUE&amp;lt;/tt&amp;gt;]] inserts [[library_class:RING_ARRAY|&amp;lt;tt&amp;gt;RING_ARRAY&amp;lt;/tt&amp;gt;]]).&lt;br /&gt;
* Improved memory usage for classes [[library_class:LINKED_LIST|&amp;lt;tt&amp;gt;LINKED_LIST&amp;lt;/tt&amp;gt;]], [[library_class:TWO_WAY_LINKED_LIST|&amp;lt;tt&amp;gt;TWO_WAY_LINKED_LIST&amp;lt;/tt&amp;gt;]], [[library_class:AVL_SET|&amp;lt;tt&amp;gt;AVL_SET&amp;lt;/tt&amp;gt;]], [[library_class:AVL_DICTIONARY|&amp;lt;tt&amp;gt;AVL_DICTIONARY&amp;lt;/tt&amp;gt;]], [[library_class:HASHED_SET|&amp;lt;tt&amp;gt;HASHED_SET&amp;lt;/tt&amp;gt;]] and [[library_class:HASHED_DICTIONARY|&amp;lt;tt&amp;gt;HASHED_DICTIONARY&amp;lt;/tt&amp;gt;]]. Free cells are automatically recycled between various instances of the same generic derivation. Thoses classes are now using our [[library_class:WEAK_REFERENCE|&amp;lt;tt&amp;gt;WEAK_REFERENCE&amp;lt;/tt&amp;gt;]] class silently.&lt;br /&gt;
* Removed obsolete class &amp;lt;tt&amp;gt;BIT&amp;lt;/tt&amp;gt;. Now, just use existing bit operations from [[library_class:INTEGER_8|&amp;lt;tt&amp;gt;INTEGER_8&amp;lt;/tt&amp;gt;]], [[library_class:INTEGER_16|&amp;lt;tt&amp;gt;INTEGER_16&amp;lt;/tt&amp;gt;]], [[library_class:INTEGER_32|&amp;lt;tt&amp;gt;INTEGER_32&amp;lt;/tt&amp;gt;]], &amp;lt;tt&amp;gt;INTEGER&amp;lt;/tt&amp;gt;, [[library_class:INTEGER_64|&amp;lt;tt&amp;gt;INTEGER_64&amp;lt;/tt&amp;gt;]] or, for very long sequences of bits, the completely revisited [[library_class:BIT_STRING|&amp;lt;tt&amp;gt;BIT_STRING&amp;lt;/tt&amp;gt;]] class.&lt;br /&gt;
* 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!&lt;br /&gt;
* 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:&lt;br /&gt;
        3.to_string &lt;br /&gt;
        3.5.print_on(io) &lt;br /&gt;
        &amp;quot;foo&amp;quot;.print_on(io) &lt;br /&gt;
* A new network library has been recently added. This is brand new work which is still in progress. See SmartEiffel/lib/net for details.&lt;br /&gt;
* The old Eiffel strip expression is no longer supported.&lt;br /&gt;
&lt;br /&gt;
=== Release 2.0 [Hercule] - Monday September 27th, 2004 ===&lt;br /&gt;
&lt;br /&gt;
Actually, this new 2.0 release is the beginning of a new era in SmartEiffel's life!&lt;br /&gt;
&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
More details about changes from 1.1:&lt;br /&gt;
&lt;br /&gt;
* Very large systems are handled far more efficiently (but maybe at a cost for smaller systems).&lt;br /&gt;
* The new non-conforming inheritance mechanism is now implemented. For code portatbility, we decided to stick with the &amp;quot;inherit&amp;quot; keyword for conforming parents. So just start your class as usual. Then, to describe the non-conforming parents, just use the &amp;quot;insert&amp;quot; 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 &amp;quot;select&amp;quot; clause (you'll be warned by the compiler). Also keep in mind that when a class has no &amp;quot;inherit&amp;quot; clause and no &amp;quot;insert&amp;quot; clause, the default insert [[library_class:ANY|&amp;lt;tt&amp;gt;ANY&amp;lt;/tt&amp;gt;]] 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.&lt;br /&gt;
* Repeated inheritance is now correctly handled.&lt;br /&gt;
* The optimizer is rewritten and can do more optimizations.&lt;br /&gt;
* 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).&lt;br /&gt;
* 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 [[library_class:NATIVE_ARRAY|&amp;lt;tt&amp;gt;NATIVE_ARRAY&amp;lt;/tt&amp;gt;]]s). Command such as ''p ..1'' is useful to get another element of the array or another attribute of the same object.&lt;br /&gt;
* Dead code is now checked, which explains the compiler takes more time and memory.&lt;br /&gt;
* 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 &amp;quot;good&amp;quot; cluster.&lt;br /&gt;
The new organization splits the classes by logical topics. Note that each cluster may contain two special clusters: &amp;quot;low_level&amp;quot;, containing classes that you might use if you need better performance (generally when you build some utility or library classes); &amp;quot;internal&amp;quot; containing support classes, and not meant to be used directly.&lt;br /&gt;
Now, the organization itself:&lt;br /&gt;
** &amp;quot;abilities&amp;quot; contains the &amp;quot;able&amp;quot; classes ([[library_class:COMPARABLE|&amp;lt;tt&amp;gt;COMPARABLE&amp;lt;/tt&amp;gt;]], [[library_class:HASHABLE|&amp;lt;tt&amp;gt;HASHABLE&amp;lt;/tt&amp;gt;]], and so on);&lt;br /&gt;
** &amp;quot;io&amp;quot; contains the input-out classes; this cluster has but changed from the old one (see below for more details);&lt;br /&gt;
** &amp;quot;iterator&amp;quot; still contains the iterator on storage classes (see the &amp;quot;storage&amp;quot; cluster);&lt;br /&gt;
** &amp;quot;kernel&amp;quot; contains the few general-purpose which could not be put in other clusters, and are quite mandatory for the compiler to work;&lt;br /&gt;
** &amp;quot;numeric&amp;quot; contains all the classes that can be use to manipulate numbers; you will find here &amp;lt;tt&amp;gt;INTEGER&amp;lt;/tt&amp;gt;s, &amp;lt;tt&amp;gt;REAL&amp;lt;/tt&amp;gt;s, but also [[library_class:NUMBER|&amp;lt;tt&amp;gt;NUMBER&amp;lt;/tt&amp;gt;]]s (the infinite-precision integers); This cluster also includes the new [[library_class:MUTABLE_BIG_INTEGER|&amp;lt;tt&amp;gt;MUTABLE_BIG_INTEGER&amp;lt;/tt&amp;gt;]] class which is an efficient tools for fast integer number crunching.&lt;br /&gt;
** &amp;quot;random&amp;quot; contains the pseudo-random number generation classes;&lt;br /&gt;
** &amp;quot;scoop&amp;quot; contains the SCOOP utilities (not that SCOOP works better than in SE 1.1...);&lt;br /&gt;
** &amp;quot;storage&amp;quot; contains all the classes that store data: [[library_class:COLLECTION|&amp;lt;tt&amp;gt;COLLECTION&amp;lt;/tt&amp;gt;]], [[library_class:DICTIONARY|&amp;lt;tt&amp;gt;DICTIONARY&amp;lt;/tt&amp;gt;]], [[library_class:SET|&amp;lt;tt&amp;gt;SET&amp;lt;/tt&amp;gt;]]... (Note: see below for more details on [[library_class:DICTIONARY|&amp;lt;tt&amp;gt;DICTIONARY&amp;lt;/tt&amp;gt;]] and [[library_class:SET|&amp;lt;tt&amp;gt;SET&amp;lt;/tt&amp;gt;]]);&lt;br /&gt;
** &amp;quot;string&amp;quot; contains the [[library_class:STRING|&amp;lt;tt&amp;gt;STRING&amp;lt;/tt&amp;gt;]] and related classes (also Unicode strings);&lt;br /&gt;
** &amp;quot;time&amp;quot; contains the [[library_class:TIME|&amp;lt;tt&amp;gt;TIME&amp;lt;/tt&amp;gt;]]-related classes;&lt;br /&gt;
** &amp;quot;vision&amp;quot; contains the vision graphical library classes;&lt;br /&gt;
** &amp;quot;sorting&amp;quot; contains most common algorithm to sort [[library_class:COLLECTION|&amp;lt;tt&amp;gt;COLLECTION&amp;lt;/tt&amp;gt;]]s;&lt;br /&gt;
** &amp;quot;misc&amp;quot; contains some useful classes that cannot be easily put elsewhere short of having their own cluster.&lt;br /&gt;
&lt;br /&gt;
* [[library_class:DICTIONARY|&amp;lt;tt&amp;gt;DICTIONARY&amp;lt;/tt&amp;gt;]] class is now deferred and has no more generic constraint. The library now includes two different implementations.&lt;br /&gt;
** The [[library_class:HASHED_DICTIONARY|&amp;lt;tt&amp;gt;HASHED_DICTIONARY&amp;lt;/tt&amp;gt;]] implementation is the hash_code based implementation (the generic constraint for [[library_class:HASHED_DICTIONARY|&amp;lt;tt&amp;gt;HASHED_DICTIONARY&amp;lt;/tt&amp;gt;]] is [[library_class:HASHABLE|&amp;lt;tt&amp;gt;HASHABLE&amp;lt;/tt&amp;gt;]]).&lt;br /&gt;
** The [[library_class:AVL_DICTIONARY|&amp;lt;tt&amp;gt;AVL_DICTIONARY&amp;lt;/tt&amp;gt;]] implementation is a balanced tree based implementation (the generic constraint for this implemetation is [[library_class:COMPARABLE|&amp;lt;tt&amp;gt;COMPARABLE&amp;lt;/tt&amp;gt;]]).&lt;br /&gt;
You should update all your create instructions by selecting [[library_class:HASHED_DICTIONARY|&amp;lt;tt&amp;gt;HASHED_DICTIONARY&amp;lt;/tt&amp;gt;]] or [[library_class:AVL_DICTIONARY|&amp;lt;tt&amp;gt;AVL_DICTIONARY&amp;lt;/tt&amp;gt;]]. In order to ease this code update, the compiler will warn you that [[library_class:HASHED_DICTIONARY|&amp;lt;tt&amp;gt;HASHED_DICTIONARY&amp;lt;/tt&amp;gt;]] is selected by default. Please update your code because this is a temporary warning of the compiler.&lt;br /&gt;
&lt;br /&gt;
* Some more [[library_class:DICTIONARY|&amp;lt;tt&amp;gt;DICTIONARY&amp;lt;/tt&amp;gt;]] classes were also added (among them: [[library_class:DOUBLE_DICTIONARY|&amp;lt;tt&amp;gt;DOUBLE_DICTIONARY&amp;lt;/tt&amp;gt;]] can be of interest).&lt;br /&gt;
* The [[library_class:SET|&amp;lt;tt&amp;gt;SET&amp;lt;/tt&amp;gt;]] class has undergone the same transformation ([[library_class:HASHED_SET|&amp;lt;tt&amp;gt;HASHED_SET&amp;lt;/tt&amp;gt;]] and [[library_class:AVL_SET|&amp;lt;tt&amp;gt;AVL_SET&amp;lt;/tt&amp;gt;]]).&lt;br /&gt;
* A [[library_class:RING_ARRAY|&amp;lt;tt&amp;gt;RING_ARRAY&amp;lt;/tt&amp;gt;]] class was added. This [[library_class:COLLECTION|&amp;lt;tt&amp;gt;COLLECTION&amp;lt;/tt&amp;gt;]] is quite similar to an [[library_class:ARRAY|&amp;lt;tt&amp;gt;ARRAY&amp;lt;/tt&amp;gt;]] that performs well for all queue operations (add|remove)_(first|last) thanks to its circular internal representation.&lt;br /&gt;
* The [[library_class:TUPLE|&amp;lt;tt&amp;gt;TUPLE&amp;lt;/tt&amp;gt;]] class is now defined in Eiffel. Thanks to this new source code implementation, we have added the definition for the `item' feature definition.&lt;br /&gt;
* The [[library_class:ROUTINE|&amp;lt;tt&amp;gt;ROUTINE&amp;lt;/tt&amp;gt;]], [[library_class:PROCEDURE|&amp;lt;tt&amp;gt;PROCEDURE&amp;lt;/tt&amp;gt;]] and [[library_class:FUNCTION|&amp;lt;tt&amp;gt;FUNCTION&amp;lt;/tt&amp;gt;]] classes are also defined in Eiffel.&lt;br /&gt;
* Added a new [[library_class:WEAK_REFERENCE|&amp;lt;tt&amp;gt;WEAK_REFERENCE&amp;lt;/tt&amp;gt;]] class with the appropriate garbage collector support.&lt;br /&gt;
* Split has been improved in order to reduce C files compilation after a change.&lt;br /&gt;
* Added a new &amp;quot;-profile&amp;quot; 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:&lt;br /&gt;
** the profiling output is written in the &amp;quot;profile.se&amp;quot; file;&lt;br /&gt;
** for each entry, the &amp;quot;own&amp;quot; and &amp;quot;cumul&amp;quot; times, total and average, are given; also, the caller features and the called ones are displayed;&lt;br /&gt;
** 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);&lt;br /&gt;
** the Eiffel called features are sorted by decreasing number of calls;&lt;br /&gt;
** 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).&lt;br /&gt;
**e that:&lt;br /&gt;
** profiled programs take MUCH longer to execute (a lot of, hem, time, is spent in the kernel merely to, hem, track time...)&lt;br /&gt;
** externals are not profiled; they are accounted in the &amp;quot;own&amp;quot; time of their caller;&lt;br /&gt;
** inlined features are not profiled either (only in -boost)&lt;br /&gt;
** 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.&lt;br /&gt;
**s to Lothar Scholz for having the idea in the first place.&lt;br /&gt;
**ped the input-output system to make it more general and more extensible. Provided features:&lt;br /&gt;
** now streams can be &amp;quot;filtered&amp;quot;. It means you can nest them to bring extra features such as encoding or encryption (among many other things)&lt;br /&gt;
** 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.&lt;br /&gt;
See also the cluster description on the SmartEiffel site.&lt;br /&gt;
* Visitors revisited. The architecture is now ready to be used (in 1.1 it was but a draft).&lt;br /&gt;
&lt;br /&gt;
== SmartEiffel (release 1.1 down to release 1.0) ==&lt;br /&gt;
&lt;br /&gt;
=== Release 1.1 [Charlemagne] - Monday June 16th, 2003 ===&lt;br /&gt;
&lt;br /&gt;
* Thoroughly changed the configuration handling. The new scheme is more complete, and much more flexible.&lt;br /&gt;
** 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 &amp;lt;Enter&amp;gt; key. For more informations about installation and all new configuration capabilities, please have a look to install page.&lt;br /&gt;
** Added the -c_mode option, in conjunction with the new configuration handling.&lt;br /&gt;
** Added a -loadpath flag to read an extra loadpath.&lt;br /&gt;
* 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.&lt;br /&gt;
* Added a small expression evaluator to sedb. One can now display the attributes of the objects on the stack. Be sure to read the &amp;quot;more-help&amp;quot; section on data display (for once functions, the result is unavailable if it has not yet been called).&lt;br /&gt;
* 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.&lt;br /&gt;
* Implemented inspect on [[library_class:STRING|&amp;lt;tt&amp;gt;STRING&amp;lt;/tt&amp;gt;]]s.&lt;br /&gt;
* 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!&lt;br /&gt;
* [[pretty]] significantly updated.&lt;br /&gt;
* The C files produced by the compiler now should work on any platform, even with the GC turned on.&lt;br /&gt;
* Added Unicode support in [[library_class:STRING|&amp;lt;tt&amp;gt;STRING&amp;lt;/tt&amp;gt;]]s (see the SmartEiffel/tutorial/unicode and SmartEiffel/lib/unicode directories).&lt;br /&gt;
* Added new abstract class [[library_class:FILE|&amp;lt;tt&amp;gt;FILE&amp;lt;/tt&amp;gt;]] and new features in class [[library_class:DIRECTORY|&amp;lt;tt&amp;gt;DIRECTORY&amp;lt;/tt&amp;gt;]].&lt;br /&gt;
* Added hexadecimal notation for &amp;lt;tt&amp;gt;INTEGER&amp;lt;/tt&amp;gt; constants, [[library_class:CHARACTER|&amp;lt;tt&amp;gt;CHARACTER&amp;lt;/tt&amp;gt;]] constants and inside manifest [[library_class:STRING|&amp;lt;tt&amp;gt;STRING&amp;lt;/tt&amp;gt;]]s as well. See the example in file SmartEiffel/tutorial/hexadecimal.e for more information.&lt;br /&gt;
* Added agent facilities on [[library_class:STRING|&amp;lt;tt&amp;gt;STRING&amp;lt;/tt&amp;gt;]] and [[library_class:UNICODE_STRING|&amp;lt;tt&amp;gt;UNICODE_STRING&amp;lt;/tt&amp;gt;]] (warning, those facilities are non-standard extensions).&lt;br /&gt;
* 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.&lt;br /&gt;
* Moved the bin_c directory to install/germ.&lt;br /&gt;
* Reorganized the SmartEiffel/sys/runtime directory:&lt;br /&gt;
** Clearly separated C and Java backend helpers&lt;br /&gt;
** 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&lt;br /&gt;
* Added the -compact option which produces much more compact C code.&lt;br /&gt;
* same_type from &amp;lt;tt&amp;gt;GENERAL&amp;lt;/tt&amp;gt; is now obsolete. Use same_dynamic_type instead.&lt;br /&gt;
* Obsoleted operators &amp;quot;and&amp;quot;, &amp;quot;or&amp;quot;, &amp;quot;xor&amp;quot; and &amp;quot;not&amp;quot; for &amp;lt;tt&amp;gt;INTEGER&amp;lt;/tt&amp;gt;s, and added prefix operator &amp;quot;~&amp;quot;.&lt;br /&gt;
* [[library_class:MEMORY|&amp;lt;tt&amp;gt;MEMORY&amp;lt;/tt&amp;gt;]].allocated_bytes is more accurate.&lt;br /&gt;
* Generated object files are now removed before calling C compiler.&lt;br /&gt;
* Various bug fixes and improvements (see details in the SmartZilla bug tracker).&lt;br /&gt;
&lt;br /&gt;
=== Release 1.0 - Friday December 6th, 2002 ===&lt;br /&gt;
&lt;br /&gt;
This is the very first release with the name SmartEiffel!&lt;br /&gt;
(Previous releases were named SmallEiffel.)&lt;br /&gt;
&lt;br /&gt;
The main changes between SmallEiffel -0.74 and SmartEiffel 1.0 are:&lt;br /&gt;
&lt;br /&gt;
* Name changed from SmallEiffel to SmartEiffel!&lt;br /&gt;
* Version numbering: now, versions are numbered from 1.0 beta 1 upward&lt;br /&gt;
* 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).&lt;br /&gt;
* The new Reference keyword is now implemented. Use reference &amp;lt;tt&amp;gt;INTEGER&amp;lt;/tt&amp;gt; instead of &amp;lt;tt&amp;gt;INTEGER_REF&amp;lt;/tt&amp;gt;. &amp;lt;tt&amp;gt;INTEGER_REF&amp;lt;/tt&amp;gt; will become obsolete.&lt;br /&gt;
* The new [[library_class:INTEGER_GENERAL|&amp;lt;tt&amp;gt;INTEGER_GENERAL&amp;lt;/tt&amp;gt;]], [[library_class:INTEGER_8|&amp;lt;tt&amp;gt;INTEGER_8&amp;lt;/tt&amp;gt;]], [[library_class:INTEGER_16|&amp;lt;tt&amp;gt;INTEGER_16&amp;lt;/tt&amp;gt;]], [[library_class:INTEGER_32|&amp;lt;tt&amp;gt;INTEGER_32&amp;lt;/tt&amp;gt;]], [[library_class:INTEGER_64|&amp;lt;tt&amp;gt;INTEGER_64&amp;lt;/tt&amp;gt;]] types are now implemented.&lt;br /&gt;
* After long discussions, we have decided to stick to our decision for the type of integer constants (as an example, 127 is of type [[library_class:INTEGER_8|&amp;lt;tt&amp;gt;INTEGER_8&amp;lt;/tt&amp;gt;]] and 128 is of type [[library_class:INTEGER_16|&amp;lt;tt&amp;gt;INTEGER_16&amp;lt;/tt&amp;gt;]] 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 &amp;lt;tt&amp;gt;&amp;lt;&amp;lt;...&amp;gt;&amp;gt;&amp;lt;/tt&amp;gt; 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 :)&lt;br /&gt;
* 64-bit architectures supported.&lt;br /&gt;
* Internal improvements in the type system (better C code produced)&lt;br /&gt;
* Buffered I/O. You may get big improvements on programs performing lots of file reading or writing ([[library_class:STD_INPUT|&amp;lt;tt&amp;gt;STD_INPUT&amp;lt;/tt&amp;gt;]] and [[library_class:STD_OUTPUT|&amp;lt;tt&amp;gt;STD_OUTPUT&amp;lt;/tt&amp;gt;]] are also buffered).&lt;br /&gt;
* The short command now has the &amp;quot;-client&amp;quot; option (see short command manual for more details).&lt;br /&gt;
* The &amp;quot;tcc&amp;quot; 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.&lt;br /&gt;
* New bug reporting tool. Now you can see all known bugs and their state. Allways refers to the bug report page on SmartEiffel site.&lt;br /&gt;
* As suggested on our mailing list, there are now two new classes in order to remove some definitions from &amp;lt;tt&amp;gt;GENERAL&amp;lt;/tt&amp;gt; (see class [[library_class:MATH_CONSTANTS|&amp;lt;tt&amp;gt;MATH_CONSTANTS&amp;lt;/tt&amp;gt;]] and class [[library_class:CHARACTER_CONSTANTS|&amp;lt;tt&amp;gt;CHARACTER_CONSTANTS&amp;lt;/tt&amp;gt;]]).&lt;br /&gt;
* 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 &amp;gt;&amp;gt; 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.&lt;br /&gt;
* Type mark must now follow the Precursor keyword.&lt;br /&gt;
* Fixed the bug recently reported by Wolfgang Jansen. (Well isolated bug report, thanks!) This bug was related to expanded objects and the twin feature.&lt;br /&gt;
* Fixed the -manifest_string_trace bug recently reported by Alexis Saettler. (Well isolated bug as well, thanks!)&lt;br /&gt;
* 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 &amp;quot;like Current&amp;quot; type mark into some hard-coded type mark (e.g. &amp;quot;FOO&amp;quot;). 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 [[library_class:NUMBER|&amp;lt;tt&amp;gt;NUMBER&amp;lt;/tt&amp;gt;]] library implementation of &amp;lt;tt&amp;gt;is_equal&amp;lt;/tt&amp;gt; (''like Current'' is now changed to [[library_class:NUMBER|&amp;lt;tt&amp;gt;NUMBER&amp;lt;/tt&amp;gt;]]) and changed the postcondition of &amp;lt;tt&amp;gt;is_equal&amp;lt;/tt&amp;gt; in &amp;lt;tt&amp;gt;GENERAL&amp;lt;/tt&amp;gt; (ensure assertion relaxed to no longer call standard_is_equal).&lt;br /&gt;
* 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/&lt;br /&gt;
* New Cygwin directory notation is now supported. Recent Cygwin systems will be automatically detected while install.&lt;br /&gt;
* Other &amp;quot;secret&amp;quot; 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.&lt;br /&gt;
* Improved internal lab process to more easily provide professional support contracts (see premium support for more details).&lt;br /&gt;
* New functions in [[library_class:COLLECTION_SORTER|&amp;lt;tt&amp;gt;COLLECTION_SORTER&amp;lt;/tt&amp;gt;]] classes using dichotomic search.&lt;br /&gt;
* GC support for the Elate system updated.&lt;br /&gt;
* Various bug fixes and improvements.&lt;br /&gt;
&lt;br /&gt;
== SmallEiffel (all releases of SmallEiffel) ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.74 - Tuesday May 7th, 2002 ===&lt;br /&gt;
&lt;br /&gt;
* The new agent mechanism is now implemented. See tutorial/agent directory for examples.&lt;br /&gt;
* 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.&lt;br /&gt;
* The new create instruction/expression is now fully implemented and correctly pretty-printed. The new default_create feature mechanism is also implemented.&lt;br /&gt;
* 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.&lt;br /&gt;
* Added examples for the new TUPLE type in directory tutorial/tuple.&lt;br /&gt;
* 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.)&lt;br /&gt;
* The external C interface is now compatible with the new ETL definition. (See directory tutorial/external/C for examples.)&lt;br /&gt;
* Added flag -high_memory_compiler to compile_to_c.&lt;br /&gt;
* 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.)&lt;br /&gt;
* 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.&lt;br /&gt;
* Added feature connect_append_to both in class TEXT_FILE_WRITE and BINARY_FILE_WRITE.&lt;br /&gt;
* 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.&lt;br /&gt;
* Added feature size_of and feature last_change_of in class FILE_TOOLS (see also tutorial/basic_time for examples).&lt;br /&gt;
* Added feature append_decimal_in and feature to_decimal in class NUMBER as well as a new example the tutorial/number directory.&lt;br /&gt;
* Added feature add both in class COLLECTION_SORTER and in class REVERSE_COLLECTION_SORTER.&lt;br /&gt;
* Added feature reference_at in class DICTIONARY.&lt;br /&gt;
* Added feature infix &amp;quot;+&amp;quot; in class POINTER.&lt;br /&gt;
* Various bug fixes and improvements.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.75 - Thursday July 16th, 2001 ===&lt;br /&gt;
&lt;br /&gt;
* 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.&lt;br /&gt;
* 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.&lt;br /&gt;
* Added a traditional -help flag for all commands to print a summary of available options.&lt;br /&gt;
* In ACE files as well as in &amp;quot;loadpath.se&amp;quot; files the ${SmallEiffelDirectory} environment variable is automatically defined using the value of the ${SmallEiffel} environment variable.&lt;br /&gt;
* 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.&lt;br /&gt;
* The new TUPLE type is now implemented.&lt;br /&gt;
* Added class TIME_IN_GERMAN to handle date and time in German. See tutorial/basic_time for examples.&lt;br /&gt;
* Feature is_equal of class COMPARABLE is now ELKS compatible.&lt;br /&gt;
* Added feature internal_key in class DICTIONARY.&lt;br /&gt;
* Various bug fixes and improvements.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.76 - Saturday November 11th, 2000 ===&lt;br /&gt;
&lt;br /&gt;
* 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.&lt;br /&gt;
* 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).&lt;br /&gt;
* Added feature reindex in class ARRAY.&lt;br /&gt;
* Added a brand new class SET[E-&amp;gt;HASHABLE].&lt;br /&gt;
* Added support for the Elate (Amiga) system as well as the vpcc C compiler.&lt;br /&gt;
* Added support for the QNX real time operating system.&lt;br /&gt;
* For feature dispose of class MEMORY (as well as redefinitions), the class invariant is no longer triggered.&lt;br /&gt;
* Added features atan2 and pow both in class REAL and DOUBLE.&lt;br /&gt;
* Internal implementation of BASIC_TIME revisited (using now a double for memorization).&lt;br /&gt;
* Implementation of class DICTIONARY completely revisited. Also added features add, item_map_in and key_map_in in the new class DICTIONARY.&lt;br /&gt;
* 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).&lt;br /&gt;
* Various bug fixes and improvements.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.77 - Saturday February 12th, 2000 ===&lt;br /&gt;
&lt;br /&gt;
* 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, ...&lt;br /&gt;
  To install SmallEiffel under some UNIX like system, just type make in the SmallEiffel directory.&lt;br /&gt;
  To install SmallEiffel under Windows, just run install.exe.&lt;br /&gt;
  On other systems, C compile and run the install.c file.&lt;br /&gt;
* 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.&lt;br /&gt;
* Added NUMBER library, for infinite precision and infinitely large numbers. See tutorial/number for examples.&lt;br /&gt;
* Added ITERATOR library, for external iterators on data structures. See tutorial/iterator for examples.&lt;br /&gt;
* 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).&lt;br /&gt;
* 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).&lt;br /&gt;
* Added class BIT_STRING for very large bit sequences, with reference semantics.&lt;br /&gt;
* 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).&lt;br /&gt;
* 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.&lt;br /&gt;
* Added feature to_hexadecimal and feature to_hexadecimal_in in class INTEGER.&lt;br /&gt;
* Improved incremental recompilation of the generated C code (also fixed a very old bug in incrementality).&lt;br /&gt;
* Exceptions handling: the default_rescue feature is now supported.&lt;br /&gt;
* Various bug fixes and improvements (type inference score increased, ...).&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.78 - Saturday June 05th, 1999 ===&lt;br /&gt;
&lt;br /&gt;
* New -html2 flag for command short generates a colorized HTML short form for classes.&lt;br /&gt;
* The garbage collector now takes into account feature dispose of class MEMORY for reference objects.&lt;br /&gt;
* Obsolete classes (obsolete keyword) now supported.&lt;br /&gt;
* Assertion tags are now displayed when an assertion fails.&lt;br /&gt;
* Added environment variable in loadpath files. Syntax: ${SOME_VAR}&lt;br /&gt;
* Added the -no_style_warning flag to suppress warnings when the recommended styles guidelines for Eiffel are not strictly followed.&lt;br /&gt;
* Added the -version flag to show SmallEiffel's version.&lt;br /&gt;
* 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.&lt;br /&gt;
* Class LINKED_LIST now replaces obsolete class LINK_LIST (simple renaming).&lt;br /&gt;
  Class TWO_WAY_LINKED_LIST now replaces obsolete class LINK2_LIST (simple renaming).&lt;br /&gt;
* Fixed &amp;quot;implicit renaming&amp;quot; bug.&lt;br /&gt;
* Cleaned all source code of tabulations at beginning of line (made code look ugly when using an editor whose tabs were not 8).&lt;br /&gt;
* Some new ELKS'95 features implemented.&lt;br /&gt;
* Validity rule VEEN fixed.&lt;br /&gt;
* Added class COLLECTION_SORTER and REVERSE_COLLECTION_SORTER to the library.&lt;br /&gt;
* Fixed file renaming portability bug (&amp;quot;.d files bug&amp;quot;).&lt;br /&gt;
* Validity rule VCFG.1 is now enforced.&lt;br /&gt;
* Validity rule VAPE is now enforced.&lt;br /&gt;
* Classes mentioned in a cecil.se file are now automatically made live. Makes it easier to link with external libraries.&lt;br /&gt;
* Various other bug fixes.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.79 - Tuesday December 22nd, 1998 ===&lt;br /&gt;
&lt;br /&gt;
* The new Eiffel construct Precursor as described OOSC2 is now implemented.&lt;br /&gt;
* The Eiffel expression strip is now implemented.&lt;br /&gt;
* Nested loadpath files now allowed.&lt;br /&gt;
* Extended anchored definition to accept infix and prefix feature names. For example, this kind of declaration is now accepted :      foo: like infix &amp;quot;+&amp;quot;.&lt;br /&gt;
* Classes COLLECTION2, ARRAY2 and FIXED_ARRAY2 of lib/base completely revisited.&lt;br /&gt;
* Fixed a bug related to calls of the form f.g.h; on expanded objects.&lt;br /&gt;
* Fixed a bug related to inheritance of generic classes.&lt;br /&gt;
* Fixed bugs related to assertions checking in case of exceptions (rescue clause, retry). Improved cycle detection in assertions.&lt;br /&gt;
* Fixed bug in GC related to recycling of &amp;quot;monsters&amp;quot; (very large resizable objets).&lt;br /&gt;
* Fixed an incredible bug in the implementation of the like Current type mark. ;-).&lt;br /&gt;
* Fixed many others bugs ($ operator, GC for alpha DEC, ...).&lt;br /&gt;
* System customization file for the BeOS system added in the &amp;quot;sys&amp;quot; sub-directory (more on system customization).&lt;br /&gt;
* Contents of the environment variable SmallEiffel must be now set with the absolute path of the file &amp;quot;system.se&amp;quot; which is in the sub-directory &amp;quot;sys&amp;quot; of the installation directory.&lt;br /&gt;
  Under a UNIX-like system, the value of the SmallEiffel environment variable may be for example: /usr/lib/SmallEiffel/sys/system.se&lt;br /&gt;
  Commands are also more robust when this environment variable contains non-alphanumeric characters.&lt;br /&gt;
* No more ensure assertion in GENERAL.get_environment_variable.&lt;br /&gt;
* Commands compile_to_jvm and print_jvm_class completely revisited. Java byte-code can be now used with the -verify Java option).&lt;br /&gt;
* Validity rule VDRD.6 is now enforced.&lt;br /&gt;
* Balancing rule (automatic promotion) for INTEGER, DOUBLE and REAL is now implemented.&lt;br /&gt;
* Recursive once routines now work correctly.&lt;br /&gt;
* Unmodified generated C files are not touched anymore.&lt;br /&gt;
* Assertions correctly checked for all external C routines.&lt;br /&gt;
* Exception handling now works when an exception occurs in external C code.&lt;br /&gt;
* Cleaned the compiler and decreased its memory footprint.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.80 - Thursday July 9th, 1998 ===&lt;br /&gt;
&lt;br /&gt;
* Exception handling implemented. Class EXCEPTIONS added in lib/kernel.&lt;br /&gt;
* 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).&lt;br /&gt;
* 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.&lt;br /&gt;
* Behavior of compilation flag -trace of command compile_to_c changed to allow step-by-step execution (embryo of Eiffel source code debugger).&lt;br /&gt;
* Feature ARRAY.resize completely revisited (added two features in class NATIVE_ARRAY: clear and move).&lt;br /&gt;
* Garbage Collector optimized (the GC should be more agressive and some benchmarks are included in directory SmallEiffel/misc/benchmarks/gc/*/bench.e).&lt;br /&gt;
* Associativity of infix operator &amp;quot;^&amp;quot; is now correctly handled.&lt;br /&gt;
* Fixed bugs in PLATFORM for Minimum_double, Minimum_real and Minimum_character_code.&lt;br /&gt;
* Fixed some others bugs about export rules, about expanded objects with expanded attributes.&lt;br /&gt;
* Fixed bugs in pretty.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.81 - Thursday April 9th, 1998 ===&lt;br /&gt;
&lt;br /&gt;
* 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).&lt;br /&gt;
* 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.)&lt;br /&gt;
  Added flag -clean which removes all the C and object files of the system. (This corresponds to the old default behavior.)&lt;br /&gt;
* Fixed a bug related to buffered input under Windows/MS VC.&lt;br /&gt;
* Fixed a bug in misc/INSTALL.SH script.&lt;br /&gt;
* Added require is_connected for all features put_* of class OUTPUT_STREAM.&lt;br /&gt;
* Fixed a bug in command short (require/ensure assertion of deferred routines are now printed).&lt;br /&gt;
* Added one useful hook for mode -html1 in command short (see hook Mcn).&lt;br /&gt;
* Added directory SmallEiffel/sys/runtime which contains the C runtime.&lt;br /&gt;
* Fixed a bug about instanciation of class ANY itself (not so common !).&lt;br /&gt;
* Fixed a bug about inlining of operator $.&lt;br /&gt;
* Fixed a bug about cyclic anchored definitions.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.82 - Friday January 16th, 1998 ===&lt;br /&gt;
&lt;br /&gt;
* Became the official GNU Eiffel compiler.&lt;br /&gt;
* Added first HTML mode to command short. Flag -html1. Thanks to Matthias Klause.&lt;br /&gt;
* Fixed bugs in command pretty.&lt;br /&gt;
* It is now possible to rename/redefine external &amp;quot;SmallEiffel&amp;quot; features.&lt;br /&gt;
* Files *.hlp of directory SmallEiffel/man no longer exists. All the documentation is now in *.html files plus corresponding automatically generated *.txt files.&lt;br /&gt;
* Manifest arrays creation has been optimized.&lt;br /&gt;
* Validity rule VHRC.2 is now enforced.&lt;br /&gt;
* Fixed bugs about export clause.&lt;br /&gt;
* Feature GENERAL.hash_code no longer exists. Added ELKS class HASHABLE in order to be compatible with others compilers/libraries.&lt;br /&gt;
* Fixed a bug in pre-computed once functions.&lt;br /&gt;
* Fixed a bug in REAL/DOUBLE keybord input.&lt;br /&gt;
* Reintroduced left hand side cast in C code for better performances (allowed by the C ANSI standard).&lt;br /&gt;
* Obsolete features (obsolete keyword) now generate a Warning.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.83 - Friday September 19th, 1997 ===&lt;br /&gt;
&lt;br /&gt;
* Added command short to the distribution.&lt;br /&gt;
* Added directory contrib in the distribution. This directory contains some scripts to use gdb as source level debugger for SmallEiffel.&lt;br /&gt;
* Added flag -no_warning to commands: compile_to_c, pretty, and compile_to_jvm.&lt;br /&gt;
* Added flag -case_insensitive to command compile_to_c.&lt;br /&gt;
* Fixed a bug for inherit/select.&lt;br /&gt;
* Fixed a bug for some pre-computed once function.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.84 - Monday August 18th, 1997 ===&lt;br /&gt;
&lt;br /&gt;
* Class BIT is now implemented in Java bytecode (command compile_to_jvm).&lt;br /&gt;
* Added external specification to call Java code (when using compile_to_jvm).&lt;br /&gt;
* 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.&lt;br /&gt;
* 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).&lt;br /&gt;
* Added STRING.substring_index (from ELKS written by Fridtjof SIEBERT).&lt;br /&gt;
* 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).&lt;br /&gt;
* Changed the behavior of end_of_input of INPUT_STREAM (this flag is true _after_ last character has been read).&lt;br /&gt;
* Fixed a bug in manifest arrays (mixed objects including Void).&lt;br /&gt;
* Fixed a bug dealing with some statically computed expressions.&lt;br /&gt;
* Fixed a bug in repeated inheritance.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.85 - Thursday July 3rd, 1997 ===&lt;br /&gt;
&lt;br /&gt;
* First beta-release of commands compile_to_jvm and print_jvm_class!&lt;br /&gt;
* 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.&lt;br /&gt;
* 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.&lt;br /&gt;
* Added feature to_hexadecimal and feature to_hexadecimal_in in class CHARACTER.&lt;br /&gt;
* Feature io, std_input, std_output and std_error of class GENERAL are no longer frozen.&lt;br /&gt;
* 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).&lt;br /&gt;
* Feature die_with_code of GENERAL now accepts any INTEGER code (not just predefined exit_success_code and exit_failure_code).&lt;br /&gt;
* Fixed a bug in STRING. The following expression is now true: (&amp;quot;a%/0/b&amp;quot;).count = 3&lt;br /&gt;
  Just try this on your favorite Eiffel compiler ;-)&lt;br /&gt;
* 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.&lt;br /&gt;
* Feature unread_character of class INPUT_STREAM is now implemented in Eiffel.&lt;br /&gt;
* Added OUTPUT_STREAM.put_pointer to view a POINTER.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.86 - Sunday April 13th, 1997 ===&lt;br /&gt;
&lt;br /&gt;
* All reported bugs at this time have been fixed.&lt;br /&gt;
* 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.&lt;br /&gt;
* Features BOOLEAN.infix &amp;quot;or&amp;quot; and BOOLEAN.infix &amp;quot;and&amp;quot; are now written in pure Eiffel. As a consequence, it is very important for the SmallEiffel programmer to make the distinction between BOOLEAN.infix &amp;quot;and then&amp;quot; and BOOLEAN.infix &amp;quot;and&amp;quot; (respectively for BOOLEAN.infix &amp;quot;or else&amp;quot; and BOOLEAN.infix &amp;quot;or&amp;quot;). When left-hand-side argument produces no side effect, the semi-strict operator (BOOLEAN.infix&amp;quot;and then&amp;quot;/&amp;quot;or else&amp;quot;) may run faster.&lt;br /&gt;
* Fixed REAL.sin (the old one was calling sqrt :-).&lt;br /&gt;
* Fixed a bug in INTEGER.append_in (you can now print Minimum_integer).&lt;br /&gt;
* Added feature in_range in class COMPARABLE.&lt;br /&gt;
* Result type of REAL.infix &amp;quot;^&amp;quot; is now DOUBLE for ELKS compatibility.&lt;br /&gt;
* Feature remove is now implemented in all subclasses of COLLECTION (i.e. ARRAY, FIXED_ARRAY, LINK_LIST and LINK2_LIST).&lt;br /&gt;
* Added feature add for all subclasses of COLLECTION.&lt;br /&gt;
* Conversion DOUBLE/STRING : ANSI C sscanf and sprintf is now used to avoid loss of precision.&lt;br /&gt;
* Added some more class invariant code generation when compiling in -invariant_check mode. Class invariant is now also checked before exit of a routine.&lt;br /&gt;
* Added feature file_tools in class GENERAL to ease access to class FILE_TOOLS.&lt;br /&gt;
* Changed printing format for basic *_REF classes. For example, instruction print(1); now prints 1.&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.87 - Tuesday January 7th, 1997 ===&lt;br /&gt;
&lt;br /&gt;
* Added a new flag -trace to ease debug (see man/compile_to_c file).&lt;br /&gt;
* More inlining at Eiffel level (-boost mode only).&lt;br /&gt;
* Class BIT_N completely revisited. It may be as fast as C.&lt;br /&gt;
* Added class C_ARRAY[E] to deal directly with C arrays at Eiffel level. Thus there are no more external &amp;quot;CSE&amp;quot; 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.&lt;br /&gt;
* Fixed a bug in STD_FILE_READ.read_double.&lt;br /&gt;
* Ordering of C output to increase gcc inlining.&lt;br /&gt;
* According to man/compile_to_c) , flag -debug_check now works (debug instructions are no longer generated in mode -all_check).&lt;br /&gt;
* Unused local variables removed at Eiffel level (warning added for -debug_check mode only).&lt;br /&gt;
* Default class ANY now inherits PLATFORM (as in ETL).&lt;br /&gt;
* Fixed a bug in floating-point constants.&lt;br /&gt;
* Added directory sys to customize default C compiler, default C linker and default loading path.&lt;br /&gt;
* Fixed some bugs with outside expanded types.&lt;br /&gt;
* Fixed a bug with rename/select.&lt;br /&gt;
* Redefinition of once routine is now allowed.&lt;br /&gt;
* Feature GENERAL.conforms_to is now implemented.&lt;br /&gt;
* Rule VFFD.7 is now enforced.&lt;br /&gt;
* Feature force implemented for all COLLECTION.&lt;br /&gt;
* Added conversions features CHARACTER.to_bit, INTEGER.to_bit, BIT_N.to_character and BIT_N.to_integer.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.88 - Wednesday October 30th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Fixed bugs dealing with inherit/rename/select.&lt;br /&gt;
* Added warning for missing colon in actual arguments list.&lt;br /&gt;
* Warning : INSTALL procedure has changed and you have to set manually the default loading path (see misc/INSTALL for details).&lt;br /&gt;
* Added some VMS customization.&lt;br /&gt;
* Fixed bugs when printing run-time stack.&lt;br /&gt;
* Warning added for missing colon in actual parameter list.&lt;br /&gt;
* Added flush in class STD_FILE_WRITE.&lt;br /&gt;
* No more left hand side cast in C code (because some C compilers don't like them).&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.89 - Sunday September 15th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Calling Eiffel from C is now implemented (see man/cecil) file).&lt;br /&gt;
* Object creation uses C calloc instead malloc+memset.&lt;br /&gt;
* Object creation is inlined.&lt;br /&gt;
* ARRAY/FIXED_ARRAY put and item are now inlined (-boost only).&lt;br /&gt;
* Added feature capacity and resize in FIXED_ARRAY.&lt;br /&gt;
* 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.&lt;br /&gt;
* More user's routines are inlined (-boost only).&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.90 - Friday August 23rd, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Added random number generator library (SmallEiffel/lib_rand).&lt;br /&gt;
* Added checking of assertions for external &amp;quot;CSE&amp;quot; features.&lt;br /&gt;
* Anchoring on expanded types are now allowed.&lt;br /&gt;
* Multiple level of anchoring definition allowed.&lt;br /&gt;
* Fixed a bug in STRING.from_external.&lt;br /&gt;
* Fixed a bug with mixed rename/redefine.&lt;br /&gt;
* Inheritance loop detection.&lt;br /&gt;
* Anchoring loop detection.&lt;br /&gt;
* Fixed a bug with renaming infix/prefix.&lt;br /&gt;
* Command clean also use the make suffix.&lt;br /&gt;
* Added ELKS95 sign in INTEGER/REAL/DOUBLE.&lt;br /&gt;
* Feature make is the default root feature name for compile.&lt;br /&gt;
* Optimized ARRAY.add_last and STRING.extend.&lt;br /&gt;
* Changed STRING.out (no more enclosing %&amp;quot; printed).&lt;br /&gt;
* Remove warning gcc messages for 64 bit machines (alpha/DEC).&lt;br /&gt;
* Added option -no_split for a better finalization (see man/compile_to_c) file).&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.91 - Wednesday July 24th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Incremental C compiling mode implemented (see option -c_code in help file man/compile) .&lt;br /&gt;
* Added command clean in help file man/clean.&lt;br /&gt;
* Added class FILE_TOOLS.&lt;br /&gt;
* No more empty C struct in generated C code (to avoid problems with Microsoft Windows C compiler).&lt;br /&gt;
* Fixed one more bug with conformance rule VNCG.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.92 - Saturday July 20th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Fixed some more bugs with conformance rule VNCG.&lt;br /&gt;
* Added math functions in DOUBLE/REAL (sin, cos, tan, asin, acos, atan, ... ANSI C names).&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.93 - Thursday July 18th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Fixed some more bugs with conformance rule VNCG.&lt;br /&gt;
* Type BIT is now implemented.&lt;br /&gt;
* Added ELKS 95 STRING.left_adjust and STRING.right_adjust.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.94 - Friday July 5th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Fixed some bugs with conformance rule VNCG.&lt;br /&gt;
* Static expressions are used to detect pre-computable once routines.&lt;br /&gt;
* Added features to_external and from_external both in classes ARRAY and FIXED_ARRAY.&lt;br /&gt;
* Fixed a bug for inheritance of ARRAY or FIXED_ARRAY.&lt;br /&gt;
* Contents of end of class comment checked.&lt;br /&gt;
* Added documentation file for external calls (see help file man/external ).&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.95 - Thursday May 30th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* It is now possible to inherit ARRAY.&lt;br /&gt;
* It is now possible to inherit STRING.&lt;br /&gt;
* Flag -cc of compile_to_c has changed.&lt;br /&gt;
* The PLATFORM class is now conform to ELKS95.&lt;br /&gt;
* Added feature twin (like the one of TowerEiffel) in GENERAL.&lt;br /&gt;
* Added features to_external and from_external in class STRING.&lt;br /&gt;
* Fixed some bugs in once pre-computed routines.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.96 - Friday May 10th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Internal renaming to suppress some warning messages and for a smooth integration with C++ software.&lt;br /&gt;
* DOS and Macintosh better portability.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.97 - Thursday May 2nd, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Inside of compiler cleaned.&lt;br /&gt;
* Pre-Computing of some once functions.&lt;br /&gt;
* Added class COLLECTION, LINK_LIST and FIXED_ARRAY in lib/base.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.98 - Friday March 15th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Command pretty added.&lt;br /&gt;
* Implements Eiffel expanded clause.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.99 - Saturday February 17th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* 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 [http://www.uhp-nancy.fr/ University Henri Poincaré] and [http://esial.fr/ ESIAL]&lt;br /&gt;
&lt;br /&gt;
=== Release - 1.00 - July 1995 ===&lt;br /&gt;
&lt;br /&gt;
* The very first bootstrap. SmallEiffel is born.&lt;/div&gt;</summary>
		<author><name>Cadrian</name></author>
	</entry>
	<entry>
		<id>https://wiki.liberty-eiffel.org/index.php?title=Category:Community&amp;diff=1816</id>
		<title>Category:Community</title>
		<link rel="alternate" type="text/html" href="https://wiki.liberty-eiffel.org/index.php?title=Category:Community&amp;diff=1816"/>
		<updated>2013-11-22T12:57:25Z</updated>

		<summary type="html">&lt;p&gt;Cadrian: Created page with &amp;quot;The Liberty Eiffel community is reachable from:  * the [http://www.liberty-eiffel.org web site] * the [mailto:liberty-eiffel@gnu.org mailing list], the [http://lists.gnu.org/a...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Liberty Eiffel community is reachable from:&lt;br /&gt;
&lt;br /&gt;
* the [http://www.liberty-eiffel.org web site]&lt;br /&gt;
* the [mailto:liberty-eiffel@gnu.org mailing list], the [http://lists.gnu.org/archive/html/liberty-eiffel/ archives]&lt;br /&gt;
* an IRC channel on [http://webchat.freenode.net/ Freenode]: #liberty-eiffel&lt;br /&gt;
* a [http://liberty-eiffel.blogspot.fr/ blog]&lt;/div&gt;</summary>
		<author><name>Cadrian</name></author>
	</entry>
	<entry>
		<id>https://wiki.liberty-eiffel.org/index.php?title=Table_of_contents&amp;diff=1815</id>
		<title>Table of contents</title>
		<link rel="alternate" type="text/html" href="https://wiki.liberty-eiffel.org/index.php?title=Table_of_contents&amp;diff=1815"/>
		<updated>2013-11-22T12:52:41Z</updated>

		<summary type="html">&lt;p&gt;Cadrian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''LibertyEiffel Wiki'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;History&amp;quot;&amp;gt;&lt;br /&gt;
'''1''' History and goals of the LibertyEiffel project&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''1.1''' [[Introduction]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''1.2''' [[Versions history|All LibertyEiffel versions]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;Lecture&amp;quot;&amp;gt;&lt;br /&gt;
'''2''' Lecture on object-oriented programming and design by contract in Eiffel&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''2.1''' [[Dynamic dispatch]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''2.2''' [[Comparison of objects|Comparison of objects]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''2.3''' [[Cloning objects]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;Library&amp;quot;&amp;gt;&lt;br /&gt;
'''3''' The LibertEiffel general purpose library&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''3.1''' [[Library interface|How to use the library]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''3.2''' [[Library design|Design of the library]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''3.3''' [[Library Wrappers|How to use existing libraries in LibertyEiffel (wrappers)]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;Tutorial&amp;quot;&amp;gt;&lt;br /&gt;
'''4''' Build with LibertyEiffel&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''4.1''' [[Tutorial tour|Guided tour of the tutorial]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''4.2''' [[Build your library]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''4.3''' [[sedb|Debug your programs]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''4.4''' [[profile|Profile your programs]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;Tools&amp;quot;&amp;gt;&lt;br /&gt;
'''5''' [[Tools|LibertyEiffel's tools documentation]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;Eiffel&amp;quot;&amp;gt;&lt;br /&gt;
'''6''' The Eiffel language of LibertyEiffel&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''6.1''' [[System defintion]] of Eiffel&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''6.2''' [[Syntax diagrams]] of Eiffel&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''6.3''' [[Expanded or reference|Expanded object or reference object]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''6.4''' [[Typing policy|Validity of assignments and feature redefinitions]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''6.5''' [[Current|What you need to know about &amp;lt;TT&amp;gt;Current&amp;lt;/TT&amp;gt;]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''6.6''' [[Void|A definition of &amp;lt;TT&amp;gt;Void&amp;lt;/TT&amp;gt;]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''6.7''' [[Once]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''6.8''' [[Tuple]]s&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''6.9''' [[Agent]]s&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''6.10''' [[Precursor]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''6.11''' [[Manifest storage notation]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''6.12''' [[Dynamic type testing]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''6.13''' [[Type of integer constants]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''6.14''' [[SCOOP]] - Concurrency in LibertyEiffel&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''6.15''' [[ECMA]] - The ECMA standard andLiberty&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''7''' [[FAQ|The LibertyEiffel FAQ]]&lt;br /&gt;
&lt;br /&gt;
'''8''' [[Glossary]]&lt;br /&gt;
&lt;br /&gt;
'''9''' [[Papers]]&lt;br /&gt;
&lt;br /&gt;
'''10''' [[License]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;Appendices&amp;quot;&amp;gt;&lt;br /&gt;
'''11''' Appendices&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''11.1''' [[Author guidelines]] for this wiki&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''11.2''' Why there are [[no threads]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''11.3''' [[Gc info|The output of the &amp;lt;tt&amp;gt;-gc_info&amp;lt;/tt&amp;gt; option]].&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''12''' [[Bibliography]]&lt;br /&gt;
&lt;br /&gt;
'''13''' [[Manual index|Index]]&lt;/div&gt;</summary>
		<author><name>Cadrian</name></author>
	</entry>
	<entry>
		<id>https://wiki.liberty-eiffel.org/index.php?title=Template:MainPageTableOfContents&amp;diff=1814</id>
		<title>Template:MainPageTableOfContents</title>
		<link rel="alternate" type="text/html" href="https://wiki.liberty-eiffel.org/index.php?title=Template:MainPageTableOfContents&amp;diff=1814"/>
		<updated>2013-11-22T12:52:21Z</updated>

		<summary type="html">&lt;p&gt;Cadrian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#  [[Introduction|History and goals of the LibertyEiffel project]]&lt;br /&gt;
#  [[Table of contents#Lecture|Lecture of object-oriented programming and design by contract in Eiffel]]&lt;br /&gt;
#  [[Table of contents#Library|The LibertyEiffel general purpose library]]&lt;br /&gt;
#  [[Table of contents#Tutorial|Build with LibertyEiffel]]&lt;br /&gt;
#  [[Tools|Tools documentation]]&lt;br /&gt;
#  [[Versions history|Compiler Release Notes]]&lt;br /&gt;
#  [[Table of contents#Eiffel|The Eiffel language of LibertyEiffel]]&lt;br /&gt;
#  [[FAQ|The LibertyEiffel FAQ]]&lt;br /&gt;
#  [[Papers]]&lt;br /&gt;
#  [[License]]&lt;br /&gt;
#  [[Glossary]]&lt;br /&gt;
#  [[Table of contents#Appendices|Appendices]]&lt;br /&gt;
#  [[Bibliography]]&lt;br /&gt;
#  [[Manual index|Index]]&lt;/div&gt;</summary>
		<author><name>Cadrian</name></author>
	</entry>
	<entry>
		<id>https://wiki.liberty-eiffel.org/index.php?title=Table_of_contents&amp;diff=1813</id>
		<title>Table of contents</title>
		<link rel="alternate" type="text/html" href="https://wiki.liberty-eiffel.org/index.php?title=Table_of_contents&amp;diff=1813"/>
		<updated>2013-11-22T12:51:34Z</updated>

		<summary type="html">&lt;p&gt;Cadrian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''LibertyEiffel Wiki'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;History&amp;quot;&amp;gt;&lt;br /&gt;
'''1''' History and goals of the LibertyEiffel project&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''1.1''' [[Introduction]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''1.2''' [[Versions history|All LibertyEiffel versions]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;Lecture&amp;quot;&amp;gt;&lt;br /&gt;
'''2''' Lecture on object-oriented programming and design by contract in Eiffel&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''2.1''' [[Dynamic dispatch]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''2.2''' [[Comparison of objects|Comparison of objects]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''2.3''' [[Cloning objects]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;Library&amp;quot;&amp;gt;&lt;br /&gt;
'''3''' The LibertEiffel general purpose library&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''3.1''' [[Library interface|How to use the library]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''3.2''' [[Library design|Design of the library]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''3.3''' [[Library Wrappers|How to use existing libraries in LibertyEiffel (wrappers)]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;Tutorial&amp;quot;&amp;gt;&lt;br /&gt;
'''4''' Build with LibertyEiffel&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''4.1''' [[Tutorial tour|Guided tour of the tutorial]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''4.2''' [[Build your library]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''4.3''' [[sedb|Debug your programs]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''4.4''' [[profile|Profile your programs]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;Tools&amp;quot;&amp;gt;&lt;br /&gt;
'''5''' [[Tools|LibertyEiffel's tools documentation]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;Eiffel&amp;quot;&amp;gt;&lt;br /&gt;
'''6''' The Eiffel language of LibertyEiffel&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''6.1''' [[System defintion]] of Eiffel&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''6.2''' [[Syntax diagrams]] of Eiffel&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''6.3''' [[Expanded or reference|Expanded object or reference object]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''6.4''' [[Typing policy|Validity of assignments and feature redefinitions]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''6.5''' [[Current|What you need to know about &amp;lt;TT&amp;gt;Current&amp;lt;/TT&amp;gt;]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''6.6''' [[Void|A definition of &amp;lt;TT&amp;gt;Void&amp;lt;/TT&amp;gt;]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''6.7''' [[Once]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''6.8''' [[Tuple]]s&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''6.9''' [[Agent]]s&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''6.10''' [[Precursor]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''6.11''' [[Manifest storage notation]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''6.12''' [[Dynamic type testing]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''6.13''' [[Type of integer constants]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''6.14''' [[SCOOP]] - Concurrency in LibertyEiffel&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''6.15''' [[ECMA]] - The ECMA standard andLiberty&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''7''' [[FAQ|The LibertyEiffel FAQ]]&lt;br /&gt;
&lt;br /&gt;
'''8''' [[Glossary]]&lt;br /&gt;
&lt;br /&gt;
'''9''' [[License]]&lt;br /&gt;
&lt;br /&gt;
'''10''' [[Papers]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;Appendices&amp;quot;&amp;gt;&lt;br /&gt;
'''11''' Appendices&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''11.1''' [[Author guidelines]] for this wiki&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''11.2''' Why there are [[no threads]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''11.3''' [[Gc info|The output of the &amp;lt;tt&amp;gt;-gc_info&amp;lt;/tt&amp;gt; option]].&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''12''' [[Bibliography]]&lt;br /&gt;
&lt;br /&gt;
'''13''' [[Manual index|Index]]&lt;/div&gt;</summary>
		<author><name>Cadrian</name></author>
	</entry>
	<entry>
		<id>https://wiki.liberty-eiffel.org/index.php?title=Papers&amp;diff=1812</id>
		<title>Papers</title>
		<link rel="alternate" type="text/html" href="https://wiki.liberty-eiffel.org/index.php?title=Papers&amp;diff=1812"/>
		<updated>2013-11-22T12:49:11Z</updated>

		<summary type="html">&lt;p&gt;Cadrian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Those papers were written for SmallEiffel and SmartEiffel, but they still give good insights on the workings of Liberty Eiffel.&lt;br /&gt;
&lt;br /&gt;
== Type Inference for Late Binding. The SmallEiffel Compiler ==&lt;br /&gt;
Suzanne COLLIN, Dominique COLNET and Olivier ZENDRA &lt;br /&gt;
&lt;br /&gt;
''Joint Modular Languages Conference 1997 (JMLC'97),&lt;br /&gt;
Volume 1204 of Lecture Notes in Computer Sciences, pages 67-81.''&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' &lt;br /&gt;
&lt;br /&gt;
The SmallEiffel compiler uses a simple type inference mechanism to translate Eiffel source code to C code. The most important aspect in our technique is that many occurrences of late binding are replaced by static binding. Moreover, when dynamic dispatch cannot be removed, inlining is still possible. The advantage of this approach is that is speeds up execution time and decreases considerably the amount of generated code. SmallEiffel compiler source code itself is a large scale benchmark used to show the quality of our results. Obviously, this efficient technique can also be used for class-based languages without dynamic class creation: for example, it is possible for C++ or Java and not possible for SmallTalk. &lt;br /&gt;
&lt;br /&gt;
[http://www.liberty-eiffel.org/papers/jmlc97.pdf Download the entire article]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Efficient Dynamic Dispatch without Virtual Function Tables. The SmallEiffel Compiler. ==&lt;br /&gt;
Olivier ZENDRA, Dominique COLNET, Suzanne COLLIN. &lt;br /&gt;
&lt;br /&gt;
''12th Annual ACM SIGPLAN Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA'97),&lt;br /&gt;
Volume 32, Issue 10 --- Atlanta, GA, USA, October 1997, pages 125-141.''&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' &lt;br /&gt;
&lt;br /&gt;
SmallEiffel is an Eiffel compiler which uses a fast simple inference mechanism to remove most last binding calls, replacing them by static bindings. Starting from the system's entry point, it compiles only statically living code, which saves compiling and then removing dead code. As the whole system is analyzed at compile time, multiple inheritance and genericity do not cause any overhead. &lt;br /&gt;
&lt;br /&gt;
SmallEiffel features a coding scheme which eliminates the need for virtual function tables. Dynamic dispatch is implemented without any array access but uses a simple static binary branch code. We show that this implementation makes it possible to use modern hardware very efficiently. It also allows to inline more calls even when dynamic dispatch is required. Some more dispatch sites are removed after the type inference algorithm has been performed, if the different branches of a dispatch site lead to the same code. &lt;br /&gt;
&lt;br /&gt;
The advantage of this approach is that it greatly speeds up execution time and considerably decreases the amount of generated code. &lt;br /&gt;
&lt;br /&gt;
[http://www.liberty-eiffel.org/papers/oopsla97.pdf Download the entire article]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Compiler Support to Customize the Mark and Sweep Algorithm. ==&lt;br /&gt;
Dominique COLNET, Philippe COUCAUD and Olivier ZENDRA. &lt;br /&gt;
&lt;br /&gt;
''ACM SIGPLAN International Symposium on Memory Management (ISMM'98),&lt;br /&gt;
Vancouver, BC, Canada, October 17-19, 1998, pages 154-165.''&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' &lt;br /&gt;
&lt;br /&gt;
Mark and sweep garbage collectors (GC) are classical but still very efficient automatic memory management systems. Although challenged by other kinds of systems, such as copying collectors, mark and sweep collectors remain among the best in terms of performance. &lt;br /&gt;
&lt;br /&gt;
This paper describes our implementation of an efficient mark and sweep garbage collector tailored to each program. Compiler support provides the type information required to statically and automatically generate this customized garbage collector. The segregation of objects by type allows the production of a more efficient GC code. This technique, implemented in SmallEiffel, our compiler for the object-oriented language Eiffel, is applicable to other languages and other garbage collection algorithms, be they distributed or not. &lt;br /&gt;
&lt;br /&gt;
We present the results obtained on programs featuring a variety of programming styles and compare our results to a well-know and high quality garbage collector. &lt;br /&gt;
&lt;br /&gt;
[http://www.liberty-eiffel.org/papers/ismm98.pdf Download the entire article]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Optimizations of Eiffel programs: SmallEiffel, The GNU Eiffel Compiler. ==&lt;br /&gt;
Dominique COLNET and Olivier ZENDRA.&lt;br /&gt;
&lt;br /&gt;
''29th conference on Technology of Object-Oriented Languages and Systems (TOOLS Europe'99), IEEE Computer Society&lt;br /&gt;
Nancy, France, June 7-10, 1999, pages 341--350.''&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' &lt;br /&gt;
&lt;br /&gt;
The design of the Eiffel language makes it possible to perform global optimizations on Eiffel programs. In this paper, we describe some of the techniques we used in SmallEiffel, The GNU Eiffel Compiler, to generate highly efficient executables for Eiffel programs. Most of these techniques --- related to global analysis or not --- may also be applied to other object-oriented languages. &lt;br /&gt;
&lt;br /&gt;
[http://www.liberty-eiffel.org/papers/tools-europe-99.pdf Download the entire article]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Adding external iterators to an existing Eiffel class library. ==&lt;br /&gt;
Olivier ZENDRA and Dominique COLNET.&lt;br /&gt;
&lt;br /&gt;
''32nd conference on Technology of Object-Oriented Languages and Systems (TOOLS Pacific'99), IEEE Computer Society&lt;br /&gt;
Melbourne, Australia, 22-25 November 1999, pages xx--yy.''&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' &lt;br /&gt;
&lt;br /&gt;
This paper discusses common iteration schemes and highlights the interest of using explicit iterators. The advantages of external iterators are compared to those of internalized iterators. The integration of an iterator class hierarchy to an existing library without modifying the latter is detailed. This integration brings an extra level of abstraction to the library, which thus becomes more flexible, more adapted to certain design patterns and hence can be used in a higher-level way. Such an integration is not only possible, but can even be done in an optimized way, taking into account the specific structure of the collection traversed. A slight extension of existing class libraries can also be implemented that does not cause any compatibility problem and does not break existing code, but allows even further abstraction and makes it easier for the developer to use high-level, optimized, external iterators. &lt;br /&gt;
&lt;br /&gt;
[http://www.liberty-eiffel.org/papers/tools-pacific-1999.pdf Download the entire article]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Conformance of agents in the Eiffel language ==&lt;br /&gt;
Philippe Ribet, Cyril Adrian, Olivier Zendra, and Dominique Colnet&lt;br /&gt;
&lt;br /&gt;
''Conference on Technology of Object-Oriented Languages and Systems (TOOLS USA 2003)&lt;br /&gt;
Published in Journal Of Technology (JOT), April 2004.''&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' &lt;br /&gt;
&lt;br /&gt;
In Eiffel, the notion of agent makes it possible to describe and manipulate computation parts (i.e. operations) like ordinary data. Operations may be partially described, may be passed as ordinary data and may have their execution delayed. Agents are very convenient for many purposes, such as going through data structures and implementing call-backs in graphical libraries.&lt;br /&gt;
&lt;br /&gt;
Although they can be seen as normal objects, they convey specific issues, pertaining to standard conformance rules for generic types. To get rid of existing problems, this paper proposes an adaptation of conformance rules for agents that provides much more flexibility while retaining all the benefits of a strong static typing system.&lt;br /&gt;
&lt;br /&gt;
[http://www.liberty-eiffel.org/papers/jot2004.pdf Download the entire article]&lt;br /&gt;
&lt;br /&gt;
[http://www.jot.fm/issues/issue_2004_04/article7 HTML version at the JOT web site]&lt;br /&gt;
&lt;br /&gt;
== Non-Conforming Inheritance: the SmartEiffel Experiment of a High-Level Mechanism ==&lt;br /&gt;
Frederic Merizen, Dominique Colnet, Philippe Ribet and Cyril Adrian&lt;br /&gt;
&lt;br /&gt;
''Rejected submission for OOPSLA 2005.''&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' &lt;br /&gt;
&lt;br /&gt;
Non-conforming inheritance (NC-inheritance) is a mechanism recently introduced in the new Eiffel definition. The NC-inheritance mechanism is similar to traditional inheritance but it disallows polymorphism. This simple mechanism appears to be useful in many situations because it allows the designer to capture more design decisions in the source code itself. Furthermore this mechanism helps compilers to statically remove more dynamic dispatch code. NC-inheritance incurs no type-system soundness problems even when arguments are redefined covariantly or when the exportation is restricted in the subclass. Out of the Eiffel world, the NC-inheritance mechanism can be useful to add a no-penalty and no-risk multiple-inheritance-like facility. For instance the Java language, initially designed for simple-inheritance, could be a possible candidate for an NC-inheritance extension. &lt;br /&gt;
&lt;br /&gt;
[http://www.liberty-eiffel.org/papers/insert2005.pdf Download the entire article]&lt;/div&gt;</summary>
		<author><name>Cadrian</name></author>
	</entry>
	<entry>
		<id>https://wiki.liberty-eiffel.org/index.php?title=Papers&amp;diff=1811</id>
		<title>Papers</title>
		<link rel="alternate" type="text/html" href="https://wiki.liberty-eiffel.org/index.php?title=Papers&amp;diff=1811"/>
		<updated>2013-11-22T12:47:09Z</updated>

		<summary type="html">&lt;p&gt;Cadrian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Those papers were written for SmallEiffel and SmartEiffel, but they still give good insights on the workings of Liberty Eiffel.&lt;br /&gt;
&lt;br /&gt;
== Type Inference for Late Binding. The SmallEiffel Compiler ==&lt;br /&gt;
Suzanne COLLIN, Dominique COLNET and Olivier ZENDRA &lt;br /&gt;
&lt;br /&gt;
''Joint Modular Languages Conference 1997 (JMLC'97),&lt;br /&gt;
Volume 1204 of Lecture Notes in Computer Sciences, pages 67-81.''&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' &lt;br /&gt;
&lt;br /&gt;
The SmallEiffel compiler uses a simple type inference mechanism to translate Eiffel source code to C code. The most important aspect in our technique is that many occurrences of late binding are replaced by static binding. Moreover, when dynamic dispatch cannot be removed, inlining is still possible. The advantage of this approach is that is speeds up execution time and decreases considerably the amount of generated code. SmallEiffel compiler source code itself is a large scale benchmark used to show the quality of our results. Obviously, this efficient technique can also be used for class-based languages without dynamic class creation: for example, it is possible for C++ or Java and not possible for SmallTalk. &lt;br /&gt;
&lt;br /&gt;
[http://www.liberty-eiffel.org/papers/jmlc97.pdf|Download the entire article]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Efficient Dynamic Dispatch without Virtual Function Tables. The SmallEiffel Compiler. ==&lt;br /&gt;
Olivier ZENDRA, Dominique COLNET, Suzanne COLLIN. &lt;br /&gt;
&lt;br /&gt;
''12th Annual ACM SIGPLAN Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA'97),&lt;br /&gt;
Volume 32, Issue 10 --- Atlanta, GA, USA, October 1997, pages 125-141.''&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' &lt;br /&gt;
&lt;br /&gt;
SmallEiffel is an Eiffel compiler which uses a fast simple inference mechanism to remove most last binding calls, replacing them by static bindings. Starting from the system's entry point, it compiles only statically living code, which saves compiling and then removing dead code. As the whole system is analyzed at compile time, multiple inheritance and genericity do not cause any overhead. &lt;br /&gt;
&lt;br /&gt;
SmallEiffel features a coding scheme which eliminates the need for virtual function tables. Dynamic dispatch is implemented without any array access but uses a simple static binary branch code. We show that this implementation makes it possible to use modern hardware very efficiently. It also allows to inline more calls even when dynamic dispatch is required. Some more dispatch sites are removed after the type inference algorithm has been performed, if the different branches of a dispatch site lead to the same code. &lt;br /&gt;
&lt;br /&gt;
The advantage of this approach is that it greatly speeds up execution time and considerably decreases the amount of generated code. &lt;br /&gt;
&lt;br /&gt;
[http://www.liberty-eiffel.org/papers/oopsla97.pdf|Download the entire article]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Compiler Support to Customize the Mark and Sweep Algorithm. ==&lt;br /&gt;
Dominique COLNET, Philippe COUCAUD and Olivier ZENDRA. &lt;br /&gt;
&lt;br /&gt;
''ACM SIGPLAN International Symposium on Memory Management (ISMM'98),&lt;br /&gt;
Vancouver, BC, Canada, October 17-19, 1998, pages 154-165.''&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' &lt;br /&gt;
&lt;br /&gt;
Mark and sweep garbage collectors (GC) are classical but still very efficient automatic memory management systems. Although challenged by other kinds of systems, such as copying collectors, mark and sweep collectors remain among the best in terms of performance. &lt;br /&gt;
&lt;br /&gt;
This paper describes our implementation of an efficient mark and sweep garbage collector tailored to each program. Compiler support provides the type information required to statically and automatically generate this customized garbage collector. The segregation of objects by type allows the production of a more efficient GC code. This technique, implemented in SmallEiffel, our compiler for the object-oriented language Eiffel, is applicable to other languages and other garbage collection algorithms, be they distributed or not. &lt;br /&gt;
&lt;br /&gt;
We present the results obtained on programs featuring a variety of programming styles and compare our results to a well-know and high quality garbage collector. &lt;br /&gt;
&lt;br /&gt;
[http://www.liberty-eiffel.org/papers/ismm98.pdf|Download the entire article]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Optimizations of Eiffel programs: SmallEiffel, The GNU Eiffel Compiler. ==&lt;br /&gt;
Dominique COLNET and Olivier ZENDRA.&lt;br /&gt;
&lt;br /&gt;
''29th conference on Technology of Object-Oriented Languages and Systems (TOOLS Europe'99), IEEE Computer Society&lt;br /&gt;
Nancy, France, June 7-10, 1999, pages 341--350.''&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' &lt;br /&gt;
&lt;br /&gt;
The design of the Eiffel language makes it possible to perform global optimizations on Eiffel programs. In this paper, we describe some of the techniques we used in SmallEiffel, The GNU Eiffel Compiler, to generate highly efficient executables for Eiffel programs. Most of these techniques --- related to global analysis or not --- may also be applied to other object-oriented languages. &lt;br /&gt;
&lt;br /&gt;
[http://www.liberty-eiffel.org/papers/tools-europe-99.pdf|Download the entire article]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Adding external iterators to an existing Eiffel class library. ==&lt;br /&gt;
Olivier ZENDRA and Dominique COLNET.&lt;br /&gt;
&lt;br /&gt;
''32nd conference on Technology of Object-Oriented Languages and Systems (TOOLS Pacific'99), IEEE Computer Society&lt;br /&gt;
Melbourne, Australia, 22-25 November 1999, pages xx--yy.''&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' &lt;br /&gt;
&lt;br /&gt;
This paper discusses common iteration schemes and highlights the interest of using explicit iterators. The advantages of external iterators are compared to those of internalized iterators. The integration of an iterator class hierarchy to an existing library without modifying the latter is detailed. This integration brings an extra level of abstraction to the library, which thus becomes more flexible, more adapted to certain design patterns and hence can be used in a higher-level way. Such an integration is not only possible, but can even be done in an optimized way, taking into account the specific structure of the collection traversed. A slight extension of existing class libraries can also be implemented that does not cause any compatibility problem and does not break existing code, but allows even further abstraction and makes it easier for the developer to use high-level, optimized, external iterators. &lt;br /&gt;
&lt;br /&gt;
[http://www.liberty-eiffel.org/papers/tools-pacific-1999.pdf|Download the entire article]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Conformance of agents in the Eiffel language ==&lt;br /&gt;
Philippe Ribet, Cyril Adrian, Olivier Zendra, and Dominique Colnet&lt;br /&gt;
&lt;br /&gt;
''Conference on Technology of Object-Oriented Languages and Systems (TOOLS USA 2003)&lt;br /&gt;
Published in Journal Of Technology (JOT), April 2004.''&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' &lt;br /&gt;
&lt;br /&gt;
In Eiffel, the notion of agent makes it possible to describe and manipulate computation parts (i.e. operations) like ordinary data. Operations may be partially described, may be passed as ordinary data and may have their execution delayed. Agents are very convenient for many purposes, such as going through data structures and implementing call-backs in graphical libraries.&lt;br /&gt;
&lt;br /&gt;
Although they can be seen as normal objects, they convey specific issues, pertaining to standard conformance rules for generic types. To get rid of existing problems, this paper proposes an adaptation of conformance rules for agents that provides much more flexibility while retaining all the benefits of a strong static typing system.&lt;br /&gt;
&lt;br /&gt;
[http://www.liberty-eiffel.org/papers/jot2004.pdf|Download the entire article]&lt;br /&gt;
&lt;br /&gt;
[http://www.jot.fm/issues/issue_2004_04/article7|HTML version at the JOT web site]&lt;br /&gt;
&lt;br /&gt;
== Non-Conforming Inheritance: the SmartEiffel Experiment of a High-Level Mechanism ==&lt;br /&gt;
Frederic Merizen, Dominique Colnet, Philippe Ribet and Cyril Adrian&lt;br /&gt;
&lt;br /&gt;
''Rejected submission for OOPSLA 2005.''&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' &lt;br /&gt;
&lt;br /&gt;
Non-conforming inheritance (NC-inheritance) is a mechanism recently introduced in the new Eiffel definition. The NC-inheritance mechanism is similar to traditional inheritance but it disallows polymorphism. This simple mechanism appears to be useful in many situations because it allows the designer to capture more design decisions in the source code itself. Furthermore this mechanism helps compilers to statically remove more dynamic dispatch code. NC-inheritance incurs no type-system soundness problems even when arguments are redefined covariantly or when the exportation is restricted in the subclass. Out of the Eiffel world, the NC-inheritance mechanism can be useful to add a no-penalty and no-risk multiple-inheritance-like facility. For instance the Java language, initially designed for simple-inheritance, could be a possible candidate for an NC-inherit\-ance extension. &lt;br /&gt;
&lt;br /&gt;
[http://www.liberty-eiffel.org/papers/insert2005.pdf|Download the entire article]&lt;/div&gt;</summary>
		<author><name>Cadrian</name></author>
	</entry>
	<entry>
		<id>https://wiki.liberty-eiffel.org/index.php?title=Papers&amp;diff=1810</id>
		<title>Papers</title>
		<link rel="alternate" type="text/html" href="https://wiki.liberty-eiffel.org/index.php?title=Papers&amp;diff=1810"/>
		<updated>2013-11-22T12:44:07Z</updated>

		<summary type="html">&lt;p&gt;Cadrian: /* Conformance of agents in the Eiffel language */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Those papers were written for SmallEiffel and SmartEiffel, but they still give good insights on the workings of Liberty Eiffel.&lt;br /&gt;
&lt;br /&gt;
== Type Inference for Late Binding. The SmallEiffel Compiler ==&lt;br /&gt;
Suzanne COLLIN, Dominique COLNET and Olivier ZENDRA &lt;br /&gt;
&lt;br /&gt;
''Joint Modular Languages Conference 1997 (JMLC'97),&lt;br /&gt;
Volume 1204 of Lecture Notes in Computer Sciences, pages 67-81.''&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' &lt;br /&gt;
&lt;br /&gt;
The SmallEiffel compiler uses a simple type inference mechanism to translate Eiffel source code to C code. The most important aspect in our technique is that many occurrences of late binding are replaced by static binding. Moreover, when dynamic dispatch cannot be removed, inlining is still possible. The advantage of this approach is that is speeds up execution time and decreases considerably the amount of generated code. SmallEiffel compiler source code itself is a large scale benchmark used to show the quality of our results. Obviously, this efficient technique can also be used for class-based languages without dynamic class creation: for example, it is possible for C++ or Java and not possible for SmallTalk. &lt;br /&gt;
&lt;br /&gt;
[[File:jmlc97.pdf|Download the entire article]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Efficient Dynamic Dispatch without Virtual Function Tables. The SmallEiffel Compiler. ==&lt;br /&gt;
Olivier ZENDRA, Dominique COLNET, Suzanne COLLIN. &lt;br /&gt;
&lt;br /&gt;
''12th Annual ACM SIGPLAN Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA'97),&lt;br /&gt;
Volume 32, Issue 10 --- Atlanta, GA, USA, October 1997, pages 125-141.''&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' &lt;br /&gt;
&lt;br /&gt;
SmallEiffel is an Eiffel compiler which uses a fast simple inference mechanism to remove most last binding calls, replacing them by static bindings. Starting from the system's entry point, it compiles only statically living code, which saves compiling and then removing dead code. As the whole system is analyzed at compile time, multiple inheritance and genericity do not cause any overhead. &lt;br /&gt;
&lt;br /&gt;
SmallEiffel features a coding scheme which eliminates the need for virtual function tables. Dynamic dispatch is implemented without any array access but uses a simple static binary branch code. We show that this implementation makes it possible to use modern hardware very efficiently. It also allows to inline more calls even when dynamic dispatch is required. Some more dispatch sites are removed after the type inference algorithm has been performed, if the different branches of a dispatch site lead to the same code. &lt;br /&gt;
&lt;br /&gt;
The advantage of this approach is that it greatly speeds up execution time and considerably decreases the amount of generated code. &lt;br /&gt;
&lt;br /&gt;
[[File:oopsla97.pdf|Download the entire article]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Compiler Support to Customize the Mark and Sweep Algorithm. ==&lt;br /&gt;
Dominique COLNET, Philippe COUCAUD and Olivier ZENDRA. &lt;br /&gt;
&lt;br /&gt;
''ACM SIGPLAN International Symposium on Memory Management (ISMM'98),&lt;br /&gt;
Vancouver, BC, Canada, October 17-19, 1998, pages 154-165.''&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' &lt;br /&gt;
&lt;br /&gt;
Mark and sweep garbage collectors (GC) are classical but still very efficient automatic memory management systems. Although challenged by other kinds of systems, such as copying collectors, mark and sweep collectors remain among the best in terms of performance. &lt;br /&gt;
&lt;br /&gt;
This paper describes our implementation of an efficient mark and sweep garbage collector tailored to each program. Compiler support provides the type information required to statically and automatically generate this customized garbage collector. The segregation of objects by type allows the production of a more efficient GC code. This technique, implemented in SmallEiffel, our compiler for the object-oriented language Eiffel, is applicable to other languages and other garbage collection algorithms, be they distributed or not. &lt;br /&gt;
&lt;br /&gt;
We present the results obtained on programs featuring a variety of programming styles and compare our results to a well-know and high quality garbage collector. &lt;br /&gt;
&lt;br /&gt;
[[File:ismm98.pdf|Download the entire article]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Optimizations of Eiffel programs: SmallEiffel, The GNU Eiffel Compiler. ==&lt;br /&gt;
Dominique COLNET and Olivier ZENDRA.&lt;br /&gt;
&lt;br /&gt;
''29th conference on Technology of Object-Oriented Languages and Systems (TOOLS Europe'99), IEEE Computer Society&lt;br /&gt;
Nancy, France, June 7-10, 1999, pages 341--350.''&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' &lt;br /&gt;
&lt;br /&gt;
The design of the Eiffel language makes it possible to perform global optimizations on Eiffel programs. In this paper, we describe some of the techniques we used in SmallEiffel, The GNU Eiffel Compiler, to generate highly efficient executables for Eiffel programs. Most of these techniques --- related to global analysis or not --- may also be applied to other object-oriented languages. &lt;br /&gt;
&lt;br /&gt;
[[File:tools-europe-99.pdf|Download the entire article]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Adding external iterators to an existing Eiffel class library. ==&lt;br /&gt;
Olivier ZENDRA and Dominique COLNET.&lt;br /&gt;
&lt;br /&gt;
''32nd conference on Technology of Object-Oriented Languages and Systems (TOOLS Pacific'99), IEEE Computer Society&lt;br /&gt;
Melbourne, Australia, 22-25 November 1999, pages xx--yy.''&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' &lt;br /&gt;
&lt;br /&gt;
This paper discusses common iteration schemes and highlights the interest of using explicit iterators. The advantages of external iterators are compared to those of internalized iterators. The integration of an iterator class hierarchy to an existing library without modifying the latter is detailed. This integration brings an extra level of abstraction to the library, which thus becomes more flexible, more adapted to certain design patterns and hence can be used in a higher-level way. Such an integration is not only possible, but can even be done in an optimized way, taking into account the specific structure of the collection traversed. A slight extension of existing class libraries can also be implemented that does not cause any compatibility problem and does not break existing code, but allows even further abstraction and makes it easier for the developer to use high-level, optimized, external iterators. &lt;br /&gt;
&lt;br /&gt;
[[File:tools-pacific-1999.pdf|Download the entire article]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Conformance of agents in the Eiffel language ==&lt;br /&gt;
Philippe Ribet, Cyril Adrian, Olivier Zendra, and Dominique Colnet&lt;br /&gt;
&lt;br /&gt;
''Conference on Technology of Object-Oriented Languages and Systems (TOOLS USA 2003)&lt;br /&gt;
Published in Journal Of Technology (JOT), April 2004.''&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' &lt;br /&gt;
&lt;br /&gt;
In Eiffel, the notion of agent makes it possible to describe and manipulate computation parts (i.e. operations) like ordinary data. Operations may be partially described, may be passed as ordinary data and may have their execution delayed. Agents are very convenient for many purposes, such as going through data structures and implementing call-backs in graphical libraries.&lt;br /&gt;
&lt;br /&gt;
Although they can be seen as normal objects, they convey specific issues, pertaining to standard conformance rules for generic types. To get rid of existing problems, this paper proposes an adaptation of conformance rules for agents that provides much more flexibility while retaining all the benefits of a strong static typing system.&lt;br /&gt;
&lt;br /&gt;
[[File:jot2004.pdf|Download the entire article]]&lt;br /&gt;
&lt;br /&gt;
[http://www.jot.fm/issues/issue_2004_04/article7|HTML version at the JOT web site]&lt;br /&gt;
&lt;br /&gt;
== Non-Conforming Inheritance: the SmartEiffel Experiment of a High-Level Mechanism ==&lt;br /&gt;
Frederic Merizen, Dominique Colnet, Philippe Ribet and Cyril Adrian&lt;br /&gt;
&lt;br /&gt;
''Rejected submission for OOPSLA 2005.''&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' &lt;br /&gt;
&lt;br /&gt;
Non-conforming inheritance (NC-inheritance) is a mechanism recently introduced in the new Eiffel definition. The NC-inheritance mechanism is similar to traditional inheritance but it disallows polymorphism. This simple mechanism appears to be useful in many situations because it allows the designer to capture more design decisions in the source code itself. Furthermore this mechanism helps compilers to statically remove more dynamic dispatch code. NC-inheritance incurs no type-system soundness problems even when arguments are redefined covariantly or when the exportation is restricted in the subclass. Out of the Eiffel world, the NC-inheritance mechanism can be useful to add a no-penalty and no-risk multiple-inheritance-like facility. For instance the Java language, initially designed for simple-inheritance, could be a possible candidate for an NC-inherit\-ance extension. &lt;br /&gt;
&lt;br /&gt;
[[File:insert2005.pdf|Download the entire article]]&lt;/div&gt;</summary>
		<author><name>Cadrian</name></author>
	</entry>
	<entry>
		<id>https://wiki.liberty-eiffel.org/index.php?title=Papers&amp;diff=1809</id>
		<title>Papers</title>
		<link rel="alternate" type="text/html" href="https://wiki.liberty-eiffel.org/index.php?title=Papers&amp;diff=1809"/>
		<updated>2013-11-22T12:41:56Z</updated>

		<summary type="html">&lt;p&gt;Cadrian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Those papers were written for SmallEiffel and SmartEiffel, but they still give good insights on the workings of Liberty Eiffel.&lt;br /&gt;
&lt;br /&gt;
== Type Inference for Late Binding. The SmallEiffel Compiler ==&lt;br /&gt;
Suzanne COLLIN, Dominique COLNET and Olivier ZENDRA &lt;br /&gt;
&lt;br /&gt;
''Joint Modular Languages Conference 1997 (JMLC'97),&lt;br /&gt;
Volume 1204 of Lecture Notes in Computer Sciences, pages 67-81.''&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' &lt;br /&gt;
&lt;br /&gt;
The SmallEiffel compiler uses a simple type inference mechanism to translate Eiffel source code to C code. The most important aspect in our technique is that many occurrences of late binding are replaced by static binding. Moreover, when dynamic dispatch cannot be removed, inlining is still possible. The advantage of this approach is that is speeds up execution time and decreases considerably the amount of generated code. SmallEiffel compiler source code itself is a large scale benchmark used to show the quality of our results. Obviously, this efficient technique can also be used for class-based languages without dynamic class creation: for example, it is possible for C++ or Java and not possible for SmallTalk. &lt;br /&gt;
&lt;br /&gt;
[[File:jmlc97.pdf|Download the entire article]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Efficient Dynamic Dispatch without Virtual Function Tables. The SmallEiffel Compiler. ==&lt;br /&gt;
Olivier ZENDRA, Dominique COLNET, Suzanne COLLIN. &lt;br /&gt;
&lt;br /&gt;
''12th Annual ACM SIGPLAN Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA'97),&lt;br /&gt;
Volume 32, Issue 10 --- Atlanta, GA, USA, October 1997, pages 125-141.''&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' &lt;br /&gt;
&lt;br /&gt;
SmallEiffel is an Eiffel compiler which uses a fast simple inference mechanism to remove most last binding calls, replacing them by static bindings. Starting from the system's entry point, it compiles only statically living code, which saves compiling and then removing dead code. As the whole system is analyzed at compile time, multiple inheritance and genericity do not cause any overhead. &lt;br /&gt;
&lt;br /&gt;
SmallEiffel features a coding scheme which eliminates the need for virtual function tables. Dynamic dispatch is implemented without any array access but uses a simple static binary branch code. We show that this implementation makes it possible to use modern hardware very efficiently. It also allows to inline more calls even when dynamic dispatch is required. Some more dispatch sites are removed after the type inference algorithm has been performed, if the different branches of a dispatch site lead to the same code. &lt;br /&gt;
&lt;br /&gt;
The advantage of this approach is that it greatly speeds up execution time and considerably decreases the amount of generated code. &lt;br /&gt;
&lt;br /&gt;
[[File:oopsla97.pdf|Download the entire article]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Compiler Support to Customize the Mark and Sweep Algorithm. ==&lt;br /&gt;
Dominique COLNET, Philippe COUCAUD and Olivier ZENDRA. &lt;br /&gt;
&lt;br /&gt;
''ACM SIGPLAN International Symposium on Memory Management (ISMM'98),&lt;br /&gt;
Vancouver, BC, Canada, October 17-19, 1998, pages 154-165.''&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' &lt;br /&gt;
&lt;br /&gt;
Mark and sweep garbage collectors (GC) are classical but still very efficient automatic memory management systems. Although challenged by other kinds of systems, such as copying collectors, mark and sweep collectors remain among the best in terms of performance. &lt;br /&gt;
&lt;br /&gt;
This paper describes our implementation of an efficient mark and sweep garbage collector tailored to each program. Compiler support provides the type information required to statically and automatically generate this customized garbage collector. The segregation of objects by type allows the production of a more efficient GC code. This technique, implemented in SmallEiffel, our compiler for the object-oriented language Eiffel, is applicable to other languages and other garbage collection algorithms, be they distributed or not. &lt;br /&gt;
&lt;br /&gt;
We present the results obtained on programs featuring a variety of programming styles and compare our results to a well-know and high quality garbage collector. &lt;br /&gt;
&lt;br /&gt;
[[File:ismm98.pdf|Download the entire article]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Optimizations of Eiffel programs: SmallEiffel, The GNU Eiffel Compiler. ==&lt;br /&gt;
Dominique COLNET and Olivier ZENDRA.&lt;br /&gt;
&lt;br /&gt;
''29th conference on Technology of Object-Oriented Languages and Systems (TOOLS Europe'99), IEEE Computer Society&lt;br /&gt;
Nancy, France, June 7-10, 1999, pages 341--350.''&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' &lt;br /&gt;
&lt;br /&gt;
The design of the Eiffel language makes it possible to perform global optimizations on Eiffel programs. In this paper, we describe some of the techniques we used in SmallEiffel, The GNU Eiffel Compiler, to generate highly efficient executables for Eiffel programs. Most of these techniques --- related to global analysis or not --- may also be applied to other object-oriented languages. &lt;br /&gt;
&lt;br /&gt;
[[File:tools-europe-99.pdf|Download the entire article]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Adding external iterators to an existing Eiffel class library. ==&lt;br /&gt;
Olivier ZENDRA and Dominique COLNET.&lt;br /&gt;
&lt;br /&gt;
''32nd conference on Technology of Object-Oriented Languages and Systems (TOOLS Pacific'99), IEEE Computer Society&lt;br /&gt;
Melbourne, Australia, 22-25 November 1999, pages xx--yy.''&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' &lt;br /&gt;
&lt;br /&gt;
This paper discusses common iteration schemes and highlights the interest of using explicit iterators. The advantages of external iterators are compared to those of internalized iterators. The integration of an iterator class hierarchy to an existing library without modifying the latter is detailed. This integration brings an extra level of abstraction to the library, which thus becomes more flexible, more adapted to certain design patterns and hence can be used in a higher-level way. Such an integration is not only possible, but can even be done in an optimized way, taking into account the specific structure of the collection traversed. A slight extension of existing class libraries can also be implemented that does not cause any compatibility problem and does not break existing code, but allows even further abstraction and makes it easier for the developer to use high-level, optimized, external iterators. &lt;br /&gt;
&lt;br /&gt;
[[File:tools-pacific-1999.pdf|Download the entire article]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Conformance of agents in the Eiffel language ==&lt;br /&gt;
Philippe Ribet, Cyril Adrian, Olivier Zendra, and Dominique Colnet&lt;br /&gt;
&lt;br /&gt;
''Conference on Technology of Object-Oriented Languages and Systems (TOOLS USA 2003)&lt;br /&gt;
Published in Journal Of Technology (JOT), April 2004.''&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' &lt;br /&gt;
&lt;br /&gt;
In Eiffel, the notion of agent makes it possible to describe and manipulate computation parts (i.e. operations) like ordinary data. Operations may be partially described, may be passed as ordinary data and may have their execution delayed. Agents are very convenient for many purposes, such as going through data structures and implementing call-backs in graphical libraries.&lt;br /&gt;
&lt;br /&gt;
Although they can be seen as normal objects, they convey specific issues, pertaining to standard conformance rules for generic types. To get rid of existing problems, this paper proposes an adaptation of conformance rules for agents that provides much more flexibility while retaining all the benefits of a strong static typing system.&lt;br /&gt;
&lt;br /&gt;
[[File:jot2004.pdf|Download the entire article]]&lt;br /&gt;
[[http://www.jot.fm/issues/issue_2004_04/article7|HTML version at the JOT web site]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Non-Conforming Inheritance: the SmartEiffel Experiment of a High-Level Mechanism ==&lt;br /&gt;
Frederic Merizen, Dominique Colnet, Philippe Ribet and Cyril Adrian&lt;br /&gt;
&lt;br /&gt;
''Rejected submission for OOPSLA 2005.''&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' &lt;br /&gt;
&lt;br /&gt;
Non-conforming inheritance (NC-inheritance) is a mechanism recently introduced in the new Eiffel definition. The NC-inheritance mechanism is similar to traditional inheritance but it disallows polymorphism. This simple mechanism appears to be useful in many situations because it allows the designer to capture more design decisions in the source code itself. Furthermore this mechanism helps compilers to statically remove more dynamic dispatch code. NC-inheritance incurs no type-system soundness problems even when arguments are redefined covariantly or when the exportation is restricted in the subclass. Out of the Eiffel world, the NC-inheritance mechanism can be useful to add a no-penalty and no-risk multiple-inheritance-like facility. For instance the Java language, initially designed for simple-inheritance, could be a possible candidate for an NC-inherit\-ance extension. &lt;br /&gt;
&lt;br /&gt;
[[File:insert2005.pdf|Download the entire article]]&lt;/div&gt;</summary>
		<author><name>Cadrian</name></author>
	</entry>
	<entry>
		<id>https://wiki.liberty-eiffel.org/index.php?title=Papers&amp;diff=1808</id>
		<title>Papers</title>
		<link rel="alternate" type="text/html" href="https://wiki.liberty-eiffel.org/index.php?title=Papers&amp;diff=1808"/>
		<updated>2013-11-22T12:40:33Z</updated>

		<summary type="html">&lt;p&gt;Cadrian: Created page with &amp;quot;Those papers were written for SmallEiffel and SmartEiffel, but they still give good insights on the workings of Liberty Eiffel.  == Type Inference for Late Binding. The SmallE...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Those papers were written for SmallEiffel and SmartEiffel, but they still give good insights on the workings of Liberty Eiffel.&lt;br /&gt;
&lt;br /&gt;
== Type Inference for Late Binding. The SmallEiffel Compiler ==&lt;br /&gt;
Suzanne COLLIN, Dominique COLNET and Olivier ZENDRA &lt;br /&gt;
&lt;br /&gt;
''Joint Modular Languages Conference 1997 (JMLC'97),&lt;br /&gt;
Volume 1204 of Lecture Notes in Computer Sciences, pages 67-81.''&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' &lt;br /&gt;
&lt;br /&gt;
The SmallEiffel compiler uses a simple type inference mechanism to translate Eiffel source code to C code. The most important aspect in our technique is that many occurrences of late binding are replaced by static binding. Moreover, when dynamic dispatch cannot be removed, inlining is still possible. The advantage of this approach is that is speeds up execution time and decreases considerably the amount of generated code. SmallEiffel compiler source code itself is a large scale benchmark used to show the quality of our results. Obviously, this efficient technique can also be used for class-based languages without dynamic class creation: for example, it is possible for C++ or Java and not possible for SmallTalk. &lt;br /&gt;
&lt;br /&gt;
[[File:jmlc97.pdf Download the entire article]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Efficient Dynamic Dispatch without Virtual Function Tables. The SmallEiffel Compiler. ==&lt;br /&gt;
Olivier ZENDRA, Dominique COLNET, Suzanne COLLIN. &lt;br /&gt;
&lt;br /&gt;
''12th Annual ACM SIGPLAN Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA'97),&lt;br /&gt;
Volume 32, Issue 10 --- Atlanta, GA, USA, October 1997, pages 125-141.''&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' &lt;br /&gt;
&lt;br /&gt;
SmallEiffel is an Eiffel compiler which uses a fast simple inference mechanism to remove most last binding calls, replacing them by static bindings. Starting from the system's entry point, it compiles only statically living code, which saves compiling and then removing dead code. As the whole system is analyzed at compile time, multiple inheritance and genericity do not cause any overhead. &lt;br /&gt;
&lt;br /&gt;
SmallEiffel features a coding scheme which eliminates the need for virtual function tables. Dynamic dispatch is implemented without any array access but uses a simple static binary branch code. We show that this implementation makes it possible to use modern hardware very efficiently. It also allows to inline more calls even when dynamic dispatch is required. Some more dispatch sites are removed after the type inference algorithm has been performed, if the different branches of a dispatch site lead to the same code. &lt;br /&gt;
&lt;br /&gt;
The advantage of this approach is that it greatly speeds up execution time and considerably decreases the amount of generated code. &lt;br /&gt;
&lt;br /&gt;
[[File:oopsla97.pdf Download the entire article]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Compiler Support to Customize the Mark and Sweep Algorithm. ==&lt;br /&gt;
Dominique COLNET, Philippe COUCAUD and Olivier ZENDRA. &lt;br /&gt;
&lt;br /&gt;
''ACM SIGPLAN International Symposium on Memory Management (ISMM'98),&lt;br /&gt;
Vancouver, BC, Canada, October 17-19, 1998, pages 154-165.''&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' &lt;br /&gt;
&lt;br /&gt;
Mark and sweep garbage collectors (GC) are classical but still very efficient automatic memory management systems. Although challenged by other kinds of systems, such as copying collectors, mark and sweep collectors remain among the best in terms of performance. &lt;br /&gt;
&lt;br /&gt;
This paper describes our implementation of an efficient mark and sweep garbage collector tailored to each program. Compiler support provides the type information required to statically and automatically generate this customized garbage collector. The segregation of objects by type allows the production of a more efficient GC code. This technique, implemented in SmallEiffel, our compiler for the object-oriented language Eiffel, is applicable to other languages and other garbage collection algorithms, be they distributed or not. &lt;br /&gt;
&lt;br /&gt;
We present the results obtained on programs featuring a variety of programming styles and compare our results to a well-know and high quality garbage collector. &lt;br /&gt;
&lt;br /&gt;
[[File:ismm98.pdf Download the entire article]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Optimizations of Eiffel programs: SmallEiffel, The GNU Eiffel Compiler. ==&lt;br /&gt;
Dominique COLNET and Olivier ZENDRA.&lt;br /&gt;
&lt;br /&gt;
''29th conference on Technology of Object-Oriented Languages and Systems (TOOLS Europe'99), IEEE Computer Society&lt;br /&gt;
Nancy, France, June 7-10, 1999, pages 341--350.''&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' &lt;br /&gt;
&lt;br /&gt;
The design of the Eiffel language makes it possible to perform global optimizations on Eiffel programs. In this paper, we describe some of the techniques we used in SmallEiffel, The GNU Eiffel Compiler, to generate highly efficient executables for Eiffel programs. Most of these techniques --- related to global analysis or not --- may also be applied to other object-oriented languages. &lt;br /&gt;
&lt;br /&gt;
[[File:tools-europe-99.pdf Download the entire article]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Adding external iterators to an existing Eiffel class library. ==&lt;br /&gt;
Olivier ZENDRA and Dominique COLNET.&lt;br /&gt;
&lt;br /&gt;
''32nd conference on Technology of Object-Oriented Languages and Systems (TOOLS Pacific'99), IEEE Computer Society&lt;br /&gt;
Melbourne, Australia, 22-25 November 1999, pages xx--yy.''&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' &lt;br /&gt;
&lt;br /&gt;
This paper discusses common iteration schemes and highlights the interest of using explicit iterators. The advantages of external iterators are compared to those of internalized iterators. The integration of an iterator class hierarchy to an existing library without modifying the latter is detailed. This integration brings an extra level of abstraction to the library, which thus becomes more flexible, more adapted to certain design patterns and hence can be used in a higher-level way. Such an integration is not only possible, but can even be done in an optimized way, taking into account the specific structure of the collection traversed. A slight extension of existing class libraries can also be implemented that does not cause any compatibility problem and does not break existing code, but allows even further abstraction and makes it easier for the developer to use high-level, optimized, external iterators. &lt;br /&gt;
&lt;br /&gt;
[[File:tools-pacific-1999.pdf Download the entire article]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Conformance of agents in the Eiffel language ==&lt;br /&gt;
Philippe Ribet, Cyril Adrian, Olivier Zendra, and Dominique Colnet&lt;br /&gt;
&lt;br /&gt;
''Conference on Technology of Object-Oriented Languages and Systems (TOOLS USA 2003)&lt;br /&gt;
Published in Journal Of Technology (JOT), April 2004.''&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' &lt;br /&gt;
&lt;br /&gt;
In Eiffel, the notion of agent makes it possible to describe and manipulate computation parts (i.e. operations) like ordinary data. Operations may be partially described, may be passed as ordinary data and may have their execution delayed. Agents are very convenient for many purposes, such as going through data structures and implementing call-backs in graphical libraries.&lt;br /&gt;
&lt;br /&gt;
Although they can be seen as normal objects, they convey specific issues, pertaining to standard conformance rules for generic types. To get rid of existing problems, this paper proposes an adaptation of conformance rules for agents that provides much more flexibility while retaining all the benefits of a strong static typing system.&lt;br /&gt;
&lt;br /&gt;
[[File:jot2004.pdf Download the entire article]]&lt;br /&gt;
[[http://www.jot.fm/issues/issue_2004_04/article7 HTML version at JOT web site]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Non-Conforming Inheritance: the SmartEiffel Experiment of a High-Level Mechanism ==&lt;br /&gt;
Frederic Merizen, Dominique Colnet, Philippe Ribet and Cyril Adrian&lt;br /&gt;
&lt;br /&gt;
''Rejected submission for OOPSLA 2005.''&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' &lt;br /&gt;
&lt;br /&gt;
Non-conforming inheritance (NC-inheritance) is a mechanism recently introduced in the new Eiffel definition. The NC-inheritance mechanism is similar to traditional inheritance but it disallows polymorphism. This simple mechanism appears to be useful in many situations because it allows the designer to capture more design decisions in the source code itself. Furthermore this mechanism helps compilers to statically remove more dynamic dispatch code. NC-inheritance incurs no type-system soundness problems even when arguments are redefined covariantly or when the exportation is restricted in the subclass. Out of the Eiffel world, the NC-inheritance mechanism can be useful to add a no-penalty and no-risk multiple-inheritance-like facility. For instance the Java language, initially designed for simple-inheritance, could be a possible candidate for an NC-inherit\-ance extension. &lt;br /&gt;
&lt;br /&gt;
[[File:insert2005.pdf Download the entire article]]&lt;/div&gt;</summary>
		<author><name>Cadrian</name></author>
	</entry>
	<entry>
		<id>https://wiki.liberty-eiffel.org/index.php?title=Table_of_contents&amp;diff=1807</id>
		<title>Table of contents</title>
		<link rel="alternate" type="text/html" href="https://wiki.liberty-eiffel.org/index.php?title=Table_of_contents&amp;diff=1807"/>
		<updated>2013-11-22T12:33:09Z</updated>

		<summary type="html">&lt;p&gt;Cadrian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''LibertyEiffel Wiki'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;History&amp;quot;&amp;gt;&lt;br /&gt;
'''1''' History and goals of the LibertyEiffel project&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''1.1''' [[Introduction]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''1.2''' [[Versions history|All LibertyEiffel versions]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;Lecture&amp;quot;&amp;gt;&lt;br /&gt;
'''2''' Lecture on object-oriented programming and design by contract in Eiffel&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''2.1''' [[Dynamic dispatch]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''2.2''' [[Comparison of objects|Comparison of objects]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''2.3''' [[Cloning objects]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;Library&amp;quot;&amp;gt;&lt;br /&gt;
'''3''' The LibertEiffel general purpose library&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''3.1''' [[Library interface|How to use the library]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''3.2''' [[Library design|Design of the library]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''3.3''' [[Library Wrappers|How to use existing libraries in LibertyEiffel (wrappers)]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;Tutorial&amp;quot;&amp;gt;&lt;br /&gt;
'''4''' Build with LibertyEiffel&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''4.1''' [[Tutorial tour|Guided tour of the tutorial]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''4.2''' [[Build your library]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''4.3''' [[sedb|Debug your programs]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''4.4''' [[profile|Profile your programs]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;Tools&amp;quot;&amp;gt;&lt;br /&gt;
'''5''' [[Tools|LibertyEiffel's tools documentation]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;Eiffel&amp;quot;&amp;gt;&lt;br /&gt;
'''6''' The Eiffel language of LibertyEiffel&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''6.1''' [[System defintion]] of Eiffel&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''6.2''' [[Syntax diagrams]] of Eiffel&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''6.3''' [[Expanded or reference|Expanded object or reference object]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''6.4''' [[Typing policy|Validity of assignments and feature redefinitions]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''6.5''' [[Current|What you need to know about &amp;lt;TT&amp;gt;Current&amp;lt;/TT&amp;gt;]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''6.6''' [[Void|A definition of &amp;lt;TT&amp;gt;Void&amp;lt;/TT&amp;gt;]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''6.7''' [[Once]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''6.8''' [[Tuple]]s&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''6.9''' [[Agent]]s&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''6.10''' [[Precursor]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''6.11''' [[Manifest storage notation]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''6.12''' [[Dynamic type testing]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''6.13''' [[Type of integer constants]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''6.14''' [[SCOOP]] - Concurrency in LibertyEiffel&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''6.15''' [[ECMA]] - The ECMA standard andLiberty&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''7''' [[FAQ|The LibertyEiffel FAQ]]&lt;br /&gt;
&lt;br /&gt;
'''8''' [[Glossary]]&lt;br /&gt;
&lt;br /&gt;
'''9''' [[Papers]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;Appendices&amp;quot;&amp;gt;&lt;br /&gt;
'''10''' Appendices&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''10.1''' [[Author guidelines]] for this wiki&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''10.2''' Why there are [[no threads]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''10.3''' [[Gc info|The output of the &amp;lt;tt&amp;gt;-gc_info&amp;lt;/tt&amp;gt; option]].&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''11''' [[Bibliography]]&lt;br /&gt;
&lt;br /&gt;
'''12''' [[Manual index|Index]]&lt;/div&gt;</summary>
		<author><name>Cadrian</name></author>
	</entry>
	<entry>
		<id>https://wiki.liberty-eiffel.org/index.php?title=Table_of_contents&amp;diff=1806</id>
		<title>Table of contents</title>
		<link rel="alternate" type="text/html" href="https://wiki.liberty-eiffel.org/index.php?title=Table_of_contents&amp;diff=1806"/>
		<updated>2013-11-22T12:32:38Z</updated>

		<summary type="html">&lt;p&gt;Cadrian: new section: papers&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''LibertyEiffel Wiki'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;History&amp;quot;&amp;gt;&lt;br /&gt;
'''1''' History and goals of the LibertyEiffel project&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''1.1''' [[Introduction]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''1.2''' [[Versions history|All LibertyEiffel versions]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;Lecture&amp;quot;&amp;gt;&lt;br /&gt;
'''2''' Lecture on object-oriented programming and design by contract in Eiffel&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''2.1''' [[Dynamic dispatch]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''2.2''' [[Comparison of objects|Comparison of objects]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''2.3''' [[Cloning objects]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;Library&amp;quot;&amp;gt;&lt;br /&gt;
'''3''' The LibertEiffel general purpose library&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''3.1''' [[Library interface|How to use the library]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''3.2''' [[Library design|Design of the library]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''3.3''' [[Library Wrappers|How to use existing libraries in LibertyEiffel (wrappers)]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;Tutorial&amp;quot;&amp;gt;&lt;br /&gt;
'''4''' Build with LibertyEiffel&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''4.1''' [[Tutorial tour|Guided tour of the tutorial]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''4.2''' [[Build your library]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''4.3''' [[sedb|Debug your programs]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''4.4''' [[profile|Profile your programs]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;Tools&amp;quot;&amp;gt;&lt;br /&gt;
'''5''' [[Tools|LibertyEiffel's tools documentation]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;Eiffel&amp;quot;&amp;gt;&lt;br /&gt;
'''6''' The Eiffel language of LibertyEiffel&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''6.1''' [[System defintion]] of Eiffel&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''6.2''' [[Syntax diagrams]] of Eiffel&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''6.3''' [[Expanded or reference|Expanded object or reference object]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''6.4''' [[Typing policy|Validity of assignments and feature redefinitions]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''6.5''' [[Current|What you need to know about &amp;lt;TT&amp;gt;Current&amp;lt;/TT&amp;gt;]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''6.6''' [[Void|A definition of &amp;lt;TT&amp;gt;Void&amp;lt;/TT&amp;gt;]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''6.7''' [[Once]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''6.8''' [[Tuple]]s&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''6.9''' [[Agent]]s&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''6.10''' [[Precursor]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''6.11''' [[Manifest storage notation]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''6.12''' [[Dynamic type testing]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''6.13''' [[Type of integer constants]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''6.14''' [[SCOOP]] - Concurrency in LibertyEiffel&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''6.15''' [[ECMA]] - The ECMA standard andLiberty&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''7''' [[FAQ|The LibertyEiffel FAQ]]&lt;br /&gt;
&lt;br /&gt;
'''8''' [[Glossary]]&lt;br /&gt;
&lt;br /&gt;
'''9''' [[Papers]]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;Appendices&amp;quot;&amp;gt;&lt;br /&gt;
'''10''' Appendices&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''10.1''' [[Author guidelines]] for this wiki&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''10.2''' Why there are [[no threads]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''10.3''' [[Gc info|The output of the &amp;lt;tt&amp;gt;-gc_info&amp;lt;/tt&amp;gt; option]].&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''11''' [[Bibliography]]&lt;br /&gt;
&lt;br /&gt;
'''12''' [[Manual index|Index]]&lt;/div&gt;</summary>
		<author><name>Cadrian</name></author>
	</entry>
	<entry>
		<id>https://wiki.liberty-eiffel.org/index.php?title=File:Agents-fig1.png&amp;diff=1805</id>
		<title>File:Agents-fig1.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.liberty-eiffel.org/index.php?title=File:Agents-fig1.png&amp;diff=1805"/>
		<updated>2013-11-21T11:23:45Z</updated>

		<summary type="html">&lt;p&gt;Cadrian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Cadrian</name></author>
	</entry>
	<entry>
		<id>https://wiki.liberty-eiffel.org/index.php?title=Agent&amp;diff=1803</id>
		<title>Agent</title>
		<link rel="alternate" type="text/html" href="https://wiki.liberty-eiffel.org/index.php?title=Agent&amp;diff=1803"/>
		<updated>2013-11-20T14:26:54Z</updated>

		<summary type="html">&lt;p&gt;Cadrian: /* Conformance rules */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In Eiffel, the notion of agent makes it possible to describe and manipulate computation parts (i.e. operations) like ordinary data. Operations may be partially described, may be passed as ordinary data and may have their execution delayed. Agents are very convenient for many purposes, such as going through data structures and implementing call-backs in graphical libraries.&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
The agent mechanism gives the Eiffel object-oriented language the ability to handle operations, or commands, as such, like in functional programming languages.&lt;br /&gt;
&lt;br /&gt;
Agents are a new type of objects that allow to store code to be executed and data in an object, named the agent. In Eiffel, four types of agents exist: a deferred type [[library_class:ROUTINE|&amp;lt;tt&amp;gt;ROUTINE&amp;lt;/tt&amp;gt;]], and three concrete types [[library_class:PROCEDURE|&amp;lt;tt&amp;gt;PROCEDURE&amp;lt;/tt&amp;gt;]], [[library_class:FUNCTION|&amp;lt;tt&amp;gt;FUNCTION&amp;lt;/tt&amp;gt;]] and [[library_class:PREDICATE|&amp;lt;tt&amp;gt;PREDICATE&amp;lt;/tt&amp;gt;]].&lt;br /&gt;
&lt;br /&gt;
The following figure shows their inheritance relationship:&lt;br /&gt;
&lt;br /&gt;
[[File:Agents-fig1.png]]&lt;br /&gt;
&lt;br /&gt;
Agents are a way of storing operations for later execution. They are objects. As such, they can be stored, compared to &amp;lt;tt&amp;gt;Void&amp;lt;/tt&amp;gt;, or passed around to other software components. The operation stored in the agent may then be executed whenever the component decides. The most common uses of agents comprise delayed calls, multiple calls (on different values), lazy evaluation, and so on.&lt;br /&gt;
&lt;br /&gt;
== Conformance rules ==&lt;br /&gt;
&lt;br /&gt;
The [[library_class:ROUTINE|&amp;lt;tt&amp;gt;ROUTINE&amp;lt;/tt&amp;gt;]] types are generic types with more semantic. As [[library_class:ROUTINE|&amp;lt;tt&amp;gt;ROUTINE&amp;lt;/tt&amp;gt;]] types do not have their own conformance rules one may think that the generic types rules apply. We will hold true this assumption in this chapter, and show that we can make dogs eat tomatoes.&lt;br /&gt;
&lt;br /&gt;
The [[library_class:ROUTINE|&amp;lt;tt&amp;gt;ROUTINE&amp;lt;/tt&amp;gt;]] type is a generic type with one formal type parameter: [[library_class:ROUTINE|&amp;lt;tt&amp;gt;ROUTINE&amp;lt;/tt&amp;gt;]]&amp;lt;tt&amp;gt;[OPEN -&amp;gt; &amp;lt;/tt&amp;gt;[[library_class:TUPLE|&amp;lt;tt&amp;gt;TUPLE&amp;lt;/tt&amp;gt;]]&amp;lt;tt&amp;gt;]&amp;lt;/tt&amp;gt;. A type [[library_class:ROUTINE|&amp;lt;tt&amp;gt;ROUTINE&amp;lt;/tt&amp;gt;]]&amp;lt;tt&amp;gt;[O1]&amp;lt;/tt&amp;gt; conforms to a type [[library_class:ROUTINE|&amp;lt;tt&amp;gt;ROUTINE&amp;lt;/tt&amp;gt;]]&amp;lt;tt&amp;gt;[O2]&amp;lt;/tt&amp;gt; only if &amp;lt;tt&amp;gt;O2&amp;lt;/tt&amp;gt; conforms to &amp;lt;tt&amp;gt;O1&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The [[library_class:PROCEDURE|&amp;lt;tt&amp;gt;PROCEDURE&amp;lt;/tt&amp;gt;]] type inherits from [[library_class:ROUTINE|&amp;lt;tt&amp;gt;ROUTINE&amp;lt;/tt&amp;gt;]], and has the same formal type parameter: [[library_class:PROCEDURE|&amp;lt;tt&amp;gt;PROCEDURE&amp;lt;/tt&amp;gt;]]&amp;lt;tt&amp;gt;[OPEN –&amp;gt; &amp;lt;/tt&amp;gt;[[library_class:TUPLE|&amp;lt;tt&amp;gt;TUPLE&amp;lt;/tt&amp;gt;]]&amp;lt;tt&amp;gt;]&amp;lt;/tt&amp;gt;. Its conformance rule is thus the same as for [[library_class:ROUTINE|&amp;lt;tt&amp;gt;ROUTINE&amp;lt;/tt&amp;gt;]].&lt;br /&gt;
&lt;br /&gt;
The [[library_class:FUNCTION|&amp;lt;tt&amp;gt;FUNCTION&amp;lt;/tt&amp;gt;]] type inherits from [[library_class:ROUTINE|&amp;lt;tt&amp;gt;ROUTINE&amp;lt;/tt&amp;gt;]], and has two formal type parameters: [[library_class:FUNCTION|&amp;lt;tt&amp;gt;FUNCTION&amp;lt;/tt&amp;gt;]]&amp;lt;tt&amp;gt;[OPEN –&amp;gt; &amp;lt;/tt&amp;gt;[[library_class:TUPLE|&amp;lt;tt&amp;gt;TUPLE&amp;lt;/tt&amp;gt;]]&amp;lt;tt&amp;gt;, RESULT_TYPE]&amp;lt;/tt&amp;gt;. According to the conformance rule for generic types, a type [[library_class:FUNCTION|&amp;lt;tt&amp;gt;FUNCTION&amp;lt;/tt&amp;gt;]]&amp;lt;tt&amp;gt;[O1, R1]&amp;lt;/tt&amp;gt; conforms to a type [[library_class:FUNCTION|&amp;lt;tt&amp;gt;FUNCTION&amp;lt;/tt&amp;gt;]]&amp;lt;tt&amp;gt;[O2, R2]&amp;lt;/tt&amp;gt; only if &amp;lt;tt&amp;gt;O2&amp;lt;/tt&amp;gt; conforms to &amp;lt;tt&amp;gt;O1&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;R1&amp;lt;/tt&amp;gt; conforms to &amp;lt;tt&amp;gt;R2&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[library_class:PREDICATE|&amp;lt;tt&amp;gt;PREDICATE&amp;lt;/tt&amp;gt;]]&amp;lt;tt&amp;gt;[O]&amp;lt;/tt&amp;gt; type being just a shortcut for [[library_class:FUNCTION|&amp;lt;tt&amp;gt;FUNCTION&amp;lt;/tt&amp;gt;]]&amp;lt;tt&amp;gt;[O, &amp;lt;/tt&amp;gt;[[library_class:BOOLEAN|&amp;lt;tt&amp;gt;BOOLEAN&amp;lt;/tt&amp;gt;]]&amp;lt;tt&amp;gt;]&amp;lt;/tt&amp;gt;, and it has the same conformance rules as [[library_class:FUNCTION|&amp;lt;tt&amp;gt;FUNCTION&amp;lt;/tt&amp;gt;]].&lt;br /&gt;
&lt;br /&gt;
'''Note:''' You must be aware of the conformance inversion for the open arguments [[library_class:TUPLE|tuple]]. See http://www.jot.fm/issues/issue_2004_04/article7/ for the rationale.&lt;br /&gt;
&lt;br /&gt;
== Inline agents ==&lt;br /&gt;
&lt;br /&gt;
''&amp;gt; '''NB:''' The following will apply from the Bell release onwards. In Adler, inline agents are just anonymous features.''&lt;br /&gt;
&lt;br /&gt;
Inline agents are closures: they may access the arguments and local variables defined in their outside feature (called ''outside variables'').&lt;br /&gt;
&lt;br /&gt;
The usage limits are:&lt;br /&gt;
* names must be unique (i.e. shadowing an outside variable is not allowed)&lt;br /&gt;
* Result is not accessible to inline agents; one must use another local variable (rationale: if the agent is a function, what would Result refer to?)&lt;br /&gt;
* access is read-only: you cannot assign to an outside local variable (and, of course, to an argument, but that's standard Eiffel anyway)&lt;br /&gt;
&lt;br /&gt;
The technical limits are:&lt;br /&gt;
* beware of automatically allocated pointers for outside local variables, especially if the GC is not used. There is no such problem for arguments since their value cannot change throughout the execution of the outside feature&lt;br /&gt;
* expanded arguments are twinned in the inline agent context (of course)&lt;/div&gt;</summary>
		<author><name>Cadrian</name></author>
	</entry>
	<entry>
		<id>https://wiki.liberty-eiffel.org/index.php?title=Agent&amp;diff=1802</id>
		<title>Agent</title>
		<link rel="alternate" type="text/html" href="https://wiki.liberty-eiffel.org/index.php?title=Agent&amp;diff=1802"/>
		<updated>2013-11-20T14:06:30Z</updated>

		<summary type="html">&lt;p&gt;Cadrian: /* Conformance rules */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In Eiffel, the notion of agent makes it possible to describe and manipulate computation parts (i.e. operations) like ordinary data. Operations may be partially described, may be passed as ordinary data and may have their execution delayed. Agents are very convenient for many purposes, such as going through data structures and implementing call-backs in graphical libraries.&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
The agent mechanism gives the Eiffel object-oriented language the ability to handle operations, or commands, as such, like in functional programming languages.&lt;br /&gt;
&lt;br /&gt;
Agents are a new type of objects that allow to store code to be executed and data in an object, named the agent. In Eiffel, four types of agents exist: a deferred type [[library_class:ROUTINE|&amp;lt;tt&amp;gt;ROUTINE&amp;lt;/tt&amp;gt;]], and three concrete types [[library_class:PROCEDURE|&amp;lt;tt&amp;gt;PROCEDURE&amp;lt;/tt&amp;gt;]], [[library_class:FUNCTION|&amp;lt;tt&amp;gt;FUNCTION&amp;lt;/tt&amp;gt;]] and [[library_class:PREDICATE|&amp;lt;tt&amp;gt;PREDICATE&amp;lt;/tt&amp;gt;]].&lt;br /&gt;
&lt;br /&gt;
The following figure shows their inheritance relationship:&lt;br /&gt;
&lt;br /&gt;
[[File:Agents-fig1.png]]&lt;br /&gt;
&lt;br /&gt;
Agents are a way of storing operations for later execution. They are objects. As such, they can be stored, compared to &amp;lt;tt&amp;gt;Void&amp;lt;/tt&amp;gt;, or passed around to other software components. The operation stored in the agent may then be executed whenever the component decides. The most common uses of agents comprise delayed calls, multiple calls (on different values), lazy evaluation, and so on.&lt;br /&gt;
&lt;br /&gt;
== Conformance rules ==&lt;br /&gt;
&lt;br /&gt;
The [[library_class:ROUTINE|&amp;lt;tt&amp;gt;ROUTINE&amp;lt;/tt&amp;gt;]] types are generic types with more semantic. As [[library_class:ROUTINE|&amp;lt;tt&amp;gt;ROUTINE&amp;lt;/tt&amp;gt;]] types do not have their own conformance rules one may think that the generic types rules apply. We will hold true this assumption in this chapter, and show that we can make dogs eat tomatoes.&lt;br /&gt;
&lt;br /&gt;
The [[library_class:ROUTINE|&amp;lt;tt&amp;gt;ROUTINE&amp;lt;/tt&amp;gt;]] type is a generic type with one formal type parameter: [[library_class:ROUTINE|&amp;lt;tt&amp;gt;ROUTINE&amp;lt;/tt&amp;gt;]]&amp;lt;tt&amp;gt;[OPEN -&amp;gt; &amp;lt;/tt&amp;gt;[[library_class:TUPLE|&amp;lt;tt&amp;gt;TUPLE&amp;lt;/tt&amp;gt;]]&amp;lt;tt&amp;gt;]&amp;lt;/tt&amp;gt;. A type [[library_class:ROUTINE|&amp;lt;tt&amp;gt;ROUTINE&amp;lt;/tt&amp;gt;]]&amp;lt;tt&amp;gt;[O1]&amp;lt;/tt&amp;gt; conforms to a type [[library_class:ROUTINE|&amp;lt;tt&amp;gt;ROUTINE&amp;lt;/tt&amp;gt;]]&amp;lt;tt&amp;gt;[O2]&amp;lt;/tt&amp;gt; only if &amp;lt;tt&amp;gt;O2&amp;lt;/tt&amp;gt; conforms to &amp;lt;tt&amp;gt;O1&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The [[library_class:PROCEDURE|&amp;lt;tt&amp;gt;PROCEDURE&amp;lt;/tt&amp;gt;]] type inherits from [[library_class:ROUTINE|&amp;lt;tt&amp;gt;ROUTINE&amp;lt;/tt&amp;gt;]], and has the same formal type parameter: [[library_class:PROCEDURE|&amp;lt;tt&amp;gt;PROCEDURE&amp;lt;/tt&amp;gt;]]&amp;lt;tt&amp;gt;[OPEN –&amp;gt; &amp;lt;/tt&amp;gt;[[library_class:TUPLE|&amp;lt;tt&amp;gt;TUPLE&amp;lt;/tt&amp;gt;]]&amp;lt;tt&amp;gt;]&amp;lt;/tt&amp;gt;. Its conformance rule is thus the same as for [[library_class:ROUTINE|&amp;lt;tt&amp;gt;ROUTINE&amp;lt;/tt&amp;gt;]].&lt;br /&gt;
&lt;br /&gt;
The [[library_class:FUNCTION|&amp;lt;tt&amp;gt;FUNCTION&amp;lt;/tt&amp;gt;]] type inherits from [[library_class:ROUTINE|&amp;lt;tt&amp;gt;ROUTINE&amp;lt;/tt&amp;gt;]], and has two formal type parameters: [[library_class:FUNCTION|&amp;lt;tt&amp;gt;FUNCTION&amp;lt;/tt&amp;gt;]]&amp;lt;tt&amp;gt;[OPEN –&amp;gt; &amp;lt;/tt&amp;gt;[[library_class:TUPLE|&amp;lt;tt&amp;gt;TUPLE&amp;lt;/tt&amp;gt;]]&amp;lt;tt&amp;gt;, RESULT_TYPE]&amp;lt;/tt&amp;gt;. According to the conformance rule for generic types, a type [[library_class:FUNCTION|&amp;lt;tt&amp;gt;FUNCTION&amp;lt;/tt&amp;gt;]]&amp;lt;tt&amp;gt;[O1, R1]&amp;lt;/tt&amp;gt; conforms to a type [[library_class:FUNCTION|&amp;lt;tt&amp;gt;FUNCTION&amp;lt;/tt&amp;gt;]]&amp;lt;tt&amp;gt;[O2, R2]&amp;lt;/tt&amp;gt; only if &amp;lt;tt&amp;gt;O2&amp;lt;/tt&amp;gt; conforms to &amp;lt;tt&amp;gt;O1&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;R1&amp;lt;/tt&amp;gt; conforms to &amp;lt;tt&amp;gt;R2&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[library_class:PREDICATE|&amp;lt;tt&amp;gt;PREDICATE&amp;lt;/tt&amp;gt;]]&amp;lt;tt&amp;gt;[B, O]&amp;lt;/tt&amp;gt; type being just a shortcut for [[library_class:FUNCTION|&amp;lt;tt&amp;gt;FUNCTION&amp;lt;/tt&amp;gt;]]&amp;lt;tt&amp;gt;[O, &amp;lt;/tt&amp;gt;[[library_class:BOOLEAN|&amp;lt;tt&amp;gt;BOOLEAN&amp;lt;/tt&amp;gt;]]&amp;lt;tt&amp;gt;]&amp;lt;/tt&amp;gt;, and it has the same conformance rules as [[library_class:FUNCTION|&amp;lt;tt&amp;gt;FUNCTION&amp;lt;/tt&amp;gt;]].&lt;br /&gt;
&lt;br /&gt;
'''Note:''' You must be aware of the conformance inversion for the open arguments [[library_class:TUPLE|tuple]]. See http://www.jot.fm/issues/issue_2004_04/article7/ for the rationale.&lt;br /&gt;
&lt;br /&gt;
== Inline agents ==&lt;br /&gt;
&lt;br /&gt;
''&amp;gt; '''NB:''' The following will apply from the Bell release onwards. In Adler, inline agents are just anonymous features.''&lt;br /&gt;
&lt;br /&gt;
Inline agents are closures: they may access the arguments and local variables defined in their outside feature (called ''outside variables'').&lt;br /&gt;
&lt;br /&gt;
The usage limits are:&lt;br /&gt;
* names must be unique (i.e. shadowing an outside variable is not allowed)&lt;br /&gt;
* Result is not accessible to inline agents; one must use another local variable (rationale: if the agent is a function, what would Result refer to?)&lt;br /&gt;
* access is read-only: you cannot assign to an outside local variable (and, of course, to an argument, but that's standard Eiffel anyway)&lt;br /&gt;
&lt;br /&gt;
The technical limits are:&lt;br /&gt;
* beware of automatically allocated pointers for outside local variables, especially if the GC is not used. There is no such problem for arguments since their value cannot change throughout the execution of the outside feature&lt;br /&gt;
* expanded arguments are twinned in the inline agent context (of course)&lt;/div&gt;</summary>
		<author><name>Cadrian</name></author>
	</entry>
	<entry>
		<id>https://wiki.liberty-eiffel.org/index.php?title=Agent&amp;diff=1801</id>
		<title>Agent</title>
		<link rel="alternate" type="text/html" href="https://wiki.liberty-eiffel.org/index.php?title=Agent&amp;diff=1801"/>
		<updated>2013-11-20T14:05:43Z</updated>

		<summary type="html">&lt;p&gt;Cadrian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In Eiffel, the notion of agent makes it possible to describe and manipulate computation parts (i.e. operations) like ordinary data. Operations may be partially described, may be passed as ordinary data and may have their execution delayed. Agents are very convenient for many purposes, such as going through data structures and implementing call-backs in graphical libraries.&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
The agent mechanism gives the Eiffel object-oriented language the ability to handle operations, or commands, as such, like in functional programming languages.&lt;br /&gt;
&lt;br /&gt;
Agents are a new type of objects that allow to store code to be executed and data in an object, named the agent. In Eiffel, four types of agents exist: a deferred type [[library_class:ROUTINE|&amp;lt;tt&amp;gt;ROUTINE&amp;lt;/tt&amp;gt;]], and three concrete types [[library_class:PROCEDURE|&amp;lt;tt&amp;gt;PROCEDURE&amp;lt;/tt&amp;gt;]], [[library_class:FUNCTION|&amp;lt;tt&amp;gt;FUNCTION&amp;lt;/tt&amp;gt;]] and [[library_class:PREDICATE|&amp;lt;tt&amp;gt;PREDICATE&amp;lt;/tt&amp;gt;]].&lt;br /&gt;
&lt;br /&gt;
The following figure shows their inheritance relationship:&lt;br /&gt;
&lt;br /&gt;
[[File:Agents-fig1.png]]&lt;br /&gt;
&lt;br /&gt;
Agents are a way of storing operations for later execution. They are objects. As such, they can be stored, compared to &amp;lt;tt&amp;gt;Void&amp;lt;/tt&amp;gt;, or passed around to other software components. The operation stored in the agent may then be executed whenever the component decides. The most common uses of agents comprise delayed calls, multiple calls (on different values), lazy evaluation, and so on.&lt;br /&gt;
&lt;br /&gt;
== Conformance rules ==&lt;br /&gt;
&lt;br /&gt;
The [[library_class:ROUTINE|&amp;lt;tt&amp;gt;ROUTINE&amp;lt;/tt&amp;gt;]] types are generic types with more semantic. As [[library_class:ROUTINE|&amp;lt;tt&amp;gt;ROUTINE&amp;lt;/tt&amp;gt;]] types do not have their own conformance rules one may think that the generic types rules apply. We will hold true this assumption in this chapter, and show that we can make dogs eat tomatoes.&lt;br /&gt;
&lt;br /&gt;
The [[library_class:ROUTINE|&amp;lt;tt&amp;gt;ROUTINE&amp;lt;/tt&amp;gt;]] type is a generic type with one formal type parameter: [[library_class:ROUTINE|&amp;lt;tt&amp;gt;ROUTINE&amp;lt;/tt&amp;gt;]]&amp;lt;tt&amp;gt;[OPEN -&amp;gt; &amp;lt;/tt&amp;gt;[[library_class:TUPLE|&amp;lt;tt&amp;gt;TUPLE&amp;lt;/tt&amp;gt;]]&amp;lt;tt&amp;gt;]&amp;lt;/tt&amp;gt;. A type [[library_class:ROUTINE|&amp;lt;tt&amp;gt;ROUTINE&amp;lt;/tt&amp;gt;]]&amp;lt;tt&amp;gt;[O1]&amp;lt;/tt&amp;gt; conforms to a type [[library_class:ROUTINE|&amp;lt;tt&amp;gt;ROUTINE&amp;lt;/tt&amp;gt;]]&amp;lt;tt&amp;gt;[O2]&amp;lt;/tt&amp;gt; only if O2 conforms to O1.&lt;br /&gt;
&lt;br /&gt;
The [[library_class:PROCEDURE|&amp;lt;tt&amp;gt;PROCEDURE&amp;lt;/tt&amp;gt;]] type inherits from [[library_class:ROUTINE|&amp;lt;tt&amp;gt;ROUTINE&amp;lt;/tt&amp;gt;]], and has the same formal type parameter: [[library_class:PROCEDURE|&amp;lt;tt&amp;gt;PROCEDURE&amp;lt;/tt&amp;gt;]]&amp;lt;tt&amp;gt;[OPEN –&amp;gt; &amp;lt;/tt&amp;gt;[[library_class:TUPLE|&amp;lt;tt&amp;gt;TUPLE&amp;lt;/tt&amp;gt;]]&amp;lt;tt&amp;gt;]&amp;lt;/tt&amp;gt;. Its conformance rule is thus the same as for [[library_class:ROUTINE|&amp;lt;tt&amp;gt;ROUTINE&amp;lt;/tt&amp;gt;]].&lt;br /&gt;
&lt;br /&gt;
The [[library_class:FUNCTION|&amp;lt;tt&amp;gt;FUNCTION&amp;lt;/tt&amp;gt;]] type inherits from [[library_class:ROUTINE|&amp;lt;tt&amp;gt;ROUTINE&amp;lt;/tt&amp;gt;]], and has two formal type parameters: [[library_class:FUNCTION|&amp;lt;tt&amp;gt;FUNCTION&amp;lt;/tt&amp;gt;]]&amp;lt;tt&amp;gt;[OPEN –&amp;gt; &amp;lt;/tt&amp;gt;[[library_class:TUPLE|&amp;lt;tt&amp;gt;TUPLE&amp;lt;/tt&amp;gt;]]&amp;lt;tt&amp;gt;, RESULT_TYPE]&amp;lt;/tt&amp;gt;. According to the conformance rule for generic types, a type [[library_class:FUNCTION|&amp;lt;tt&amp;gt;FUNCTION&amp;lt;/tt&amp;gt;]]&amp;lt;tt&amp;gt;[O1, R1]&amp;lt;/tt&amp;gt; conforms to a type [[library_class:FUNCTION|&amp;lt;tt&amp;gt;FUNCTION&amp;lt;/tt&amp;gt;]]&amp;lt;tt&amp;gt;[O2, R2]&amp;lt;/tt&amp;gt; only if O2 conforms to O1 and R1 conforms to R2.&lt;br /&gt;
&lt;br /&gt;
[[library_class:PREDICATE|&amp;lt;tt&amp;gt;PREDICATE&amp;lt;/tt&amp;gt;]]&amp;lt;tt&amp;gt;[B, O]&amp;lt;/tt&amp;gt; type being just a shortcut for [[library_class:FUNCTION|&amp;lt;tt&amp;gt;FUNCTION&amp;lt;/tt&amp;gt;]]&amp;lt;tt&amp;gt;[O, &amp;lt;/tt&amp;gt;[[library_class:BOOLEAN|&amp;lt;tt&amp;gt;BOOLEAN&amp;lt;/tt&amp;gt;]]&amp;lt;tt&amp;gt;]&amp;lt;/tt&amp;gt;, and it has the same conformance rules as [[library_class:FUNCTION|&amp;lt;tt&amp;gt;FUNCTION&amp;lt;/tt&amp;gt;]].&lt;br /&gt;
&lt;br /&gt;
'''Note:''' You must be aware of the conformance inversion for the open arguments [[library_class:TUPLE|tuple]]. See http://www.jot.fm/issues/issue_2004_04/article7/ for the rationale.&lt;br /&gt;
&lt;br /&gt;
== Inline agents ==&lt;br /&gt;
&lt;br /&gt;
''&amp;gt; '''NB:''' The following will apply from the Bell release onwards. In Adler, inline agents are just anonymous features.''&lt;br /&gt;
&lt;br /&gt;
Inline agents are closures: they may access the arguments and local variables defined in their outside feature (called ''outside variables'').&lt;br /&gt;
&lt;br /&gt;
The usage limits are:&lt;br /&gt;
* names must be unique (i.e. shadowing an outside variable is not allowed)&lt;br /&gt;
* Result is not accessible to inline agents; one must use another local variable (rationale: if the agent is a function, what would Result refer to?)&lt;br /&gt;
* access is read-only: you cannot assign to an outside local variable (and, of course, to an argument, but that's standard Eiffel anyway)&lt;br /&gt;
&lt;br /&gt;
The technical limits are:&lt;br /&gt;
* beware of automatically allocated pointers for outside local variables, especially if the GC is not used. There is no such problem for arguments since their value cannot change throughout the execution of the outside feature&lt;br /&gt;
* expanded arguments are twinned in the inline agent context (of course)&lt;/div&gt;</summary>
		<author><name>Cadrian</name></author>
	</entry>
	<entry>
		<id>https://wiki.liberty-eiffel.org/index.php?title=Category:Pages_with_broken_file_links&amp;diff=1800</id>
		<title>Category:Pages with broken file links</title>
		<link rel="alternate" type="text/html" href="https://wiki.liberty-eiffel.org/index.php?title=Category:Pages_with_broken_file_links&amp;diff=1800"/>
		<updated>2013-11-20T12:47:39Z</updated>

		<summary type="html">&lt;p&gt;Cadrian: Created page with &amp;quot;Those pages need a fix. Please upload the needed files.&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Those pages need a fix. Please upload the needed files.&lt;/div&gt;</summary>
		<author><name>Cadrian</name></author>
	</entry>
	<entry>
		<id>https://wiki.liberty-eiffel.org/index.php?title=Agent&amp;diff=1799</id>
		<title>Agent</title>
		<link rel="alternate" type="text/html" href="https://wiki.liberty-eiffel.org/index.php?title=Agent&amp;diff=1799"/>
		<updated>2013-11-20T12:44:48Z</updated>

		<summary type="html">&lt;p&gt;Cadrian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In Eiffel, the notion of agent makes it possible to describe and manipulate computation parts (i.e. operations) like ordinary data. Operations may be partially described, may be passed as ordinary data and may have their execution delayed. Agents are very convenient for many purposes, such as going through data structures and implementing call-backs in graphical libraries.&lt;br /&gt;
&lt;br /&gt;
See http://www.jot.fm/issues/issue_2004_04/article7/ — some parts are reused here.&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
The agent mechanism gives the Eiffel object-oriented language the ability to handle operations, or commands, as such, like in functional programming languages.&lt;br /&gt;
&lt;br /&gt;
Agents are a new type of objects that allow to store code to be executed and data in an object, named the agent. In Eiffel, four types of agents exist: an abstract (deferred) type ROUTINE, and three concrete types PROCEDURE, FUNCTION and PREDICATE. The following figure shows their inheritance relationship:&lt;br /&gt;
&lt;br /&gt;
[[File:Agents-fig1.png]]&lt;br /&gt;
&lt;br /&gt;
Agents are a way of storing operations for later execution. They are objects. As such, they can be stored, compared to Void, or passed around to other software components. The operation stored in the agent may then be executed whenever the component decides. The most common uses of agents comprise delayed calls, multiple calls (on different values), lazy evaluation, and so on.&lt;br /&gt;
&lt;br /&gt;
== Inline agents ==&lt;br /&gt;
&lt;br /&gt;
Inline agents are closures: they may access the arguments and local variables defined in their outside feature (called ''outside variables'').&lt;br /&gt;
&lt;br /&gt;
The usage limits are:&lt;br /&gt;
* names must be unique (i.e. shadowing an outside variable is not allowed)&lt;br /&gt;
* Result is not accessible to inline agents; one must use another local variable (rationale: if the agent is a function, what would Result refer to?)&lt;br /&gt;
* access is read-only: you cannot assign to an outside local variable (and, of course, to an argument, but that's standard Eiffel anyway)&lt;br /&gt;
&lt;br /&gt;
The technical limits are:&lt;br /&gt;
* beware of automatically allocated pointers for outside local variables, especially if the GC is not used. There is no such problem for arguments since their value cannot change throughout the execution of the outside feature&lt;br /&gt;
* expanded arguments are twinned in the inline agent context (of course)&lt;/div&gt;</summary>
		<author><name>Cadrian</name></author>
	</entry>
	<entry>
		<id>https://wiki.liberty-eiffel.org/index.php?title=Agent&amp;diff=1798</id>
		<title>Agent</title>
		<link rel="alternate" type="text/html" href="https://wiki.liberty-eiffel.org/index.php?title=Agent&amp;diff=1798"/>
		<updated>2013-11-20T12:44:31Z</updated>

		<summary type="html">&lt;p&gt;Cadrian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In Eiffel, the notion of agent makes it possible to describe and manipulate computation parts (i.e. operations) like ordinary data. Operations may be partially described, may be passed as ordinary data and may have their execution delayed. Agents are very convenient for many purposes, such as going through data structures and implementing call-backs in graphical libraries.&lt;br /&gt;
&lt;br /&gt;
See http://www.jot.fm/issues/issue_2004_04/article7/ — some parts are reused here.&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
The agent mechanism gives the Eiffel object-oriented language the ability to handle operations, or commands, as such, like in functional programming languages.&lt;br /&gt;
&lt;br /&gt;
Agents are a new type of objects that allow to store code to be executed and data in an object, named the agent. In Eiffel, four types of agents exist: an abstract (deferred) type ROUTINE, and three concrete types PROCEDURE, FUNCTION and PREDICATE. The following figure shows their inheritance relationship:&lt;br /&gt;
&lt;br /&gt;
[[File:Agents-fig1.png]]&lt;br /&gt;
&lt;br /&gt;
Agents are a way of storing operations for later execution. They are objects. As such, they can be stored, compared to Void, or passed around to other software components. The operation stored in the agent may then be executed whenever the component decides. The most common uses of agents comprise delayed calls, multiple calls (on different values), lazy evaluation, and so on.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Inline agents ==&lt;br /&gt;
&lt;br /&gt;
Inline agents are closures: they may access the arguments and local variables defined in their outside feature (called ''outside variables'').&lt;br /&gt;
&lt;br /&gt;
The usage limits are:&lt;br /&gt;
* names must be unique (i.e. shadowing an outside variable is not allowed)&lt;br /&gt;
* Result is not accessible to inline agents; one must use another local variable (rationale: if the agent is a function, what would Result refer to?)&lt;br /&gt;
* access is read-only: you cannot assign to an outside local variable (and, of course, to an argument, but that's standard Eiffel anyway)&lt;br /&gt;
&lt;br /&gt;
The technical limits are:&lt;br /&gt;
* beware of automatically allocated pointers for outside local variables, especially if the GC is not used. There is no such problem for arguments since their value cannot change throughout the execution of the outside feature&lt;br /&gt;
* expanded arguments are twinned in the inline agent context (of course)&lt;/div&gt;</summary>
		<author><name>Cadrian</name></author>
	</entry>
	<entry>
		<id>https://wiki.liberty-eiffel.org/index.php?title=Agent&amp;diff=1797</id>
		<title>Agent</title>
		<link rel="alternate" type="text/html" href="https://wiki.liberty-eiffel.org/index.php?title=Agent&amp;diff=1797"/>
		<updated>2013-11-20T10:54:03Z</updated>

		<summary type="html">&lt;p&gt;Cadrian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In Eiffel, the notion of agent makes it possible to describe and manipulate computation parts (i.e. operations) like ordinary data. Operations may be partially described, may be passed as ordinary data and may have their execution delayed. Agents are very convenient for many purposes, such as going through data structures and implementing call-backs in graphical libraries.&lt;br /&gt;
&lt;br /&gt;
See http://www.jot.fm/issues/issue_2004_04/article7/&lt;br /&gt;
&lt;br /&gt;
(to be completed)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Inline agents ==&lt;br /&gt;
&lt;br /&gt;
Inline agents are closures: they may access the arguments and local variables defined in their outside feature (called ''outside variables'').&lt;br /&gt;
&lt;br /&gt;
The usage limits are:&lt;br /&gt;
* names must be unique (i.e. shadowing an outside variable is not allowed)&lt;br /&gt;
* Result is not accessible to inline agents; one must use another local variable (rationale: if the agent is a function, what would Result refer to?)&lt;br /&gt;
* access is read-only: you cannot assign to an outside local variable (and, of course, to an argument, but that's standard Eiffel anyway)&lt;br /&gt;
&lt;br /&gt;
The technical limits are:&lt;br /&gt;
* beware of automatically allocated pointers for outside local variables, especially if the GC is not used. There is no such problem for arguments since their value cannot change throughout the execution of the outside feature&lt;br /&gt;
* expanded arguments are twinned in the inline agent context (of course)&lt;/div&gt;</summary>
		<author><name>Cadrian</name></author>
	</entry>
	<entry>
		<id>https://wiki.liberty-eiffel.org/index.php?title=Agent&amp;diff=1796</id>
		<title>Agent</title>
		<link rel="alternate" type="text/html" href="https://wiki.liberty-eiffel.org/index.php?title=Agent&amp;diff=1796"/>
		<updated>2013-11-19T15:03:04Z</updated>

		<summary type="html">&lt;p&gt;Cadrian: /* Inline agents */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Agents are objects that allow to defer computation.&lt;br /&gt;
&lt;br /&gt;
(to be completed)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Inline agents ==&lt;br /&gt;
&lt;br /&gt;
Inline agents are closures: they may access the arguments and local variables defined in their outside feature (called ''outside variables'').&lt;br /&gt;
&lt;br /&gt;
The usage limits are:&lt;br /&gt;
* names must be unique (i.e. shadowing an outside variable is not allowed)&lt;br /&gt;
* Result is not accessible to inline agents; one must use another local variable (rationale: if the agent is a function, what would Result refer to?)&lt;br /&gt;
* access is read-only: you cannot assign to an outside local variable (and, of course, to an argument, but that's standard Eiffel anyway)&lt;br /&gt;
&lt;br /&gt;
The technical limits are:&lt;br /&gt;
* beware of automatically allocated pointers for outside local variables, especially if the GC is not used. There is no such problem for arguments since their value cannot change throughout the execution of the outside feature&lt;br /&gt;
* expanded arguments are twinned in the inline agent context (of course)&lt;/div&gt;</summary>
		<author><name>Cadrian</name></author>
	</entry>
	<entry>
		<id>https://wiki.liberty-eiffel.org/index.php?title=Agent&amp;diff=1795</id>
		<title>Agent</title>
		<link rel="alternate" type="text/html" href="https://wiki.liberty-eiffel.org/index.php?title=Agent&amp;diff=1795"/>
		<updated>2013-11-19T14:56:52Z</updated>

		<summary type="html">&lt;p&gt;Cadrian: /* Inline agents */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Agents are objects that allow to defer computation.&lt;br /&gt;
&lt;br /&gt;
(to be completed)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Inline agents ==&lt;br /&gt;
&lt;br /&gt;
Inline agents are closures: they may access the arguments and local variables defined in their outside feature (called ''outside variables'').&lt;br /&gt;
&lt;br /&gt;
The usage limits are:&lt;br /&gt;
* names must be unique (i.e. shadowing an outside variable is not allowed)&lt;br /&gt;
* Result is not accessible to inline agents; one must use another local variable (rationale: if the agent is a function, what would Result refer to?)&lt;br /&gt;
* access is read-only: you cannot assign to an outside local variable (and, of course, to an argument, but that's standard Eiffel anyway)&lt;br /&gt;
&lt;br /&gt;
The technical limits are:&lt;br /&gt;
* beware of automatically allocated pointers for outside local variables, especially if the GC is not used. There is no such problem for arguments since their value cannot change throughout the execution of the outside feature&lt;/div&gt;</summary>
		<author><name>Cadrian</name></author>
	</entry>
	<entry>
		<id>https://wiki.liberty-eiffel.org/index.php?title=Agent&amp;diff=1794</id>
		<title>Agent</title>
		<link rel="alternate" type="text/html" href="https://wiki.liberty-eiffel.org/index.php?title=Agent&amp;diff=1794"/>
		<updated>2013-11-19T14:56:27Z</updated>

		<summary type="html">&lt;p&gt;Cadrian: Created page with &amp;quot;Agents are objects that allow to defer computation.  (to be completed)    == Inline agents ==  Inline agents are closures: they may access the arguments and local variables de...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Agents are objects that allow to defer computation.&lt;br /&gt;
&lt;br /&gt;
(to be completed)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Inline agents ==&lt;br /&gt;
&lt;br /&gt;
Inline agents are closures: they may access the arguments and local variables defined in their outside feature (called ''outside variables'').&lt;br /&gt;
&lt;br /&gt;
The usage limits are:&lt;br /&gt;
 * names must be unique (i.e. shadowing an outside variable is not allowed)&lt;br /&gt;
 * Result is not accessible to inline agents; one must use another local variable (rationale: if the agent is a function, what would Result refer to?)&lt;br /&gt;
 * access is read-only: you cannot assign to an outside local variable (and, of course, to an argument, but that's standard Eiffel anyway)&lt;br /&gt;
&lt;br /&gt;
The technical limits are:&lt;br /&gt;
 * beware of automatically allocated pointers for outside local variables, especially if the GC is not used. There is no such problem for arguments since their value cannot change throughout the execution of the outside feature&lt;/div&gt;</summary>
		<author><name>Cadrian</name></author>
	</entry>
	<entry>
		<id>https://wiki.liberty-eiffel.org/index.php?title=Upcoming_release_names&amp;diff=1793</id>
		<title>Upcoming release names</title>
		<link rel="alternate" type="text/html" href="https://wiki.liberty-eiffel.org/index.php?title=Upcoming_release_names&amp;diff=1793"/>
		<updated>2013-10-28T08:02:52Z</updated>

		<summary type="html">&lt;p&gt;Cadrian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Liberty releases are named after famous engineers names starting by A for the first release, B for the second, and so on.&lt;br /&gt;
Here is a list of name suggestions for future releases:&lt;br /&gt;
* Alexander Graham Bell ('''&amp;quot;bell&amp;quot;''')&lt;br /&gt;
* Glenn Curtiss ('''&amp;quot;curtiss&amp;quot;''')&lt;br /&gt;
* Jack Dennis ('''&amp;quot;dennis&amp;quot;''')&lt;br /&gt;
* Gustave Eiffel ('''&amp;quot;eiffel&amp;quot;''') -- or is it too obvious?&lt;br /&gt;
* F?&lt;br /&gt;
* G?&lt;br /&gt;
* Grace Hopper ('''&amp;quot;hopper&amp;quot;''')&lt;br /&gt;
* I?&lt;br /&gt;
&lt;br /&gt;
Feel free to suggest any further names.&lt;br /&gt;
&lt;br /&gt;
Each &amp;quot;released release&amp;quot; (sic) will also have a numeric tag in the form of &amp;quot;year.month&amp;quot; which is more simple to remember.&lt;br /&gt;
&lt;br /&gt;
Already released versions are listed in [[Versions history]].&lt;/div&gt;</summary>
		<author><name>Cadrian</name></author>
	</entry>
	<entry>
		<id>https://wiki.liberty-eiffel.org/index.php?title=Upcoming_release_names&amp;diff=1792</id>
		<title>Upcoming release names</title>
		<link rel="alternate" type="text/html" href="https://wiki.liberty-eiffel.org/index.php?title=Upcoming_release_names&amp;diff=1792"/>
		<updated>2013-10-28T08:02:19Z</updated>

		<summary type="html">&lt;p&gt;Cadrian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Liberty releases are named after famous engineers names starting by A for the first release, B for the second, and so on.&lt;br /&gt;
Here is a list of name suggestions for future releases:&lt;br /&gt;
* Alexander Graham Bell ('''&amp;quot;bell&amp;quot;''')&lt;br /&gt;
* Glenn Curtiss ('''&amp;quot;curtiss&amp;quot;''')&lt;br /&gt;
* Jack Dennis ('''&amp;quot;dennis&amp;quot;''')&lt;br /&gt;
* Gustave Eiffel ('''&amp;quot;eiffel&amp;quot;''') -- or is it too obvious?&lt;br /&gt;
* F?&lt;br /&gt;
* G?&lt;br /&gt;
* Grace Hopper ('''&amp;quot;hopper&amp;quot;''')&lt;br /&gt;
* I?&lt;br /&gt;
* . . .&lt;br /&gt;
* R?&lt;br /&gt;
* Karl Schwarzschild ('''&amp;quot;schwarzschild&amp;quot;''')&lt;br /&gt;
* T?&lt;br /&gt;
* . . .&lt;br /&gt;
&lt;br /&gt;
Feel free to suggest any further names.&lt;br /&gt;
&lt;br /&gt;
Each &amp;quot;released release&amp;quot; (sic) will also have a numeric tag in the form of &amp;quot;year.month&amp;quot; which is more simple to remember.&lt;br /&gt;
&lt;br /&gt;
Already released versions are listed in [[Versions history]].&lt;/div&gt;</summary>
		<author><name>Cadrian</name></author>
	</entry>
	<entry>
		<id>https://wiki.liberty-eiffel.org/index.php?title=Release_Notes_(Versions_history)&amp;diff=1791</id>
		<title>Release Notes (Versions history)</title>
		<link rel="alternate" type="text/html" href="https://wiki.liberty-eiffel.org/index.php?title=Release_Notes_(Versions_history)&amp;diff=1791"/>
		<updated>2013-10-17T11:08:42Z</updated>

		<summary type="html">&lt;p&gt;Cadrian: /* Adler (not yet released, named after Charles Adler, Jr.) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== LibertyEiffel (latest release first) ==&lt;br /&gt;
For upcoming releases see the [[upcoming releases|list of names]].&lt;br /&gt;
&lt;br /&gt;
=== Adler (not yet released, named after [http://en.wikipedia.org/wiki/Charles_Adler,_Jr. Charles Adler, Jr.]) ===&lt;br /&gt;
* First release as LibertyEiffel&lt;br /&gt;
* User-visible changes:&lt;br /&gt;
** Added [[library_class:NATURAL_8|&amp;lt;tt&amp;gt;NATURAL_8&amp;lt;/tt&amp;gt;]], [[library_class:NATURAL_16|&amp;lt;tt&amp;gt;NATURAL_16&amp;lt;/tt&amp;gt;]], [[library_class:NATURAL_32|&amp;lt;tt&amp;gt;NATURAL_32&amp;lt;/tt&amp;gt;]], and [[library_class:NATURAL_64|&amp;lt;tt&amp;gt;NATURAL_64&amp;lt;/tt&amp;gt;]] classes. See &amp;lt;tt&amp;gt;tutorial/natural.e&amp;lt;/tt&amp;gt; for examples.&lt;br /&gt;
** Even low-level features (i.e. &amp;lt;tt&amp;gt;external &amp;quot;built_in&amp;quot;&amp;lt;/tt&amp;gt;) are now checking their assertions. As an example, division by zero is now checked by assertions.&lt;br /&gt;
** Inlined dynamic dispatch for better performance&lt;br /&gt;
** A missing export clause is deprecated. Use &amp;lt;tt&amp;gt;{ANY}&amp;lt;/tt&amp;gt; instead.&lt;br /&gt;
** New core libraries: cli, json, log, parse (beware, those libraries are not yet tuned to be used without GC)&lt;br /&gt;
** Improved libraries: string (with notably a new [[library_class:FIXED_STRING|&amp;lt;tt&amp;gt;FIXED_STRING&amp;lt;/tt&amp;gt;]] class)&lt;br /&gt;
** Wrapper libraries: gtk, gdk, readline, ffi...&lt;br /&gt;
** A new tool that can generate mocks to help unit testing&lt;br /&gt;
** [http://www.hpl.hp.com/personal/Hans_Boehm/gc/ BDW] GC support&lt;br /&gt;
* Developer changes:&lt;br /&gt;
** The web site now belongs to the repository&lt;br /&gt;
** Automatic testing tools (ET on the web, and &amp;lt;tt&amp;gt;watch_eiffeltest.sh&amp;lt;/tt&amp;gt; in the shell)&lt;br /&gt;
** Automatic Debian packages generation&lt;br /&gt;
* Known bugs:&lt;br /&gt;
** BDW GC is not well tested; currently weak references seem not to work properly; and the GC is not run at program exit (it should run all finalizers)&lt;br /&gt;
** Sometimes SmartEiffel's native GC behaves wrongly, analysis is welcome&lt;br /&gt;
** Some of the newer core libraries do not work very well when there is no GC&lt;br /&gt;
** See the [https://savannah.gnu.org/bugs/?group=liberty-eiffel bugs page]&lt;br /&gt;
&lt;br /&gt;
== SmartEiffel (all releases which are predecessors of Liberty) ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Release 2.3 [Antoine-Auguste Parmentier] - Wednesday July 11th 2007 ===&lt;br /&gt;
&lt;br /&gt;
Again, a lot of novelties for this release:&lt;br /&gt;
&lt;br /&gt;
* New [[Typing policy|typing rules]] have been revisited and are now crystal clear. See [[Typing policy|this page]] for details.&lt;br /&gt;
* Implemented a new [[class loading]] algorithm, which takes into account the &amp;quot;distance&amp;quot; between classes, thus reifying the notion of clusters and sub-clusters. Everything is transparent, there is no new keyword to learn.&lt;br /&gt;
* Installation: SmartEiffel now provides a streamlined installer for package maintainers. Of course, the interactive installer is still available via &amp;quot;make interactive&amp;quot;.&lt;br /&gt;
* Configuration: in the same spirit to simplify package maintainers' life, the configuration &amp;quot;file&amp;quot; can now be a directory.&lt;br /&gt;
* The new [[eiffeltest]] tool is now available too.&lt;br /&gt;
* Old style &amp;quot;rename.se&amp;quot; files are no longer considered. You can now use the same class name in different clusters.&lt;br /&gt;
* The &amp;lt;tt&amp;gt;NONE&amp;lt;/tt&amp;gt; type mark must no longer be used. Just use an empty &amp;lt;tt&amp;gt;{}&amp;lt;/tt&amp;gt; exportation list to indicate that the corresponding following features are not exported. This is better for newcomers.&lt;br /&gt;
* In class [[library_class:COLLECTION|&amp;lt;tt&amp;gt;COLLECTION&amp;lt;/tt&amp;gt;]], features &amp;lt;tt&amp;gt;index_of&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;fast_index_of&amp;lt;/tt&amp;gt; now have an extra argument to indicate where the search must start (as in class [[library_class:STRING|&amp;lt;tt&amp;gt;STRING&amp;lt;/tt&amp;gt;]]). See also &amp;lt;tt&amp;gt;first_index_of&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;fast_first_index_of&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* Microsoft's Visual C++ 2005 compiler is now supported.&lt;br /&gt;
* The debugging sections can be turned on with the new &amp;lt;tt&amp;gt;-debug&amp;lt;/tt&amp;gt; option, in all compilation modes other than &amp;lt;tt&amp;gt;-boost&amp;lt;/tt&amp;gt;. The &amp;lt;tt&amp;gt;-debug_check&amp;lt;/tt&amp;gt; mode has been deprecated.&lt;br /&gt;
* The regular expression library has been added.&lt;br /&gt;
* Sequencer's &amp;lt;tt&amp;gt;READY_DESCRIPTION&amp;lt;/tt&amp;gt; is now renamed as [[library_class:EVENTS_SET|&amp;lt;tt&amp;gt;EVENTS_SET&amp;lt;/tt&amp;gt;]] and has a unified interface for all kinds of events.&lt;br /&gt;
* Some work on the network cluster.&lt;br /&gt;
* Last but not least: SmartEiffel now has a logo that will help it fly!&lt;br /&gt;
&lt;br /&gt;
=== Release 2.2 [Pomme de terre] - Monday December 19th, 2005 ===&lt;br /&gt;
&lt;br /&gt;
Again, a lot of novelties for this release.&lt;br /&gt;
&lt;br /&gt;
First, the new [[eiffeldoc]] command has been completely revisited and is now part of the delivery. That command is 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.&lt;br /&gt;
&lt;br /&gt;
The second important novelty is that we now have a brand new introspection mechanism which allows us to implement the new persistency facility.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
* Added a new command, [[se]], which is meant to be the only command you ever need to put in your PATH!&lt;br /&gt;
* Added a new command, [[eiffeldoc]], that you can use to document your project. Currently only HTML output is supported.&lt;br /&gt;
* The [[plugins]] system is vastly improved and should now be preferred over older external specifications. See [[plugins|this page]] for details.&lt;br /&gt;
* Improved error messages legibility in order to avoid missunderstanding.&lt;br /&gt;
* Added a new OpenGL widget for Vision. Unix-based programs only have to inherit from [[library_class:UNIX_GL_WIDGET|&amp;lt;tt&amp;gt;UNIX_GL_WIDGET&amp;lt;/tt&amp;gt;]] and define all the OpenGL related routines.&lt;br /&gt;
* Added new abstract class named [[library_class:BIJECTIVE_DICTIONARY|&amp;lt;tt&amp;gt;BIJECTIVE_DICTIONARY&amp;lt;/tt&amp;gt;]] which is actually a replacement for the now obsolete [[library_class:DOUBLE_DICTIONARY|&amp;lt;tt&amp;gt;DOUBLE_DICTIONARY&amp;lt;/tt&amp;gt;]] class. At time being, there is only one implementation of [[library_class:BIJECTIVE_DICTIONARY|&amp;lt;tt&amp;gt;BIJECTIVE_DICTIONARY&amp;lt;/tt&amp;gt;]] named [[library_class:HASHED_BIJECTIVE_DICTIONARY|&amp;lt;tt&amp;gt;HASHED_BIJECTIVE_DICTIONARY&amp;lt;/tt&amp;gt;]] (a hash_code-based implementation).&lt;br /&gt;
* Removed class &amp;lt;tt&amp;gt;GENERAL&amp;lt;/tt&amp;gt; as well as some obsolete features of that class. In the past, &amp;lt;tt&amp;gt;GENERAL&amp;lt;/tt&amp;gt; was inherited by [[library_class:PLATFORM|&amp;lt;tt&amp;gt;PLATFORM&amp;lt;/tt&amp;gt;]] which was inherited by [[library_class:ANY.|&amp;lt;tt&amp;gt;ANY.&amp;lt;/tt&amp;gt;]] Now, [[library_class:ANY|&amp;lt;tt&amp;gt;ANY&amp;lt;/tt&amp;gt;]] has no more parent at all (no conforming parent and no non-conforming parents). The removal of &amp;lt;tt&amp;gt;GENERAL&amp;lt;/tt&amp;gt; is better for newcomers because they just need to know about [[library_class:ANY|&amp;lt;tt&amp;gt;ANY&amp;lt;/tt&amp;gt;]] and it is also better for the underlying model consistency. Because we have now removed &amp;lt;tt&amp;gt;equals&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;clone&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;deep_clone&amp;lt;/tt&amp;gt; you must now only use &amp;lt;tt&amp;gt;is_equal&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;twin&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;deep_twin&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;is_deep_equal&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;standard_is_equal&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;standard_twin&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* Removed the &amp;lt;tt&amp;gt;file_tools&amp;lt;/tt&amp;gt; feature from [[library_class:ANY.|&amp;lt;tt&amp;gt;ANY.&amp;lt;/tt&amp;gt;]] Also note that all other file manipulation features from [[library_class:ANY|&amp;lt;tt&amp;gt;ANY&amp;lt;/tt&amp;gt;]] are now obsolete (use the class [[library_class:FILE_TOOLS|&amp;lt;tt&amp;gt;FILE_TOOLS&amp;lt;/tt&amp;gt;]] instead).&lt;br /&gt;
* No more feature &amp;lt;tt&amp;gt;argument&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;argument_count&amp;lt;/tt&amp;gt; in class [[library_class:ANY.|&amp;lt;tt&amp;gt;ANY.&amp;lt;/tt&amp;gt;]] In order to access command-line arguments, just insert the class [[library_class:ARGUMENTS.|&amp;lt;tt&amp;gt;ARGUMENTS.&amp;lt;/tt&amp;gt;]]&lt;br /&gt;
* The &amp;lt;tt&amp;gt;-case_insensitive&amp;lt;/tt&amp;gt; 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 legibility of our code.&lt;br /&gt;
* You now get a warning for using the all lower-case spelling of the keywords &amp;lt;tt&amp;gt;current&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;result&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;void&amp;lt;/tt&amp;gt;. Please use the initial-caps spellings &amp;lt;tt&amp;gt;Current&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;Result&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;Void&amp;lt;/tt&amp;gt; instead.&lt;br /&gt;
* 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.&lt;br /&gt;
* 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.&lt;br /&gt;
* 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.&lt;br /&gt;
* 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.&lt;br /&gt;
* Feature &amp;lt;tt&amp;gt;is_equal&amp;lt;/tt&amp;gt; is now redefined in class [[library_class:HASHABLE|&amp;lt;tt&amp;gt;HASHABLE&amp;lt;/tt&amp;gt;]]. The new definition adds an ensure then assertion to check consistency with the &amp;lt;tt&amp;gt;hash_code&amp;lt;/tt&amp;gt; function. Note that the redefinition is deferred to force clients to select their preferred implementation.&lt;br /&gt;
* Added a new feature called &amp;lt;tt&amp;gt;set_storage&amp;lt;/tt&amp;gt; in class [[library_class:STRING.|&amp;lt;tt&amp;gt;STRING.&amp;lt;/tt&amp;gt;]] This low-level feature is only exported to [[library_class:STRING_HANDLER|&amp;lt;tt&amp;gt;STRING_HANDLER&amp;lt;/tt&amp;gt;]].&lt;br /&gt;
* Added a new features in class [[library_class:COLLECTION|&amp;lt;tt&amp;gt;COLLECTION&amp;lt;/tt&amp;gt;]]: &amp;lt;tt&amp;gt;remove_head&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;remove_tail&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;reverse_index_of&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;last_index_of&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;first_index_of&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;fast_reverse_index_of&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;fast_last_index_of&amp;lt;/tt&amp;gt;&lt;br /&gt;
* Added a new features in class [[library_class:DICTIONARY|&amp;lt;tt&amp;gt;DICTIONARY&amp;lt;/tt&amp;gt;]]: &amp;lt;tt&amp;gt;fast_reference_at&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;fast_put&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;fast_remove&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* Added a new Eiffel mode description for the Vim text editor. This mode is compatible with our emacs mode. File &amp;quot;misc/eiffel.vim&amp;quot; is for the Vim editor while file &amp;quot;misc/eiffel.el&amp;quot; is for emacs.&lt;br /&gt;
&lt;br /&gt;
=== Release 2.1 [Poirot] - Wednesday February 9th, 2005 ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
More details about changes from 2.0:&lt;br /&gt;
&lt;br /&gt;
* 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 &amp;quot;inherit&amp;quot; keyword. After that, you can use the &amp;quot;insert&amp;quot; keyword followed by the list of non-conforming parents. Like in the previous release, when a class has no &amp;quot;inherit&amp;quot; clause and no &amp;quot;insert&amp;quot; clause, the default insert ANY is automatically added.&lt;br /&gt;
The new compiler does not warn you anymore when multiple conforming paths 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).&lt;br /&gt;
* We introduced a brand new notation to generalize the old manifest array notation. You can now create an [[library_class:ARRAY|&amp;lt;tt&amp;gt;ARRAY&amp;lt;/tt&amp;gt;]] initialized with letters as follows:&lt;br /&gt;
        {ARRAY[CHARACTER] 1, &amp;lt;&amp;lt; 'a', 'b', 'c', 'd' &amp;gt;&amp;gt; }&lt;br /&gt;
or a LINKED_LIST doing:&lt;br /&gt;
        {LINKED_LIST[CHARACTER] &amp;lt;&amp;lt; 'a', 'b', 'c', 'd' &amp;gt;&amp;gt; }&lt;br /&gt;
as well as any kind of COLLECTION:&lt;br /&gt;
        {RING_ARRAY[CHARACTER] 1, &amp;lt;&amp;lt; 'a', 'b', 'c', 'd' &amp;gt;&amp;gt;}&lt;br /&gt;
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.&lt;br /&gt;
* Classes to manipulate floating point numbers have been completely revisited. Floating point number manipulation now uses [[library_class:REAL_32|&amp;lt;tt&amp;gt;REAL_32&amp;lt;/tt&amp;gt;]] for 32 bits floating points, [[library_class:REAL_64|&amp;lt;tt&amp;gt;REAL_64&amp;lt;/tt&amp;gt;]] which is equivalent of &amp;lt;tt&amp;gt;REAL&amp;lt;/tt&amp;gt; for 64 bits floating points, [[library_class:REAL_80|&amp;lt;tt&amp;gt;REAL_80&amp;lt;/tt&amp;gt;]] for architecture supporting 80 bits, [[library_class:REAL_128|&amp;lt;tt&amp;gt;REAL_128&amp;lt;/tt&amp;gt;]] for architecture supporting 128 bits and, [[library_class:REAL_EXTENDED|&amp;lt;tt&amp;gt;REAL_EXTENDED&amp;lt;/tt&amp;gt;]] which is automatically mapped on [[library_class:REAL_80|&amp;lt;tt&amp;gt;REAL_80&amp;lt;/tt&amp;gt;]] or [[library_class:REAL_128|&amp;lt;tt&amp;gt;REAL_128&amp;lt;/tt&amp;gt;]] depending on the architecture actually used. The old &amp;lt;tt&amp;gt;DOUBLE&amp;lt;/tt&amp;gt; class is now obsolete and is automatically replaced with simply &amp;lt;tt&amp;gt;REAL&amp;lt;/tt&amp;gt; (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 &amp;lt;tt&amp;gt;REAL&amp;lt;/tt&amp;gt;. As an example, ''1.5'' is of type &amp;lt;tt&amp;gt;REAL&amp;lt;/tt&amp;gt; whereas ''{REAL_32 1.5}'' is of type [[library_class:REAL_32|&amp;lt;tt&amp;gt;REAL_32&amp;lt;/tt&amp;gt;]] and ''{REAL_EXTENDED 1.5}'' is of type [[library_class:REAL_80|&amp;lt;tt&amp;gt;REAL_80&amp;lt;/tt&amp;gt;]] or [[library_class:REAL_128|&amp;lt;tt&amp;gt;REAL_128&amp;lt;/tt&amp;gt;]] depending on your hardware. See again SmartEiffel/tutorial/manifest_notation.e for details. Finally, also note that scientific notation has been added to display floating point.&lt;br /&gt;
* To handle downcasting in a better way than the still supported &amp;quot;?=&amp;quot; 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 &amp;quot;?:=&amp;quot; allows you to test if the downcasting can be safely done and the new &amp;quot;::=&amp;quot; assignment can actually perform the downcasting. In debug modes, the &amp;quot;?:=&amp;quot; predicate is considered as a require assertion of the &amp;quot;::=&amp;quot; assignment. The &amp;quot;?:=&amp;quot; predicate accepts type name for its left-hand side and is useful too in assertions. See SmartEiffel/tutorial/downcasting.e for examples.&lt;br /&gt;
* Command short improved: assertions are displayed according to the client's point of view (i.e. you do not see what you cannot call).&lt;br /&gt;
* Added classes [[library_class:STACK|&amp;lt;tt&amp;gt;STACK&amp;lt;/tt&amp;gt;]] and [[library_class:QUEUE|&amp;lt;tt&amp;gt;QUEUE&amp;lt;/tt&amp;gt;]]. Thanks to the &amp;quot;insert&amp;quot; mechanism, it is now safe and efficient to do so ([[library_class:STACK|&amp;lt;tt&amp;gt;STACK&amp;lt;/tt&amp;gt;]] shares the efficient implementation of [[library_class:FAST_ARRAY|&amp;lt;tt&amp;gt;FAST_ARRAY&amp;lt;/tt&amp;gt;]] and [[library_class:QUEUE|&amp;lt;tt&amp;gt;QUEUE&amp;lt;/tt&amp;gt;]] inserts [[library_class:RING_ARRAY|&amp;lt;tt&amp;gt;RING_ARRAY&amp;lt;/tt&amp;gt;]]).&lt;br /&gt;
* Improved memory usage for classes [[library_class:LINKED_LIST|&amp;lt;tt&amp;gt;LINKED_LIST&amp;lt;/tt&amp;gt;]], [[library_class:TWO_WAY_LINKED_LIST|&amp;lt;tt&amp;gt;TWO_WAY_LINKED_LIST&amp;lt;/tt&amp;gt;]], [[library_class:AVL_SET|&amp;lt;tt&amp;gt;AVL_SET&amp;lt;/tt&amp;gt;]], [[library_class:AVL_DICTIONARY|&amp;lt;tt&amp;gt;AVL_DICTIONARY&amp;lt;/tt&amp;gt;]], [[library_class:HASHED_SET|&amp;lt;tt&amp;gt;HASHED_SET&amp;lt;/tt&amp;gt;]] and [[library_class:HASHED_DICTIONARY|&amp;lt;tt&amp;gt;HASHED_DICTIONARY&amp;lt;/tt&amp;gt;]]. Free cells are automatically recycled between various instances of the same generic derivation. Thoses classes are now using our [[library_class:WEAK_REFERENCE|&amp;lt;tt&amp;gt;WEAK_REFERENCE&amp;lt;/tt&amp;gt;]] class silently.&lt;br /&gt;
* Removed obsolete class &amp;lt;tt&amp;gt;BIT&amp;lt;/tt&amp;gt;. Now, just use existing bit operations from [[library_class:INTEGER_8|&amp;lt;tt&amp;gt;INTEGER_8&amp;lt;/tt&amp;gt;]], [[library_class:INTEGER_16|&amp;lt;tt&amp;gt;INTEGER_16&amp;lt;/tt&amp;gt;]], [[library_class:INTEGER_32|&amp;lt;tt&amp;gt;INTEGER_32&amp;lt;/tt&amp;gt;]], &amp;lt;tt&amp;gt;INTEGER&amp;lt;/tt&amp;gt;, [[library_class:INTEGER_64|&amp;lt;tt&amp;gt;INTEGER_64&amp;lt;/tt&amp;gt;]] or, for very long sequences of bits, the completely revisited [[library_class:BIT_STRING|&amp;lt;tt&amp;gt;BIT_STRING&amp;lt;/tt&amp;gt;]] class.&lt;br /&gt;
* 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!&lt;br /&gt;
* 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:&lt;br /&gt;
        3.to_string &lt;br /&gt;
        3.5.print_on(io) &lt;br /&gt;
        &amp;quot;foo&amp;quot;.print_on(io) &lt;br /&gt;
* A new network library has been recently added. This is brand new work which is still in progress. See SmartEiffel/lib/net for details.&lt;br /&gt;
* The old Eiffel strip expression is no longer supported.&lt;br /&gt;
&lt;br /&gt;
=== Release 2.0 [Hercule] - Monday September 27th, 2004 ===&lt;br /&gt;
&lt;br /&gt;
Actually, this new 2.0 release is the beginning of a new era in SmartEiffel's life!&lt;br /&gt;
&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
More details about changes from 1.1:&lt;br /&gt;
&lt;br /&gt;
* Very large systems are handled far more efficiently (but maybe at a cost for smaller systems).&lt;br /&gt;
* The new non-conforming inheritance mechanism is now implemented. For code portatbility, we decided to stick with the &amp;quot;inherit&amp;quot; keyword for conforming parents. So just start your class as usual. Then, to describe the non-conforming parents, just use the &amp;quot;insert&amp;quot; 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 &amp;quot;select&amp;quot; clause (you'll be warned by the compiler). Also keep in mind that when a class has no &amp;quot;inherit&amp;quot; clause and no &amp;quot;insert&amp;quot; clause, the default insert [[library_class:ANY|&amp;lt;tt&amp;gt;ANY&amp;lt;/tt&amp;gt;]] 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.&lt;br /&gt;
* Repeated inheritance is now correctly handled.&lt;br /&gt;
* The optimizer is rewritten and can do more optimizations.&lt;br /&gt;
* 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).&lt;br /&gt;
* 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 [[library_class:NATIVE_ARRAY|&amp;lt;tt&amp;gt;NATIVE_ARRAY&amp;lt;/tt&amp;gt;]]s). Command such as ''p ..1'' is useful to get another element of the array or another attribute of the same object.&lt;br /&gt;
* Dead code is now checked, which explains the compiler takes more time and memory.&lt;br /&gt;
* 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 &amp;quot;good&amp;quot; cluster.&lt;br /&gt;
The new organization splits the classes by logical topics. Note that each cluster may contain two special clusters: &amp;quot;low_level&amp;quot;, containing classes that you might use if you need better performance (generally when you build some utility or library classes); &amp;quot;internal&amp;quot; containing support classes, and not meant to be used directly.&lt;br /&gt;
Now, the organization itself:&lt;br /&gt;
** &amp;quot;abilities&amp;quot; contains the &amp;quot;able&amp;quot; classes ([[library_class:COMPARABLE|&amp;lt;tt&amp;gt;COMPARABLE&amp;lt;/tt&amp;gt;]], [[library_class:HASHABLE|&amp;lt;tt&amp;gt;HASHABLE&amp;lt;/tt&amp;gt;]], and so on);&lt;br /&gt;
** &amp;quot;io&amp;quot; contains the input-out classes; this cluster has but changed from the old one (see below for more details);&lt;br /&gt;
** &amp;quot;iterator&amp;quot; still contains the iterator on storage classes (see the &amp;quot;storage&amp;quot; cluster);&lt;br /&gt;
** &amp;quot;kernel&amp;quot; contains the few general-purpose which could not be put in other clusters, and are quite mandatory for the compiler to work;&lt;br /&gt;
** &amp;quot;numeric&amp;quot; contains all the classes that can be use to manipulate numbers; you will find here &amp;lt;tt&amp;gt;INTEGER&amp;lt;/tt&amp;gt;s, &amp;lt;tt&amp;gt;REAL&amp;lt;/tt&amp;gt;s, but also [[library_class:NUMBER|&amp;lt;tt&amp;gt;NUMBER&amp;lt;/tt&amp;gt;]]s (the infinite-precision integers); This cluster also includes the new [[library_class:MUTABLE_BIG_INTEGER|&amp;lt;tt&amp;gt;MUTABLE_BIG_INTEGER&amp;lt;/tt&amp;gt;]] class which is an efficient tools for fast integer number crunching.&lt;br /&gt;
** &amp;quot;random&amp;quot; contains the pseudo-random number generation classes;&lt;br /&gt;
** &amp;quot;scoop&amp;quot; contains the SCOOP utilities (not that SCOOP works better than in SE 1.1...);&lt;br /&gt;
** &amp;quot;storage&amp;quot; contains all the classes that store data: [[library_class:COLLECTION|&amp;lt;tt&amp;gt;COLLECTION&amp;lt;/tt&amp;gt;]], [[library_class:DICTIONARY|&amp;lt;tt&amp;gt;DICTIONARY&amp;lt;/tt&amp;gt;]], [[library_class:SET|&amp;lt;tt&amp;gt;SET&amp;lt;/tt&amp;gt;]]... (Note: see below for more details on [[library_class:DICTIONARY|&amp;lt;tt&amp;gt;DICTIONARY&amp;lt;/tt&amp;gt;]] and [[library_class:SET|&amp;lt;tt&amp;gt;SET&amp;lt;/tt&amp;gt;]]);&lt;br /&gt;
** &amp;quot;string&amp;quot; contains the [[library_class:STRING|&amp;lt;tt&amp;gt;STRING&amp;lt;/tt&amp;gt;]] and related classes (also Unicode strings);&lt;br /&gt;
** &amp;quot;time&amp;quot; contains the [[library_class:TIME|&amp;lt;tt&amp;gt;TIME&amp;lt;/tt&amp;gt;]]-related classes;&lt;br /&gt;
** &amp;quot;vision&amp;quot; contains the vision graphical library classes;&lt;br /&gt;
** &amp;quot;sorting&amp;quot; contains most common algorithm to sort [[library_class:COLLECTION|&amp;lt;tt&amp;gt;COLLECTION&amp;lt;/tt&amp;gt;]]s;&lt;br /&gt;
** &amp;quot;misc&amp;quot; contains some useful classes that cannot be easily put elsewhere short of having their own cluster.&lt;br /&gt;
&lt;br /&gt;
* [[library_class:DICTIONARY|&amp;lt;tt&amp;gt;DICTIONARY&amp;lt;/tt&amp;gt;]] class is now deferred and has no more generic constraint. The library now includes two different implementations.&lt;br /&gt;
** The [[library_class:HASHED_DICTIONARY|&amp;lt;tt&amp;gt;HASHED_DICTIONARY&amp;lt;/tt&amp;gt;]] implementation is the hash_code based implementation (the generic constraint for [[library_class:HASHED_DICTIONARY|&amp;lt;tt&amp;gt;HASHED_DICTIONARY&amp;lt;/tt&amp;gt;]] is [[library_class:HASHABLE|&amp;lt;tt&amp;gt;HASHABLE&amp;lt;/tt&amp;gt;]]).&lt;br /&gt;
** The [[library_class:AVL_DICTIONARY|&amp;lt;tt&amp;gt;AVL_DICTIONARY&amp;lt;/tt&amp;gt;]] implementation is a balanced tree based implementation (the generic constraint for this implemetation is [[library_class:COMPARABLE|&amp;lt;tt&amp;gt;COMPARABLE&amp;lt;/tt&amp;gt;]]).&lt;br /&gt;
You should update all your create instructions by selecting [[library_class:HASHED_DICTIONARY|&amp;lt;tt&amp;gt;HASHED_DICTIONARY&amp;lt;/tt&amp;gt;]] or [[library_class:AVL_DICTIONARY|&amp;lt;tt&amp;gt;AVL_DICTIONARY&amp;lt;/tt&amp;gt;]]. In order to ease this code update, the compiler will warn you that [[library_class:HASHED_DICTIONARY|&amp;lt;tt&amp;gt;HASHED_DICTIONARY&amp;lt;/tt&amp;gt;]] is selected by default. Please update your code because this is a temporary warning of the compiler.&lt;br /&gt;
&lt;br /&gt;
* Some more [[library_class:DICTIONARY|&amp;lt;tt&amp;gt;DICTIONARY&amp;lt;/tt&amp;gt;]] classes were also added (among them: [[library_class:DOUBLE_DICTIONARY|&amp;lt;tt&amp;gt;DOUBLE_DICTIONARY&amp;lt;/tt&amp;gt;]] can be of interest).&lt;br /&gt;
* The [[library_class:SET|&amp;lt;tt&amp;gt;SET&amp;lt;/tt&amp;gt;]] class has undergone the same transformation ([[library_class:HASHED_SET|&amp;lt;tt&amp;gt;HASHED_SET&amp;lt;/tt&amp;gt;]] and [[library_class:AVL_SET|&amp;lt;tt&amp;gt;AVL_SET&amp;lt;/tt&amp;gt;]]).&lt;br /&gt;
* A [[library_class:RING_ARRAY|&amp;lt;tt&amp;gt;RING_ARRAY&amp;lt;/tt&amp;gt;]] class was added. This [[library_class:COLLECTION|&amp;lt;tt&amp;gt;COLLECTION&amp;lt;/tt&amp;gt;]] is quite similar to an [[library_class:ARRAY|&amp;lt;tt&amp;gt;ARRAY&amp;lt;/tt&amp;gt;]] that performs well for all queue operations (add|remove)_(first|last) thanks to its circular internal representation.&lt;br /&gt;
* The [[library_class:TUPLE|&amp;lt;tt&amp;gt;TUPLE&amp;lt;/tt&amp;gt;]] class is now defined in Eiffel. Thanks to this new source code implementation, we have added the definition for the `item' feature definition.&lt;br /&gt;
* The [[library_class:ROUTINE|&amp;lt;tt&amp;gt;ROUTINE&amp;lt;/tt&amp;gt;]], [[library_class:PROCEDURE|&amp;lt;tt&amp;gt;PROCEDURE&amp;lt;/tt&amp;gt;]] and [[library_class:FUNCTION|&amp;lt;tt&amp;gt;FUNCTION&amp;lt;/tt&amp;gt;]] classes are also defined in Eiffel.&lt;br /&gt;
* Added a new [[library_class:WEAK_REFERENCE|&amp;lt;tt&amp;gt;WEAK_REFERENCE&amp;lt;/tt&amp;gt;]] class with the appropriate garbage collector support.&lt;br /&gt;
* Split has been improved in order to reduce C files compilation after a change.&lt;br /&gt;
* Added a new &amp;quot;-profile&amp;quot; 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:&lt;br /&gt;
** the profiling output is written in the &amp;quot;profile.se&amp;quot; file;&lt;br /&gt;
** for each entry, the &amp;quot;own&amp;quot; and &amp;quot;cumul&amp;quot; times, total and average, are given; also, the caller features and the called ones are displayed;&lt;br /&gt;
** 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);&lt;br /&gt;
** the Eiffel called features are sorted by decreasing number of calls;&lt;br /&gt;
** 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).&lt;br /&gt;
**e that:&lt;br /&gt;
** profiled programs take MUCH longer to execute (a lot of, hem, time, is spent in the kernel merely to, hem, track time...)&lt;br /&gt;
** externals are not profiled; they are accounted in the &amp;quot;own&amp;quot; time of their caller;&lt;br /&gt;
** inlined features are not profiled either (only in -boost)&lt;br /&gt;
** 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.&lt;br /&gt;
**s to Lothar Scholz for having the idea in the first place.&lt;br /&gt;
**ped the input-output system to make it more general and more extensible. Provided features:&lt;br /&gt;
** now streams can be &amp;quot;filtered&amp;quot;. It means you can nest them to bring extra features such as encoding or encryption (among many other things)&lt;br /&gt;
** 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.&lt;br /&gt;
See also the cluster description on the SmartEiffel site.&lt;br /&gt;
* Visitors revisited. The architecture is now ready to be used (in 1.1 it was but a draft).&lt;br /&gt;
&lt;br /&gt;
== SmartEiffel (release 1.1 down to release 1.0) ==&lt;br /&gt;
&lt;br /&gt;
=== Release 1.1 [Charlemagne] - Monday June 16th, 2003 ===&lt;br /&gt;
&lt;br /&gt;
* Thoroughly changed the configuration handling. The new scheme is more complete, and much more flexible.&lt;br /&gt;
** 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 &amp;lt;Enter&amp;gt; key. For more informations about installation and all new configuration capabilities, please have a look to install page.&lt;br /&gt;
** Added the -c_mode option, in conjunction with the new configuration handling.&lt;br /&gt;
** Added a -loadpath flag to read an extra loadpath.&lt;br /&gt;
* 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.&lt;br /&gt;
* Added a small expression evaluator to sedb. One can now display the attributes of the objects on the stack. Be sure to read the &amp;quot;more-help&amp;quot; section on data display (for once functions, the result is unavailable if it has not yet been called).&lt;br /&gt;
* 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.&lt;br /&gt;
* Implemented inspect on [[library_class:STRING|&amp;lt;tt&amp;gt;STRING&amp;lt;/tt&amp;gt;]]s.&lt;br /&gt;
* 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!&lt;br /&gt;
* [[pretty]] significantly updated.&lt;br /&gt;
* The C files produced by the compiler now should work on any platform, even with the GC turned on.&lt;br /&gt;
* Added Unicode support in [[library_class:STRING|&amp;lt;tt&amp;gt;STRING&amp;lt;/tt&amp;gt;]]s (see the SmartEiffel/tutorial/unicode and SmartEiffel/lib/unicode directories).&lt;br /&gt;
* Added new abstract class [[library_class:FILE|&amp;lt;tt&amp;gt;FILE&amp;lt;/tt&amp;gt;]] and new features in class [[library_class:DIRECTORY|&amp;lt;tt&amp;gt;DIRECTORY&amp;lt;/tt&amp;gt;]].&lt;br /&gt;
* Added hexadecimal notation for &amp;lt;tt&amp;gt;INTEGER&amp;lt;/tt&amp;gt; constants, [[library_class:CHARACTER|&amp;lt;tt&amp;gt;CHARACTER&amp;lt;/tt&amp;gt;]] constants and inside manifest [[library_class:STRING|&amp;lt;tt&amp;gt;STRING&amp;lt;/tt&amp;gt;]]s as well. See the example in file SmartEiffel/tutorial/hexadecimal.e for more information.&lt;br /&gt;
* Added agent facilities on [[library_class:STRING|&amp;lt;tt&amp;gt;STRING&amp;lt;/tt&amp;gt;]] and [[library_class:UNICODE_STRING|&amp;lt;tt&amp;gt;UNICODE_STRING&amp;lt;/tt&amp;gt;]] (warning, those facilities are non-standard extensions).&lt;br /&gt;
* 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.&lt;br /&gt;
* Moved the bin_c directory to install/germ.&lt;br /&gt;
* Reorganized the SmartEiffel/sys/runtime directory:&lt;br /&gt;
** Clearly separated C and Java backend helpers&lt;br /&gt;
** 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&lt;br /&gt;
* Added the -compact option which produces much more compact C code.&lt;br /&gt;
* same_type from &amp;lt;tt&amp;gt;GENERAL&amp;lt;/tt&amp;gt; is now obsolete. Use same_dynamic_type instead.&lt;br /&gt;
* Obsoleted operators &amp;quot;and&amp;quot;, &amp;quot;or&amp;quot;, &amp;quot;xor&amp;quot; and &amp;quot;not&amp;quot; for &amp;lt;tt&amp;gt;INTEGER&amp;lt;/tt&amp;gt;s, and added prefix operator &amp;quot;~&amp;quot;.&lt;br /&gt;
* [[library_class:MEMORY|&amp;lt;tt&amp;gt;MEMORY&amp;lt;/tt&amp;gt;]].allocated_bytes is more accurate.&lt;br /&gt;
* Generated object files are now removed before calling C compiler.&lt;br /&gt;
* Various bug fixes and improvements (see details in the SmartZilla bug tracker).&lt;br /&gt;
&lt;br /&gt;
=== Release 1.0 - Friday December 6th, 2002 ===&lt;br /&gt;
&lt;br /&gt;
This is the very first release with the name SmartEiffel!&lt;br /&gt;
(Previous releases were named SmallEiffel.)&lt;br /&gt;
&lt;br /&gt;
The main changes between SmallEiffel -0.74 and SmartEiffel 1.0 are:&lt;br /&gt;
&lt;br /&gt;
* Name changed from SmallEiffel to SmartEiffel!&lt;br /&gt;
* Version numbering: now, versions are numbered from 1.0 beta 1 upward&lt;br /&gt;
* 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).&lt;br /&gt;
* The new Reference keyword is now implemented. Use reference &amp;lt;tt&amp;gt;INTEGER&amp;lt;/tt&amp;gt; instead of &amp;lt;tt&amp;gt;INTEGER_REF&amp;lt;/tt&amp;gt;. &amp;lt;tt&amp;gt;INTEGER_REF&amp;lt;/tt&amp;gt; will become obsolete.&lt;br /&gt;
* The new [[library_class:INTEGER_GENERAL|&amp;lt;tt&amp;gt;INTEGER_GENERAL&amp;lt;/tt&amp;gt;]], [[library_class:INTEGER_8|&amp;lt;tt&amp;gt;INTEGER_8&amp;lt;/tt&amp;gt;]], [[library_class:INTEGER_16|&amp;lt;tt&amp;gt;INTEGER_16&amp;lt;/tt&amp;gt;]], [[library_class:INTEGER_32|&amp;lt;tt&amp;gt;INTEGER_32&amp;lt;/tt&amp;gt;]], [[library_class:INTEGER_64|&amp;lt;tt&amp;gt;INTEGER_64&amp;lt;/tt&amp;gt;]] types are now implemented.&lt;br /&gt;
* After long discussions, we have decided to stick to our decision for the type of integer constants (as an example, 127 is of type [[library_class:INTEGER_8|&amp;lt;tt&amp;gt;INTEGER_8&amp;lt;/tt&amp;gt;]] and 128 is of type [[library_class:INTEGER_16|&amp;lt;tt&amp;gt;INTEGER_16&amp;lt;/tt&amp;gt;]] 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 &amp;lt;tt&amp;gt;&amp;lt;&amp;lt;...&amp;gt;&amp;gt;&amp;lt;/tt&amp;gt; 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 :)&lt;br /&gt;
* 64-bit architectures supported.&lt;br /&gt;
* Internal improvements in the type system (better C code produced)&lt;br /&gt;
* Buffered I/O. You may get big improvements on programs performing lots of file reading or writing ([[library_class:STD_INPUT|&amp;lt;tt&amp;gt;STD_INPUT&amp;lt;/tt&amp;gt;]] and [[library_class:STD_OUTPUT|&amp;lt;tt&amp;gt;STD_OUTPUT&amp;lt;/tt&amp;gt;]] are also buffered).&lt;br /&gt;
* The short command now has the &amp;quot;-client&amp;quot; option (see short command manual for more details).&lt;br /&gt;
* The &amp;quot;tcc&amp;quot; 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.&lt;br /&gt;
* New bug reporting tool. Now you can see all known bugs and their state. Allways refers to the bug report page on SmartEiffel site.&lt;br /&gt;
* As suggested on our mailing list, there are now two new classes in order to remove some definitions from &amp;lt;tt&amp;gt;GENERAL&amp;lt;/tt&amp;gt; (see class [[library_class:MATH_CONSTANTS|&amp;lt;tt&amp;gt;MATH_CONSTANTS&amp;lt;/tt&amp;gt;]] and class [[library_class:CHARACTER_CONSTANTS|&amp;lt;tt&amp;gt;CHARACTER_CONSTANTS&amp;lt;/tt&amp;gt;]]).&lt;br /&gt;
* 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 &amp;gt;&amp;gt; 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.&lt;br /&gt;
* Type mark must now follow the Precursor keyword.&lt;br /&gt;
* Fixed the bug recently reported by Wolfgang Jansen. (Well isolated bug report, thanks!) This bug was related to expanded objects and the twin feature.&lt;br /&gt;
* Fixed the -manifest_string_trace bug recently reported by Alexis Saettler. (Well isolated bug as well, thanks!)&lt;br /&gt;
* 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 &amp;quot;like Current&amp;quot; type mark into some hard-coded type mark (e.g. &amp;quot;FOO&amp;quot;). 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 [[library_class:NUMBER|&amp;lt;tt&amp;gt;NUMBER&amp;lt;/tt&amp;gt;]] library implementation of &amp;lt;tt&amp;gt;is_equal&amp;lt;/tt&amp;gt; (''like Current'' is now changed to [[library_class:NUMBER|&amp;lt;tt&amp;gt;NUMBER&amp;lt;/tt&amp;gt;]]) and changed the postcondition of &amp;lt;tt&amp;gt;is_equal&amp;lt;/tt&amp;gt; in &amp;lt;tt&amp;gt;GENERAL&amp;lt;/tt&amp;gt; (ensure assertion relaxed to no longer call standard_is_equal).&lt;br /&gt;
* 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/&lt;br /&gt;
* New Cygwin directory notation is now supported. Recent Cygwin systems will be automatically detected while install.&lt;br /&gt;
* Other &amp;quot;secret&amp;quot; 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.&lt;br /&gt;
* Improved internal lab process to more easily provide professional support contracts (see premium support for more details).&lt;br /&gt;
* New functions in [[library_class:COLLECTION_SORTER|&amp;lt;tt&amp;gt;COLLECTION_SORTER&amp;lt;/tt&amp;gt;]] classes using dichotomic search.&lt;br /&gt;
* GC support for the Elate system updated.&lt;br /&gt;
* Various bug fixes and improvements.&lt;br /&gt;
&lt;br /&gt;
== SmallEiffel (all releases of SmallEiffel) ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.74 - Tuesday May 7th, 2002 ===&lt;br /&gt;
&lt;br /&gt;
* The new agent mechanism is now implemented. See tutorial/agent directory for examples.&lt;br /&gt;
* 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.&lt;br /&gt;
* The new create instruction/expression is now fully implemented and correctly pretty-printed. The new default_create feature mechanism is also implemented.&lt;br /&gt;
* 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.&lt;br /&gt;
* Added examples for the new TUPLE type in directory tutorial/tuple.&lt;br /&gt;
* 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.)&lt;br /&gt;
* The external C interface is now compatible with the new ETL definition. (See directory tutorial/external/C for examples.)&lt;br /&gt;
* Added flag -high_memory_compiler to compile_to_c.&lt;br /&gt;
* 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.)&lt;br /&gt;
* 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.&lt;br /&gt;
* Added feature connect_append_to both in class TEXT_FILE_WRITE and BINARY_FILE_WRITE.&lt;br /&gt;
* 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.&lt;br /&gt;
* Added feature size_of and feature last_change_of in class FILE_TOOLS (see also tutorial/basic_time for examples).&lt;br /&gt;
* Added feature append_decimal_in and feature to_decimal in class NUMBER as well as a new example the tutorial/number directory.&lt;br /&gt;
* Added feature add both in class COLLECTION_SORTER and in class REVERSE_COLLECTION_SORTER.&lt;br /&gt;
* Added feature reference_at in class DICTIONARY.&lt;br /&gt;
* Added feature infix &amp;quot;+&amp;quot; in class POINTER.&lt;br /&gt;
* Various bug fixes and improvements.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.75 - Thursday July 16th, 2001 ===&lt;br /&gt;
&lt;br /&gt;
* 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.&lt;br /&gt;
* 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.&lt;br /&gt;
* Added a traditional -help flag for all commands to print a summary of available options.&lt;br /&gt;
* In ACE files as well as in &amp;quot;loadpath.se&amp;quot; files the ${SmallEiffelDirectory} environment variable is automatically defined using the value of the ${SmallEiffel} environment variable.&lt;br /&gt;
* 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.&lt;br /&gt;
* The new TUPLE type is now implemented.&lt;br /&gt;
* Added class TIME_IN_GERMAN to handle date and time in German. See tutorial/basic_time for examples.&lt;br /&gt;
* Feature is_equal of class COMPARABLE is now ELKS compatible.&lt;br /&gt;
* Added feature internal_key in class DICTIONARY.&lt;br /&gt;
* Various bug fixes and improvements.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.76 - Saturday November 11th, 2000 ===&lt;br /&gt;
&lt;br /&gt;
* 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.&lt;br /&gt;
* 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).&lt;br /&gt;
* Added feature reindex in class ARRAY.&lt;br /&gt;
* Added a brand new class SET[E-&amp;gt;HASHABLE].&lt;br /&gt;
* Added support for the Elate (Amiga) system as well as the vpcc C compiler.&lt;br /&gt;
* Added support for the QNX real time operating system.&lt;br /&gt;
* For feature dispose of class MEMORY (as well as redefinitions), the class invariant is no longer triggered.&lt;br /&gt;
* Added features atan2 and pow both in class REAL and DOUBLE.&lt;br /&gt;
* Internal implementation of BASIC_TIME revisited (using now a double for memorization).&lt;br /&gt;
* Implementation of class DICTIONARY completely revisited. Also added features add, item_map_in and key_map_in in the new class DICTIONARY.&lt;br /&gt;
* 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).&lt;br /&gt;
* Various bug fixes and improvements.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.77 - Saturday February 12th, 2000 ===&lt;br /&gt;
&lt;br /&gt;
* 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, ...&lt;br /&gt;
  To install SmallEiffel under some UNIX like system, just type make in the SmallEiffel directory.&lt;br /&gt;
  To install SmallEiffel under Windows, just run install.exe.&lt;br /&gt;
  On other systems, C compile and run the install.c file.&lt;br /&gt;
* 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.&lt;br /&gt;
* Added NUMBER library, for infinite precision and infinitely large numbers. See tutorial/number for examples.&lt;br /&gt;
* Added ITERATOR library, for external iterators on data structures. See tutorial/iterator for examples.&lt;br /&gt;
* 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).&lt;br /&gt;
* 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).&lt;br /&gt;
* Added class BIT_STRING for very large bit sequences, with reference semantics.&lt;br /&gt;
* 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).&lt;br /&gt;
* 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.&lt;br /&gt;
* Added feature to_hexadecimal and feature to_hexadecimal_in in class INTEGER.&lt;br /&gt;
* Improved incremental recompilation of the generated C code (also fixed a very old bug in incrementality).&lt;br /&gt;
* Exceptions handling: the default_rescue feature is now supported.&lt;br /&gt;
* Various bug fixes and improvements (type inference score increased, ...).&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.78 - Saturday June 05th, 1999 ===&lt;br /&gt;
&lt;br /&gt;
* New -html2 flag for command short generates a colorized HTML short form for classes.&lt;br /&gt;
* The garbage collector now takes into account feature dispose of class MEMORY for reference objects.&lt;br /&gt;
* Obsolete classes (obsolete keyword) now supported.&lt;br /&gt;
* Assertion tags are now displayed when an assertion fails.&lt;br /&gt;
* Added environment variable in loadpath files. Syntax: ${SOME_VAR}&lt;br /&gt;
* Added the -no_style_warning flag to suppress warnings when the recommended styles guidelines for Eiffel are not strictly followed.&lt;br /&gt;
* Added the -version flag to show SmallEiffel's version.&lt;br /&gt;
* 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.&lt;br /&gt;
* Class LINKED_LIST now replaces obsolete class LINK_LIST (simple renaming).&lt;br /&gt;
  Class TWO_WAY_LINKED_LIST now replaces obsolete class LINK2_LIST (simple renaming).&lt;br /&gt;
* Fixed &amp;quot;implicit renaming&amp;quot; bug.&lt;br /&gt;
* Cleaned all source code of tabulations at beginning of line (made code look ugly when using an editor whose tabs were not 8).&lt;br /&gt;
* Some new ELKS'95 features implemented.&lt;br /&gt;
* Validity rule VEEN fixed.&lt;br /&gt;
* Added class COLLECTION_SORTER and REVERSE_COLLECTION_SORTER to the library.&lt;br /&gt;
* Fixed file renaming portability bug (&amp;quot;.d files bug&amp;quot;).&lt;br /&gt;
* Validity rule VCFG.1 is now enforced.&lt;br /&gt;
* Validity rule VAPE is now enforced.&lt;br /&gt;
* Classes mentioned in a cecil.se file are now automatically made live. Makes it easier to link with external libraries.&lt;br /&gt;
* Various other bug fixes.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.79 - Tuesday December 22nd, 1998 ===&lt;br /&gt;
&lt;br /&gt;
* The new Eiffel construct Precursor as described OOSC2 is now implemented.&lt;br /&gt;
* The Eiffel expression strip is now implemented.&lt;br /&gt;
* Nested loadpath files now allowed.&lt;br /&gt;
* Extended anchored definition to accept infix and prefix feature names. For example, this kind of declaration is now accepted :      foo: like infix &amp;quot;+&amp;quot;.&lt;br /&gt;
* Classes COLLECTION2, ARRAY2 and FIXED_ARRAY2 of lib/base completely revisited.&lt;br /&gt;
* Fixed a bug related to calls of the form f.g.h; on expanded objects.&lt;br /&gt;
* Fixed a bug related to inheritance of generic classes.&lt;br /&gt;
* Fixed bugs related to assertions checking in case of exceptions (rescue clause, retry). Improved cycle detection in assertions.&lt;br /&gt;
* Fixed bug in GC related to recycling of &amp;quot;monsters&amp;quot; (very large resizable objets).&lt;br /&gt;
* Fixed an incredible bug in the implementation of the like Current type mark. ;-).&lt;br /&gt;
* Fixed many others bugs ($ operator, GC for alpha DEC, ...).&lt;br /&gt;
* System customization file for the BeOS system added in the &amp;quot;sys&amp;quot; sub-directory (more on system customization).&lt;br /&gt;
* Contents of the environment variable SmallEiffel must be now set with the absolute path of the file &amp;quot;system.se&amp;quot; which is in the sub-directory &amp;quot;sys&amp;quot; of the installation directory.&lt;br /&gt;
  Under a UNIX-like system, the value of the SmallEiffel environment variable may be for example: /usr/lib/SmallEiffel/sys/system.se&lt;br /&gt;
  Commands are also more robust when this environment variable contains non-alphanumeric characters.&lt;br /&gt;
* No more ensure assertion in GENERAL.get_environment_variable.&lt;br /&gt;
* Commands compile_to_jvm and print_jvm_class completely revisited. Java byte-code can be now used with the -verify Java option).&lt;br /&gt;
* Validity rule VDRD.6 is now enforced.&lt;br /&gt;
* Balancing rule (automatic promotion) for INTEGER, DOUBLE and REAL is now implemented.&lt;br /&gt;
* Recursive once routines now work correctly.&lt;br /&gt;
* Unmodified generated C files are not touched anymore.&lt;br /&gt;
* Assertions correctly checked for all external C routines.&lt;br /&gt;
* Exception handling now works when an exception occurs in external C code.&lt;br /&gt;
* Cleaned the compiler and decreased its memory footprint.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.80 - Thursday July 9th, 1998 ===&lt;br /&gt;
&lt;br /&gt;
* Exception handling implemented. Class EXCEPTIONS added in lib/kernel.&lt;br /&gt;
* 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).&lt;br /&gt;
* 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.&lt;br /&gt;
* Behavior of compilation flag -trace of command compile_to_c changed to allow step-by-step execution (embryo of Eiffel source code debugger).&lt;br /&gt;
* Feature ARRAY.resize completely revisited (added two features in class NATIVE_ARRAY: clear and move).&lt;br /&gt;
* Garbage Collector optimized (the GC should be more agressive and some benchmarks are included in directory SmallEiffel/misc/benchmarks/gc/*/bench.e).&lt;br /&gt;
* Associativity of infix operator &amp;quot;^&amp;quot; is now correctly handled.&lt;br /&gt;
* Fixed bugs in PLATFORM for Minimum_double, Minimum_real and Minimum_character_code.&lt;br /&gt;
* Fixed some others bugs about export rules, about expanded objects with expanded attributes.&lt;br /&gt;
* Fixed bugs in pretty.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.81 - Thursday April 9th, 1998 ===&lt;br /&gt;
&lt;br /&gt;
* 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).&lt;br /&gt;
* 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.)&lt;br /&gt;
  Added flag -clean which removes all the C and object files of the system. (This corresponds to the old default behavior.)&lt;br /&gt;
* Fixed a bug related to buffered input under Windows/MS VC.&lt;br /&gt;
* Fixed a bug in misc/INSTALL.SH script.&lt;br /&gt;
* Added require is_connected for all features put_* of class OUTPUT_STREAM.&lt;br /&gt;
* Fixed a bug in command short (require/ensure assertion of deferred routines are now printed).&lt;br /&gt;
* Added one useful hook for mode -html1 in command short (see hook Mcn).&lt;br /&gt;
* Added directory SmallEiffel/sys/runtime which contains the C runtime.&lt;br /&gt;
* Fixed a bug about instanciation of class ANY itself (not so common !).&lt;br /&gt;
* Fixed a bug about inlining of operator $.&lt;br /&gt;
* Fixed a bug about cyclic anchored definitions.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.82 - Friday January 16th, 1998 ===&lt;br /&gt;
&lt;br /&gt;
* Became the official GNU Eiffel compiler.&lt;br /&gt;
* Added first HTML mode to command short. Flag -html1. Thanks to Matthias Klause.&lt;br /&gt;
* Fixed bugs in command pretty.&lt;br /&gt;
* It is now possible to rename/redefine external &amp;quot;SmallEiffel&amp;quot; features.&lt;br /&gt;
* Files *.hlp of directory SmallEiffel/man no longer exists. All the documentation is now in *.html files plus corresponding automatically generated *.txt files.&lt;br /&gt;
* Manifest arrays creation has been optimized.&lt;br /&gt;
* Validity rule VHRC.2 is now enforced.&lt;br /&gt;
* Fixed bugs about export clause.&lt;br /&gt;
* Feature GENERAL.hash_code no longer exists. Added ELKS class HASHABLE in order to be compatible with others compilers/libraries.&lt;br /&gt;
* Fixed a bug in pre-computed once functions.&lt;br /&gt;
* Fixed a bug in REAL/DOUBLE keybord input.&lt;br /&gt;
* Reintroduced left hand side cast in C code for better performances (allowed by the C ANSI standard).&lt;br /&gt;
* Obsolete features (obsolete keyword) now generate a Warning.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.83 - Friday September 19th, 1997 ===&lt;br /&gt;
&lt;br /&gt;
* Added command short to the distribution.&lt;br /&gt;
* Added directory contrib in the distribution. This directory contains some scripts to use gdb as source level debugger for SmallEiffel.&lt;br /&gt;
* Added flag -no_warning to commands: compile_to_c, pretty, and compile_to_jvm.&lt;br /&gt;
* Added flag -case_insensitive to command compile_to_c.&lt;br /&gt;
* Fixed a bug for inherit/select.&lt;br /&gt;
* Fixed a bug for some pre-computed once function.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.84 - Monday August 18th, 1997 ===&lt;br /&gt;
&lt;br /&gt;
* Class BIT is now implemented in Java bytecode (command compile_to_jvm).&lt;br /&gt;
* Added external specification to call Java code (when using compile_to_jvm).&lt;br /&gt;
* 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.&lt;br /&gt;
* 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).&lt;br /&gt;
* Added STRING.substring_index (from ELKS written by Fridtjof SIEBERT).&lt;br /&gt;
* 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).&lt;br /&gt;
* Changed the behavior of end_of_input of INPUT_STREAM (this flag is true _after_ last character has been read).&lt;br /&gt;
* Fixed a bug in manifest arrays (mixed objects including Void).&lt;br /&gt;
* Fixed a bug dealing with some statically computed expressions.&lt;br /&gt;
* Fixed a bug in repeated inheritance.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.85 - Thursday July 3rd, 1997 ===&lt;br /&gt;
&lt;br /&gt;
* First beta-release of commands compile_to_jvm and print_jvm_class!&lt;br /&gt;
* 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.&lt;br /&gt;
* 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.&lt;br /&gt;
* Added feature to_hexadecimal and feature to_hexadecimal_in in class CHARACTER.&lt;br /&gt;
* Feature io, std_input, std_output and std_error of class GENERAL are no longer frozen.&lt;br /&gt;
* 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).&lt;br /&gt;
* Feature die_with_code of GENERAL now accepts any INTEGER code (not just predefined exit_success_code and exit_failure_code).&lt;br /&gt;
* Fixed a bug in STRING. The following expression is now true: (&amp;quot;a%/0/b&amp;quot;).count = 3&lt;br /&gt;
  Just try this on your favorite Eiffel compiler ;-)&lt;br /&gt;
* 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.&lt;br /&gt;
* Feature unread_character of class INPUT_STREAM is now implemented in Eiffel.&lt;br /&gt;
* Added OUTPUT_STREAM.put_pointer to view a POINTER.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.86 - Sunday April 13th, 1997 ===&lt;br /&gt;
&lt;br /&gt;
* All reported bugs at this time have been fixed.&lt;br /&gt;
* 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.&lt;br /&gt;
* Features BOOLEAN.infix &amp;quot;or&amp;quot; and BOOLEAN.infix &amp;quot;and&amp;quot; are now written in pure Eiffel. As a consequence, it is very important for the SmallEiffel programmer to make the distinction between BOOLEAN.infix &amp;quot;and then&amp;quot; and BOOLEAN.infix &amp;quot;and&amp;quot; (respectively for BOOLEAN.infix &amp;quot;or else&amp;quot; and BOOLEAN.infix &amp;quot;or&amp;quot;). When left-hand-side argument produces no side effect, the semi-strict operator (BOOLEAN.infix&amp;quot;and then&amp;quot;/&amp;quot;or else&amp;quot;) may run faster.&lt;br /&gt;
* Fixed REAL.sin (the old one was calling sqrt :-).&lt;br /&gt;
* Fixed a bug in INTEGER.append_in (you can now print Minimum_integer).&lt;br /&gt;
* Added feature in_range in class COMPARABLE.&lt;br /&gt;
* Result type of REAL.infix &amp;quot;^&amp;quot; is now DOUBLE for ELKS compatibility.&lt;br /&gt;
* Feature remove is now implemented in all subclasses of COLLECTION (i.e. ARRAY, FIXED_ARRAY, LINK_LIST and LINK2_LIST).&lt;br /&gt;
* Added feature add for all subclasses of COLLECTION.&lt;br /&gt;
* Conversion DOUBLE/STRING : ANSI C sscanf and sprintf is now used to avoid loss of precision.&lt;br /&gt;
* Added some more class invariant code generation when compiling in -invariant_check mode. Class invariant is now also checked before exit of a routine.&lt;br /&gt;
* Added feature file_tools in class GENERAL to ease access to class FILE_TOOLS.&lt;br /&gt;
* Changed printing format for basic *_REF classes. For example, instruction print(1); now prints 1.&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.87 - Tuesday January 7th, 1997 ===&lt;br /&gt;
&lt;br /&gt;
* Added a new flag -trace to ease debug (see man/compile_to_c file).&lt;br /&gt;
* More inlining at Eiffel level (-boost mode only).&lt;br /&gt;
* Class BIT_N completely revisited. It may be as fast as C.&lt;br /&gt;
* Added class C_ARRAY[E] to deal directly with C arrays at Eiffel level. Thus there are no more external &amp;quot;CSE&amp;quot; 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.&lt;br /&gt;
* Fixed a bug in STD_FILE_READ.read_double.&lt;br /&gt;
* Ordering of C output to increase gcc inlining.&lt;br /&gt;
* According to man/compile_to_c) , flag -debug_check now works (debug instructions are no longer generated in mode -all_check).&lt;br /&gt;
* Unused local variables removed at Eiffel level (warning added for -debug_check mode only).&lt;br /&gt;
* Default class ANY now inherits PLATFORM (as in ETL).&lt;br /&gt;
* Fixed a bug in floating-point constants.&lt;br /&gt;
* Added directory sys to customize default C compiler, default C linker and default loading path.&lt;br /&gt;
* Fixed some bugs with outside expanded types.&lt;br /&gt;
* Fixed a bug with rename/select.&lt;br /&gt;
* Redefinition of once routine is now allowed.&lt;br /&gt;
* Feature GENERAL.conforms_to is now implemented.&lt;br /&gt;
* Rule VFFD.7 is now enforced.&lt;br /&gt;
* Feature force implemented for all COLLECTION.&lt;br /&gt;
* Added conversions features CHARACTER.to_bit, INTEGER.to_bit, BIT_N.to_character and BIT_N.to_integer.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.88 - Wednesday October 30th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Fixed bugs dealing with inherit/rename/select.&lt;br /&gt;
* Added warning for missing colon in actual arguments list.&lt;br /&gt;
* Warning : INSTALL procedure has changed and you have to set manually the default loading path (see misc/INSTALL for details).&lt;br /&gt;
* Added some VMS customization.&lt;br /&gt;
* Fixed bugs when printing run-time stack.&lt;br /&gt;
* Warning added for missing colon in actual parameter list.&lt;br /&gt;
* Added flush in class STD_FILE_WRITE.&lt;br /&gt;
* No more left hand side cast in C code (because some C compilers don't like them).&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.89 - Sunday September 15th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Calling Eiffel from C is now implemented (see man/cecil) file).&lt;br /&gt;
* Object creation uses C calloc instead malloc+memset.&lt;br /&gt;
* Object creation is inlined.&lt;br /&gt;
* ARRAY/FIXED_ARRAY put and item are now inlined (-boost only).&lt;br /&gt;
* Added feature capacity and resize in FIXED_ARRAY.&lt;br /&gt;
* 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.&lt;br /&gt;
* More user's routines are inlined (-boost only).&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.90 - Friday August 23rd, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Added random number generator library (SmallEiffel/lib_rand).&lt;br /&gt;
* Added checking of assertions for external &amp;quot;CSE&amp;quot; features.&lt;br /&gt;
* Anchoring on expanded types are now allowed.&lt;br /&gt;
* Multiple level of anchoring definition allowed.&lt;br /&gt;
* Fixed a bug in STRING.from_external.&lt;br /&gt;
* Fixed a bug with mixed rename/redefine.&lt;br /&gt;
* Inheritance loop detection.&lt;br /&gt;
* Anchoring loop detection.&lt;br /&gt;
* Fixed a bug with renaming infix/prefix.&lt;br /&gt;
* Command clean also use the make suffix.&lt;br /&gt;
* Added ELKS95 sign in INTEGER/REAL/DOUBLE.&lt;br /&gt;
* Feature make is the default root feature name for compile.&lt;br /&gt;
* Optimized ARRAY.add_last and STRING.extend.&lt;br /&gt;
* Changed STRING.out (no more enclosing %&amp;quot; printed).&lt;br /&gt;
* Remove warning gcc messages for 64 bit machines (alpha/DEC).&lt;br /&gt;
* Added option -no_split for a better finalization (see man/compile_to_c) file).&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.91 - Wednesday July 24th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Incremental C compiling mode implemented (see option -c_code in help file man/compile) .&lt;br /&gt;
* Added command clean in help file man/clean.&lt;br /&gt;
* Added class FILE_TOOLS.&lt;br /&gt;
* No more empty C struct in generated C code (to avoid problems with Microsoft Windows C compiler).&lt;br /&gt;
* Fixed one more bug with conformance rule VNCG.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.92 - Saturday July 20th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Fixed some more bugs with conformance rule VNCG.&lt;br /&gt;
* Added math functions in DOUBLE/REAL (sin, cos, tan, asin, acos, atan, ... ANSI C names).&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.93 - Thursday July 18th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Fixed some more bugs with conformance rule VNCG.&lt;br /&gt;
* Type BIT is now implemented.&lt;br /&gt;
* Added ELKS 95 STRING.left_adjust and STRING.right_adjust.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.94 - Friday July 5th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Fixed some bugs with conformance rule VNCG.&lt;br /&gt;
* Static expressions are used to detect pre-computable once routines.&lt;br /&gt;
* Added features to_external and from_external both in classes ARRAY and FIXED_ARRAY.&lt;br /&gt;
* Fixed a bug for inheritance of ARRAY or FIXED_ARRAY.&lt;br /&gt;
* Contents of end of class comment checked.&lt;br /&gt;
* Added documentation file for external calls (see help file man/external ).&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.95 - Thursday May 30th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* It is now possible to inherit ARRAY.&lt;br /&gt;
* It is now possible to inherit STRING.&lt;br /&gt;
* Flag -cc of compile_to_c has changed.&lt;br /&gt;
* The PLATFORM class is now conform to ELKS95.&lt;br /&gt;
* Added feature twin (like the one of TowerEiffel) in GENERAL.&lt;br /&gt;
* Added features to_external and from_external in class STRING.&lt;br /&gt;
* Fixed some bugs in once pre-computed routines.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.96 - Friday May 10th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Internal renaming to suppress some warning messages and for a smooth integration with C++ software.&lt;br /&gt;
* DOS and Macintosh better portability.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.97 - Thursday May 2nd, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Inside of compiler cleaned.&lt;br /&gt;
* Pre-Computing of some once functions.&lt;br /&gt;
* Added class COLLECTION, LINK_LIST and FIXED_ARRAY in lib/base.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.98 - Friday March 15th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Command pretty added.&lt;br /&gt;
* Implements Eiffel expanded clause.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.99 - Saturday February 17th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* 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 [http://www.uhp-nancy.fr/ University Henri Poincaré] and [http://esial.fr/ ESIAL]&lt;br /&gt;
&lt;br /&gt;
=== Release - 1.00 - July 1995 ===&lt;br /&gt;
&lt;br /&gt;
* The very first bootstrap. SmallEiffel is born.&lt;/div&gt;</summary>
		<author><name>Cadrian</name></author>
	</entry>
	<entry>
		<id>https://wiki.liberty-eiffel.org/index.php?title=Release_Notes_(Versions_history)&amp;diff=1790</id>
		<title>Release Notes (Versions history)</title>
		<link rel="alternate" type="text/html" href="https://wiki.liberty-eiffel.org/index.php?title=Release_Notes_(Versions_history)&amp;diff=1790"/>
		<updated>2013-10-17T11:06:54Z</updated>

		<summary type="html">&lt;p&gt;Cadrian: /* Adler (not yet released, named after Charles Adler, Jr.) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== LibertyEiffel (latest release first) ==&lt;br /&gt;
For upcoming releases see the [[upcoming releases|list of names]].&lt;br /&gt;
&lt;br /&gt;
=== Adler (not yet released, named after Charles Adler, Jr.) ===&lt;br /&gt;
* First release as LibertyEiffel&lt;br /&gt;
* User-visible changes:&lt;br /&gt;
** Added [[library_class:NATURAL_8|&amp;lt;tt&amp;gt;NATURAL_8&amp;lt;/tt&amp;gt;]], [[library_class:NATURAL_16|&amp;lt;tt&amp;gt;NATURAL_16&amp;lt;/tt&amp;gt;]], [[library_class:NATURAL_32|&amp;lt;tt&amp;gt;NATURAL_32&amp;lt;/tt&amp;gt;]], and [[library_class:NATURAL_64|&amp;lt;tt&amp;gt;NATURAL_64&amp;lt;/tt&amp;gt;]] classes. See &amp;lt;tt&amp;gt;tutorial/natural.e&amp;lt;/tt&amp;gt; for examples.&lt;br /&gt;
** Even low-level features (i.e. &amp;lt;tt&amp;gt;external &amp;quot;built_in&amp;quot;&amp;lt;/tt&amp;gt;) are now checking their assertions. As an example, division by zero is now checked by assertions.&lt;br /&gt;
** Inlined dynamic dispatch for better performance&lt;br /&gt;
** A missing export clause is deprecated. Use &amp;lt;tt&amp;gt;{ANY}&amp;lt;/tt&amp;gt; instead.&lt;br /&gt;
** New core libraries: cli, json, log, parse (beware, those libraries are not yet tuned to be used without GC)&lt;br /&gt;
** Improved libraries: string (with notably a new [[library_class:FIXED_STRING|&amp;lt;tt&amp;gt;FIXED_STRING&amp;lt;/tt&amp;gt;]] class)&lt;br /&gt;
** Wrapper libraries: gtk, gdk, readline, ffi...&lt;br /&gt;
** A new tool that can generate mocks to help unit testing&lt;br /&gt;
** [http://www.hpl.hp.com/personal/Hans_Boehm/gc/ BDW] GC support&lt;br /&gt;
* Developer changes:&lt;br /&gt;
** The web site now belongs to the repository&lt;br /&gt;
** Automatic testing tools (ET on the web, and &amp;lt;tt&amp;gt;watch_eiffeltest.sh&amp;lt;/tt&amp;gt; in the shell)&lt;br /&gt;
** Automatic Debian packages generation&lt;br /&gt;
* Known bugs:&lt;br /&gt;
** BDW GC is not well tested; currently weak references seem not to work properly; and the GC is not run at program exit (it should run all finalizers)&lt;br /&gt;
** Sometimes SmartEiffel's native GC behaves wrongly, analysis is welcome&lt;br /&gt;
** Some of the newer core libraries do not work very well when there is no GC&lt;br /&gt;
** See the [https://savannah.gnu.org/bugs/?group=liberty-eiffel bugs page]&lt;br /&gt;
&lt;br /&gt;
== SmartEiffel (all releases which are predecessors of Liberty) ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Release 2.3 [Antoine-Auguste Parmentier] - Wednesday July 11th 2007 ===&lt;br /&gt;
&lt;br /&gt;
Again, a lot of novelties for this release:&lt;br /&gt;
&lt;br /&gt;
* New [[Typing policy|typing rules]] have been revisited and are now crystal clear. See [[Typing policy|this page]] for details.&lt;br /&gt;
* Implemented a new [[class loading]] algorithm, which takes into account the &amp;quot;distance&amp;quot; between classes, thus reifying the notion of clusters and sub-clusters. Everything is transparent, there is no new keyword to learn.&lt;br /&gt;
* Installation: SmartEiffel now provides a streamlined installer for package maintainers. Of course, the interactive installer is still available via &amp;quot;make interactive&amp;quot;.&lt;br /&gt;
* Configuration: in the same spirit to simplify package maintainers' life, the configuration &amp;quot;file&amp;quot; can now be a directory.&lt;br /&gt;
* The new [[eiffeltest]] tool is now available too.&lt;br /&gt;
* Old style &amp;quot;rename.se&amp;quot; files are no longer considered. You can now use the same class name in different clusters.&lt;br /&gt;
* The &amp;lt;tt&amp;gt;NONE&amp;lt;/tt&amp;gt; type mark must no longer be used. Just use an empty &amp;lt;tt&amp;gt;{}&amp;lt;/tt&amp;gt; exportation list to indicate that the corresponding following features are not exported. This is better for newcomers.&lt;br /&gt;
* In class [[library_class:COLLECTION|&amp;lt;tt&amp;gt;COLLECTION&amp;lt;/tt&amp;gt;]], features &amp;lt;tt&amp;gt;index_of&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;fast_index_of&amp;lt;/tt&amp;gt; now have an extra argument to indicate where the search must start (as in class [[library_class:STRING|&amp;lt;tt&amp;gt;STRING&amp;lt;/tt&amp;gt;]]). See also &amp;lt;tt&amp;gt;first_index_of&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;fast_first_index_of&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* Microsoft's Visual C++ 2005 compiler is now supported.&lt;br /&gt;
* The debugging sections can be turned on with the new &amp;lt;tt&amp;gt;-debug&amp;lt;/tt&amp;gt; option, in all compilation modes other than &amp;lt;tt&amp;gt;-boost&amp;lt;/tt&amp;gt;. The &amp;lt;tt&amp;gt;-debug_check&amp;lt;/tt&amp;gt; mode has been deprecated.&lt;br /&gt;
* The regular expression library has been added.&lt;br /&gt;
* Sequencer's &amp;lt;tt&amp;gt;READY_DESCRIPTION&amp;lt;/tt&amp;gt; is now renamed as [[library_class:EVENTS_SET|&amp;lt;tt&amp;gt;EVENTS_SET&amp;lt;/tt&amp;gt;]] and has a unified interface for all kinds of events.&lt;br /&gt;
* Some work on the network cluster.&lt;br /&gt;
* Last but not least: SmartEiffel now has a logo that will help it fly!&lt;br /&gt;
&lt;br /&gt;
=== Release 2.2 [Pomme de terre] - Monday December 19th, 2005 ===&lt;br /&gt;
&lt;br /&gt;
Again, a lot of novelties for this release.&lt;br /&gt;
&lt;br /&gt;
First, the new [[eiffeldoc]] command has been completely revisited and is now part of the delivery. That command is 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.&lt;br /&gt;
&lt;br /&gt;
The second important novelty is that we now have a brand new introspection mechanism which allows us to implement the new persistency facility.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
* Added a new command, [[se]], which is meant to be the only command you ever need to put in your PATH!&lt;br /&gt;
* Added a new command, [[eiffeldoc]], that you can use to document your project. Currently only HTML output is supported.&lt;br /&gt;
* The [[plugins]] system is vastly improved and should now be preferred over older external specifications. See [[plugins|this page]] for details.&lt;br /&gt;
* Improved error messages legibility in order to avoid missunderstanding.&lt;br /&gt;
* Added a new OpenGL widget for Vision. Unix-based programs only have to inherit from [[library_class:UNIX_GL_WIDGET|&amp;lt;tt&amp;gt;UNIX_GL_WIDGET&amp;lt;/tt&amp;gt;]] and define all the OpenGL related routines.&lt;br /&gt;
* Added new abstract class named [[library_class:BIJECTIVE_DICTIONARY|&amp;lt;tt&amp;gt;BIJECTIVE_DICTIONARY&amp;lt;/tt&amp;gt;]] which is actually a replacement for the now obsolete [[library_class:DOUBLE_DICTIONARY|&amp;lt;tt&amp;gt;DOUBLE_DICTIONARY&amp;lt;/tt&amp;gt;]] class. At time being, there is only one implementation of [[library_class:BIJECTIVE_DICTIONARY|&amp;lt;tt&amp;gt;BIJECTIVE_DICTIONARY&amp;lt;/tt&amp;gt;]] named [[library_class:HASHED_BIJECTIVE_DICTIONARY|&amp;lt;tt&amp;gt;HASHED_BIJECTIVE_DICTIONARY&amp;lt;/tt&amp;gt;]] (a hash_code-based implementation).&lt;br /&gt;
* Removed class &amp;lt;tt&amp;gt;GENERAL&amp;lt;/tt&amp;gt; as well as some obsolete features of that class. In the past, &amp;lt;tt&amp;gt;GENERAL&amp;lt;/tt&amp;gt; was inherited by [[library_class:PLATFORM|&amp;lt;tt&amp;gt;PLATFORM&amp;lt;/tt&amp;gt;]] which was inherited by [[library_class:ANY.|&amp;lt;tt&amp;gt;ANY.&amp;lt;/tt&amp;gt;]] Now, [[library_class:ANY|&amp;lt;tt&amp;gt;ANY&amp;lt;/tt&amp;gt;]] has no more parent at all (no conforming parent and no non-conforming parents). The removal of &amp;lt;tt&amp;gt;GENERAL&amp;lt;/tt&amp;gt; is better for newcomers because they just need to know about [[library_class:ANY|&amp;lt;tt&amp;gt;ANY&amp;lt;/tt&amp;gt;]] and it is also better for the underlying model consistency. Because we have now removed &amp;lt;tt&amp;gt;equals&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;clone&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;deep_clone&amp;lt;/tt&amp;gt; you must now only use &amp;lt;tt&amp;gt;is_equal&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;twin&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;deep_twin&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;is_deep_equal&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;standard_is_equal&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;standard_twin&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* Removed the &amp;lt;tt&amp;gt;file_tools&amp;lt;/tt&amp;gt; feature from [[library_class:ANY.|&amp;lt;tt&amp;gt;ANY.&amp;lt;/tt&amp;gt;]] Also note that all other file manipulation features from [[library_class:ANY|&amp;lt;tt&amp;gt;ANY&amp;lt;/tt&amp;gt;]] are now obsolete (use the class [[library_class:FILE_TOOLS|&amp;lt;tt&amp;gt;FILE_TOOLS&amp;lt;/tt&amp;gt;]] instead).&lt;br /&gt;
* No more feature &amp;lt;tt&amp;gt;argument&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;argument_count&amp;lt;/tt&amp;gt; in class [[library_class:ANY.|&amp;lt;tt&amp;gt;ANY.&amp;lt;/tt&amp;gt;]] In order to access command-line arguments, just insert the class [[library_class:ARGUMENTS.|&amp;lt;tt&amp;gt;ARGUMENTS.&amp;lt;/tt&amp;gt;]]&lt;br /&gt;
* The &amp;lt;tt&amp;gt;-case_insensitive&amp;lt;/tt&amp;gt; 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 legibility of our code.&lt;br /&gt;
* You now get a warning for using the all lower-case spelling of the keywords &amp;lt;tt&amp;gt;current&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;result&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;void&amp;lt;/tt&amp;gt;. Please use the initial-caps spellings &amp;lt;tt&amp;gt;Current&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;Result&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;Void&amp;lt;/tt&amp;gt; instead.&lt;br /&gt;
* 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.&lt;br /&gt;
* 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.&lt;br /&gt;
* 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.&lt;br /&gt;
* 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.&lt;br /&gt;
* Feature &amp;lt;tt&amp;gt;is_equal&amp;lt;/tt&amp;gt; is now redefined in class [[library_class:HASHABLE|&amp;lt;tt&amp;gt;HASHABLE&amp;lt;/tt&amp;gt;]]. The new definition adds an ensure then assertion to check consistency with the &amp;lt;tt&amp;gt;hash_code&amp;lt;/tt&amp;gt; function. Note that the redefinition is deferred to force clients to select their preferred implementation.&lt;br /&gt;
* Added a new feature called &amp;lt;tt&amp;gt;set_storage&amp;lt;/tt&amp;gt; in class [[library_class:STRING.|&amp;lt;tt&amp;gt;STRING.&amp;lt;/tt&amp;gt;]] This low-level feature is only exported to [[library_class:STRING_HANDLER|&amp;lt;tt&amp;gt;STRING_HANDLER&amp;lt;/tt&amp;gt;]].&lt;br /&gt;
* Added a new features in class [[library_class:COLLECTION|&amp;lt;tt&amp;gt;COLLECTION&amp;lt;/tt&amp;gt;]]: &amp;lt;tt&amp;gt;remove_head&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;remove_tail&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;reverse_index_of&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;last_index_of&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;first_index_of&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;fast_reverse_index_of&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;fast_last_index_of&amp;lt;/tt&amp;gt;&lt;br /&gt;
* Added a new features in class [[library_class:DICTIONARY|&amp;lt;tt&amp;gt;DICTIONARY&amp;lt;/tt&amp;gt;]]: &amp;lt;tt&amp;gt;fast_reference_at&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;fast_put&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;fast_remove&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* Added a new Eiffel mode description for the Vim text editor. This mode is compatible with our emacs mode. File &amp;quot;misc/eiffel.vim&amp;quot; is for the Vim editor while file &amp;quot;misc/eiffel.el&amp;quot; is for emacs.&lt;br /&gt;
&lt;br /&gt;
=== Release 2.1 [Poirot] - Wednesday February 9th, 2005 ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
More details about changes from 2.0:&lt;br /&gt;
&lt;br /&gt;
* 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 &amp;quot;inherit&amp;quot; keyword. After that, you can use the &amp;quot;insert&amp;quot; keyword followed by the list of non-conforming parents. Like in the previous release, when a class has no &amp;quot;inherit&amp;quot; clause and no &amp;quot;insert&amp;quot; clause, the default insert ANY is automatically added.&lt;br /&gt;
The new compiler does not warn you anymore when multiple conforming paths 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).&lt;br /&gt;
* We introduced a brand new notation to generalize the old manifest array notation. You can now create an [[library_class:ARRAY|&amp;lt;tt&amp;gt;ARRAY&amp;lt;/tt&amp;gt;]] initialized with letters as follows:&lt;br /&gt;
        {ARRAY[CHARACTER] 1, &amp;lt;&amp;lt; 'a', 'b', 'c', 'd' &amp;gt;&amp;gt; }&lt;br /&gt;
or a LINKED_LIST doing:&lt;br /&gt;
        {LINKED_LIST[CHARACTER] &amp;lt;&amp;lt; 'a', 'b', 'c', 'd' &amp;gt;&amp;gt; }&lt;br /&gt;
as well as any kind of COLLECTION:&lt;br /&gt;
        {RING_ARRAY[CHARACTER] 1, &amp;lt;&amp;lt; 'a', 'b', 'c', 'd' &amp;gt;&amp;gt;}&lt;br /&gt;
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.&lt;br /&gt;
* Classes to manipulate floating point numbers have been completely revisited. Floating point number manipulation now uses [[library_class:REAL_32|&amp;lt;tt&amp;gt;REAL_32&amp;lt;/tt&amp;gt;]] for 32 bits floating points, [[library_class:REAL_64|&amp;lt;tt&amp;gt;REAL_64&amp;lt;/tt&amp;gt;]] which is equivalent of &amp;lt;tt&amp;gt;REAL&amp;lt;/tt&amp;gt; for 64 bits floating points, [[library_class:REAL_80|&amp;lt;tt&amp;gt;REAL_80&amp;lt;/tt&amp;gt;]] for architecture supporting 80 bits, [[library_class:REAL_128|&amp;lt;tt&amp;gt;REAL_128&amp;lt;/tt&amp;gt;]] for architecture supporting 128 bits and, [[library_class:REAL_EXTENDED|&amp;lt;tt&amp;gt;REAL_EXTENDED&amp;lt;/tt&amp;gt;]] which is automatically mapped on [[library_class:REAL_80|&amp;lt;tt&amp;gt;REAL_80&amp;lt;/tt&amp;gt;]] or [[library_class:REAL_128|&amp;lt;tt&amp;gt;REAL_128&amp;lt;/tt&amp;gt;]] depending on the architecture actually used. The old &amp;lt;tt&amp;gt;DOUBLE&amp;lt;/tt&amp;gt; class is now obsolete and is automatically replaced with simply &amp;lt;tt&amp;gt;REAL&amp;lt;/tt&amp;gt; (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 &amp;lt;tt&amp;gt;REAL&amp;lt;/tt&amp;gt;. As an example, ''1.5'' is of type &amp;lt;tt&amp;gt;REAL&amp;lt;/tt&amp;gt; whereas ''{REAL_32 1.5}'' is of type [[library_class:REAL_32|&amp;lt;tt&amp;gt;REAL_32&amp;lt;/tt&amp;gt;]] and ''{REAL_EXTENDED 1.5}'' is of type [[library_class:REAL_80|&amp;lt;tt&amp;gt;REAL_80&amp;lt;/tt&amp;gt;]] or [[library_class:REAL_128|&amp;lt;tt&amp;gt;REAL_128&amp;lt;/tt&amp;gt;]] depending on your hardware. See again SmartEiffel/tutorial/manifest_notation.e for details. Finally, also note that scientific notation has been added to display floating point.&lt;br /&gt;
* To handle downcasting in a better way than the still supported &amp;quot;?=&amp;quot; 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 &amp;quot;?:=&amp;quot; allows you to test if the downcasting can be safely done and the new &amp;quot;::=&amp;quot; assignment can actually perform the downcasting. In debug modes, the &amp;quot;?:=&amp;quot; predicate is considered as a require assertion of the &amp;quot;::=&amp;quot; assignment. The &amp;quot;?:=&amp;quot; predicate accepts type name for its left-hand side and is useful too in assertions. See SmartEiffel/tutorial/downcasting.e for examples.&lt;br /&gt;
* Command short improved: assertions are displayed according to the client's point of view (i.e. you do not see what you cannot call).&lt;br /&gt;
* Added classes [[library_class:STACK|&amp;lt;tt&amp;gt;STACK&amp;lt;/tt&amp;gt;]] and [[library_class:QUEUE|&amp;lt;tt&amp;gt;QUEUE&amp;lt;/tt&amp;gt;]]. Thanks to the &amp;quot;insert&amp;quot; mechanism, it is now safe and efficient to do so ([[library_class:STACK|&amp;lt;tt&amp;gt;STACK&amp;lt;/tt&amp;gt;]] shares the efficient implementation of [[library_class:FAST_ARRAY|&amp;lt;tt&amp;gt;FAST_ARRAY&amp;lt;/tt&amp;gt;]] and [[library_class:QUEUE|&amp;lt;tt&amp;gt;QUEUE&amp;lt;/tt&amp;gt;]] inserts [[library_class:RING_ARRAY|&amp;lt;tt&amp;gt;RING_ARRAY&amp;lt;/tt&amp;gt;]]).&lt;br /&gt;
* Improved memory usage for classes [[library_class:LINKED_LIST|&amp;lt;tt&amp;gt;LINKED_LIST&amp;lt;/tt&amp;gt;]], [[library_class:TWO_WAY_LINKED_LIST|&amp;lt;tt&amp;gt;TWO_WAY_LINKED_LIST&amp;lt;/tt&amp;gt;]], [[library_class:AVL_SET|&amp;lt;tt&amp;gt;AVL_SET&amp;lt;/tt&amp;gt;]], [[library_class:AVL_DICTIONARY|&amp;lt;tt&amp;gt;AVL_DICTIONARY&amp;lt;/tt&amp;gt;]], [[library_class:HASHED_SET|&amp;lt;tt&amp;gt;HASHED_SET&amp;lt;/tt&amp;gt;]] and [[library_class:HASHED_DICTIONARY|&amp;lt;tt&amp;gt;HASHED_DICTIONARY&amp;lt;/tt&amp;gt;]]. Free cells are automatically recycled between various instances of the same generic derivation. Thoses classes are now using our [[library_class:WEAK_REFERENCE|&amp;lt;tt&amp;gt;WEAK_REFERENCE&amp;lt;/tt&amp;gt;]] class silently.&lt;br /&gt;
* Removed obsolete class &amp;lt;tt&amp;gt;BIT&amp;lt;/tt&amp;gt;. Now, just use existing bit operations from [[library_class:INTEGER_8|&amp;lt;tt&amp;gt;INTEGER_8&amp;lt;/tt&amp;gt;]], [[library_class:INTEGER_16|&amp;lt;tt&amp;gt;INTEGER_16&amp;lt;/tt&amp;gt;]], [[library_class:INTEGER_32|&amp;lt;tt&amp;gt;INTEGER_32&amp;lt;/tt&amp;gt;]], &amp;lt;tt&amp;gt;INTEGER&amp;lt;/tt&amp;gt;, [[library_class:INTEGER_64|&amp;lt;tt&amp;gt;INTEGER_64&amp;lt;/tt&amp;gt;]] or, for very long sequences of bits, the completely revisited [[library_class:BIT_STRING|&amp;lt;tt&amp;gt;BIT_STRING&amp;lt;/tt&amp;gt;]] class.&lt;br /&gt;
* 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!&lt;br /&gt;
* 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:&lt;br /&gt;
        3.to_string &lt;br /&gt;
        3.5.print_on(io) &lt;br /&gt;
        &amp;quot;foo&amp;quot;.print_on(io) &lt;br /&gt;
* A new network library has been recently added. This is brand new work which is still in progress. See SmartEiffel/lib/net for details.&lt;br /&gt;
* The old Eiffel strip expression is no longer supported.&lt;br /&gt;
&lt;br /&gt;
=== Release 2.0 [Hercule] - Monday September 27th, 2004 ===&lt;br /&gt;
&lt;br /&gt;
Actually, this new 2.0 release is the beginning of a new era in SmartEiffel's life!&lt;br /&gt;
&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
More details about changes from 1.1:&lt;br /&gt;
&lt;br /&gt;
* Very large systems are handled far more efficiently (but maybe at a cost for smaller systems).&lt;br /&gt;
* The new non-conforming inheritance mechanism is now implemented. For code portatbility, we decided to stick with the &amp;quot;inherit&amp;quot; keyword for conforming parents. So just start your class as usual. Then, to describe the non-conforming parents, just use the &amp;quot;insert&amp;quot; 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 &amp;quot;select&amp;quot; clause (you'll be warned by the compiler). Also keep in mind that when a class has no &amp;quot;inherit&amp;quot; clause and no &amp;quot;insert&amp;quot; clause, the default insert [[library_class:ANY|&amp;lt;tt&amp;gt;ANY&amp;lt;/tt&amp;gt;]] 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.&lt;br /&gt;
* Repeated inheritance is now correctly handled.&lt;br /&gt;
* The optimizer is rewritten and can do more optimizations.&lt;br /&gt;
* 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).&lt;br /&gt;
* 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 [[library_class:NATIVE_ARRAY|&amp;lt;tt&amp;gt;NATIVE_ARRAY&amp;lt;/tt&amp;gt;]]s). Command such as ''p ..1'' is useful to get another element of the array or another attribute of the same object.&lt;br /&gt;
* Dead code is now checked, which explains the compiler takes more time and memory.&lt;br /&gt;
* 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 &amp;quot;good&amp;quot; cluster.&lt;br /&gt;
The new organization splits the classes by logical topics. Note that each cluster may contain two special clusters: &amp;quot;low_level&amp;quot;, containing classes that you might use if you need better performance (generally when you build some utility or library classes); &amp;quot;internal&amp;quot; containing support classes, and not meant to be used directly.&lt;br /&gt;
Now, the organization itself:&lt;br /&gt;
** &amp;quot;abilities&amp;quot; contains the &amp;quot;able&amp;quot; classes ([[library_class:COMPARABLE|&amp;lt;tt&amp;gt;COMPARABLE&amp;lt;/tt&amp;gt;]], [[library_class:HASHABLE|&amp;lt;tt&amp;gt;HASHABLE&amp;lt;/tt&amp;gt;]], and so on);&lt;br /&gt;
** &amp;quot;io&amp;quot; contains the input-out classes; this cluster has but changed from the old one (see below for more details);&lt;br /&gt;
** &amp;quot;iterator&amp;quot; still contains the iterator on storage classes (see the &amp;quot;storage&amp;quot; cluster);&lt;br /&gt;
** &amp;quot;kernel&amp;quot; contains the few general-purpose which could not be put in other clusters, and are quite mandatory for the compiler to work;&lt;br /&gt;
** &amp;quot;numeric&amp;quot; contains all the classes that can be use to manipulate numbers; you will find here &amp;lt;tt&amp;gt;INTEGER&amp;lt;/tt&amp;gt;s, &amp;lt;tt&amp;gt;REAL&amp;lt;/tt&amp;gt;s, but also [[library_class:NUMBER|&amp;lt;tt&amp;gt;NUMBER&amp;lt;/tt&amp;gt;]]s (the infinite-precision integers); This cluster also includes the new [[library_class:MUTABLE_BIG_INTEGER|&amp;lt;tt&amp;gt;MUTABLE_BIG_INTEGER&amp;lt;/tt&amp;gt;]] class which is an efficient tools for fast integer number crunching.&lt;br /&gt;
** &amp;quot;random&amp;quot; contains the pseudo-random number generation classes;&lt;br /&gt;
** &amp;quot;scoop&amp;quot; contains the SCOOP utilities (not that SCOOP works better than in SE 1.1...);&lt;br /&gt;
** &amp;quot;storage&amp;quot; contains all the classes that store data: [[library_class:COLLECTION|&amp;lt;tt&amp;gt;COLLECTION&amp;lt;/tt&amp;gt;]], [[library_class:DICTIONARY|&amp;lt;tt&amp;gt;DICTIONARY&amp;lt;/tt&amp;gt;]], [[library_class:SET|&amp;lt;tt&amp;gt;SET&amp;lt;/tt&amp;gt;]]... (Note: see below for more details on [[library_class:DICTIONARY|&amp;lt;tt&amp;gt;DICTIONARY&amp;lt;/tt&amp;gt;]] and [[library_class:SET|&amp;lt;tt&amp;gt;SET&amp;lt;/tt&amp;gt;]]);&lt;br /&gt;
** &amp;quot;string&amp;quot; contains the [[library_class:STRING|&amp;lt;tt&amp;gt;STRING&amp;lt;/tt&amp;gt;]] and related classes (also Unicode strings);&lt;br /&gt;
** &amp;quot;time&amp;quot; contains the [[library_class:TIME|&amp;lt;tt&amp;gt;TIME&amp;lt;/tt&amp;gt;]]-related classes;&lt;br /&gt;
** &amp;quot;vision&amp;quot; contains the vision graphical library classes;&lt;br /&gt;
** &amp;quot;sorting&amp;quot; contains most common algorithm to sort [[library_class:COLLECTION|&amp;lt;tt&amp;gt;COLLECTION&amp;lt;/tt&amp;gt;]]s;&lt;br /&gt;
** &amp;quot;misc&amp;quot; contains some useful classes that cannot be easily put elsewhere short of having their own cluster.&lt;br /&gt;
&lt;br /&gt;
* [[library_class:DICTIONARY|&amp;lt;tt&amp;gt;DICTIONARY&amp;lt;/tt&amp;gt;]] class is now deferred and has no more generic constraint. The library now includes two different implementations.&lt;br /&gt;
** The [[library_class:HASHED_DICTIONARY|&amp;lt;tt&amp;gt;HASHED_DICTIONARY&amp;lt;/tt&amp;gt;]] implementation is the hash_code based implementation (the generic constraint for [[library_class:HASHED_DICTIONARY|&amp;lt;tt&amp;gt;HASHED_DICTIONARY&amp;lt;/tt&amp;gt;]] is [[library_class:HASHABLE|&amp;lt;tt&amp;gt;HASHABLE&amp;lt;/tt&amp;gt;]]).&lt;br /&gt;
** The [[library_class:AVL_DICTIONARY|&amp;lt;tt&amp;gt;AVL_DICTIONARY&amp;lt;/tt&amp;gt;]] implementation is a balanced tree based implementation (the generic constraint for this implemetation is [[library_class:COMPARABLE|&amp;lt;tt&amp;gt;COMPARABLE&amp;lt;/tt&amp;gt;]]).&lt;br /&gt;
You should update all your create instructions by selecting [[library_class:HASHED_DICTIONARY|&amp;lt;tt&amp;gt;HASHED_DICTIONARY&amp;lt;/tt&amp;gt;]] or [[library_class:AVL_DICTIONARY|&amp;lt;tt&amp;gt;AVL_DICTIONARY&amp;lt;/tt&amp;gt;]]. In order to ease this code update, the compiler will warn you that [[library_class:HASHED_DICTIONARY|&amp;lt;tt&amp;gt;HASHED_DICTIONARY&amp;lt;/tt&amp;gt;]] is selected by default. Please update your code because this is a temporary warning of the compiler.&lt;br /&gt;
&lt;br /&gt;
* Some more [[library_class:DICTIONARY|&amp;lt;tt&amp;gt;DICTIONARY&amp;lt;/tt&amp;gt;]] classes were also added (among them: [[library_class:DOUBLE_DICTIONARY|&amp;lt;tt&amp;gt;DOUBLE_DICTIONARY&amp;lt;/tt&amp;gt;]] can be of interest).&lt;br /&gt;
* The [[library_class:SET|&amp;lt;tt&amp;gt;SET&amp;lt;/tt&amp;gt;]] class has undergone the same transformation ([[library_class:HASHED_SET|&amp;lt;tt&amp;gt;HASHED_SET&amp;lt;/tt&amp;gt;]] and [[library_class:AVL_SET|&amp;lt;tt&amp;gt;AVL_SET&amp;lt;/tt&amp;gt;]]).&lt;br /&gt;
* A [[library_class:RING_ARRAY|&amp;lt;tt&amp;gt;RING_ARRAY&amp;lt;/tt&amp;gt;]] class was added. This [[library_class:COLLECTION|&amp;lt;tt&amp;gt;COLLECTION&amp;lt;/tt&amp;gt;]] is quite similar to an [[library_class:ARRAY|&amp;lt;tt&amp;gt;ARRAY&amp;lt;/tt&amp;gt;]] that performs well for all queue operations (add|remove)_(first|last) thanks to its circular internal representation.&lt;br /&gt;
* The [[library_class:TUPLE|&amp;lt;tt&amp;gt;TUPLE&amp;lt;/tt&amp;gt;]] class is now defined in Eiffel. Thanks to this new source code implementation, we have added the definition for the `item' feature definition.&lt;br /&gt;
* The [[library_class:ROUTINE|&amp;lt;tt&amp;gt;ROUTINE&amp;lt;/tt&amp;gt;]], [[library_class:PROCEDURE|&amp;lt;tt&amp;gt;PROCEDURE&amp;lt;/tt&amp;gt;]] and [[library_class:FUNCTION|&amp;lt;tt&amp;gt;FUNCTION&amp;lt;/tt&amp;gt;]] classes are also defined in Eiffel.&lt;br /&gt;
* Added a new [[library_class:WEAK_REFERENCE|&amp;lt;tt&amp;gt;WEAK_REFERENCE&amp;lt;/tt&amp;gt;]] class with the appropriate garbage collector support.&lt;br /&gt;
* Split has been improved in order to reduce C files compilation after a change.&lt;br /&gt;
* Added a new &amp;quot;-profile&amp;quot; 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:&lt;br /&gt;
** the profiling output is written in the &amp;quot;profile.se&amp;quot; file;&lt;br /&gt;
** for each entry, the &amp;quot;own&amp;quot; and &amp;quot;cumul&amp;quot; times, total and average, are given; also, the caller features and the called ones are displayed;&lt;br /&gt;
** 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);&lt;br /&gt;
** the Eiffel called features are sorted by decreasing number of calls;&lt;br /&gt;
** 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).&lt;br /&gt;
**e that:&lt;br /&gt;
** profiled programs take MUCH longer to execute (a lot of, hem, time, is spent in the kernel merely to, hem, track time...)&lt;br /&gt;
** externals are not profiled; they are accounted in the &amp;quot;own&amp;quot; time of their caller;&lt;br /&gt;
** inlined features are not profiled either (only in -boost)&lt;br /&gt;
** 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.&lt;br /&gt;
**s to Lothar Scholz for having the idea in the first place.&lt;br /&gt;
**ped the input-output system to make it more general and more extensible. Provided features:&lt;br /&gt;
** now streams can be &amp;quot;filtered&amp;quot;. It means you can nest them to bring extra features such as encoding or encryption (among many other things)&lt;br /&gt;
** 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.&lt;br /&gt;
See also the cluster description on the SmartEiffel site.&lt;br /&gt;
* Visitors revisited. The architecture is now ready to be used (in 1.1 it was but a draft).&lt;br /&gt;
&lt;br /&gt;
== SmartEiffel (release 1.1 down to release 1.0) ==&lt;br /&gt;
&lt;br /&gt;
=== Release 1.1 [Charlemagne] - Monday June 16th, 2003 ===&lt;br /&gt;
&lt;br /&gt;
* Thoroughly changed the configuration handling. The new scheme is more complete, and much more flexible.&lt;br /&gt;
** 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 &amp;lt;Enter&amp;gt; key. For more informations about installation and all new configuration capabilities, please have a look to install page.&lt;br /&gt;
** Added the -c_mode option, in conjunction with the new configuration handling.&lt;br /&gt;
** Added a -loadpath flag to read an extra loadpath.&lt;br /&gt;
* 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.&lt;br /&gt;
* Added a small expression evaluator to sedb. One can now display the attributes of the objects on the stack. Be sure to read the &amp;quot;more-help&amp;quot; section on data display (for once functions, the result is unavailable if it has not yet been called).&lt;br /&gt;
* 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.&lt;br /&gt;
* Implemented inspect on [[library_class:STRING|&amp;lt;tt&amp;gt;STRING&amp;lt;/tt&amp;gt;]]s.&lt;br /&gt;
* 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!&lt;br /&gt;
* [[pretty]] significantly updated.&lt;br /&gt;
* The C files produced by the compiler now should work on any platform, even with the GC turned on.&lt;br /&gt;
* Added Unicode support in [[library_class:STRING|&amp;lt;tt&amp;gt;STRING&amp;lt;/tt&amp;gt;]]s (see the SmartEiffel/tutorial/unicode and SmartEiffel/lib/unicode directories).&lt;br /&gt;
* Added new abstract class [[library_class:FILE|&amp;lt;tt&amp;gt;FILE&amp;lt;/tt&amp;gt;]] and new features in class [[library_class:DIRECTORY|&amp;lt;tt&amp;gt;DIRECTORY&amp;lt;/tt&amp;gt;]].&lt;br /&gt;
* Added hexadecimal notation for &amp;lt;tt&amp;gt;INTEGER&amp;lt;/tt&amp;gt; constants, [[library_class:CHARACTER|&amp;lt;tt&amp;gt;CHARACTER&amp;lt;/tt&amp;gt;]] constants and inside manifest [[library_class:STRING|&amp;lt;tt&amp;gt;STRING&amp;lt;/tt&amp;gt;]]s as well. See the example in file SmartEiffel/tutorial/hexadecimal.e for more information.&lt;br /&gt;
* Added agent facilities on [[library_class:STRING|&amp;lt;tt&amp;gt;STRING&amp;lt;/tt&amp;gt;]] and [[library_class:UNICODE_STRING|&amp;lt;tt&amp;gt;UNICODE_STRING&amp;lt;/tt&amp;gt;]] (warning, those facilities are non-standard extensions).&lt;br /&gt;
* 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.&lt;br /&gt;
* Moved the bin_c directory to install/germ.&lt;br /&gt;
* Reorganized the SmartEiffel/sys/runtime directory:&lt;br /&gt;
** Clearly separated C and Java backend helpers&lt;br /&gt;
** 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&lt;br /&gt;
* Added the -compact option which produces much more compact C code.&lt;br /&gt;
* same_type from &amp;lt;tt&amp;gt;GENERAL&amp;lt;/tt&amp;gt; is now obsolete. Use same_dynamic_type instead.&lt;br /&gt;
* Obsoleted operators &amp;quot;and&amp;quot;, &amp;quot;or&amp;quot;, &amp;quot;xor&amp;quot; and &amp;quot;not&amp;quot; for &amp;lt;tt&amp;gt;INTEGER&amp;lt;/tt&amp;gt;s, and added prefix operator &amp;quot;~&amp;quot;.&lt;br /&gt;
* [[library_class:MEMORY|&amp;lt;tt&amp;gt;MEMORY&amp;lt;/tt&amp;gt;]].allocated_bytes is more accurate.&lt;br /&gt;
* Generated object files are now removed before calling C compiler.&lt;br /&gt;
* Various bug fixes and improvements (see details in the SmartZilla bug tracker).&lt;br /&gt;
&lt;br /&gt;
=== Release 1.0 - Friday December 6th, 2002 ===&lt;br /&gt;
&lt;br /&gt;
This is the very first release with the name SmartEiffel!&lt;br /&gt;
(Previous releases were named SmallEiffel.)&lt;br /&gt;
&lt;br /&gt;
The main changes between SmallEiffel -0.74 and SmartEiffel 1.0 are:&lt;br /&gt;
&lt;br /&gt;
* Name changed from SmallEiffel to SmartEiffel!&lt;br /&gt;
* Version numbering: now, versions are numbered from 1.0 beta 1 upward&lt;br /&gt;
* 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).&lt;br /&gt;
* The new Reference keyword is now implemented. Use reference &amp;lt;tt&amp;gt;INTEGER&amp;lt;/tt&amp;gt; instead of &amp;lt;tt&amp;gt;INTEGER_REF&amp;lt;/tt&amp;gt;. &amp;lt;tt&amp;gt;INTEGER_REF&amp;lt;/tt&amp;gt; will become obsolete.&lt;br /&gt;
* The new [[library_class:INTEGER_GENERAL|&amp;lt;tt&amp;gt;INTEGER_GENERAL&amp;lt;/tt&amp;gt;]], [[library_class:INTEGER_8|&amp;lt;tt&amp;gt;INTEGER_8&amp;lt;/tt&amp;gt;]], [[library_class:INTEGER_16|&amp;lt;tt&amp;gt;INTEGER_16&amp;lt;/tt&amp;gt;]], [[library_class:INTEGER_32|&amp;lt;tt&amp;gt;INTEGER_32&amp;lt;/tt&amp;gt;]], [[library_class:INTEGER_64|&amp;lt;tt&amp;gt;INTEGER_64&amp;lt;/tt&amp;gt;]] types are now implemented.&lt;br /&gt;
* After long discussions, we have decided to stick to our decision for the type of integer constants (as an example, 127 is of type [[library_class:INTEGER_8|&amp;lt;tt&amp;gt;INTEGER_8&amp;lt;/tt&amp;gt;]] and 128 is of type [[library_class:INTEGER_16|&amp;lt;tt&amp;gt;INTEGER_16&amp;lt;/tt&amp;gt;]] 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 &amp;lt;tt&amp;gt;&amp;lt;&amp;lt;...&amp;gt;&amp;gt;&amp;lt;/tt&amp;gt; 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 :)&lt;br /&gt;
* 64-bit architectures supported.&lt;br /&gt;
* Internal improvements in the type system (better C code produced)&lt;br /&gt;
* Buffered I/O. You may get big improvements on programs performing lots of file reading or writing ([[library_class:STD_INPUT|&amp;lt;tt&amp;gt;STD_INPUT&amp;lt;/tt&amp;gt;]] and [[library_class:STD_OUTPUT|&amp;lt;tt&amp;gt;STD_OUTPUT&amp;lt;/tt&amp;gt;]] are also buffered).&lt;br /&gt;
* The short command now has the &amp;quot;-client&amp;quot; option (see short command manual for more details).&lt;br /&gt;
* The &amp;quot;tcc&amp;quot; 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.&lt;br /&gt;
* New bug reporting tool. Now you can see all known bugs and their state. Allways refers to the bug report page on SmartEiffel site.&lt;br /&gt;
* As suggested on our mailing list, there are now two new classes in order to remove some definitions from &amp;lt;tt&amp;gt;GENERAL&amp;lt;/tt&amp;gt; (see class [[library_class:MATH_CONSTANTS|&amp;lt;tt&amp;gt;MATH_CONSTANTS&amp;lt;/tt&amp;gt;]] and class [[library_class:CHARACTER_CONSTANTS|&amp;lt;tt&amp;gt;CHARACTER_CONSTANTS&amp;lt;/tt&amp;gt;]]).&lt;br /&gt;
* 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 &amp;gt;&amp;gt; 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.&lt;br /&gt;
* Type mark must now follow the Precursor keyword.&lt;br /&gt;
* Fixed the bug recently reported by Wolfgang Jansen. (Well isolated bug report, thanks!) This bug was related to expanded objects and the twin feature.&lt;br /&gt;
* Fixed the -manifest_string_trace bug recently reported by Alexis Saettler. (Well isolated bug as well, thanks!)&lt;br /&gt;
* 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 &amp;quot;like Current&amp;quot; type mark into some hard-coded type mark (e.g. &amp;quot;FOO&amp;quot;). 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 [[library_class:NUMBER|&amp;lt;tt&amp;gt;NUMBER&amp;lt;/tt&amp;gt;]] library implementation of &amp;lt;tt&amp;gt;is_equal&amp;lt;/tt&amp;gt; (''like Current'' is now changed to [[library_class:NUMBER|&amp;lt;tt&amp;gt;NUMBER&amp;lt;/tt&amp;gt;]]) and changed the postcondition of &amp;lt;tt&amp;gt;is_equal&amp;lt;/tt&amp;gt; in &amp;lt;tt&amp;gt;GENERAL&amp;lt;/tt&amp;gt; (ensure assertion relaxed to no longer call standard_is_equal).&lt;br /&gt;
* 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/&lt;br /&gt;
* New Cygwin directory notation is now supported. Recent Cygwin systems will be automatically detected while install.&lt;br /&gt;
* Other &amp;quot;secret&amp;quot; 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.&lt;br /&gt;
* Improved internal lab process to more easily provide professional support contracts (see premium support for more details).&lt;br /&gt;
* New functions in [[library_class:COLLECTION_SORTER|&amp;lt;tt&amp;gt;COLLECTION_SORTER&amp;lt;/tt&amp;gt;]] classes using dichotomic search.&lt;br /&gt;
* GC support for the Elate system updated.&lt;br /&gt;
* Various bug fixes and improvements.&lt;br /&gt;
&lt;br /&gt;
== SmallEiffel (all releases of SmallEiffel) ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.74 - Tuesday May 7th, 2002 ===&lt;br /&gt;
&lt;br /&gt;
* The new agent mechanism is now implemented. See tutorial/agent directory for examples.&lt;br /&gt;
* 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.&lt;br /&gt;
* The new create instruction/expression is now fully implemented and correctly pretty-printed. The new default_create feature mechanism is also implemented.&lt;br /&gt;
* 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.&lt;br /&gt;
* Added examples for the new TUPLE type in directory tutorial/tuple.&lt;br /&gt;
* 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.)&lt;br /&gt;
* The external C interface is now compatible with the new ETL definition. (See directory tutorial/external/C for examples.)&lt;br /&gt;
* Added flag -high_memory_compiler to compile_to_c.&lt;br /&gt;
* 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.)&lt;br /&gt;
* 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.&lt;br /&gt;
* Added feature connect_append_to both in class TEXT_FILE_WRITE and BINARY_FILE_WRITE.&lt;br /&gt;
* 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.&lt;br /&gt;
* Added feature size_of and feature last_change_of in class FILE_TOOLS (see also tutorial/basic_time for examples).&lt;br /&gt;
* Added feature append_decimal_in and feature to_decimal in class NUMBER as well as a new example the tutorial/number directory.&lt;br /&gt;
* Added feature add both in class COLLECTION_SORTER and in class REVERSE_COLLECTION_SORTER.&lt;br /&gt;
* Added feature reference_at in class DICTIONARY.&lt;br /&gt;
* Added feature infix &amp;quot;+&amp;quot; in class POINTER.&lt;br /&gt;
* Various bug fixes and improvements.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.75 - Thursday July 16th, 2001 ===&lt;br /&gt;
&lt;br /&gt;
* 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.&lt;br /&gt;
* 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.&lt;br /&gt;
* Added a traditional -help flag for all commands to print a summary of available options.&lt;br /&gt;
* In ACE files as well as in &amp;quot;loadpath.se&amp;quot; files the ${SmallEiffelDirectory} environment variable is automatically defined using the value of the ${SmallEiffel} environment variable.&lt;br /&gt;
* 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.&lt;br /&gt;
* The new TUPLE type is now implemented.&lt;br /&gt;
* Added class TIME_IN_GERMAN to handle date and time in German. See tutorial/basic_time for examples.&lt;br /&gt;
* Feature is_equal of class COMPARABLE is now ELKS compatible.&lt;br /&gt;
* Added feature internal_key in class DICTIONARY.&lt;br /&gt;
* Various bug fixes and improvements.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.76 - Saturday November 11th, 2000 ===&lt;br /&gt;
&lt;br /&gt;
* 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.&lt;br /&gt;
* 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).&lt;br /&gt;
* Added feature reindex in class ARRAY.&lt;br /&gt;
* Added a brand new class SET[E-&amp;gt;HASHABLE].&lt;br /&gt;
* Added support for the Elate (Amiga) system as well as the vpcc C compiler.&lt;br /&gt;
* Added support for the QNX real time operating system.&lt;br /&gt;
* For feature dispose of class MEMORY (as well as redefinitions), the class invariant is no longer triggered.&lt;br /&gt;
* Added features atan2 and pow both in class REAL and DOUBLE.&lt;br /&gt;
* Internal implementation of BASIC_TIME revisited (using now a double for memorization).&lt;br /&gt;
* Implementation of class DICTIONARY completely revisited. Also added features add, item_map_in and key_map_in in the new class DICTIONARY.&lt;br /&gt;
* 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).&lt;br /&gt;
* Various bug fixes and improvements.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.77 - Saturday February 12th, 2000 ===&lt;br /&gt;
&lt;br /&gt;
* 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, ...&lt;br /&gt;
  To install SmallEiffel under some UNIX like system, just type make in the SmallEiffel directory.&lt;br /&gt;
  To install SmallEiffel under Windows, just run install.exe.&lt;br /&gt;
  On other systems, C compile and run the install.c file.&lt;br /&gt;
* 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.&lt;br /&gt;
* Added NUMBER library, for infinite precision and infinitely large numbers. See tutorial/number for examples.&lt;br /&gt;
* Added ITERATOR library, for external iterators on data structures. See tutorial/iterator for examples.&lt;br /&gt;
* 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).&lt;br /&gt;
* 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).&lt;br /&gt;
* Added class BIT_STRING for very large bit sequences, with reference semantics.&lt;br /&gt;
* 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).&lt;br /&gt;
* 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.&lt;br /&gt;
* Added feature to_hexadecimal and feature to_hexadecimal_in in class INTEGER.&lt;br /&gt;
* Improved incremental recompilation of the generated C code (also fixed a very old bug in incrementality).&lt;br /&gt;
* Exceptions handling: the default_rescue feature is now supported.&lt;br /&gt;
* Various bug fixes and improvements (type inference score increased, ...).&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.78 - Saturday June 05th, 1999 ===&lt;br /&gt;
&lt;br /&gt;
* New -html2 flag for command short generates a colorized HTML short form for classes.&lt;br /&gt;
* The garbage collector now takes into account feature dispose of class MEMORY for reference objects.&lt;br /&gt;
* Obsolete classes (obsolete keyword) now supported.&lt;br /&gt;
* Assertion tags are now displayed when an assertion fails.&lt;br /&gt;
* Added environment variable in loadpath files. Syntax: ${SOME_VAR}&lt;br /&gt;
* Added the -no_style_warning flag to suppress warnings when the recommended styles guidelines for Eiffel are not strictly followed.&lt;br /&gt;
* Added the -version flag to show SmallEiffel's version.&lt;br /&gt;
* 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.&lt;br /&gt;
* Class LINKED_LIST now replaces obsolete class LINK_LIST (simple renaming).&lt;br /&gt;
  Class TWO_WAY_LINKED_LIST now replaces obsolete class LINK2_LIST (simple renaming).&lt;br /&gt;
* Fixed &amp;quot;implicit renaming&amp;quot; bug.&lt;br /&gt;
* Cleaned all source code of tabulations at beginning of line (made code look ugly when using an editor whose tabs were not 8).&lt;br /&gt;
* Some new ELKS'95 features implemented.&lt;br /&gt;
* Validity rule VEEN fixed.&lt;br /&gt;
* Added class COLLECTION_SORTER and REVERSE_COLLECTION_SORTER to the library.&lt;br /&gt;
* Fixed file renaming portability bug (&amp;quot;.d files bug&amp;quot;).&lt;br /&gt;
* Validity rule VCFG.1 is now enforced.&lt;br /&gt;
* Validity rule VAPE is now enforced.&lt;br /&gt;
* Classes mentioned in a cecil.se file are now automatically made live. Makes it easier to link with external libraries.&lt;br /&gt;
* Various other bug fixes.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.79 - Tuesday December 22nd, 1998 ===&lt;br /&gt;
&lt;br /&gt;
* The new Eiffel construct Precursor as described OOSC2 is now implemented.&lt;br /&gt;
* The Eiffel expression strip is now implemented.&lt;br /&gt;
* Nested loadpath files now allowed.&lt;br /&gt;
* Extended anchored definition to accept infix and prefix feature names. For example, this kind of declaration is now accepted :      foo: like infix &amp;quot;+&amp;quot;.&lt;br /&gt;
* Classes COLLECTION2, ARRAY2 and FIXED_ARRAY2 of lib/base completely revisited.&lt;br /&gt;
* Fixed a bug related to calls of the form f.g.h; on expanded objects.&lt;br /&gt;
* Fixed a bug related to inheritance of generic classes.&lt;br /&gt;
* Fixed bugs related to assertions checking in case of exceptions (rescue clause, retry). Improved cycle detection in assertions.&lt;br /&gt;
* Fixed bug in GC related to recycling of &amp;quot;monsters&amp;quot; (very large resizable objets).&lt;br /&gt;
* Fixed an incredible bug in the implementation of the like Current type mark. ;-).&lt;br /&gt;
* Fixed many others bugs ($ operator, GC for alpha DEC, ...).&lt;br /&gt;
* System customization file for the BeOS system added in the &amp;quot;sys&amp;quot; sub-directory (more on system customization).&lt;br /&gt;
* Contents of the environment variable SmallEiffel must be now set with the absolute path of the file &amp;quot;system.se&amp;quot; which is in the sub-directory &amp;quot;sys&amp;quot; of the installation directory.&lt;br /&gt;
  Under a UNIX-like system, the value of the SmallEiffel environment variable may be for example: /usr/lib/SmallEiffel/sys/system.se&lt;br /&gt;
  Commands are also more robust when this environment variable contains non-alphanumeric characters.&lt;br /&gt;
* No more ensure assertion in GENERAL.get_environment_variable.&lt;br /&gt;
* Commands compile_to_jvm and print_jvm_class completely revisited. Java byte-code can be now used with the -verify Java option).&lt;br /&gt;
* Validity rule VDRD.6 is now enforced.&lt;br /&gt;
* Balancing rule (automatic promotion) for INTEGER, DOUBLE and REAL is now implemented.&lt;br /&gt;
* Recursive once routines now work correctly.&lt;br /&gt;
* Unmodified generated C files are not touched anymore.&lt;br /&gt;
* Assertions correctly checked for all external C routines.&lt;br /&gt;
* Exception handling now works when an exception occurs in external C code.&lt;br /&gt;
* Cleaned the compiler and decreased its memory footprint.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.80 - Thursday July 9th, 1998 ===&lt;br /&gt;
&lt;br /&gt;
* Exception handling implemented. Class EXCEPTIONS added in lib/kernel.&lt;br /&gt;
* 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).&lt;br /&gt;
* 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.&lt;br /&gt;
* Behavior of compilation flag -trace of command compile_to_c changed to allow step-by-step execution (embryo of Eiffel source code debugger).&lt;br /&gt;
* Feature ARRAY.resize completely revisited (added two features in class NATIVE_ARRAY: clear and move).&lt;br /&gt;
* Garbage Collector optimized (the GC should be more agressive and some benchmarks are included in directory SmallEiffel/misc/benchmarks/gc/*/bench.e).&lt;br /&gt;
* Associativity of infix operator &amp;quot;^&amp;quot; is now correctly handled.&lt;br /&gt;
* Fixed bugs in PLATFORM for Minimum_double, Minimum_real and Minimum_character_code.&lt;br /&gt;
* Fixed some others bugs about export rules, about expanded objects with expanded attributes.&lt;br /&gt;
* Fixed bugs in pretty.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.81 - Thursday April 9th, 1998 ===&lt;br /&gt;
&lt;br /&gt;
* 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).&lt;br /&gt;
* 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.)&lt;br /&gt;
  Added flag -clean which removes all the C and object files of the system. (This corresponds to the old default behavior.)&lt;br /&gt;
* Fixed a bug related to buffered input under Windows/MS VC.&lt;br /&gt;
* Fixed a bug in misc/INSTALL.SH script.&lt;br /&gt;
* Added require is_connected for all features put_* of class OUTPUT_STREAM.&lt;br /&gt;
* Fixed a bug in command short (require/ensure assertion of deferred routines are now printed).&lt;br /&gt;
* Added one useful hook for mode -html1 in command short (see hook Mcn).&lt;br /&gt;
* Added directory SmallEiffel/sys/runtime which contains the C runtime.&lt;br /&gt;
* Fixed a bug about instanciation of class ANY itself (not so common !).&lt;br /&gt;
* Fixed a bug about inlining of operator $.&lt;br /&gt;
* Fixed a bug about cyclic anchored definitions.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.82 - Friday January 16th, 1998 ===&lt;br /&gt;
&lt;br /&gt;
* Became the official GNU Eiffel compiler.&lt;br /&gt;
* Added first HTML mode to command short. Flag -html1. Thanks to Matthias Klause.&lt;br /&gt;
* Fixed bugs in command pretty.&lt;br /&gt;
* It is now possible to rename/redefine external &amp;quot;SmallEiffel&amp;quot; features.&lt;br /&gt;
* Files *.hlp of directory SmallEiffel/man no longer exists. All the documentation is now in *.html files plus corresponding automatically generated *.txt files.&lt;br /&gt;
* Manifest arrays creation has been optimized.&lt;br /&gt;
* Validity rule VHRC.2 is now enforced.&lt;br /&gt;
* Fixed bugs about export clause.&lt;br /&gt;
* Feature GENERAL.hash_code no longer exists. Added ELKS class HASHABLE in order to be compatible with others compilers/libraries.&lt;br /&gt;
* Fixed a bug in pre-computed once functions.&lt;br /&gt;
* Fixed a bug in REAL/DOUBLE keybord input.&lt;br /&gt;
* Reintroduced left hand side cast in C code for better performances (allowed by the C ANSI standard).&lt;br /&gt;
* Obsolete features (obsolete keyword) now generate a Warning.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.83 - Friday September 19th, 1997 ===&lt;br /&gt;
&lt;br /&gt;
* Added command short to the distribution.&lt;br /&gt;
* Added directory contrib in the distribution. This directory contains some scripts to use gdb as source level debugger for SmallEiffel.&lt;br /&gt;
* Added flag -no_warning to commands: compile_to_c, pretty, and compile_to_jvm.&lt;br /&gt;
* Added flag -case_insensitive to command compile_to_c.&lt;br /&gt;
* Fixed a bug for inherit/select.&lt;br /&gt;
* Fixed a bug for some pre-computed once function.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.84 - Monday August 18th, 1997 ===&lt;br /&gt;
&lt;br /&gt;
* Class BIT is now implemented in Java bytecode (command compile_to_jvm).&lt;br /&gt;
* Added external specification to call Java code (when using compile_to_jvm).&lt;br /&gt;
* 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.&lt;br /&gt;
* 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).&lt;br /&gt;
* Added STRING.substring_index (from ELKS written by Fridtjof SIEBERT).&lt;br /&gt;
* 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).&lt;br /&gt;
* Changed the behavior of end_of_input of INPUT_STREAM (this flag is true _after_ last character has been read).&lt;br /&gt;
* Fixed a bug in manifest arrays (mixed objects including Void).&lt;br /&gt;
* Fixed a bug dealing with some statically computed expressions.&lt;br /&gt;
* Fixed a bug in repeated inheritance.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.85 - Thursday July 3rd, 1997 ===&lt;br /&gt;
&lt;br /&gt;
* First beta-release of commands compile_to_jvm and print_jvm_class!&lt;br /&gt;
* 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.&lt;br /&gt;
* 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.&lt;br /&gt;
* Added feature to_hexadecimal and feature to_hexadecimal_in in class CHARACTER.&lt;br /&gt;
* Feature io, std_input, std_output and std_error of class GENERAL are no longer frozen.&lt;br /&gt;
* 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).&lt;br /&gt;
* Feature die_with_code of GENERAL now accepts any INTEGER code (not just predefined exit_success_code and exit_failure_code).&lt;br /&gt;
* Fixed a bug in STRING. The following expression is now true: (&amp;quot;a%/0/b&amp;quot;).count = 3&lt;br /&gt;
  Just try this on your favorite Eiffel compiler ;-)&lt;br /&gt;
* 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.&lt;br /&gt;
* Feature unread_character of class INPUT_STREAM is now implemented in Eiffel.&lt;br /&gt;
* Added OUTPUT_STREAM.put_pointer to view a POINTER.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.86 - Sunday April 13th, 1997 ===&lt;br /&gt;
&lt;br /&gt;
* All reported bugs at this time have been fixed.&lt;br /&gt;
* 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.&lt;br /&gt;
* Features BOOLEAN.infix &amp;quot;or&amp;quot; and BOOLEAN.infix &amp;quot;and&amp;quot; are now written in pure Eiffel. As a consequence, it is very important for the SmallEiffel programmer to make the distinction between BOOLEAN.infix &amp;quot;and then&amp;quot; and BOOLEAN.infix &amp;quot;and&amp;quot; (respectively for BOOLEAN.infix &amp;quot;or else&amp;quot; and BOOLEAN.infix &amp;quot;or&amp;quot;). When left-hand-side argument produces no side effect, the semi-strict operator (BOOLEAN.infix&amp;quot;and then&amp;quot;/&amp;quot;or else&amp;quot;) may run faster.&lt;br /&gt;
* Fixed REAL.sin (the old one was calling sqrt :-).&lt;br /&gt;
* Fixed a bug in INTEGER.append_in (you can now print Minimum_integer).&lt;br /&gt;
* Added feature in_range in class COMPARABLE.&lt;br /&gt;
* Result type of REAL.infix &amp;quot;^&amp;quot; is now DOUBLE for ELKS compatibility.&lt;br /&gt;
* Feature remove is now implemented in all subclasses of COLLECTION (i.e. ARRAY, FIXED_ARRAY, LINK_LIST and LINK2_LIST).&lt;br /&gt;
* Added feature add for all subclasses of COLLECTION.&lt;br /&gt;
* Conversion DOUBLE/STRING : ANSI C sscanf and sprintf is now used to avoid loss of precision.&lt;br /&gt;
* Added some more class invariant code generation when compiling in -invariant_check mode. Class invariant is now also checked before exit of a routine.&lt;br /&gt;
* Added feature file_tools in class GENERAL to ease access to class FILE_TOOLS.&lt;br /&gt;
* Changed printing format for basic *_REF classes. For example, instruction print(1); now prints 1.&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.87 - Tuesday January 7th, 1997 ===&lt;br /&gt;
&lt;br /&gt;
* Added a new flag -trace to ease debug (see man/compile_to_c file).&lt;br /&gt;
* More inlining at Eiffel level (-boost mode only).&lt;br /&gt;
* Class BIT_N completely revisited. It may be as fast as C.&lt;br /&gt;
* Added class C_ARRAY[E] to deal directly with C arrays at Eiffel level. Thus there are no more external &amp;quot;CSE&amp;quot; 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.&lt;br /&gt;
* Fixed a bug in STD_FILE_READ.read_double.&lt;br /&gt;
* Ordering of C output to increase gcc inlining.&lt;br /&gt;
* According to man/compile_to_c) , flag -debug_check now works (debug instructions are no longer generated in mode -all_check).&lt;br /&gt;
* Unused local variables removed at Eiffel level (warning added for -debug_check mode only).&lt;br /&gt;
* Default class ANY now inherits PLATFORM (as in ETL).&lt;br /&gt;
* Fixed a bug in floating-point constants.&lt;br /&gt;
* Added directory sys to customize default C compiler, default C linker and default loading path.&lt;br /&gt;
* Fixed some bugs with outside expanded types.&lt;br /&gt;
* Fixed a bug with rename/select.&lt;br /&gt;
* Redefinition of once routine is now allowed.&lt;br /&gt;
* Feature GENERAL.conforms_to is now implemented.&lt;br /&gt;
* Rule VFFD.7 is now enforced.&lt;br /&gt;
* Feature force implemented for all COLLECTION.&lt;br /&gt;
* Added conversions features CHARACTER.to_bit, INTEGER.to_bit, BIT_N.to_character and BIT_N.to_integer.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.88 - Wednesday October 30th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Fixed bugs dealing with inherit/rename/select.&lt;br /&gt;
* Added warning for missing colon in actual arguments list.&lt;br /&gt;
* Warning : INSTALL procedure has changed and you have to set manually the default loading path (see misc/INSTALL for details).&lt;br /&gt;
* Added some VMS customization.&lt;br /&gt;
* Fixed bugs when printing run-time stack.&lt;br /&gt;
* Warning added for missing colon in actual parameter list.&lt;br /&gt;
* Added flush in class STD_FILE_WRITE.&lt;br /&gt;
* No more left hand side cast in C code (because some C compilers don't like them).&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.89 - Sunday September 15th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Calling Eiffel from C is now implemented (see man/cecil) file).&lt;br /&gt;
* Object creation uses C calloc instead malloc+memset.&lt;br /&gt;
* Object creation is inlined.&lt;br /&gt;
* ARRAY/FIXED_ARRAY put and item are now inlined (-boost only).&lt;br /&gt;
* Added feature capacity and resize in FIXED_ARRAY.&lt;br /&gt;
* 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.&lt;br /&gt;
* More user's routines are inlined (-boost only).&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.90 - Friday August 23rd, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Added random number generator library (SmallEiffel/lib_rand).&lt;br /&gt;
* Added checking of assertions for external &amp;quot;CSE&amp;quot; features.&lt;br /&gt;
* Anchoring on expanded types are now allowed.&lt;br /&gt;
* Multiple level of anchoring definition allowed.&lt;br /&gt;
* Fixed a bug in STRING.from_external.&lt;br /&gt;
* Fixed a bug with mixed rename/redefine.&lt;br /&gt;
* Inheritance loop detection.&lt;br /&gt;
* Anchoring loop detection.&lt;br /&gt;
* Fixed a bug with renaming infix/prefix.&lt;br /&gt;
* Command clean also use the make suffix.&lt;br /&gt;
* Added ELKS95 sign in INTEGER/REAL/DOUBLE.&lt;br /&gt;
* Feature make is the default root feature name for compile.&lt;br /&gt;
* Optimized ARRAY.add_last and STRING.extend.&lt;br /&gt;
* Changed STRING.out (no more enclosing %&amp;quot; printed).&lt;br /&gt;
* Remove warning gcc messages for 64 bit machines (alpha/DEC).&lt;br /&gt;
* Added option -no_split for a better finalization (see man/compile_to_c) file).&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.91 - Wednesday July 24th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Incremental C compiling mode implemented (see option -c_code in help file man/compile) .&lt;br /&gt;
* Added command clean in help file man/clean.&lt;br /&gt;
* Added class FILE_TOOLS.&lt;br /&gt;
* No more empty C struct in generated C code (to avoid problems with Microsoft Windows C compiler).&lt;br /&gt;
* Fixed one more bug with conformance rule VNCG.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.92 - Saturday July 20th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Fixed some more bugs with conformance rule VNCG.&lt;br /&gt;
* Added math functions in DOUBLE/REAL (sin, cos, tan, asin, acos, atan, ... ANSI C names).&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.93 - Thursday July 18th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Fixed some more bugs with conformance rule VNCG.&lt;br /&gt;
* Type BIT is now implemented.&lt;br /&gt;
* Added ELKS 95 STRING.left_adjust and STRING.right_adjust.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.94 - Friday July 5th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Fixed some bugs with conformance rule VNCG.&lt;br /&gt;
* Static expressions are used to detect pre-computable once routines.&lt;br /&gt;
* Added features to_external and from_external both in classes ARRAY and FIXED_ARRAY.&lt;br /&gt;
* Fixed a bug for inheritance of ARRAY or FIXED_ARRAY.&lt;br /&gt;
* Contents of end of class comment checked.&lt;br /&gt;
* Added documentation file for external calls (see help file man/external ).&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.95 - Thursday May 30th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* It is now possible to inherit ARRAY.&lt;br /&gt;
* It is now possible to inherit STRING.&lt;br /&gt;
* Flag -cc of compile_to_c has changed.&lt;br /&gt;
* The PLATFORM class is now conform to ELKS95.&lt;br /&gt;
* Added feature twin (like the one of TowerEiffel) in GENERAL.&lt;br /&gt;
* Added features to_external and from_external in class STRING.&lt;br /&gt;
* Fixed some bugs in once pre-computed routines.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.96 - Friday May 10th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Internal renaming to suppress some warning messages and for a smooth integration with C++ software.&lt;br /&gt;
* DOS and Macintosh better portability.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.97 - Thursday May 2nd, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Inside of compiler cleaned.&lt;br /&gt;
* Pre-Computing of some once functions.&lt;br /&gt;
* Added class COLLECTION, LINK_LIST and FIXED_ARRAY in lib/base.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.98 - Friday March 15th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Command pretty added.&lt;br /&gt;
* Implements Eiffel expanded clause.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.99 - Saturday February 17th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* 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 [http://www.uhp-nancy.fr/ University Henri Poincaré] and [http://esial.fr/ ESIAL]&lt;br /&gt;
&lt;br /&gt;
=== Release - 1.00 - July 1995 ===&lt;br /&gt;
&lt;br /&gt;
* The very first bootstrap. SmallEiffel is born.&lt;/div&gt;</summary>
		<author><name>Cadrian</name></author>
	</entry>
	<entry>
		<id>https://wiki.liberty-eiffel.org/index.php?title=Release_Notes_(Versions_history)&amp;diff=1789</id>
		<title>Release Notes (Versions history)</title>
		<link rel="alternate" type="text/html" href="https://wiki.liberty-eiffel.org/index.php?title=Release_Notes_(Versions_history)&amp;diff=1789"/>
		<updated>2013-10-04T11:31:50Z</updated>

		<summary type="html">&lt;p&gt;Cadrian: /* Release - 0.99 - Saturday February 17th, 1996 */ links&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== LibertyEiffel (latest release first) ==&lt;br /&gt;
For upcoming releases see the [[upcoming releases|list of names]].&lt;br /&gt;
&lt;br /&gt;
=== Adler (not yet released, named after Charles Adler, Jr.) ===&lt;br /&gt;
* First release as LibertyEiffel&lt;br /&gt;
* User-visible changes:&lt;br /&gt;
** Added [[library_class:NATURAL_8|&amp;lt;tt&amp;gt;NATURAL_8&amp;lt;/tt&amp;gt;]], [[library_class:NATURAL_16|&amp;lt;tt&amp;gt;NATURAL_16&amp;lt;/tt&amp;gt;]], [[library_class:NATURAL_32|&amp;lt;tt&amp;gt;NATURAL_32&amp;lt;/tt&amp;gt;]], and [[library_class:NATURAL_64|&amp;lt;tt&amp;gt;NATURAL_64&amp;lt;/tt&amp;gt;]] classes. See &amp;lt;tt&amp;gt;tutorial/natural.e&amp;lt;/tt&amp;gt; for examples.&lt;br /&gt;
** Even low-level features (i.e. &amp;lt;tt&amp;gt;external &amp;quot;built_in&amp;quot;&amp;lt;/tt&amp;gt;) are now checking their assertions. As an example, division by zero is now checked by assertions.&lt;br /&gt;
** Inlined dynamic dispatch for better performance&lt;br /&gt;
** A missing export clause is deprecated. Use &amp;lt;tt&amp;gt;{ANY}&amp;lt;/tt&amp;gt; instead.&lt;br /&gt;
** New core libraries: cli, json, log, parse (beware, those libraries are not yet tuned to be used without GC)&lt;br /&gt;
** Improved libraries: string (with notably a new [[library_class:FIXED_STRING|&amp;lt;tt&amp;gt;FIXED_STRING&amp;lt;/tt&amp;gt;]] class)&lt;br /&gt;
** Wrapper libraries: gtk, gdk, readline, ffi, 0mq...&lt;br /&gt;
** A new tool that can generate mocks to help unit testing&lt;br /&gt;
** [http://www.hpl.hp.com/personal/Hans_Boehm/gc/ BDW] GC support&lt;br /&gt;
* Developer changes:&lt;br /&gt;
** The web site now belongs to the repository&lt;br /&gt;
** Automatic testing tools (ET on the web, and &amp;lt;tt&amp;gt;watch_eiffeltest.sh&amp;lt;/tt&amp;gt; in the shell)&lt;br /&gt;
** Automatic Debian packages generation&lt;br /&gt;
* Known bugs:&lt;br /&gt;
** BDW GC is not well tested; currently weak references seem not to work properly; and the GC is not run at program exit (it should run all finalizers)&lt;br /&gt;
** Sometimes SmartEiffel's native GC ill behaves, analysis is welcome&lt;br /&gt;
** See the [https://savannah.gnu.org/bugs/?group=liberty-eiffel bugs page]&lt;br /&gt;
&lt;br /&gt;
== SmartEiffel (all releases which are predecessors of Liberty) ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Release 2.3 [Antoine-Auguste Parmentier] - Wednesday July 11th 2007 ===&lt;br /&gt;
&lt;br /&gt;
Again, a lot of novelties for this release:&lt;br /&gt;
&lt;br /&gt;
* New [[Typing policy|typing rules]] have been revisited and are now crystal clear. See [[Typing policy|this page]] for details.&lt;br /&gt;
* Implemented a new [[class loading]] algorithm, which takes into account the &amp;quot;distance&amp;quot; between classes, thus reifying the notion of clusters and sub-clusters. Everything is transparent, there is no new keyword to learn.&lt;br /&gt;
* Installation: SmartEiffel now provides a streamlined installer for package maintainers. Of course, the interactive installer is still available via &amp;quot;make interactive&amp;quot;.&lt;br /&gt;
* Configuration: in the same spirit to simplify package maintainers' life, the configuration &amp;quot;file&amp;quot; can now be a directory.&lt;br /&gt;
* The new [[eiffeltest]] tool is now available too.&lt;br /&gt;
* Old style &amp;quot;rename.se&amp;quot; files are no longer considered. You can now use the same class name in different clusters.&lt;br /&gt;
* The &amp;lt;tt&amp;gt;NONE&amp;lt;/tt&amp;gt; type mark must no longer be used. Just use an empty &amp;lt;tt&amp;gt;{}&amp;lt;/tt&amp;gt; exportation list to indicate that the corresponding following features are not exported. This is better for newcomers.&lt;br /&gt;
* In class [[library_class:COLLECTION|&amp;lt;tt&amp;gt;COLLECTION&amp;lt;/tt&amp;gt;]], features &amp;lt;tt&amp;gt;index_of&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;fast_index_of&amp;lt;/tt&amp;gt; now have an extra argument to indicate where the search must start (as in class [[library_class:STRING|&amp;lt;tt&amp;gt;STRING&amp;lt;/tt&amp;gt;]]). See also &amp;lt;tt&amp;gt;first_index_of&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;fast_first_index_of&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* Microsoft's Visual C++ 2005 compiler is now supported.&lt;br /&gt;
* The debugging sections can be turned on with the new &amp;lt;tt&amp;gt;-debug&amp;lt;/tt&amp;gt; option, in all compilation modes other than &amp;lt;tt&amp;gt;-boost&amp;lt;/tt&amp;gt;. The &amp;lt;tt&amp;gt;-debug_check&amp;lt;/tt&amp;gt; mode has been deprecated.&lt;br /&gt;
* The regular expression library has been added.&lt;br /&gt;
* Sequencer's &amp;lt;tt&amp;gt;READY_DESCRIPTION&amp;lt;/tt&amp;gt; is now renamed as [[library_class:EVENTS_SET|&amp;lt;tt&amp;gt;EVENTS_SET&amp;lt;/tt&amp;gt;]] and has a unified interface for all kinds of events.&lt;br /&gt;
* Some work on the network cluster.&lt;br /&gt;
* Last but not least: SmartEiffel now has a logo that will help it fly!&lt;br /&gt;
&lt;br /&gt;
=== Release 2.2 [Pomme de terre] - Monday December 19th, 2005 ===&lt;br /&gt;
&lt;br /&gt;
Again, a lot of novelties for this release.&lt;br /&gt;
&lt;br /&gt;
First, the new [[eiffeldoc]] command has been completely revisited and is now part of the delivery. That command is 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.&lt;br /&gt;
&lt;br /&gt;
The second important novelty is that we now have a brand new introspection mechanism which allows us to implement the new persistency facility.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
* Added a new command, [[se]], which is meant to be the only command you ever need to put in your PATH!&lt;br /&gt;
* Added a new command, [[eiffeldoc]], that you can use to document your project. Currently only HTML output is supported.&lt;br /&gt;
* The [[plugins]] system is vastly improved and should now be preferred over older external specifications. See [[plugins|this page]] for details.&lt;br /&gt;
* Improved error messages legibility in order to avoid missunderstanding.&lt;br /&gt;
* Added a new OpenGL widget for Vision. Unix-based programs only have to inherit from [[library_class:UNIX_GL_WIDGET|&amp;lt;tt&amp;gt;UNIX_GL_WIDGET&amp;lt;/tt&amp;gt;]] and define all the OpenGL related routines.&lt;br /&gt;
* Added new abstract class named [[library_class:BIJECTIVE_DICTIONARY|&amp;lt;tt&amp;gt;BIJECTIVE_DICTIONARY&amp;lt;/tt&amp;gt;]] which is actually a replacement for the now obsolete [[library_class:DOUBLE_DICTIONARY|&amp;lt;tt&amp;gt;DOUBLE_DICTIONARY&amp;lt;/tt&amp;gt;]] class. At time being, there is only one implementation of [[library_class:BIJECTIVE_DICTIONARY|&amp;lt;tt&amp;gt;BIJECTIVE_DICTIONARY&amp;lt;/tt&amp;gt;]] named [[library_class:HASHED_BIJECTIVE_DICTIONARY|&amp;lt;tt&amp;gt;HASHED_BIJECTIVE_DICTIONARY&amp;lt;/tt&amp;gt;]] (a hash_code-based implementation).&lt;br /&gt;
* Removed class &amp;lt;tt&amp;gt;GENERAL&amp;lt;/tt&amp;gt; as well as some obsolete features of that class. In the past, &amp;lt;tt&amp;gt;GENERAL&amp;lt;/tt&amp;gt; was inherited by [[library_class:PLATFORM|&amp;lt;tt&amp;gt;PLATFORM&amp;lt;/tt&amp;gt;]] which was inherited by [[library_class:ANY.|&amp;lt;tt&amp;gt;ANY.&amp;lt;/tt&amp;gt;]] Now, [[library_class:ANY|&amp;lt;tt&amp;gt;ANY&amp;lt;/tt&amp;gt;]] has no more parent at all (no conforming parent and no non-conforming parents). The removal of &amp;lt;tt&amp;gt;GENERAL&amp;lt;/tt&amp;gt; is better for newcomers because they just need to know about [[library_class:ANY|&amp;lt;tt&amp;gt;ANY&amp;lt;/tt&amp;gt;]] and it is also better for the underlying model consistency. Because we have now removed &amp;lt;tt&amp;gt;equals&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;clone&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;deep_clone&amp;lt;/tt&amp;gt; you must now only use &amp;lt;tt&amp;gt;is_equal&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;twin&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;deep_twin&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;is_deep_equal&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;standard_is_equal&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;standard_twin&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* Removed the &amp;lt;tt&amp;gt;file_tools&amp;lt;/tt&amp;gt; feature from [[library_class:ANY.|&amp;lt;tt&amp;gt;ANY.&amp;lt;/tt&amp;gt;]] Also note that all other file manipulation features from [[library_class:ANY|&amp;lt;tt&amp;gt;ANY&amp;lt;/tt&amp;gt;]] are now obsolete (use the class [[library_class:FILE_TOOLS|&amp;lt;tt&amp;gt;FILE_TOOLS&amp;lt;/tt&amp;gt;]] instead).&lt;br /&gt;
* No more feature &amp;lt;tt&amp;gt;argument&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;argument_count&amp;lt;/tt&amp;gt; in class [[library_class:ANY.|&amp;lt;tt&amp;gt;ANY.&amp;lt;/tt&amp;gt;]] In order to access command-line arguments, just insert the class [[library_class:ARGUMENTS.|&amp;lt;tt&amp;gt;ARGUMENTS.&amp;lt;/tt&amp;gt;]]&lt;br /&gt;
* The &amp;lt;tt&amp;gt;-case_insensitive&amp;lt;/tt&amp;gt; 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 legibility of our code.&lt;br /&gt;
* You now get a warning for using the all lower-case spelling of the keywords &amp;lt;tt&amp;gt;current&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;result&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;void&amp;lt;/tt&amp;gt;. Please use the initial-caps spellings &amp;lt;tt&amp;gt;Current&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;Result&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;Void&amp;lt;/tt&amp;gt; instead.&lt;br /&gt;
* 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.&lt;br /&gt;
* 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.&lt;br /&gt;
* 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.&lt;br /&gt;
* 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.&lt;br /&gt;
* Feature &amp;lt;tt&amp;gt;is_equal&amp;lt;/tt&amp;gt; is now redefined in class [[library_class:HASHABLE|&amp;lt;tt&amp;gt;HASHABLE&amp;lt;/tt&amp;gt;]]. The new definition adds an ensure then assertion to check consistency with the &amp;lt;tt&amp;gt;hash_code&amp;lt;/tt&amp;gt; function. Note that the redefinition is deferred to force clients to select their preferred implementation.&lt;br /&gt;
* Added a new feature called &amp;lt;tt&amp;gt;set_storage&amp;lt;/tt&amp;gt; in class [[library_class:STRING.|&amp;lt;tt&amp;gt;STRING.&amp;lt;/tt&amp;gt;]] This low-level feature is only exported to [[library_class:STRING_HANDLER|&amp;lt;tt&amp;gt;STRING_HANDLER&amp;lt;/tt&amp;gt;]].&lt;br /&gt;
* Added a new features in class [[library_class:COLLECTION|&amp;lt;tt&amp;gt;COLLECTION&amp;lt;/tt&amp;gt;]]: &amp;lt;tt&amp;gt;remove_head&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;remove_tail&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;reverse_index_of&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;last_index_of&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;first_index_of&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;fast_reverse_index_of&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;fast_last_index_of&amp;lt;/tt&amp;gt;&lt;br /&gt;
* Added a new features in class [[library_class:DICTIONARY|&amp;lt;tt&amp;gt;DICTIONARY&amp;lt;/tt&amp;gt;]]: &amp;lt;tt&amp;gt;fast_reference_at&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;fast_put&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;fast_remove&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* Added a new Eiffel mode description for the Vim text editor. This mode is compatible with our emacs mode. File &amp;quot;misc/eiffel.vim&amp;quot; is for the Vim editor while file &amp;quot;misc/eiffel.el&amp;quot; is for emacs.&lt;br /&gt;
&lt;br /&gt;
=== Release 2.1 [Poirot] - Wednesday February 9th, 2005 ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
More details about changes from 2.0:&lt;br /&gt;
&lt;br /&gt;
* 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 &amp;quot;inherit&amp;quot; keyword. After that, you can use the &amp;quot;insert&amp;quot; keyword followed by the list of non-conforming parents. Like in the previous release, when a class has no &amp;quot;inherit&amp;quot; clause and no &amp;quot;insert&amp;quot; clause, the default insert ANY is automatically added.&lt;br /&gt;
The new compiler does not warn you anymore when multiple conforming paths 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).&lt;br /&gt;
* We introduced a brand new notation to generalize the old manifest array notation. You can now create an [[library_class:ARRAY|&amp;lt;tt&amp;gt;ARRAY&amp;lt;/tt&amp;gt;]] initialized with letters as follows:&lt;br /&gt;
        {ARRAY[CHARACTER] 1, &amp;lt;&amp;lt; 'a', 'b', 'c', 'd' &amp;gt;&amp;gt; }&lt;br /&gt;
or a LINKED_LIST doing:&lt;br /&gt;
        {LINKED_LIST[CHARACTER] &amp;lt;&amp;lt; 'a', 'b', 'c', 'd' &amp;gt;&amp;gt; }&lt;br /&gt;
as well as any kind of COLLECTION:&lt;br /&gt;
        {RING_ARRAY[CHARACTER] 1, &amp;lt;&amp;lt; 'a', 'b', 'c', 'd' &amp;gt;&amp;gt;}&lt;br /&gt;
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.&lt;br /&gt;
* Classes to manipulate floating point numbers have been completely revisited. Floating point number manipulation now uses [[library_class:REAL_32|&amp;lt;tt&amp;gt;REAL_32&amp;lt;/tt&amp;gt;]] for 32 bits floating points, [[library_class:REAL_64|&amp;lt;tt&amp;gt;REAL_64&amp;lt;/tt&amp;gt;]] which is equivalent of &amp;lt;tt&amp;gt;REAL&amp;lt;/tt&amp;gt; for 64 bits floating points, [[library_class:REAL_80|&amp;lt;tt&amp;gt;REAL_80&amp;lt;/tt&amp;gt;]] for architecture supporting 80 bits, [[library_class:REAL_128|&amp;lt;tt&amp;gt;REAL_128&amp;lt;/tt&amp;gt;]] for architecture supporting 128 bits and, [[library_class:REAL_EXTENDED|&amp;lt;tt&amp;gt;REAL_EXTENDED&amp;lt;/tt&amp;gt;]] which is automatically mapped on [[library_class:REAL_80|&amp;lt;tt&amp;gt;REAL_80&amp;lt;/tt&amp;gt;]] or [[library_class:REAL_128|&amp;lt;tt&amp;gt;REAL_128&amp;lt;/tt&amp;gt;]] depending on the architecture actually used. The old &amp;lt;tt&amp;gt;DOUBLE&amp;lt;/tt&amp;gt; class is now obsolete and is automatically replaced with simply &amp;lt;tt&amp;gt;REAL&amp;lt;/tt&amp;gt; (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 &amp;lt;tt&amp;gt;REAL&amp;lt;/tt&amp;gt;. As an example, ''1.5'' is of type &amp;lt;tt&amp;gt;REAL&amp;lt;/tt&amp;gt; whereas ''{REAL_32 1.5}'' is of type [[library_class:REAL_32|&amp;lt;tt&amp;gt;REAL_32&amp;lt;/tt&amp;gt;]] and ''{REAL_EXTENDED 1.5}'' is of type [[library_class:REAL_80|&amp;lt;tt&amp;gt;REAL_80&amp;lt;/tt&amp;gt;]] or [[library_class:REAL_128|&amp;lt;tt&amp;gt;REAL_128&amp;lt;/tt&amp;gt;]] depending on your hardware. See again SmartEiffel/tutorial/manifest_notation.e for details. Finally, also note that scientific notation has been added to display floating point.&lt;br /&gt;
* To handle downcasting in a better way than the still supported &amp;quot;?=&amp;quot; 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 &amp;quot;?:=&amp;quot; allows you to test if the downcasting can be safely done and the new &amp;quot;::=&amp;quot; assignment can actually perform the downcasting. In debug modes, the &amp;quot;?:=&amp;quot; predicate is considered as a require assertion of the &amp;quot;::=&amp;quot; assignment. The &amp;quot;?:=&amp;quot; predicate accepts type name for its left-hand side and is useful too in assertions. See SmartEiffel/tutorial/downcasting.e for examples.&lt;br /&gt;
* Command short improved: assertions are displayed according to the client's point of view (i.e. you do not see what you cannot call).&lt;br /&gt;
* Added classes [[library_class:STACK|&amp;lt;tt&amp;gt;STACK&amp;lt;/tt&amp;gt;]] and [[library_class:QUEUE|&amp;lt;tt&amp;gt;QUEUE&amp;lt;/tt&amp;gt;]]. Thanks to the &amp;quot;insert&amp;quot; mechanism, it is now safe and efficient to do so ([[library_class:STACK|&amp;lt;tt&amp;gt;STACK&amp;lt;/tt&amp;gt;]] shares the efficient implementation of [[library_class:FAST_ARRAY|&amp;lt;tt&amp;gt;FAST_ARRAY&amp;lt;/tt&amp;gt;]] and [[library_class:QUEUE|&amp;lt;tt&amp;gt;QUEUE&amp;lt;/tt&amp;gt;]] inserts [[library_class:RING_ARRAY|&amp;lt;tt&amp;gt;RING_ARRAY&amp;lt;/tt&amp;gt;]]).&lt;br /&gt;
* Improved memory usage for classes [[library_class:LINKED_LIST|&amp;lt;tt&amp;gt;LINKED_LIST&amp;lt;/tt&amp;gt;]], [[library_class:TWO_WAY_LINKED_LIST|&amp;lt;tt&amp;gt;TWO_WAY_LINKED_LIST&amp;lt;/tt&amp;gt;]], [[library_class:AVL_SET|&amp;lt;tt&amp;gt;AVL_SET&amp;lt;/tt&amp;gt;]], [[library_class:AVL_DICTIONARY|&amp;lt;tt&amp;gt;AVL_DICTIONARY&amp;lt;/tt&amp;gt;]], [[library_class:HASHED_SET|&amp;lt;tt&amp;gt;HASHED_SET&amp;lt;/tt&amp;gt;]] and [[library_class:HASHED_DICTIONARY|&amp;lt;tt&amp;gt;HASHED_DICTIONARY&amp;lt;/tt&amp;gt;]]. Free cells are automatically recycled between various instances of the same generic derivation. Thoses classes are now using our [[library_class:WEAK_REFERENCE|&amp;lt;tt&amp;gt;WEAK_REFERENCE&amp;lt;/tt&amp;gt;]] class silently.&lt;br /&gt;
* Removed obsolete class &amp;lt;tt&amp;gt;BIT&amp;lt;/tt&amp;gt;. Now, just use existing bit operations from [[library_class:INTEGER_8|&amp;lt;tt&amp;gt;INTEGER_8&amp;lt;/tt&amp;gt;]], [[library_class:INTEGER_16|&amp;lt;tt&amp;gt;INTEGER_16&amp;lt;/tt&amp;gt;]], [[library_class:INTEGER_32|&amp;lt;tt&amp;gt;INTEGER_32&amp;lt;/tt&amp;gt;]], &amp;lt;tt&amp;gt;INTEGER&amp;lt;/tt&amp;gt;, [[library_class:INTEGER_64|&amp;lt;tt&amp;gt;INTEGER_64&amp;lt;/tt&amp;gt;]] or, for very long sequences of bits, the completely revisited [[library_class:BIT_STRING|&amp;lt;tt&amp;gt;BIT_STRING&amp;lt;/tt&amp;gt;]] class.&lt;br /&gt;
* 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!&lt;br /&gt;
* 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:&lt;br /&gt;
        3.to_string &lt;br /&gt;
        3.5.print_on(io) &lt;br /&gt;
        &amp;quot;foo&amp;quot;.print_on(io) &lt;br /&gt;
* A new network library has been recently added. This is brand new work which is still in progress. See SmartEiffel/lib/net for details.&lt;br /&gt;
* The old Eiffel strip expression is no longer supported.&lt;br /&gt;
&lt;br /&gt;
=== Release 2.0 [Hercule] - Monday September 27th, 2004 ===&lt;br /&gt;
&lt;br /&gt;
Actually, this new 2.0 release is the beginning of a new era in SmartEiffel's life!&lt;br /&gt;
&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
More details about changes from 1.1:&lt;br /&gt;
&lt;br /&gt;
* Very large systems are handled far more efficiently (but maybe at a cost for smaller systems).&lt;br /&gt;
* The new non-conforming inheritance mechanism is now implemented. For code portatbility, we decided to stick with the &amp;quot;inherit&amp;quot; keyword for conforming parents. So just start your class as usual. Then, to describe the non-conforming parents, just use the &amp;quot;insert&amp;quot; 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 &amp;quot;select&amp;quot; clause (you'll be warned by the compiler). Also keep in mind that when a class has no &amp;quot;inherit&amp;quot; clause and no &amp;quot;insert&amp;quot; clause, the default insert [[library_class:ANY|&amp;lt;tt&amp;gt;ANY&amp;lt;/tt&amp;gt;]] 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.&lt;br /&gt;
* Repeated inheritance is now correctly handled.&lt;br /&gt;
* The optimizer is rewritten and can do more optimizations.&lt;br /&gt;
* 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).&lt;br /&gt;
* 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 [[library_class:NATIVE_ARRAY|&amp;lt;tt&amp;gt;NATIVE_ARRAY&amp;lt;/tt&amp;gt;]]s). Command such as ''p ..1'' is useful to get another element of the array or another attribute of the same object.&lt;br /&gt;
* Dead code is now checked, which explains the compiler takes more time and memory.&lt;br /&gt;
* 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 &amp;quot;good&amp;quot; cluster.&lt;br /&gt;
The new organization splits the classes by logical topics. Note that each cluster may contain two special clusters: &amp;quot;low_level&amp;quot;, containing classes that you might use if you need better performance (generally when you build some utility or library classes); &amp;quot;internal&amp;quot; containing support classes, and not meant to be used directly.&lt;br /&gt;
Now, the organization itself:&lt;br /&gt;
** &amp;quot;abilities&amp;quot; contains the &amp;quot;able&amp;quot; classes ([[library_class:COMPARABLE|&amp;lt;tt&amp;gt;COMPARABLE&amp;lt;/tt&amp;gt;]], [[library_class:HASHABLE|&amp;lt;tt&amp;gt;HASHABLE&amp;lt;/tt&amp;gt;]], and so on);&lt;br /&gt;
** &amp;quot;io&amp;quot; contains the input-out classes; this cluster has but changed from the old one (see below for more details);&lt;br /&gt;
** &amp;quot;iterator&amp;quot; still contains the iterator on storage classes (see the &amp;quot;storage&amp;quot; cluster);&lt;br /&gt;
** &amp;quot;kernel&amp;quot; contains the few general-purpose which could not be put in other clusters, and are quite mandatory for the compiler to work;&lt;br /&gt;
** &amp;quot;numeric&amp;quot; contains all the classes that can be use to manipulate numbers; you will find here &amp;lt;tt&amp;gt;INTEGER&amp;lt;/tt&amp;gt;s, &amp;lt;tt&amp;gt;REAL&amp;lt;/tt&amp;gt;s, but also [[library_class:NUMBER|&amp;lt;tt&amp;gt;NUMBER&amp;lt;/tt&amp;gt;]]s (the infinite-precision integers); This cluster also includes the new [[library_class:MUTABLE_BIG_INTEGER|&amp;lt;tt&amp;gt;MUTABLE_BIG_INTEGER&amp;lt;/tt&amp;gt;]] class which is an efficient tools for fast integer number crunching.&lt;br /&gt;
** &amp;quot;random&amp;quot; contains the pseudo-random number generation classes;&lt;br /&gt;
** &amp;quot;scoop&amp;quot; contains the SCOOP utilities (not that SCOOP works better than in SE 1.1...);&lt;br /&gt;
** &amp;quot;storage&amp;quot; contains all the classes that store data: [[library_class:COLLECTION|&amp;lt;tt&amp;gt;COLLECTION&amp;lt;/tt&amp;gt;]], [[library_class:DICTIONARY|&amp;lt;tt&amp;gt;DICTIONARY&amp;lt;/tt&amp;gt;]], [[library_class:SET|&amp;lt;tt&amp;gt;SET&amp;lt;/tt&amp;gt;]]... (Note: see below for more details on [[library_class:DICTIONARY|&amp;lt;tt&amp;gt;DICTIONARY&amp;lt;/tt&amp;gt;]] and [[library_class:SET|&amp;lt;tt&amp;gt;SET&amp;lt;/tt&amp;gt;]]);&lt;br /&gt;
** &amp;quot;string&amp;quot; contains the [[library_class:STRING|&amp;lt;tt&amp;gt;STRING&amp;lt;/tt&amp;gt;]] and related classes (also Unicode strings);&lt;br /&gt;
** &amp;quot;time&amp;quot; contains the [[library_class:TIME|&amp;lt;tt&amp;gt;TIME&amp;lt;/tt&amp;gt;]]-related classes;&lt;br /&gt;
** &amp;quot;vision&amp;quot; contains the vision graphical library classes;&lt;br /&gt;
** &amp;quot;sorting&amp;quot; contains most common algorithm to sort [[library_class:COLLECTION|&amp;lt;tt&amp;gt;COLLECTION&amp;lt;/tt&amp;gt;]]s;&lt;br /&gt;
** &amp;quot;misc&amp;quot; contains some useful classes that cannot be easily put elsewhere short of having their own cluster.&lt;br /&gt;
&lt;br /&gt;
* [[library_class:DICTIONARY|&amp;lt;tt&amp;gt;DICTIONARY&amp;lt;/tt&amp;gt;]] class is now deferred and has no more generic constraint. The library now includes two different implementations.&lt;br /&gt;
** The [[library_class:HASHED_DICTIONARY|&amp;lt;tt&amp;gt;HASHED_DICTIONARY&amp;lt;/tt&amp;gt;]] implementation is the hash_code based implementation (the generic constraint for [[library_class:HASHED_DICTIONARY|&amp;lt;tt&amp;gt;HASHED_DICTIONARY&amp;lt;/tt&amp;gt;]] is [[library_class:HASHABLE|&amp;lt;tt&amp;gt;HASHABLE&amp;lt;/tt&amp;gt;]]).&lt;br /&gt;
** The [[library_class:AVL_DICTIONARY|&amp;lt;tt&amp;gt;AVL_DICTIONARY&amp;lt;/tt&amp;gt;]] implementation is a balanced tree based implementation (the generic constraint for this implemetation is [[library_class:COMPARABLE|&amp;lt;tt&amp;gt;COMPARABLE&amp;lt;/tt&amp;gt;]]).&lt;br /&gt;
You should update all your create instructions by selecting [[library_class:HASHED_DICTIONARY|&amp;lt;tt&amp;gt;HASHED_DICTIONARY&amp;lt;/tt&amp;gt;]] or [[library_class:AVL_DICTIONARY|&amp;lt;tt&amp;gt;AVL_DICTIONARY&amp;lt;/tt&amp;gt;]]. In order to ease this code update, the compiler will warn you that [[library_class:HASHED_DICTIONARY|&amp;lt;tt&amp;gt;HASHED_DICTIONARY&amp;lt;/tt&amp;gt;]] is selected by default. Please update your code because this is a temporary warning of the compiler.&lt;br /&gt;
&lt;br /&gt;
* Some more [[library_class:DICTIONARY|&amp;lt;tt&amp;gt;DICTIONARY&amp;lt;/tt&amp;gt;]] classes were also added (among them: [[library_class:DOUBLE_DICTIONARY|&amp;lt;tt&amp;gt;DOUBLE_DICTIONARY&amp;lt;/tt&amp;gt;]] can be of interest).&lt;br /&gt;
* The [[library_class:SET|&amp;lt;tt&amp;gt;SET&amp;lt;/tt&amp;gt;]] class has undergone the same transformation ([[library_class:HASHED_SET|&amp;lt;tt&amp;gt;HASHED_SET&amp;lt;/tt&amp;gt;]] and [[library_class:AVL_SET|&amp;lt;tt&amp;gt;AVL_SET&amp;lt;/tt&amp;gt;]]).&lt;br /&gt;
* A [[library_class:RING_ARRAY|&amp;lt;tt&amp;gt;RING_ARRAY&amp;lt;/tt&amp;gt;]] class was added. This [[library_class:COLLECTION|&amp;lt;tt&amp;gt;COLLECTION&amp;lt;/tt&amp;gt;]] is quite similar to an [[library_class:ARRAY|&amp;lt;tt&amp;gt;ARRAY&amp;lt;/tt&amp;gt;]] that performs well for all queue operations (add|remove)_(first|last) thanks to its circular internal representation.&lt;br /&gt;
* The [[library_class:TUPLE|&amp;lt;tt&amp;gt;TUPLE&amp;lt;/tt&amp;gt;]] class is now defined in Eiffel. Thanks to this new source code implementation, we have added the definition for the `item' feature definition.&lt;br /&gt;
* The [[library_class:ROUTINE|&amp;lt;tt&amp;gt;ROUTINE&amp;lt;/tt&amp;gt;]], [[library_class:PROCEDURE|&amp;lt;tt&amp;gt;PROCEDURE&amp;lt;/tt&amp;gt;]] and [[library_class:FUNCTION|&amp;lt;tt&amp;gt;FUNCTION&amp;lt;/tt&amp;gt;]] classes are also defined in Eiffel.&lt;br /&gt;
* Added a new [[library_class:WEAK_REFERENCE|&amp;lt;tt&amp;gt;WEAK_REFERENCE&amp;lt;/tt&amp;gt;]] class with the appropriate garbage collector support.&lt;br /&gt;
* Split has been improved in order to reduce C files compilation after a change.&lt;br /&gt;
* Added a new &amp;quot;-profile&amp;quot; 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:&lt;br /&gt;
** the profiling output is written in the &amp;quot;profile.se&amp;quot; file;&lt;br /&gt;
** for each entry, the &amp;quot;own&amp;quot; and &amp;quot;cumul&amp;quot; times, total and average, are given; also, the caller features and the called ones are displayed;&lt;br /&gt;
** 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);&lt;br /&gt;
** the Eiffel called features are sorted by decreasing number of calls;&lt;br /&gt;
** 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).&lt;br /&gt;
**e that:&lt;br /&gt;
** profiled programs take MUCH longer to execute (a lot of, hem, time, is spent in the kernel merely to, hem, track time...)&lt;br /&gt;
** externals are not profiled; they are accounted in the &amp;quot;own&amp;quot; time of their caller;&lt;br /&gt;
** inlined features are not profiled either (only in -boost)&lt;br /&gt;
** 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.&lt;br /&gt;
**s to Lothar Scholz for having the idea in the first place.&lt;br /&gt;
**ped the input-output system to make it more general and more extensible. Provided features:&lt;br /&gt;
** now streams can be &amp;quot;filtered&amp;quot;. It means you can nest them to bring extra features such as encoding or encryption (among many other things)&lt;br /&gt;
** 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.&lt;br /&gt;
See also the cluster description on the SmartEiffel site.&lt;br /&gt;
* Visitors revisited. The architecture is now ready to be used (in 1.1 it was but a draft).&lt;br /&gt;
&lt;br /&gt;
== SmartEiffel (release 1.1 down to release 1.0) ==&lt;br /&gt;
&lt;br /&gt;
=== Release 1.1 [Charlemagne] - Monday June 16th, 2003 ===&lt;br /&gt;
&lt;br /&gt;
* Thoroughly changed the configuration handling. The new scheme is more complete, and much more flexible.&lt;br /&gt;
** 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 &amp;lt;Enter&amp;gt; key. For more informations about installation and all new configuration capabilities, please have a look to install page.&lt;br /&gt;
** Added the -c_mode option, in conjunction with the new configuration handling.&lt;br /&gt;
** Added a -loadpath flag to read an extra loadpath.&lt;br /&gt;
* 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.&lt;br /&gt;
* Added a small expression evaluator to sedb. One can now display the attributes of the objects on the stack. Be sure to read the &amp;quot;more-help&amp;quot; section on data display (for once functions, the result is unavailable if it has not yet been called).&lt;br /&gt;
* 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.&lt;br /&gt;
* Implemented inspect on [[library_class:STRING|&amp;lt;tt&amp;gt;STRING&amp;lt;/tt&amp;gt;]]s.&lt;br /&gt;
* 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!&lt;br /&gt;
* [[pretty]] significantly updated.&lt;br /&gt;
* The C files produced by the compiler now should work on any platform, even with the GC turned on.&lt;br /&gt;
* Added Unicode support in [[library_class:STRING|&amp;lt;tt&amp;gt;STRING&amp;lt;/tt&amp;gt;]]s (see the SmartEiffel/tutorial/unicode and SmartEiffel/lib/unicode directories).&lt;br /&gt;
* Added new abstract class [[library_class:FILE|&amp;lt;tt&amp;gt;FILE&amp;lt;/tt&amp;gt;]] and new features in class [[library_class:DIRECTORY|&amp;lt;tt&amp;gt;DIRECTORY&amp;lt;/tt&amp;gt;]].&lt;br /&gt;
* Added hexadecimal notation for &amp;lt;tt&amp;gt;INTEGER&amp;lt;/tt&amp;gt; constants, [[library_class:CHARACTER|&amp;lt;tt&amp;gt;CHARACTER&amp;lt;/tt&amp;gt;]] constants and inside manifest [[library_class:STRING|&amp;lt;tt&amp;gt;STRING&amp;lt;/tt&amp;gt;]]s as well. See the example in file SmartEiffel/tutorial/hexadecimal.e for more information.&lt;br /&gt;
* Added agent facilities on [[library_class:STRING|&amp;lt;tt&amp;gt;STRING&amp;lt;/tt&amp;gt;]] and [[library_class:UNICODE_STRING|&amp;lt;tt&amp;gt;UNICODE_STRING&amp;lt;/tt&amp;gt;]] (warning, those facilities are non-standard extensions).&lt;br /&gt;
* 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.&lt;br /&gt;
* Moved the bin_c directory to install/germ.&lt;br /&gt;
* Reorganized the SmartEiffel/sys/runtime directory:&lt;br /&gt;
** Clearly separated C and Java backend helpers&lt;br /&gt;
** 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&lt;br /&gt;
* Added the -compact option which produces much more compact C code.&lt;br /&gt;
* same_type from &amp;lt;tt&amp;gt;GENERAL&amp;lt;/tt&amp;gt; is now obsolete. Use same_dynamic_type instead.&lt;br /&gt;
* Obsoleted operators &amp;quot;and&amp;quot;, &amp;quot;or&amp;quot;, &amp;quot;xor&amp;quot; and &amp;quot;not&amp;quot; for &amp;lt;tt&amp;gt;INTEGER&amp;lt;/tt&amp;gt;s, and added prefix operator &amp;quot;~&amp;quot;.&lt;br /&gt;
* [[library_class:MEMORY|&amp;lt;tt&amp;gt;MEMORY&amp;lt;/tt&amp;gt;]].allocated_bytes is more accurate.&lt;br /&gt;
* Generated object files are now removed before calling C compiler.&lt;br /&gt;
* Various bug fixes and improvements (see details in the SmartZilla bug tracker).&lt;br /&gt;
&lt;br /&gt;
=== Release 1.0 - Friday December 6th, 2002 ===&lt;br /&gt;
&lt;br /&gt;
This is the very first release with the name SmartEiffel!&lt;br /&gt;
(Previous releases were named SmallEiffel.)&lt;br /&gt;
&lt;br /&gt;
The main changes between SmallEiffel -0.74 and SmartEiffel 1.0 are:&lt;br /&gt;
&lt;br /&gt;
* Name changed from SmallEiffel to SmartEiffel!&lt;br /&gt;
* Version numbering: now, versions are numbered from 1.0 beta 1 upward&lt;br /&gt;
* 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).&lt;br /&gt;
* The new Reference keyword is now implemented. Use reference &amp;lt;tt&amp;gt;INTEGER&amp;lt;/tt&amp;gt; instead of &amp;lt;tt&amp;gt;INTEGER_REF&amp;lt;/tt&amp;gt;. &amp;lt;tt&amp;gt;INTEGER_REF&amp;lt;/tt&amp;gt; will become obsolete.&lt;br /&gt;
* The new [[library_class:INTEGER_GENERAL|&amp;lt;tt&amp;gt;INTEGER_GENERAL&amp;lt;/tt&amp;gt;]], [[library_class:INTEGER_8|&amp;lt;tt&amp;gt;INTEGER_8&amp;lt;/tt&amp;gt;]], [[library_class:INTEGER_16|&amp;lt;tt&amp;gt;INTEGER_16&amp;lt;/tt&amp;gt;]], [[library_class:INTEGER_32|&amp;lt;tt&amp;gt;INTEGER_32&amp;lt;/tt&amp;gt;]], [[library_class:INTEGER_64|&amp;lt;tt&amp;gt;INTEGER_64&amp;lt;/tt&amp;gt;]] types are now implemented.&lt;br /&gt;
* After long discussions, we have decided to stick to our decision for the type of integer constants (as an example, 127 is of type [[library_class:INTEGER_8|&amp;lt;tt&amp;gt;INTEGER_8&amp;lt;/tt&amp;gt;]] and 128 is of type [[library_class:INTEGER_16|&amp;lt;tt&amp;gt;INTEGER_16&amp;lt;/tt&amp;gt;]] 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 &amp;lt;tt&amp;gt;&amp;lt;&amp;lt;...&amp;gt;&amp;gt;&amp;lt;/tt&amp;gt; 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 :)&lt;br /&gt;
* 64-bit architectures supported.&lt;br /&gt;
* Internal improvements in the type system (better C code produced)&lt;br /&gt;
* Buffered I/O. You may get big improvements on programs performing lots of file reading or writing ([[library_class:STD_INPUT|&amp;lt;tt&amp;gt;STD_INPUT&amp;lt;/tt&amp;gt;]] and [[library_class:STD_OUTPUT|&amp;lt;tt&amp;gt;STD_OUTPUT&amp;lt;/tt&amp;gt;]] are also buffered).&lt;br /&gt;
* The short command now has the &amp;quot;-client&amp;quot; option (see short command manual for more details).&lt;br /&gt;
* The &amp;quot;tcc&amp;quot; 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.&lt;br /&gt;
* New bug reporting tool. Now you can see all known bugs and their state. Allways refers to the bug report page on SmartEiffel site.&lt;br /&gt;
* As suggested on our mailing list, there are now two new classes in order to remove some definitions from &amp;lt;tt&amp;gt;GENERAL&amp;lt;/tt&amp;gt; (see class [[library_class:MATH_CONSTANTS|&amp;lt;tt&amp;gt;MATH_CONSTANTS&amp;lt;/tt&amp;gt;]] and class [[library_class:CHARACTER_CONSTANTS|&amp;lt;tt&amp;gt;CHARACTER_CONSTANTS&amp;lt;/tt&amp;gt;]]).&lt;br /&gt;
* 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 &amp;gt;&amp;gt; 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.&lt;br /&gt;
* Type mark must now follow the Precursor keyword.&lt;br /&gt;
* Fixed the bug recently reported by Wolfgang Jansen. (Well isolated bug report, thanks!) This bug was related to expanded objects and the twin feature.&lt;br /&gt;
* Fixed the -manifest_string_trace bug recently reported by Alexis Saettler. (Well isolated bug as well, thanks!)&lt;br /&gt;
* 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 &amp;quot;like Current&amp;quot; type mark into some hard-coded type mark (e.g. &amp;quot;FOO&amp;quot;). 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 [[library_class:NUMBER|&amp;lt;tt&amp;gt;NUMBER&amp;lt;/tt&amp;gt;]] library implementation of &amp;lt;tt&amp;gt;is_equal&amp;lt;/tt&amp;gt; (''like Current'' is now changed to [[library_class:NUMBER|&amp;lt;tt&amp;gt;NUMBER&amp;lt;/tt&amp;gt;]]) and changed the postcondition of &amp;lt;tt&amp;gt;is_equal&amp;lt;/tt&amp;gt; in &amp;lt;tt&amp;gt;GENERAL&amp;lt;/tt&amp;gt; (ensure assertion relaxed to no longer call standard_is_equal).&lt;br /&gt;
* 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/&lt;br /&gt;
* New Cygwin directory notation is now supported. Recent Cygwin systems will be automatically detected while install.&lt;br /&gt;
* Other &amp;quot;secret&amp;quot; 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.&lt;br /&gt;
* Improved internal lab process to more easily provide professional support contracts (see premium support for more details).&lt;br /&gt;
* New functions in [[library_class:COLLECTION_SORTER|&amp;lt;tt&amp;gt;COLLECTION_SORTER&amp;lt;/tt&amp;gt;]] classes using dichotomic search.&lt;br /&gt;
* GC support for the Elate system updated.&lt;br /&gt;
* Various bug fixes and improvements.&lt;br /&gt;
&lt;br /&gt;
== SmallEiffel (all releases of SmallEiffel) ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.74 - Tuesday May 7th, 2002 ===&lt;br /&gt;
&lt;br /&gt;
* The new agent mechanism is now implemented. See tutorial/agent directory for examples.&lt;br /&gt;
* 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.&lt;br /&gt;
* The new create instruction/expression is now fully implemented and correctly pretty-printed. The new default_create feature mechanism is also implemented.&lt;br /&gt;
* 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.&lt;br /&gt;
* Added examples for the new TUPLE type in directory tutorial/tuple.&lt;br /&gt;
* 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.)&lt;br /&gt;
* The external C interface is now compatible with the new ETL definition. (See directory tutorial/external/C for examples.)&lt;br /&gt;
* Added flag -high_memory_compiler to compile_to_c.&lt;br /&gt;
* 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.)&lt;br /&gt;
* 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.&lt;br /&gt;
* Added feature connect_append_to both in class TEXT_FILE_WRITE and BINARY_FILE_WRITE.&lt;br /&gt;
* 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.&lt;br /&gt;
* Added feature size_of and feature last_change_of in class FILE_TOOLS (see also tutorial/basic_time for examples).&lt;br /&gt;
* Added feature append_decimal_in and feature to_decimal in class NUMBER as well as a new example the tutorial/number directory.&lt;br /&gt;
* Added feature add both in class COLLECTION_SORTER and in class REVERSE_COLLECTION_SORTER.&lt;br /&gt;
* Added feature reference_at in class DICTIONARY.&lt;br /&gt;
* Added feature infix &amp;quot;+&amp;quot; in class POINTER.&lt;br /&gt;
* Various bug fixes and improvements.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.75 - Thursday July 16th, 2001 ===&lt;br /&gt;
&lt;br /&gt;
* 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.&lt;br /&gt;
* 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.&lt;br /&gt;
* Added a traditional -help flag for all commands to print a summary of available options.&lt;br /&gt;
* In ACE files as well as in &amp;quot;loadpath.se&amp;quot; files the ${SmallEiffelDirectory} environment variable is automatically defined using the value of the ${SmallEiffel} environment variable.&lt;br /&gt;
* 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.&lt;br /&gt;
* The new TUPLE type is now implemented.&lt;br /&gt;
* Added class TIME_IN_GERMAN to handle date and time in German. See tutorial/basic_time for examples.&lt;br /&gt;
* Feature is_equal of class COMPARABLE is now ELKS compatible.&lt;br /&gt;
* Added feature internal_key in class DICTIONARY.&lt;br /&gt;
* Various bug fixes and improvements.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.76 - Saturday November 11th, 2000 ===&lt;br /&gt;
&lt;br /&gt;
* 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.&lt;br /&gt;
* 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).&lt;br /&gt;
* Added feature reindex in class ARRAY.&lt;br /&gt;
* Added a brand new class SET[E-&amp;gt;HASHABLE].&lt;br /&gt;
* Added support for the Elate (Amiga) system as well as the vpcc C compiler.&lt;br /&gt;
* Added support for the QNX real time operating system.&lt;br /&gt;
* For feature dispose of class MEMORY (as well as redefinitions), the class invariant is no longer triggered.&lt;br /&gt;
* Added features atan2 and pow both in class REAL and DOUBLE.&lt;br /&gt;
* Internal implementation of BASIC_TIME revisited (using now a double for memorization).&lt;br /&gt;
* Implementation of class DICTIONARY completely revisited. Also added features add, item_map_in and key_map_in in the new class DICTIONARY.&lt;br /&gt;
* 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).&lt;br /&gt;
* Various bug fixes and improvements.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.77 - Saturday February 12th, 2000 ===&lt;br /&gt;
&lt;br /&gt;
* 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, ...&lt;br /&gt;
  To install SmallEiffel under some UNIX like system, just type make in the SmallEiffel directory.&lt;br /&gt;
  To install SmallEiffel under Windows, just run install.exe.&lt;br /&gt;
  On other systems, C compile and run the install.c file.&lt;br /&gt;
* 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.&lt;br /&gt;
* Added NUMBER library, for infinite precision and infinitely large numbers. See tutorial/number for examples.&lt;br /&gt;
* Added ITERATOR library, for external iterators on data structures. See tutorial/iterator for examples.&lt;br /&gt;
* 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).&lt;br /&gt;
* 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).&lt;br /&gt;
* Added class BIT_STRING for very large bit sequences, with reference semantics.&lt;br /&gt;
* 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).&lt;br /&gt;
* 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.&lt;br /&gt;
* Added feature to_hexadecimal and feature to_hexadecimal_in in class INTEGER.&lt;br /&gt;
* Improved incremental recompilation of the generated C code (also fixed a very old bug in incrementality).&lt;br /&gt;
* Exceptions handling: the default_rescue feature is now supported.&lt;br /&gt;
* Various bug fixes and improvements (type inference score increased, ...).&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.78 - Saturday June 05th, 1999 ===&lt;br /&gt;
&lt;br /&gt;
* New -html2 flag for command short generates a colorized HTML short form for classes.&lt;br /&gt;
* The garbage collector now takes into account feature dispose of class MEMORY for reference objects.&lt;br /&gt;
* Obsolete classes (obsolete keyword) now supported.&lt;br /&gt;
* Assertion tags are now displayed when an assertion fails.&lt;br /&gt;
* Added environment variable in loadpath files. Syntax: ${SOME_VAR}&lt;br /&gt;
* Added the -no_style_warning flag to suppress warnings when the recommended styles guidelines for Eiffel are not strictly followed.&lt;br /&gt;
* Added the -version flag to show SmallEiffel's version.&lt;br /&gt;
* 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.&lt;br /&gt;
* Class LINKED_LIST now replaces obsolete class LINK_LIST (simple renaming).&lt;br /&gt;
  Class TWO_WAY_LINKED_LIST now replaces obsolete class LINK2_LIST (simple renaming).&lt;br /&gt;
* Fixed &amp;quot;implicit renaming&amp;quot; bug.&lt;br /&gt;
* Cleaned all source code of tabulations at beginning of line (made code look ugly when using an editor whose tabs were not 8).&lt;br /&gt;
* Some new ELKS'95 features implemented.&lt;br /&gt;
* Validity rule VEEN fixed.&lt;br /&gt;
* Added class COLLECTION_SORTER and REVERSE_COLLECTION_SORTER to the library.&lt;br /&gt;
* Fixed file renaming portability bug (&amp;quot;.d files bug&amp;quot;).&lt;br /&gt;
* Validity rule VCFG.1 is now enforced.&lt;br /&gt;
* Validity rule VAPE is now enforced.&lt;br /&gt;
* Classes mentioned in a cecil.se file are now automatically made live. Makes it easier to link with external libraries.&lt;br /&gt;
* Various other bug fixes.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.79 - Tuesday December 22nd, 1998 ===&lt;br /&gt;
&lt;br /&gt;
* The new Eiffel construct Precursor as described OOSC2 is now implemented.&lt;br /&gt;
* The Eiffel expression strip is now implemented.&lt;br /&gt;
* Nested loadpath files now allowed.&lt;br /&gt;
* Extended anchored definition to accept infix and prefix feature names. For example, this kind of declaration is now accepted :      foo: like infix &amp;quot;+&amp;quot;.&lt;br /&gt;
* Classes COLLECTION2, ARRAY2 and FIXED_ARRAY2 of lib/base completely revisited.&lt;br /&gt;
* Fixed a bug related to calls of the form f.g.h; on expanded objects.&lt;br /&gt;
* Fixed a bug related to inheritance of generic classes.&lt;br /&gt;
* Fixed bugs related to assertions checking in case of exceptions (rescue clause, retry). Improved cycle detection in assertions.&lt;br /&gt;
* Fixed bug in GC related to recycling of &amp;quot;monsters&amp;quot; (very large resizable objets).&lt;br /&gt;
* Fixed an incredible bug in the implementation of the like Current type mark. ;-).&lt;br /&gt;
* Fixed many others bugs ($ operator, GC for alpha DEC, ...).&lt;br /&gt;
* System customization file for the BeOS system added in the &amp;quot;sys&amp;quot; sub-directory (more on system customization).&lt;br /&gt;
* Contents of the environment variable SmallEiffel must be now set with the absolute path of the file &amp;quot;system.se&amp;quot; which is in the sub-directory &amp;quot;sys&amp;quot; of the installation directory.&lt;br /&gt;
  Under a UNIX-like system, the value of the SmallEiffel environment variable may be for example: /usr/lib/SmallEiffel/sys/system.se&lt;br /&gt;
  Commands are also more robust when this environment variable contains non-alphanumeric characters.&lt;br /&gt;
* No more ensure assertion in GENERAL.get_environment_variable.&lt;br /&gt;
* Commands compile_to_jvm and print_jvm_class completely revisited. Java byte-code can be now used with the -verify Java option).&lt;br /&gt;
* Validity rule VDRD.6 is now enforced.&lt;br /&gt;
* Balancing rule (automatic promotion) for INTEGER, DOUBLE and REAL is now implemented.&lt;br /&gt;
* Recursive once routines now work correctly.&lt;br /&gt;
* Unmodified generated C files are not touched anymore.&lt;br /&gt;
* Assertions correctly checked for all external C routines.&lt;br /&gt;
* Exception handling now works when an exception occurs in external C code.&lt;br /&gt;
* Cleaned the compiler and decreased its memory footprint.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.80 - Thursday July 9th, 1998 ===&lt;br /&gt;
&lt;br /&gt;
* Exception handling implemented. Class EXCEPTIONS added in lib/kernel.&lt;br /&gt;
* 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).&lt;br /&gt;
* 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.&lt;br /&gt;
* Behavior of compilation flag -trace of command compile_to_c changed to allow step-by-step execution (embryo of Eiffel source code debugger).&lt;br /&gt;
* Feature ARRAY.resize completely revisited (added two features in class NATIVE_ARRAY: clear and move).&lt;br /&gt;
* Garbage Collector optimized (the GC should be more agressive and some benchmarks are included in directory SmallEiffel/misc/benchmarks/gc/*/bench.e).&lt;br /&gt;
* Associativity of infix operator &amp;quot;^&amp;quot; is now correctly handled.&lt;br /&gt;
* Fixed bugs in PLATFORM for Minimum_double, Minimum_real and Minimum_character_code.&lt;br /&gt;
* Fixed some others bugs about export rules, about expanded objects with expanded attributes.&lt;br /&gt;
* Fixed bugs in pretty.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.81 - Thursday April 9th, 1998 ===&lt;br /&gt;
&lt;br /&gt;
* 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).&lt;br /&gt;
* 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.)&lt;br /&gt;
  Added flag -clean which removes all the C and object files of the system. (This corresponds to the old default behavior.)&lt;br /&gt;
* Fixed a bug related to buffered input under Windows/MS VC.&lt;br /&gt;
* Fixed a bug in misc/INSTALL.SH script.&lt;br /&gt;
* Added require is_connected for all features put_* of class OUTPUT_STREAM.&lt;br /&gt;
* Fixed a bug in command short (require/ensure assertion of deferred routines are now printed).&lt;br /&gt;
* Added one useful hook for mode -html1 in command short (see hook Mcn).&lt;br /&gt;
* Added directory SmallEiffel/sys/runtime which contains the C runtime.&lt;br /&gt;
* Fixed a bug about instanciation of class ANY itself (not so common !).&lt;br /&gt;
* Fixed a bug about inlining of operator $.&lt;br /&gt;
* Fixed a bug about cyclic anchored definitions.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.82 - Friday January 16th, 1998 ===&lt;br /&gt;
&lt;br /&gt;
* Became the official GNU Eiffel compiler.&lt;br /&gt;
* Added first HTML mode to command short. Flag -html1. Thanks to Matthias Klause.&lt;br /&gt;
* Fixed bugs in command pretty.&lt;br /&gt;
* It is now possible to rename/redefine external &amp;quot;SmallEiffel&amp;quot; features.&lt;br /&gt;
* Files *.hlp of directory SmallEiffel/man no longer exists. All the documentation is now in *.html files plus corresponding automatically generated *.txt files.&lt;br /&gt;
* Manifest arrays creation has been optimized.&lt;br /&gt;
* Validity rule VHRC.2 is now enforced.&lt;br /&gt;
* Fixed bugs about export clause.&lt;br /&gt;
* Feature GENERAL.hash_code no longer exists. Added ELKS class HASHABLE in order to be compatible with others compilers/libraries.&lt;br /&gt;
* Fixed a bug in pre-computed once functions.&lt;br /&gt;
* Fixed a bug in REAL/DOUBLE keybord input.&lt;br /&gt;
* Reintroduced left hand side cast in C code for better performances (allowed by the C ANSI standard).&lt;br /&gt;
* Obsolete features (obsolete keyword) now generate a Warning.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.83 - Friday September 19th, 1997 ===&lt;br /&gt;
&lt;br /&gt;
* Added command short to the distribution.&lt;br /&gt;
* Added directory contrib in the distribution. This directory contains some scripts to use gdb as source level debugger for SmallEiffel.&lt;br /&gt;
* Added flag -no_warning to commands: compile_to_c, pretty, and compile_to_jvm.&lt;br /&gt;
* Added flag -case_insensitive to command compile_to_c.&lt;br /&gt;
* Fixed a bug for inherit/select.&lt;br /&gt;
* Fixed a bug for some pre-computed once function.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.84 - Monday August 18th, 1997 ===&lt;br /&gt;
&lt;br /&gt;
* Class BIT is now implemented in Java bytecode (command compile_to_jvm).&lt;br /&gt;
* Added external specification to call Java code (when using compile_to_jvm).&lt;br /&gt;
* 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.&lt;br /&gt;
* 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).&lt;br /&gt;
* Added STRING.substring_index (from ELKS written by Fridtjof SIEBERT).&lt;br /&gt;
* 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).&lt;br /&gt;
* Changed the behavior of end_of_input of INPUT_STREAM (this flag is true _after_ last character has been read).&lt;br /&gt;
* Fixed a bug in manifest arrays (mixed objects including Void).&lt;br /&gt;
* Fixed a bug dealing with some statically computed expressions.&lt;br /&gt;
* Fixed a bug in repeated inheritance.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.85 - Thursday July 3rd, 1997 ===&lt;br /&gt;
&lt;br /&gt;
* First beta-release of commands compile_to_jvm and print_jvm_class!&lt;br /&gt;
* 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.&lt;br /&gt;
* 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.&lt;br /&gt;
* Added feature to_hexadecimal and feature to_hexadecimal_in in class CHARACTER.&lt;br /&gt;
* Feature io, std_input, std_output and std_error of class GENERAL are no longer frozen.&lt;br /&gt;
* 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).&lt;br /&gt;
* Feature die_with_code of GENERAL now accepts any INTEGER code (not just predefined exit_success_code and exit_failure_code).&lt;br /&gt;
* Fixed a bug in STRING. The following expression is now true: (&amp;quot;a%/0/b&amp;quot;).count = 3&lt;br /&gt;
  Just try this on your favorite Eiffel compiler ;-)&lt;br /&gt;
* 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.&lt;br /&gt;
* Feature unread_character of class INPUT_STREAM is now implemented in Eiffel.&lt;br /&gt;
* Added OUTPUT_STREAM.put_pointer to view a POINTER.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.86 - Sunday April 13th, 1997 ===&lt;br /&gt;
&lt;br /&gt;
* All reported bugs at this time have been fixed.&lt;br /&gt;
* 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.&lt;br /&gt;
* Features BOOLEAN.infix &amp;quot;or&amp;quot; and BOOLEAN.infix &amp;quot;and&amp;quot; are now written in pure Eiffel. As a consequence, it is very important for the SmallEiffel programmer to make the distinction between BOOLEAN.infix &amp;quot;and then&amp;quot; and BOOLEAN.infix &amp;quot;and&amp;quot; (respectively for BOOLEAN.infix &amp;quot;or else&amp;quot; and BOOLEAN.infix &amp;quot;or&amp;quot;). When left-hand-side argument produces no side effect, the semi-strict operator (BOOLEAN.infix&amp;quot;and then&amp;quot;/&amp;quot;or else&amp;quot;) may run faster.&lt;br /&gt;
* Fixed REAL.sin (the old one was calling sqrt :-).&lt;br /&gt;
* Fixed a bug in INTEGER.append_in (you can now print Minimum_integer).&lt;br /&gt;
* Added feature in_range in class COMPARABLE.&lt;br /&gt;
* Result type of REAL.infix &amp;quot;^&amp;quot; is now DOUBLE for ELKS compatibility.&lt;br /&gt;
* Feature remove is now implemented in all subclasses of COLLECTION (i.e. ARRAY, FIXED_ARRAY, LINK_LIST and LINK2_LIST).&lt;br /&gt;
* Added feature add for all subclasses of COLLECTION.&lt;br /&gt;
* Conversion DOUBLE/STRING : ANSI C sscanf and sprintf is now used to avoid loss of precision.&lt;br /&gt;
* Added some more class invariant code generation when compiling in -invariant_check mode. Class invariant is now also checked before exit of a routine.&lt;br /&gt;
* Added feature file_tools in class GENERAL to ease access to class FILE_TOOLS.&lt;br /&gt;
* Changed printing format for basic *_REF classes. For example, instruction print(1); now prints 1.&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.87 - Tuesday January 7th, 1997 ===&lt;br /&gt;
&lt;br /&gt;
* Added a new flag -trace to ease debug (see man/compile_to_c file).&lt;br /&gt;
* More inlining at Eiffel level (-boost mode only).&lt;br /&gt;
* Class BIT_N completely revisited. It may be as fast as C.&lt;br /&gt;
* Added class C_ARRAY[E] to deal directly with C arrays at Eiffel level. Thus there are no more external &amp;quot;CSE&amp;quot; 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.&lt;br /&gt;
* Fixed a bug in STD_FILE_READ.read_double.&lt;br /&gt;
* Ordering of C output to increase gcc inlining.&lt;br /&gt;
* According to man/compile_to_c) , flag -debug_check now works (debug instructions are no longer generated in mode -all_check).&lt;br /&gt;
* Unused local variables removed at Eiffel level (warning added for -debug_check mode only).&lt;br /&gt;
* Default class ANY now inherits PLATFORM (as in ETL).&lt;br /&gt;
* Fixed a bug in floating-point constants.&lt;br /&gt;
* Added directory sys to customize default C compiler, default C linker and default loading path.&lt;br /&gt;
* Fixed some bugs with outside expanded types.&lt;br /&gt;
* Fixed a bug with rename/select.&lt;br /&gt;
* Redefinition of once routine is now allowed.&lt;br /&gt;
* Feature GENERAL.conforms_to is now implemented.&lt;br /&gt;
* Rule VFFD.7 is now enforced.&lt;br /&gt;
* Feature force implemented for all COLLECTION.&lt;br /&gt;
* Added conversions features CHARACTER.to_bit, INTEGER.to_bit, BIT_N.to_character and BIT_N.to_integer.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.88 - Wednesday October 30th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Fixed bugs dealing with inherit/rename/select.&lt;br /&gt;
* Added warning for missing colon in actual arguments list.&lt;br /&gt;
* Warning : INSTALL procedure has changed and you have to set manually the default loading path (see misc/INSTALL for details).&lt;br /&gt;
* Added some VMS customization.&lt;br /&gt;
* Fixed bugs when printing run-time stack.&lt;br /&gt;
* Warning added for missing colon in actual parameter list.&lt;br /&gt;
* Added flush in class STD_FILE_WRITE.&lt;br /&gt;
* No more left hand side cast in C code (because some C compilers don't like them).&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.89 - Sunday September 15th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Calling Eiffel from C is now implemented (see man/cecil) file).&lt;br /&gt;
* Object creation uses C calloc instead malloc+memset.&lt;br /&gt;
* Object creation is inlined.&lt;br /&gt;
* ARRAY/FIXED_ARRAY put and item are now inlined (-boost only).&lt;br /&gt;
* Added feature capacity and resize in FIXED_ARRAY.&lt;br /&gt;
* 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.&lt;br /&gt;
* More user's routines are inlined (-boost only).&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.90 - Friday August 23rd, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Added random number generator library (SmallEiffel/lib_rand).&lt;br /&gt;
* Added checking of assertions for external &amp;quot;CSE&amp;quot; features.&lt;br /&gt;
* Anchoring on expanded types are now allowed.&lt;br /&gt;
* Multiple level of anchoring definition allowed.&lt;br /&gt;
* Fixed a bug in STRING.from_external.&lt;br /&gt;
* Fixed a bug with mixed rename/redefine.&lt;br /&gt;
* Inheritance loop detection.&lt;br /&gt;
* Anchoring loop detection.&lt;br /&gt;
* Fixed a bug with renaming infix/prefix.&lt;br /&gt;
* Command clean also use the make suffix.&lt;br /&gt;
* Added ELKS95 sign in INTEGER/REAL/DOUBLE.&lt;br /&gt;
* Feature make is the default root feature name for compile.&lt;br /&gt;
* Optimized ARRAY.add_last and STRING.extend.&lt;br /&gt;
* Changed STRING.out (no more enclosing %&amp;quot; printed).&lt;br /&gt;
* Remove warning gcc messages for 64 bit machines (alpha/DEC).&lt;br /&gt;
* Added option -no_split for a better finalization (see man/compile_to_c) file).&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.91 - Wednesday July 24th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Incremental C compiling mode implemented (see option -c_code in help file man/compile) .&lt;br /&gt;
* Added command clean in help file man/clean.&lt;br /&gt;
* Added class FILE_TOOLS.&lt;br /&gt;
* No more empty C struct in generated C code (to avoid problems with Microsoft Windows C compiler).&lt;br /&gt;
* Fixed one more bug with conformance rule VNCG.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.92 - Saturday July 20th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Fixed some more bugs with conformance rule VNCG.&lt;br /&gt;
* Added math functions in DOUBLE/REAL (sin, cos, tan, asin, acos, atan, ... ANSI C names).&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.93 - Thursday July 18th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Fixed some more bugs with conformance rule VNCG.&lt;br /&gt;
* Type BIT is now implemented.&lt;br /&gt;
* Added ELKS 95 STRING.left_adjust and STRING.right_adjust.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.94 - Friday July 5th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Fixed some bugs with conformance rule VNCG.&lt;br /&gt;
* Static expressions are used to detect pre-computable once routines.&lt;br /&gt;
* Added features to_external and from_external both in classes ARRAY and FIXED_ARRAY.&lt;br /&gt;
* Fixed a bug for inheritance of ARRAY or FIXED_ARRAY.&lt;br /&gt;
* Contents of end of class comment checked.&lt;br /&gt;
* Added documentation file for external calls (see help file man/external ).&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.95 - Thursday May 30th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* It is now possible to inherit ARRAY.&lt;br /&gt;
* It is now possible to inherit STRING.&lt;br /&gt;
* Flag -cc of compile_to_c has changed.&lt;br /&gt;
* The PLATFORM class is now conform to ELKS95.&lt;br /&gt;
* Added feature twin (like the one of TowerEiffel) in GENERAL.&lt;br /&gt;
* Added features to_external and from_external in class STRING.&lt;br /&gt;
* Fixed some bugs in once pre-computed routines.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.96 - Friday May 10th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Internal renaming to suppress some warning messages and for a smooth integration with C++ software.&lt;br /&gt;
* DOS and Macintosh better portability.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.97 - Thursday May 2nd, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Inside of compiler cleaned.&lt;br /&gt;
* Pre-Computing of some once functions.&lt;br /&gt;
* Added class COLLECTION, LINK_LIST and FIXED_ARRAY in lib/base.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.98 - Friday March 15th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Command pretty added.&lt;br /&gt;
* Implements Eiffel expanded clause.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.99 - Saturday February 17th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* 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 [http://www.uhp-nancy.fr/ University Henri Poincaré] and [http://esial.fr/ ESIAL]&lt;br /&gt;
&lt;br /&gt;
=== Release - 1.00 - July 1995 ===&lt;br /&gt;
&lt;br /&gt;
* The very first bootstrap. SmallEiffel is born.&lt;/div&gt;</summary>
		<author><name>Cadrian</name></author>
	</entry>
	<entry>
		<id>https://wiki.liberty-eiffel.org/index.php?title=Release_Notes_(Versions_history)&amp;diff=1788</id>
		<title>Release Notes (Versions history)</title>
		<link rel="alternate" type="text/html" href="https://wiki.liberty-eiffel.org/index.php?title=Release_Notes_(Versions_history)&amp;diff=1788"/>
		<updated>2013-10-04T11:28:38Z</updated>

		<summary type="html">&lt;p&gt;Cadrian: /* Adler (not yet released, named after Charles Adler, Jr.) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== LibertyEiffel (latest release first) ==&lt;br /&gt;
For upcoming releases see the [[upcoming releases|list of names]].&lt;br /&gt;
&lt;br /&gt;
=== Adler (not yet released, named after Charles Adler, Jr.) ===&lt;br /&gt;
* First release as LibertyEiffel&lt;br /&gt;
* User-visible changes:&lt;br /&gt;
** Added [[library_class:NATURAL_8|&amp;lt;tt&amp;gt;NATURAL_8&amp;lt;/tt&amp;gt;]], [[library_class:NATURAL_16|&amp;lt;tt&amp;gt;NATURAL_16&amp;lt;/tt&amp;gt;]], [[library_class:NATURAL_32|&amp;lt;tt&amp;gt;NATURAL_32&amp;lt;/tt&amp;gt;]], and [[library_class:NATURAL_64|&amp;lt;tt&amp;gt;NATURAL_64&amp;lt;/tt&amp;gt;]] classes. See &amp;lt;tt&amp;gt;tutorial/natural.e&amp;lt;/tt&amp;gt; for examples.&lt;br /&gt;
** Even low-level features (i.e. &amp;lt;tt&amp;gt;external &amp;quot;built_in&amp;quot;&amp;lt;/tt&amp;gt;) are now checking their assertions. As an example, division by zero is now checked by assertions.&lt;br /&gt;
** Inlined dynamic dispatch for better performance&lt;br /&gt;
** A missing export clause is deprecated. Use &amp;lt;tt&amp;gt;{ANY}&amp;lt;/tt&amp;gt; instead.&lt;br /&gt;
** New core libraries: cli, json, log, parse (beware, those libraries are not yet tuned to be used without GC)&lt;br /&gt;
** Improved libraries: string (with notably a new [[library_class:FIXED_STRING|&amp;lt;tt&amp;gt;FIXED_STRING&amp;lt;/tt&amp;gt;]] class)&lt;br /&gt;
** Wrapper libraries: gtk, gdk, readline, ffi, 0mq...&lt;br /&gt;
** A new tool that can generate mocks to help unit testing&lt;br /&gt;
** [http://www.hpl.hp.com/personal/Hans_Boehm/gc/ BDW] GC support&lt;br /&gt;
* Developer changes:&lt;br /&gt;
** The web site now belongs to the repository&lt;br /&gt;
** Automatic testing tools (ET on the web, and &amp;lt;tt&amp;gt;watch_eiffeltest.sh&amp;lt;/tt&amp;gt; in the shell)&lt;br /&gt;
** Automatic Debian packages generation&lt;br /&gt;
* Known bugs:&lt;br /&gt;
** BDW GC is not well tested; currently weak references seem not to work properly; and the GC is not run at program exit (it should run all finalizers)&lt;br /&gt;
** Sometimes SmartEiffel's native GC ill behaves, analysis is welcome&lt;br /&gt;
** See the [https://savannah.gnu.org/bugs/?group=liberty-eiffel bugs page]&lt;br /&gt;
&lt;br /&gt;
== SmartEiffel (all releases which are predecessors of Liberty) ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Release 2.3 [Antoine-Auguste Parmentier] - Wednesday July 11th 2007 ===&lt;br /&gt;
&lt;br /&gt;
Again, a lot of novelties for this release:&lt;br /&gt;
&lt;br /&gt;
* New [[Typing policy|typing rules]] have been revisited and are now crystal clear. See [[Typing policy|this page]] for details.&lt;br /&gt;
* Implemented a new [[class loading]] algorithm, which takes into account the &amp;quot;distance&amp;quot; between classes, thus reifying the notion of clusters and sub-clusters. Everything is transparent, there is no new keyword to learn.&lt;br /&gt;
* Installation: SmartEiffel now provides a streamlined installer for package maintainers. Of course, the interactive installer is still available via &amp;quot;make interactive&amp;quot;.&lt;br /&gt;
* Configuration: in the same spirit to simplify package maintainers' life, the configuration &amp;quot;file&amp;quot; can now be a directory.&lt;br /&gt;
* The new [[eiffeltest]] tool is now available too.&lt;br /&gt;
* Old style &amp;quot;rename.se&amp;quot; files are no longer considered. You can now use the same class name in different clusters.&lt;br /&gt;
* The &amp;lt;tt&amp;gt;NONE&amp;lt;/tt&amp;gt; type mark must no longer be used. Just use an empty &amp;lt;tt&amp;gt;{}&amp;lt;/tt&amp;gt; exportation list to indicate that the corresponding following features are not exported. This is better for newcomers.&lt;br /&gt;
* In class [[library_class:COLLECTION|&amp;lt;tt&amp;gt;COLLECTION&amp;lt;/tt&amp;gt;]], features &amp;lt;tt&amp;gt;index_of&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;fast_index_of&amp;lt;/tt&amp;gt; now have an extra argument to indicate where the search must start (as in class [[library_class:STRING|&amp;lt;tt&amp;gt;STRING&amp;lt;/tt&amp;gt;]]). See also &amp;lt;tt&amp;gt;first_index_of&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;fast_first_index_of&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* Microsoft's Visual C++ 2005 compiler is now supported.&lt;br /&gt;
* The debugging sections can be turned on with the new &amp;lt;tt&amp;gt;-debug&amp;lt;/tt&amp;gt; option, in all compilation modes other than &amp;lt;tt&amp;gt;-boost&amp;lt;/tt&amp;gt;. The &amp;lt;tt&amp;gt;-debug_check&amp;lt;/tt&amp;gt; mode has been deprecated.&lt;br /&gt;
* The regular expression library has been added.&lt;br /&gt;
* Sequencer's &amp;lt;tt&amp;gt;READY_DESCRIPTION&amp;lt;/tt&amp;gt; is now renamed as [[library_class:EVENTS_SET|&amp;lt;tt&amp;gt;EVENTS_SET&amp;lt;/tt&amp;gt;]] and has a unified interface for all kinds of events.&lt;br /&gt;
* Some work on the network cluster.&lt;br /&gt;
* Last but not least: SmartEiffel now has a logo that will help it fly!&lt;br /&gt;
&lt;br /&gt;
=== Release 2.2 [Pomme de terre] - Monday December 19th, 2005 ===&lt;br /&gt;
&lt;br /&gt;
Again, a lot of novelties for this release.&lt;br /&gt;
&lt;br /&gt;
First, the new [[eiffeldoc]] command has been completely revisited and is now part of the delivery. That command is 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.&lt;br /&gt;
&lt;br /&gt;
The second important novelty is that we now have a brand new introspection mechanism which allows us to implement the new persistency facility.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
* Added a new command, [[se]], which is meant to be the only command you ever need to put in your PATH!&lt;br /&gt;
* Added a new command, [[eiffeldoc]], that you can use to document your project. Currently only HTML output is supported.&lt;br /&gt;
* The [[plugins]] system is vastly improved and should now be preferred over older external specifications. See [[plugins|this page]] for details.&lt;br /&gt;
* Improved error messages legibility in order to avoid missunderstanding.&lt;br /&gt;
* Added a new OpenGL widget for Vision. Unix-based programs only have to inherit from [[library_class:UNIX_GL_WIDGET|&amp;lt;tt&amp;gt;UNIX_GL_WIDGET&amp;lt;/tt&amp;gt;]] and define all the OpenGL related routines.&lt;br /&gt;
* Added new abstract class named [[library_class:BIJECTIVE_DICTIONARY|&amp;lt;tt&amp;gt;BIJECTIVE_DICTIONARY&amp;lt;/tt&amp;gt;]] which is actually a replacement for the now obsolete [[library_class:DOUBLE_DICTIONARY|&amp;lt;tt&amp;gt;DOUBLE_DICTIONARY&amp;lt;/tt&amp;gt;]] class. At time being, there is only one implementation of [[library_class:BIJECTIVE_DICTIONARY|&amp;lt;tt&amp;gt;BIJECTIVE_DICTIONARY&amp;lt;/tt&amp;gt;]] named [[library_class:HASHED_BIJECTIVE_DICTIONARY|&amp;lt;tt&amp;gt;HASHED_BIJECTIVE_DICTIONARY&amp;lt;/tt&amp;gt;]] (a hash_code-based implementation).&lt;br /&gt;
* Removed class &amp;lt;tt&amp;gt;GENERAL&amp;lt;/tt&amp;gt; as well as some obsolete features of that class. In the past, &amp;lt;tt&amp;gt;GENERAL&amp;lt;/tt&amp;gt; was inherited by [[library_class:PLATFORM|&amp;lt;tt&amp;gt;PLATFORM&amp;lt;/tt&amp;gt;]] which was inherited by [[library_class:ANY.|&amp;lt;tt&amp;gt;ANY.&amp;lt;/tt&amp;gt;]] Now, [[library_class:ANY|&amp;lt;tt&amp;gt;ANY&amp;lt;/tt&amp;gt;]] has no more parent at all (no conforming parent and no non-conforming parents). The removal of &amp;lt;tt&amp;gt;GENERAL&amp;lt;/tt&amp;gt; is better for newcomers because they just need to know about [[library_class:ANY|&amp;lt;tt&amp;gt;ANY&amp;lt;/tt&amp;gt;]] and it is also better for the underlying model consistency. Because we have now removed &amp;lt;tt&amp;gt;equals&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;clone&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;deep_clone&amp;lt;/tt&amp;gt; you must now only use &amp;lt;tt&amp;gt;is_equal&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;twin&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;deep_twin&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;is_deep_equal&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;standard_is_equal&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;standard_twin&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* Removed the &amp;lt;tt&amp;gt;file_tools&amp;lt;/tt&amp;gt; feature from [[library_class:ANY.|&amp;lt;tt&amp;gt;ANY.&amp;lt;/tt&amp;gt;]] Also note that all other file manipulation features from [[library_class:ANY|&amp;lt;tt&amp;gt;ANY&amp;lt;/tt&amp;gt;]] are now obsolete (use the class [[library_class:FILE_TOOLS|&amp;lt;tt&amp;gt;FILE_TOOLS&amp;lt;/tt&amp;gt;]] instead).&lt;br /&gt;
* No more feature &amp;lt;tt&amp;gt;argument&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;argument_count&amp;lt;/tt&amp;gt; in class [[library_class:ANY.|&amp;lt;tt&amp;gt;ANY.&amp;lt;/tt&amp;gt;]] In order to access command-line arguments, just insert the class [[library_class:ARGUMENTS.|&amp;lt;tt&amp;gt;ARGUMENTS.&amp;lt;/tt&amp;gt;]]&lt;br /&gt;
* The &amp;lt;tt&amp;gt;-case_insensitive&amp;lt;/tt&amp;gt; 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 legibility of our code.&lt;br /&gt;
* You now get a warning for using the all lower-case spelling of the keywords &amp;lt;tt&amp;gt;current&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;result&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;void&amp;lt;/tt&amp;gt;. Please use the initial-caps spellings &amp;lt;tt&amp;gt;Current&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;Result&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;Void&amp;lt;/tt&amp;gt; instead.&lt;br /&gt;
* 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.&lt;br /&gt;
* 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.&lt;br /&gt;
* 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.&lt;br /&gt;
* 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.&lt;br /&gt;
* Feature &amp;lt;tt&amp;gt;is_equal&amp;lt;/tt&amp;gt; is now redefined in class [[library_class:HASHABLE|&amp;lt;tt&amp;gt;HASHABLE&amp;lt;/tt&amp;gt;]]. The new definition adds an ensure then assertion to check consistency with the &amp;lt;tt&amp;gt;hash_code&amp;lt;/tt&amp;gt; function. Note that the redefinition is deferred to force clients to select their preferred implementation.&lt;br /&gt;
* Added a new feature called &amp;lt;tt&amp;gt;set_storage&amp;lt;/tt&amp;gt; in class [[library_class:STRING.|&amp;lt;tt&amp;gt;STRING.&amp;lt;/tt&amp;gt;]] This low-level feature is only exported to [[library_class:STRING_HANDLER|&amp;lt;tt&amp;gt;STRING_HANDLER&amp;lt;/tt&amp;gt;]].&lt;br /&gt;
* Added a new features in class [[library_class:COLLECTION|&amp;lt;tt&amp;gt;COLLECTION&amp;lt;/tt&amp;gt;]]: &amp;lt;tt&amp;gt;remove_head&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;remove_tail&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;reverse_index_of&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;last_index_of&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;first_index_of&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;fast_reverse_index_of&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;fast_last_index_of&amp;lt;/tt&amp;gt;&lt;br /&gt;
* Added a new features in class [[library_class:DICTIONARY|&amp;lt;tt&amp;gt;DICTIONARY&amp;lt;/tt&amp;gt;]]: &amp;lt;tt&amp;gt;fast_reference_at&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;fast_put&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;fast_remove&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* Added a new Eiffel mode description for the Vim text editor. This mode is compatible with our emacs mode. File &amp;quot;misc/eiffel.vim&amp;quot; is for the Vim editor while file &amp;quot;misc/eiffel.el&amp;quot; is for emacs.&lt;br /&gt;
&lt;br /&gt;
=== Release 2.1 [Poirot] - Wednesday February 9th, 2005 ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
More details about changes from 2.0:&lt;br /&gt;
&lt;br /&gt;
* 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 &amp;quot;inherit&amp;quot; keyword. After that, you can use the &amp;quot;insert&amp;quot; keyword followed by the list of non-conforming parents. Like in the previous release, when a class has no &amp;quot;inherit&amp;quot; clause and no &amp;quot;insert&amp;quot; clause, the default insert ANY is automatically added.&lt;br /&gt;
The new compiler does not warn you anymore when multiple conforming paths 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).&lt;br /&gt;
* We introduced a brand new notation to generalize the old manifest array notation. You can now create an [[library_class:ARRAY|&amp;lt;tt&amp;gt;ARRAY&amp;lt;/tt&amp;gt;]] initialized with letters as follows:&lt;br /&gt;
        {ARRAY[CHARACTER] 1, &amp;lt;&amp;lt; 'a', 'b', 'c', 'd' &amp;gt;&amp;gt; }&lt;br /&gt;
or a LINKED_LIST doing:&lt;br /&gt;
        {LINKED_LIST[CHARACTER] &amp;lt;&amp;lt; 'a', 'b', 'c', 'd' &amp;gt;&amp;gt; }&lt;br /&gt;
as well as any kind of COLLECTION:&lt;br /&gt;
        {RING_ARRAY[CHARACTER] 1, &amp;lt;&amp;lt; 'a', 'b', 'c', 'd' &amp;gt;&amp;gt;}&lt;br /&gt;
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.&lt;br /&gt;
* Classes to manipulate floating point numbers have been completely revisited. Floating point number manipulation now uses [[library_class:REAL_32|&amp;lt;tt&amp;gt;REAL_32&amp;lt;/tt&amp;gt;]] for 32 bits floating points, [[library_class:REAL_64|&amp;lt;tt&amp;gt;REAL_64&amp;lt;/tt&amp;gt;]] which is equivalent of &amp;lt;tt&amp;gt;REAL&amp;lt;/tt&amp;gt; for 64 bits floating points, [[library_class:REAL_80|&amp;lt;tt&amp;gt;REAL_80&amp;lt;/tt&amp;gt;]] for architecture supporting 80 bits, [[library_class:REAL_128|&amp;lt;tt&amp;gt;REAL_128&amp;lt;/tt&amp;gt;]] for architecture supporting 128 bits and, [[library_class:REAL_EXTENDED|&amp;lt;tt&amp;gt;REAL_EXTENDED&amp;lt;/tt&amp;gt;]] which is automatically mapped on [[library_class:REAL_80|&amp;lt;tt&amp;gt;REAL_80&amp;lt;/tt&amp;gt;]] or [[library_class:REAL_128|&amp;lt;tt&amp;gt;REAL_128&amp;lt;/tt&amp;gt;]] depending on the architecture actually used. The old &amp;lt;tt&amp;gt;DOUBLE&amp;lt;/tt&amp;gt; class is now obsolete and is automatically replaced with simply &amp;lt;tt&amp;gt;REAL&amp;lt;/tt&amp;gt; (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 &amp;lt;tt&amp;gt;REAL&amp;lt;/tt&amp;gt;. As an example, ''1.5'' is of type &amp;lt;tt&amp;gt;REAL&amp;lt;/tt&amp;gt; whereas ''{REAL_32 1.5}'' is of type [[library_class:REAL_32|&amp;lt;tt&amp;gt;REAL_32&amp;lt;/tt&amp;gt;]] and ''{REAL_EXTENDED 1.5}'' is of type [[library_class:REAL_80|&amp;lt;tt&amp;gt;REAL_80&amp;lt;/tt&amp;gt;]] or [[library_class:REAL_128|&amp;lt;tt&amp;gt;REAL_128&amp;lt;/tt&amp;gt;]] depending on your hardware. See again SmartEiffel/tutorial/manifest_notation.e for details. Finally, also note that scientific notation has been added to display floating point.&lt;br /&gt;
* To handle downcasting in a better way than the still supported &amp;quot;?=&amp;quot; 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 &amp;quot;?:=&amp;quot; allows you to test if the downcasting can be safely done and the new &amp;quot;::=&amp;quot; assignment can actually perform the downcasting. In debug modes, the &amp;quot;?:=&amp;quot; predicate is considered as a require assertion of the &amp;quot;::=&amp;quot; assignment. The &amp;quot;?:=&amp;quot; predicate accepts type name for its left-hand side and is useful too in assertions. See SmartEiffel/tutorial/downcasting.e for examples.&lt;br /&gt;
* Command short improved: assertions are displayed according to the client's point of view (i.e. you do not see what you cannot call).&lt;br /&gt;
* Added classes [[library_class:STACK|&amp;lt;tt&amp;gt;STACK&amp;lt;/tt&amp;gt;]] and [[library_class:QUEUE|&amp;lt;tt&amp;gt;QUEUE&amp;lt;/tt&amp;gt;]]. Thanks to the &amp;quot;insert&amp;quot; mechanism, it is now safe and efficient to do so ([[library_class:STACK|&amp;lt;tt&amp;gt;STACK&amp;lt;/tt&amp;gt;]] shares the efficient implementation of [[library_class:FAST_ARRAY|&amp;lt;tt&amp;gt;FAST_ARRAY&amp;lt;/tt&amp;gt;]] and [[library_class:QUEUE|&amp;lt;tt&amp;gt;QUEUE&amp;lt;/tt&amp;gt;]] inserts [[library_class:RING_ARRAY|&amp;lt;tt&amp;gt;RING_ARRAY&amp;lt;/tt&amp;gt;]]).&lt;br /&gt;
* Improved memory usage for classes [[library_class:LINKED_LIST|&amp;lt;tt&amp;gt;LINKED_LIST&amp;lt;/tt&amp;gt;]], [[library_class:TWO_WAY_LINKED_LIST|&amp;lt;tt&amp;gt;TWO_WAY_LINKED_LIST&amp;lt;/tt&amp;gt;]], [[library_class:AVL_SET|&amp;lt;tt&amp;gt;AVL_SET&amp;lt;/tt&amp;gt;]], [[library_class:AVL_DICTIONARY|&amp;lt;tt&amp;gt;AVL_DICTIONARY&amp;lt;/tt&amp;gt;]], [[library_class:HASHED_SET|&amp;lt;tt&amp;gt;HASHED_SET&amp;lt;/tt&amp;gt;]] and [[library_class:HASHED_DICTIONARY|&amp;lt;tt&amp;gt;HASHED_DICTIONARY&amp;lt;/tt&amp;gt;]]. Free cells are automatically recycled between various instances of the same generic derivation. Thoses classes are now using our [[library_class:WEAK_REFERENCE|&amp;lt;tt&amp;gt;WEAK_REFERENCE&amp;lt;/tt&amp;gt;]] class silently.&lt;br /&gt;
* Removed obsolete class &amp;lt;tt&amp;gt;BIT&amp;lt;/tt&amp;gt;. Now, just use existing bit operations from [[library_class:INTEGER_8|&amp;lt;tt&amp;gt;INTEGER_8&amp;lt;/tt&amp;gt;]], [[library_class:INTEGER_16|&amp;lt;tt&amp;gt;INTEGER_16&amp;lt;/tt&amp;gt;]], [[library_class:INTEGER_32|&amp;lt;tt&amp;gt;INTEGER_32&amp;lt;/tt&amp;gt;]], &amp;lt;tt&amp;gt;INTEGER&amp;lt;/tt&amp;gt;, [[library_class:INTEGER_64|&amp;lt;tt&amp;gt;INTEGER_64&amp;lt;/tt&amp;gt;]] or, for very long sequences of bits, the completely revisited [[library_class:BIT_STRING|&amp;lt;tt&amp;gt;BIT_STRING&amp;lt;/tt&amp;gt;]] class.&lt;br /&gt;
* 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!&lt;br /&gt;
* 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:&lt;br /&gt;
        3.to_string &lt;br /&gt;
        3.5.print_on(io) &lt;br /&gt;
        &amp;quot;foo&amp;quot;.print_on(io) &lt;br /&gt;
* A new network library has been recently added. This is brand new work which is still in progress. See SmartEiffel/lib/net for details.&lt;br /&gt;
* The old Eiffel strip expression is no longer supported.&lt;br /&gt;
&lt;br /&gt;
=== Release 2.0 [Hercule] - Monday September 27th, 2004 ===&lt;br /&gt;
&lt;br /&gt;
Actually, this new 2.0 release is the beginning of a new era in SmartEiffel's life!&lt;br /&gt;
&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
More details about changes from 1.1:&lt;br /&gt;
&lt;br /&gt;
* Very large systems are handled far more efficiently (but maybe at a cost for smaller systems).&lt;br /&gt;
* The new non-conforming inheritance mechanism is now implemented. For code portatbility, we decided to stick with the &amp;quot;inherit&amp;quot; keyword for conforming parents. So just start your class as usual. Then, to describe the non-conforming parents, just use the &amp;quot;insert&amp;quot; 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 &amp;quot;select&amp;quot; clause (you'll be warned by the compiler). Also keep in mind that when a class has no &amp;quot;inherit&amp;quot; clause and no &amp;quot;insert&amp;quot; clause, the default insert [[library_class:ANY|&amp;lt;tt&amp;gt;ANY&amp;lt;/tt&amp;gt;]] 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.&lt;br /&gt;
* Repeated inheritance is now correctly handled.&lt;br /&gt;
* The optimizer is rewritten and can do more optimizations.&lt;br /&gt;
* 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).&lt;br /&gt;
* 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 [[library_class:NATIVE_ARRAY|&amp;lt;tt&amp;gt;NATIVE_ARRAY&amp;lt;/tt&amp;gt;]]s). Command such as ''p ..1'' is useful to get another element of the array or another attribute of the same object.&lt;br /&gt;
* Dead code is now checked, which explains the compiler takes more time and memory.&lt;br /&gt;
* 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 &amp;quot;good&amp;quot; cluster.&lt;br /&gt;
The new organization splits the classes by logical topics. Note that each cluster may contain two special clusters: &amp;quot;low_level&amp;quot;, containing classes that you might use if you need better performance (generally when you build some utility or library classes); &amp;quot;internal&amp;quot; containing support classes, and not meant to be used directly.&lt;br /&gt;
Now, the organization itself:&lt;br /&gt;
** &amp;quot;abilities&amp;quot; contains the &amp;quot;able&amp;quot; classes ([[library_class:COMPARABLE|&amp;lt;tt&amp;gt;COMPARABLE&amp;lt;/tt&amp;gt;]], [[library_class:HASHABLE|&amp;lt;tt&amp;gt;HASHABLE&amp;lt;/tt&amp;gt;]], and so on);&lt;br /&gt;
** &amp;quot;io&amp;quot; contains the input-out classes; this cluster has but changed from the old one (see below for more details);&lt;br /&gt;
** &amp;quot;iterator&amp;quot; still contains the iterator on storage classes (see the &amp;quot;storage&amp;quot; cluster);&lt;br /&gt;
** &amp;quot;kernel&amp;quot; contains the few general-purpose which could not be put in other clusters, and are quite mandatory for the compiler to work;&lt;br /&gt;
** &amp;quot;numeric&amp;quot; contains all the classes that can be use to manipulate numbers; you will find here &amp;lt;tt&amp;gt;INTEGER&amp;lt;/tt&amp;gt;s, &amp;lt;tt&amp;gt;REAL&amp;lt;/tt&amp;gt;s, but also [[library_class:NUMBER|&amp;lt;tt&amp;gt;NUMBER&amp;lt;/tt&amp;gt;]]s (the infinite-precision integers); This cluster also includes the new [[library_class:MUTABLE_BIG_INTEGER|&amp;lt;tt&amp;gt;MUTABLE_BIG_INTEGER&amp;lt;/tt&amp;gt;]] class which is an efficient tools for fast integer number crunching.&lt;br /&gt;
** &amp;quot;random&amp;quot; contains the pseudo-random number generation classes;&lt;br /&gt;
** &amp;quot;scoop&amp;quot; contains the SCOOP utilities (not that SCOOP works better than in SE 1.1...);&lt;br /&gt;
** &amp;quot;storage&amp;quot; contains all the classes that store data: [[library_class:COLLECTION|&amp;lt;tt&amp;gt;COLLECTION&amp;lt;/tt&amp;gt;]], [[library_class:DICTIONARY|&amp;lt;tt&amp;gt;DICTIONARY&amp;lt;/tt&amp;gt;]], [[library_class:SET|&amp;lt;tt&amp;gt;SET&amp;lt;/tt&amp;gt;]]... (Note: see below for more details on [[library_class:DICTIONARY|&amp;lt;tt&amp;gt;DICTIONARY&amp;lt;/tt&amp;gt;]] and [[library_class:SET|&amp;lt;tt&amp;gt;SET&amp;lt;/tt&amp;gt;]]);&lt;br /&gt;
** &amp;quot;string&amp;quot; contains the [[library_class:STRING|&amp;lt;tt&amp;gt;STRING&amp;lt;/tt&amp;gt;]] and related classes (also Unicode strings);&lt;br /&gt;
** &amp;quot;time&amp;quot; contains the [[library_class:TIME|&amp;lt;tt&amp;gt;TIME&amp;lt;/tt&amp;gt;]]-related classes;&lt;br /&gt;
** &amp;quot;vision&amp;quot; contains the vision graphical library classes;&lt;br /&gt;
** &amp;quot;sorting&amp;quot; contains most common algorithm to sort [[library_class:COLLECTION|&amp;lt;tt&amp;gt;COLLECTION&amp;lt;/tt&amp;gt;]]s;&lt;br /&gt;
** &amp;quot;misc&amp;quot; contains some useful classes that cannot be easily put elsewhere short of having their own cluster.&lt;br /&gt;
&lt;br /&gt;
* [[library_class:DICTIONARY|&amp;lt;tt&amp;gt;DICTIONARY&amp;lt;/tt&amp;gt;]] class is now deferred and has no more generic constraint. The library now includes two different implementations.&lt;br /&gt;
** The [[library_class:HASHED_DICTIONARY|&amp;lt;tt&amp;gt;HASHED_DICTIONARY&amp;lt;/tt&amp;gt;]] implementation is the hash_code based implementation (the generic constraint for [[library_class:HASHED_DICTIONARY|&amp;lt;tt&amp;gt;HASHED_DICTIONARY&amp;lt;/tt&amp;gt;]] is [[library_class:HASHABLE|&amp;lt;tt&amp;gt;HASHABLE&amp;lt;/tt&amp;gt;]]).&lt;br /&gt;
** The [[library_class:AVL_DICTIONARY|&amp;lt;tt&amp;gt;AVL_DICTIONARY&amp;lt;/tt&amp;gt;]] implementation is a balanced tree based implementation (the generic constraint for this implemetation is [[library_class:COMPARABLE|&amp;lt;tt&amp;gt;COMPARABLE&amp;lt;/tt&amp;gt;]]).&lt;br /&gt;
You should update all your create instructions by selecting [[library_class:HASHED_DICTIONARY|&amp;lt;tt&amp;gt;HASHED_DICTIONARY&amp;lt;/tt&amp;gt;]] or [[library_class:AVL_DICTIONARY|&amp;lt;tt&amp;gt;AVL_DICTIONARY&amp;lt;/tt&amp;gt;]]. In order to ease this code update, the compiler will warn you that [[library_class:HASHED_DICTIONARY|&amp;lt;tt&amp;gt;HASHED_DICTIONARY&amp;lt;/tt&amp;gt;]] is selected by default. Please update your code because this is a temporary warning of the compiler.&lt;br /&gt;
&lt;br /&gt;
* Some more [[library_class:DICTIONARY|&amp;lt;tt&amp;gt;DICTIONARY&amp;lt;/tt&amp;gt;]] classes were also added (among them: [[library_class:DOUBLE_DICTIONARY|&amp;lt;tt&amp;gt;DOUBLE_DICTIONARY&amp;lt;/tt&amp;gt;]] can be of interest).&lt;br /&gt;
* The [[library_class:SET|&amp;lt;tt&amp;gt;SET&amp;lt;/tt&amp;gt;]] class has undergone the same transformation ([[library_class:HASHED_SET|&amp;lt;tt&amp;gt;HASHED_SET&amp;lt;/tt&amp;gt;]] and [[library_class:AVL_SET|&amp;lt;tt&amp;gt;AVL_SET&amp;lt;/tt&amp;gt;]]).&lt;br /&gt;
* A [[library_class:RING_ARRAY|&amp;lt;tt&amp;gt;RING_ARRAY&amp;lt;/tt&amp;gt;]] class was added. This [[library_class:COLLECTION|&amp;lt;tt&amp;gt;COLLECTION&amp;lt;/tt&amp;gt;]] is quite similar to an [[library_class:ARRAY|&amp;lt;tt&amp;gt;ARRAY&amp;lt;/tt&amp;gt;]] that performs well for all queue operations (add|remove)_(first|last) thanks to its circular internal representation.&lt;br /&gt;
* The [[library_class:TUPLE|&amp;lt;tt&amp;gt;TUPLE&amp;lt;/tt&amp;gt;]] class is now defined in Eiffel. Thanks to this new source code implementation, we have added the definition for the `item' feature definition.&lt;br /&gt;
* The [[library_class:ROUTINE|&amp;lt;tt&amp;gt;ROUTINE&amp;lt;/tt&amp;gt;]], [[library_class:PROCEDURE|&amp;lt;tt&amp;gt;PROCEDURE&amp;lt;/tt&amp;gt;]] and [[library_class:FUNCTION|&amp;lt;tt&amp;gt;FUNCTION&amp;lt;/tt&amp;gt;]] classes are also defined in Eiffel.&lt;br /&gt;
* Added a new [[library_class:WEAK_REFERENCE|&amp;lt;tt&amp;gt;WEAK_REFERENCE&amp;lt;/tt&amp;gt;]] class with the appropriate garbage collector support.&lt;br /&gt;
* Split has been improved in order to reduce C files compilation after a change.&lt;br /&gt;
* Added a new &amp;quot;-profile&amp;quot; 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:&lt;br /&gt;
** the profiling output is written in the &amp;quot;profile.se&amp;quot; file;&lt;br /&gt;
** for each entry, the &amp;quot;own&amp;quot; and &amp;quot;cumul&amp;quot; times, total and average, are given; also, the caller features and the called ones are displayed;&lt;br /&gt;
** 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);&lt;br /&gt;
** the Eiffel called features are sorted by decreasing number of calls;&lt;br /&gt;
** 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).&lt;br /&gt;
**e that:&lt;br /&gt;
** profiled programs take MUCH longer to execute (a lot of, hem, time, is spent in the kernel merely to, hem, track time...)&lt;br /&gt;
** externals are not profiled; they are accounted in the &amp;quot;own&amp;quot; time of their caller;&lt;br /&gt;
** inlined features are not profiled either (only in -boost)&lt;br /&gt;
** 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.&lt;br /&gt;
**s to Lothar Scholz for having the idea in the first place.&lt;br /&gt;
**ped the input-output system to make it more general and more extensible. Provided features:&lt;br /&gt;
** now streams can be &amp;quot;filtered&amp;quot;. It means you can nest them to bring extra features such as encoding or encryption (among many other things)&lt;br /&gt;
** 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.&lt;br /&gt;
See also the cluster description on the SmartEiffel site.&lt;br /&gt;
* Visitors revisited. The architecture is now ready to be used (in 1.1 it was but a draft).&lt;br /&gt;
&lt;br /&gt;
== SmartEiffel (release 1.1 down to release 1.0) ==&lt;br /&gt;
&lt;br /&gt;
=== Release 1.1 [Charlemagne] - Monday June 16th, 2003 ===&lt;br /&gt;
&lt;br /&gt;
* Thoroughly changed the configuration handling. The new scheme is more complete, and much more flexible.&lt;br /&gt;
** 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 &amp;lt;Enter&amp;gt; key. For more informations about installation and all new configuration capabilities, please have a look to install page.&lt;br /&gt;
** Added the -c_mode option, in conjunction with the new configuration handling.&lt;br /&gt;
** Added a -loadpath flag to read an extra loadpath.&lt;br /&gt;
* 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.&lt;br /&gt;
* Added a small expression evaluator to sedb. One can now display the attributes of the objects on the stack. Be sure to read the &amp;quot;more-help&amp;quot; section on data display (for once functions, the result is unavailable if it has not yet been called).&lt;br /&gt;
* 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.&lt;br /&gt;
* Implemented inspect on [[library_class:STRING|&amp;lt;tt&amp;gt;STRING&amp;lt;/tt&amp;gt;]]s.&lt;br /&gt;
* 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!&lt;br /&gt;
* [[pretty]] significantly updated.&lt;br /&gt;
* The C files produced by the compiler now should work on any platform, even with the GC turned on.&lt;br /&gt;
* Added Unicode support in [[library_class:STRING|&amp;lt;tt&amp;gt;STRING&amp;lt;/tt&amp;gt;]]s (see the SmartEiffel/tutorial/unicode and SmartEiffel/lib/unicode directories).&lt;br /&gt;
* Added new abstract class [[library_class:FILE|&amp;lt;tt&amp;gt;FILE&amp;lt;/tt&amp;gt;]] and new features in class [[library_class:DIRECTORY|&amp;lt;tt&amp;gt;DIRECTORY&amp;lt;/tt&amp;gt;]].&lt;br /&gt;
* Added hexadecimal notation for &amp;lt;tt&amp;gt;INTEGER&amp;lt;/tt&amp;gt; constants, [[library_class:CHARACTER|&amp;lt;tt&amp;gt;CHARACTER&amp;lt;/tt&amp;gt;]] constants and inside manifest [[library_class:STRING|&amp;lt;tt&amp;gt;STRING&amp;lt;/tt&amp;gt;]]s as well. See the example in file SmartEiffel/tutorial/hexadecimal.e for more information.&lt;br /&gt;
* Added agent facilities on [[library_class:STRING|&amp;lt;tt&amp;gt;STRING&amp;lt;/tt&amp;gt;]] and [[library_class:UNICODE_STRING|&amp;lt;tt&amp;gt;UNICODE_STRING&amp;lt;/tt&amp;gt;]] (warning, those facilities are non-standard extensions).&lt;br /&gt;
* 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.&lt;br /&gt;
* Moved the bin_c directory to install/germ.&lt;br /&gt;
* Reorganized the SmartEiffel/sys/runtime directory:&lt;br /&gt;
** Clearly separated C and Java backend helpers&lt;br /&gt;
** 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&lt;br /&gt;
* Added the -compact option which produces much more compact C code.&lt;br /&gt;
* same_type from &amp;lt;tt&amp;gt;GENERAL&amp;lt;/tt&amp;gt; is now obsolete. Use same_dynamic_type instead.&lt;br /&gt;
* Obsoleted operators &amp;quot;and&amp;quot;, &amp;quot;or&amp;quot;, &amp;quot;xor&amp;quot; and &amp;quot;not&amp;quot; for &amp;lt;tt&amp;gt;INTEGER&amp;lt;/tt&amp;gt;s, and added prefix operator &amp;quot;~&amp;quot;.&lt;br /&gt;
* [[library_class:MEMORY|&amp;lt;tt&amp;gt;MEMORY&amp;lt;/tt&amp;gt;]].allocated_bytes is more accurate.&lt;br /&gt;
* Generated object files are now removed before calling C compiler.&lt;br /&gt;
* Various bug fixes and improvements (see details in the SmartZilla bug tracker).&lt;br /&gt;
&lt;br /&gt;
=== Release 1.0 - Friday December 6th, 2002 ===&lt;br /&gt;
&lt;br /&gt;
This is the very first release with the name SmartEiffel!&lt;br /&gt;
(Previous releases were named SmallEiffel.)&lt;br /&gt;
&lt;br /&gt;
The main changes between SmallEiffel -0.74 and SmartEiffel 1.0 are:&lt;br /&gt;
&lt;br /&gt;
* Name changed from SmallEiffel to SmartEiffel!&lt;br /&gt;
* Version numbering: now, versions are numbered from 1.0 beta 1 upward&lt;br /&gt;
* 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).&lt;br /&gt;
* The new Reference keyword is now implemented. Use reference &amp;lt;tt&amp;gt;INTEGER&amp;lt;/tt&amp;gt; instead of &amp;lt;tt&amp;gt;INTEGER_REF&amp;lt;/tt&amp;gt;. &amp;lt;tt&amp;gt;INTEGER_REF&amp;lt;/tt&amp;gt; will become obsolete.&lt;br /&gt;
* The new [[library_class:INTEGER_GENERAL|&amp;lt;tt&amp;gt;INTEGER_GENERAL&amp;lt;/tt&amp;gt;]], [[library_class:INTEGER_8|&amp;lt;tt&amp;gt;INTEGER_8&amp;lt;/tt&amp;gt;]], [[library_class:INTEGER_16|&amp;lt;tt&amp;gt;INTEGER_16&amp;lt;/tt&amp;gt;]], [[library_class:INTEGER_32|&amp;lt;tt&amp;gt;INTEGER_32&amp;lt;/tt&amp;gt;]], [[library_class:INTEGER_64|&amp;lt;tt&amp;gt;INTEGER_64&amp;lt;/tt&amp;gt;]] types are now implemented.&lt;br /&gt;
* After long discussions, we have decided to stick to our decision for the type of integer constants (as an example, 127 is of type [[library_class:INTEGER_8|&amp;lt;tt&amp;gt;INTEGER_8&amp;lt;/tt&amp;gt;]] and 128 is of type [[library_class:INTEGER_16|&amp;lt;tt&amp;gt;INTEGER_16&amp;lt;/tt&amp;gt;]] 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 &amp;lt;tt&amp;gt;&amp;lt;&amp;lt;...&amp;gt;&amp;gt;&amp;lt;/tt&amp;gt; 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 :)&lt;br /&gt;
* 64-bit architectures supported.&lt;br /&gt;
* Internal improvements in the type system (better C code produced)&lt;br /&gt;
* Buffered I/O. You may get big improvements on programs performing lots of file reading or writing ([[library_class:STD_INPUT|&amp;lt;tt&amp;gt;STD_INPUT&amp;lt;/tt&amp;gt;]] and [[library_class:STD_OUTPUT|&amp;lt;tt&amp;gt;STD_OUTPUT&amp;lt;/tt&amp;gt;]] are also buffered).&lt;br /&gt;
* The short command now has the &amp;quot;-client&amp;quot; option (see short command manual for more details).&lt;br /&gt;
* The &amp;quot;tcc&amp;quot; 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.&lt;br /&gt;
* New bug reporting tool. Now you can see all known bugs and their state. Allways refers to the bug report page on SmartEiffel site.&lt;br /&gt;
* As suggested on our mailing list, there are now two new classes in order to remove some definitions from &amp;lt;tt&amp;gt;GENERAL&amp;lt;/tt&amp;gt; (see class [[library_class:MATH_CONSTANTS|&amp;lt;tt&amp;gt;MATH_CONSTANTS&amp;lt;/tt&amp;gt;]] and class [[library_class:CHARACTER_CONSTANTS|&amp;lt;tt&amp;gt;CHARACTER_CONSTANTS&amp;lt;/tt&amp;gt;]]).&lt;br /&gt;
* 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 &amp;gt;&amp;gt; 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.&lt;br /&gt;
* Type mark must now follow the Precursor keyword.&lt;br /&gt;
* Fixed the bug recently reported by Wolfgang Jansen. (Well isolated bug report, thanks!) This bug was related to expanded objects and the twin feature.&lt;br /&gt;
* Fixed the -manifest_string_trace bug recently reported by Alexis Saettler. (Well isolated bug as well, thanks!)&lt;br /&gt;
* 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 &amp;quot;like Current&amp;quot; type mark into some hard-coded type mark (e.g. &amp;quot;FOO&amp;quot;). 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 [[library_class:NUMBER|&amp;lt;tt&amp;gt;NUMBER&amp;lt;/tt&amp;gt;]] library implementation of &amp;lt;tt&amp;gt;is_equal&amp;lt;/tt&amp;gt; (''like Current'' is now changed to [[library_class:NUMBER|&amp;lt;tt&amp;gt;NUMBER&amp;lt;/tt&amp;gt;]]) and changed the postcondition of &amp;lt;tt&amp;gt;is_equal&amp;lt;/tt&amp;gt; in &amp;lt;tt&amp;gt;GENERAL&amp;lt;/tt&amp;gt; (ensure assertion relaxed to no longer call standard_is_equal).&lt;br /&gt;
* 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/&lt;br /&gt;
* New Cygwin directory notation is now supported. Recent Cygwin systems will be automatically detected while install.&lt;br /&gt;
* Other &amp;quot;secret&amp;quot; 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.&lt;br /&gt;
* Improved internal lab process to more easily provide professional support contracts (see premium support for more details).&lt;br /&gt;
* New functions in [[library_class:COLLECTION_SORTER|&amp;lt;tt&amp;gt;COLLECTION_SORTER&amp;lt;/tt&amp;gt;]] classes using dichotomic search.&lt;br /&gt;
* GC support for the Elate system updated.&lt;br /&gt;
* Various bug fixes and improvements.&lt;br /&gt;
&lt;br /&gt;
== SmallEiffel (all releases of SmallEiffel) ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.74 - Tuesday May 7th, 2002 ===&lt;br /&gt;
&lt;br /&gt;
* The new agent mechanism is now implemented. See tutorial/agent directory for examples.&lt;br /&gt;
* 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.&lt;br /&gt;
* The new create instruction/expression is now fully implemented and correctly pretty-printed. The new default_create feature mechanism is also implemented.&lt;br /&gt;
* 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.&lt;br /&gt;
* Added examples for the new TUPLE type in directory tutorial/tuple.&lt;br /&gt;
* 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.)&lt;br /&gt;
* The external C interface is now compatible with the new ETL definition. (See directory tutorial/external/C for examples.)&lt;br /&gt;
* Added flag -high_memory_compiler to compile_to_c.&lt;br /&gt;
* 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.)&lt;br /&gt;
* 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.&lt;br /&gt;
* Added feature connect_append_to both in class TEXT_FILE_WRITE and BINARY_FILE_WRITE.&lt;br /&gt;
* 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.&lt;br /&gt;
* Added feature size_of and feature last_change_of in class FILE_TOOLS (see also tutorial/basic_time for examples).&lt;br /&gt;
* Added feature append_decimal_in and feature to_decimal in class NUMBER as well as a new example the tutorial/number directory.&lt;br /&gt;
* Added feature add both in class COLLECTION_SORTER and in class REVERSE_COLLECTION_SORTER.&lt;br /&gt;
* Added feature reference_at in class DICTIONARY.&lt;br /&gt;
* Added feature infix &amp;quot;+&amp;quot; in class POINTER.&lt;br /&gt;
* Various bug fixes and improvements.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.75 - Thursday July 16th, 2001 ===&lt;br /&gt;
&lt;br /&gt;
* 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.&lt;br /&gt;
* 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.&lt;br /&gt;
* Added a traditional -help flag for all commands to print a summary of available options.&lt;br /&gt;
* In ACE files as well as in &amp;quot;loadpath.se&amp;quot; files the ${SmallEiffelDirectory} environment variable is automatically defined using the value of the ${SmallEiffel} environment variable.&lt;br /&gt;
* 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.&lt;br /&gt;
* The new TUPLE type is now implemented.&lt;br /&gt;
* Added class TIME_IN_GERMAN to handle date and time in German. See tutorial/basic_time for examples.&lt;br /&gt;
* Feature is_equal of class COMPARABLE is now ELKS compatible.&lt;br /&gt;
* Added feature internal_key in class DICTIONARY.&lt;br /&gt;
* Various bug fixes and improvements.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.76 - Saturday November 11th, 2000 ===&lt;br /&gt;
&lt;br /&gt;
* 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.&lt;br /&gt;
* 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).&lt;br /&gt;
* Added feature reindex in class ARRAY.&lt;br /&gt;
* Added a brand new class SET[E-&amp;gt;HASHABLE].&lt;br /&gt;
* Added support for the Elate (Amiga) system as well as the vpcc C compiler.&lt;br /&gt;
* Added support for the QNX real time operating system.&lt;br /&gt;
* For feature dispose of class MEMORY (as well as redefinitions), the class invariant is no longer triggered.&lt;br /&gt;
* Added features atan2 and pow both in class REAL and DOUBLE.&lt;br /&gt;
* Internal implementation of BASIC_TIME revisited (using now a double for memorization).&lt;br /&gt;
* Implementation of class DICTIONARY completely revisited. Also added features add, item_map_in and key_map_in in the new class DICTIONARY.&lt;br /&gt;
* 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).&lt;br /&gt;
* Various bug fixes and improvements.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.77 - Saturday February 12th, 2000 ===&lt;br /&gt;
&lt;br /&gt;
* 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, ...&lt;br /&gt;
  To install SmallEiffel under some UNIX like system, just type make in the SmallEiffel directory.&lt;br /&gt;
  To install SmallEiffel under Windows, just run install.exe.&lt;br /&gt;
  On other systems, C compile and run the install.c file.&lt;br /&gt;
* 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.&lt;br /&gt;
* Added NUMBER library, for infinite precision and infinitely large numbers. See tutorial/number for examples.&lt;br /&gt;
* Added ITERATOR library, for external iterators on data structures. See tutorial/iterator for examples.&lt;br /&gt;
* 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).&lt;br /&gt;
* 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).&lt;br /&gt;
* Added class BIT_STRING for very large bit sequences, with reference semantics.&lt;br /&gt;
* 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).&lt;br /&gt;
* 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.&lt;br /&gt;
* Added feature to_hexadecimal and feature to_hexadecimal_in in class INTEGER.&lt;br /&gt;
* Improved incremental recompilation of the generated C code (also fixed a very old bug in incrementality).&lt;br /&gt;
* Exceptions handling: the default_rescue feature is now supported.&lt;br /&gt;
* Various bug fixes and improvements (type inference score increased, ...).&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.78 - Saturday June 05th, 1999 ===&lt;br /&gt;
&lt;br /&gt;
* New -html2 flag for command short generates a colorized HTML short form for classes.&lt;br /&gt;
* The garbage collector now takes into account feature dispose of class MEMORY for reference objects.&lt;br /&gt;
* Obsolete classes (obsolete keyword) now supported.&lt;br /&gt;
* Assertion tags are now displayed when an assertion fails.&lt;br /&gt;
* Added environment variable in loadpath files. Syntax: ${SOME_VAR}&lt;br /&gt;
* Added the -no_style_warning flag to suppress warnings when the recommended styles guidelines for Eiffel are not strictly followed.&lt;br /&gt;
* Added the -version flag to show SmallEiffel's version.&lt;br /&gt;
* 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.&lt;br /&gt;
* Class LINKED_LIST now replaces obsolete class LINK_LIST (simple renaming).&lt;br /&gt;
  Class TWO_WAY_LINKED_LIST now replaces obsolete class LINK2_LIST (simple renaming).&lt;br /&gt;
* Fixed &amp;quot;implicit renaming&amp;quot; bug.&lt;br /&gt;
* Cleaned all source code of tabulations at beginning of line (made code look ugly when using an editor whose tabs were not 8).&lt;br /&gt;
* Some new ELKS'95 features implemented.&lt;br /&gt;
* Validity rule VEEN fixed.&lt;br /&gt;
* Added class COLLECTION_SORTER and REVERSE_COLLECTION_SORTER to the library.&lt;br /&gt;
* Fixed file renaming portability bug (&amp;quot;.d files bug&amp;quot;).&lt;br /&gt;
* Validity rule VCFG.1 is now enforced.&lt;br /&gt;
* Validity rule VAPE is now enforced.&lt;br /&gt;
* Classes mentioned in a cecil.se file are now automatically made live. Makes it easier to link with external libraries.&lt;br /&gt;
* Various other bug fixes.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.79 - Tuesday December 22nd, 1998 ===&lt;br /&gt;
&lt;br /&gt;
* The new Eiffel construct Precursor as described OOSC2 is now implemented.&lt;br /&gt;
* The Eiffel expression strip is now implemented.&lt;br /&gt;
* Nested loadpath files now allowed.&lt;br /&gt;
* Extended anchored definition to accept infix and prefix feature names. For example, this kind of declaration is now accepted :      foo: like infix &amp;quot;+&amp;quot;.&lt;br /&gt;
* Classes COLLECTION2, ARRAY2 and FIXED_ARRAY2 of lib/base completely revisited.&lt;br /&gt;
* Fixed a bug related to calls of the form f.g.h; on expanded objects.&lt;br /&gt;
* Fixed a bug related to inheritance of generic classes.&lt;br /&gt;
* Fixed bugs related to assertions checking in case of exceptions (rescue clause, retry). Improved cycle detection in assertions.&lt;br /&gt;
* Fixed bug in GC related to recycling of &amp;quot;monsters&amp;quot; (very large resizable objets).&lt;br /&gt;
* Fixed an incredible bug in the implementation of the like Current type mark. ;-).&lt;br /&gt;
* Fixed many others bugs ($ operator, GC for alpha DEC, ...).&lt;br /&gt;
* System customization file for the BeOS system added in the &amp;quot;sys&amp;quot; sub-directory (more on system customization).&lt;br /&gt;
* Contents of the environment variable SmallEiffel must be now set with the absolute path of the file &amp;quot;system.se&amp;quot; which is in the sub-directory &amp;quot;sys&amp;quot; of the installation directory.&lt;br /&gt;
  Under a UNIX-like system, the value of the SmallEiffel environment variable may be for example: /usr/lib/SmallEiffel/sys/system.se&lt;br /&gt;
  Commands are also more robust when this environment variable contains non-alphanumeric characters.&lt;br /&gt;
* No more ensure assertion in GENERAL.get_environment_variable.&lt;br /&gt;
* Commands compile_to_jvm and print_jvm_class completely revisited. Java byte-code can be now used with the -verify Java option).&lt;br /&gt;
* Validity rule VDRD.6 is now enforced.&lt;br /&gt;
* Balancing rule (automatic promotion) for INTEGER, DOUBLE and REAL is now implemented.&lt;br /&gt;
* Recursive once routines now work correctly.&lt;br /&gt;
* Unmodified generated C files are not touched anymore.&lt;br /&gt;
* Assertions correctly checked for all external C routines.&lt;br /&gt;
* Exception handling now works when an exception occurs in external C code.&lt;br /&gt;
* Cleaned the compiler and decreased its memory footprint.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.80 - Thursday July 9th, 1998 ===&lt;br /&gt;
&lt;br /&gt;
* Exception handling implemented. Class EXCEPTIONS added in lib/kernel.&lt;br /&gt;
* 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).&lt;br /&gt;
* 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.&lt;br /&gt;
* Behavior of compilation flag -trace of command compile_to_c changed to allow step-by-step execution (embryo of Eiffel source code debugger).&lt;br /&gt;
* Feature ARRAY.resize completely revisited (added two features in class NATIVE_ARRAY: clear and move).&lt;br /&gt;
* Garbage Collector optimized (the GC should be more agressive and some benchmarks are included in directory SmallEiffel/misc/benchmarks/gc/*/bench.e).&lt;br /&gt;
* Associativity of infix operator &amp;quot;^&amp;quot; is now correctly handled.&lt;br /&gt;
* Fixed bugs in PLATFORM for Minimum_double, Minimum_real and Minimum_character_code.&lt;br /&gt;
* Fixed some others bugs about export rules, about expanded objects with expanded attributes.&lt;br /&gt;
* Fixed bugs in pretty.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.81 - Thursday April 9th, 1998 ===&lt;br /&gt;
&lt;br /&gt;
* 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).&lt;br /&gt;
* 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.)&lt;br /&gt;
  Added flag -clean which removes all the C and object files of the system. (This corresponds to the old default behavior.)&lt;br /&gt;
* Fixed a bug related to buffered input under Windows/MS VC.&lt;br /&gt;
* Fixed a bug in misc/INSTALL.SH script.&lt;br /&gt;
* Added require is_connected for all features put_* of class OUTPUT_STREAM.&lt;br /&gt;
* Fixed a bug in command short (require/ensure assertion of deferred routines are now printed).&lt;br /&gt;
* Added one useful hook for mode -html1 in command short (see hook Mcn).&lt;br /&gt;
* Added directory SmallEiffel/sys/runtime which contains the C runtime.&lt;br /&gt;
* Fixed a bug about instanciation of class ANY itself (not so common !).&lt;br /&gt;
* Fixed a bug about inlining of operator $.&lt;br /&gt;
* Fixed a bug about cyclic anchored definitions.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.82 - Friday January 16th, 1998 ===&lt;br /&gt;
&lt;br /&gt;
* Became the official GNU Eiffel compiler.&lt;br /&gt;
* Added first HTML mode to command short. Flag -html1. Thanks to Matthias Klause.&lt;br /&gt;
* Fixed bugs in command pretty.&lt;br /&gt;
* It is now possible to rename/redefine external &amp;quot;SmallEiffel&amp;quot; features.&lt;br /&gt;
* Files *.hlp of directory SmallEiffel/man no longer exists. All the documentation is now in *.html files plus corresponding automatically generated *.txt files.&lt;br /&gt;
* Manifest arrays creation has been optimized.&lt;br /&gt;
* Validity rule VHRC.2 is now enforced.&lt;br /&gt;
* Fixed bugs about export clause.&lt;br /&gt;
* Feature GENERAL.hash_code no longer exists. Added ELKS class HASHABLE in order to be compatible with others compilers/libraries.&lt;br /&gt;
* Fixed a bug in pre-computed once functions.&lt;br /&gt;
* Fixed a bug in REAL/DOUBLE keybord input.&lt;br /&gt;
* Reintroduced left hand side cast in C code for better performances (allowed by the C ANSI standard).&lt;br /&gt;
* Obsolete features (obsolete keyword) now generate a Warning.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.83 - Friday September 19th, 1997 ===&lt;br /&gt;
&lt;br /&gt;
* Added command short to the distribution.&lt;br /&gt;
* Added directory contrib in the distribution. This directory contains some scripts to use gdb as source level debugger for SmallEiffel.&lt;br /&gt;
* Added flag -no_warning to commands: compile_to_c, pretty, and compile_to_jvm.&lt;br /&gt;
* Added flag -case_insensitive to command compile_to_c.&lt;br /&gt;
* Fixed a bug for inherit/select.&lt;br /&gt;
* Fixed a bug for some pre-computed once function.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.84 - Monday August 18th, 1997 ===&lt;br /&gt;
&lt;br /&gt;
* Class BIT is now implemented in Java bytecode (command compile_to_jvm).&lt;br /&gt;
* Added external specification to call Java code (when using compile_to_jvm).&lt;br /&gt;
* 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.&lt;br /&gt;
* 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).&lt;br /&gt;
* Added STRING.substring_index (from ELKS written by Fridtjof SIEBERT).&lt;br /&gt;
* 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).&lt;br /&gt;
* Changed the behavior of end_of_input of INPUT_STREAM (this flag is true _after_ last character has been read).&lt;br /&gt;
* Fixed a bug in manifest arrays (mixed objects including Void).&lt;br /&gt;
* Fixed a bug dealing with some statically computed expressions.&lt;br /&gt;
* Fixed a bug in repeated inheritance.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.85 - Thursday July 3rd, 1997 ===&lt;br /&gt;
&lt;br /&gt;
* First beta-release of commands compile_to_jvm and print_jvm_class!&lt;br /&gt;
* 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.&lt;br /&gt;
* 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.&lt;br /&gt;
* Added feature to_hexadecimal and feature to_hexadecimal_in in class CHARACTER.&lt;br /&gt;
* Feature io, std_input, std_output and std_error of class GENERAL are no longer frozen.&lt;br /&gt;
* 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).&lt;br /&gt;
* Feature die_with_code of GENERAL now accepts any INTEGER code (not just predefined exit_success_code and exit_failure_code).&lt;br /&gt;
* Fixed a bug in STRING. The following expression is now true: (&amp;quot;a%/0/b&amp;quot;).count = 3&lt;br /&gt;
  Just try this on your favorite Eiffel compiler ;-)&lt;br /&gt;
* 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.&lt;br /&gt;
* Feature unread_character of class INPUT_STREAM is now implemented in Eiffel.&lt;br /&gt;
* Added OUTPUT_STREAM.put_pointer to view a POINTER.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.86 - Sunday April 13th, 1997 ===&lt;br /&gt;
&lt;br /&gt;
* All reported bugs at this time have been fixed.&lt;br /&gt;
* 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.&lt;br /&gt;
* Features BOOLEAN.infix &amp;quot;or&amp;quot; and BOOLEAN.infix &amp;quot;and&amp;quot; are now written in pure Eiffel. As a consequence, it is very important for the SmallEiffel programmer to make the distinction between BOOLEAN.infix &amp;quot;and then&amp;quot; and BOOLEAN.infix &amp;quot;and&amp;quot; (respectively for BOOLEAN.infix &amp;quot;or else&amp;quot; and BOOLEAN.infix &amp;quot;or&amp;quot;). When left-hand-side argument produces no side effect, the semi-strict operator (BOOLEAN.infix&amp;quot;and then&amp;quot;/&amp;quot;or else&amp;quot;) may run faster.&lt;br /&gt;
* Fixed REAL.sin (the old one was calling sqrt :-).&lt;br /&gt;
* Fixed a bug in INTEGER.append_in (you can now print Minimum_integer).&lt;br /&gt;
* Added feature in_range in class COMPARABLE.&lt;br /&gt;
* Result type of REAL.infix &amp;quot;^&amp;quot; is now DOUBLE for ELKS compatibility.&lt;br /&gt;
* Feature remove is now implemented in all subclasses of COLLECTION (i.e. ARRAY, FIXED_ARRAY, LINK_LIST and LINK2_LIST).&lt;br /&gt;
* Added feature add for all subclasses of COLLECTION.&lt;br /&gt;
* Conversion DOUBLE/STRING : ANSI C sscanf and sprintf is now used to avoid loss of precision.&lt;br /&gt;
* Added some more class invariant code generation when compiling in -invariant_check mode. Class invariant is now also checked before exit of a routine.&lt;br /&gt;
* Added feature file_tools in class GENERAL to ease access to class FILE_TOOLS.&lt;br /&gt;
* Changed printing format for basic *_REF classes. For example, instruction print(1); now prints 1.&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.87 - Tuesday January 7th, 1997 ===&lt;br /&gt;
&lt;br /&gt;
* Added a new flag -trace to ease debug (see man/compile_to_c file).&lt;br /&gt;
* More inlining at Eiffel level (-boost mode only).&lt;br /&gt;
* Class BIT_N completely revisited. It may be as fast as C.&lt;br /&gt;
* Added class C_ARRAY[E] to deal directly with C arrays at Eiffel level. Thus there are no more external &amp;quot;CSE&amp;quot; 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.&lt;br /&gt;
* Fixed a bug in STD_FILE_READ.read_double.&lt;br /&gt;
* Ordering of C output to increase gcc inlining.&lt;br /&gt;
* According to man/compile_to_c) , flag -debug_check now works (debug instructions are no longer generated in mode -all_check).&lt;br /&gt;
* Unused local variables removed at Eiffel level (warning added for -debug_check mode only).&lt;br /&gt;
* Default class ANY now inherits PLATFORM (as in ETL).&lt;br /&gt;
* Fixed a bug in floating-point constants.&lt;br /&gt;
* Added directory sys to customize default C compiler, default C linker and default loading path.&lt;br /&gt;
* Fixed some bugs with outside expanded types.&lt;br /&gt;
* Fixed a bug with rename/select.&lt;br /&gt;
* Redefinition of once routine is now allowed.&lt;br /&gt;
* Feature GENERAL.conforms_to is now implemented.&lt;br /&gt;
* Rule VFFD.7 is now enforced.&lt;br /&gt;
* Feature force implemented for all COLLECTION.&lt;br /&gt;
* Added conversions features CHARACTER.to_bit, INTEGER.to_bit, BIT_N.to_character and BIT_N.to_integer.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.88 - Wednesday October 30th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Fixed bugs dealing with inherit/rename/select.&lt;br /&gt;
* Added warning for missing colon in actual arguments list.&lt;br /&gt;
* Warning : INSTALL procedure has changed and you have to set manually the default loading path (see misc/INSTALL for details).&lt;br /&gt;
* Added some VMS customization.&lt;br /&gt;
* Fixed bugs when printing run-time stack.&lt;br /&gt;
* Warning added for missing colon in actual parameter list.&lt;br /&gt;
* Added flush in class STD_FILE_WRITE.&lt;br /&gt;
* No more left hand side cast in C code (because some C compilers don't like them).&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.89 - Sunday September 15th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Calling Eiffel from C is now implemented (see man/cecil) file).&lt;br /&gt;
* Object creation uses C calloc instead malloc+memset.&lt;br /&gt;
* Object creation is inlined.&lt;br /&gt;
* ARRAY/FIXED_ARRAY put and item are now inlined (-boost only).&lt;br /&gt;
* Added feature capacity and resize in FIXED_ARRAY.&lt;br /&gt;
* 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.&lt;br /&gt;
* More user's routines are inlined (-boost only).&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.90 - Friday August 23rd, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Added random number generator library (SmallEiffel/lib_rand).&lt;br /&gt;
* Added checking of assertions for external &amp;quot;CSE&amp;quot; features.&lt;br /&gt;
* Anchoring on expanded types are now allowed.&lt;br /&gt;
* Multiple level of anchoring definition allowed.&lt;br /&gt;
* Fixed a bug in STRING.from_external.&lt;br /&gt;
* Fixed a bug with mixed rename/redefine.&lt;br /&gt;
* Inheritance loop detection.&lt;br /&gt;
* Anchoring loop detection.&lt;br /&gt;
* Fixed a bug with renaming infix/prefix.&lt;br /&gt;
* Command clean also use the make suffix.&lt;br /&gt;
* Added ELKS95 sign in INTEGER/REAL/DOUBLE.&lt;br /&gt;
* Feature make is the default root feature name for compile.&lt;br /&gt;
* Optimized ARRAY.add_last and STRING.extend.&lt;br /&gt;
* Changed STRING.out (no more enclosing %&amp;quot; printed).&lt;br /&gt;
* Remove warning gcc messages for 64 bit machines (alpha/DEC).&lt;br /&gt;
* Added option -no_split for a better finalization (see man/compile_to_c) file).&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.91 - Wednesday July 24th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Incremental C compiling mode implemented (see option -c_code in help file man/compile) .&lt;br /&gt;
* Added command clean in help file man/clean.&lt;br /&gt;
* Added class FILE_TOOLS.&lt;br /&gt;
* No more empty C struct in generated C code (to avoid problems with Microsoft Windows C compiler).&lt;br /&gt;
* Fixed one more bug with conformance rule VNCG.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.92 - Saturday July 20th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Fixed some more bugs with conformance rule VNCG.&lt;br /&gt;
* Added math functions in DOUBLE/REAL (sin, cos, tan, asin, acos, atan, ... ANSI C names).&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.93 - Thursday July 18th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Fixed some more bugs with conformance rule VNCG.&lt;br /&gt;
* Type BIT is now implemented.&lt;br /&gt;
* Added ELKS 95 STRING.left_adjust and STRING.right_adjust.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.94 - Friday July 5th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Fixed some bugs with conformance rule VNCG.&lt;br /&gt;
* Static expressions are used to detect pre-computable once routines.&lt;br /&gt;
* Added features to_external and from_external both in classes ARRAY and FIXED_ARRAY.&lt;br /&gt;
* Fixed a bug for inheritance of ARRAY or FIXED_ARRAY.&lt;br /&gt;
* Contents of end of class comment checked.&lt;br /&gt;
* Added documentation file for external calls (see help file man/external ).&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.95 - Thursday May 30th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* It is now possible to inherit ARRAY.&lt;br /&gt;
* It is now possible to inherit STRING.&lt;br /&gt;
* Flag -cc of compile_to_c has changed.&lt;br /&gt;
* The PLATFORM class is now conform to ELKS95.&lt;br /&gt;
* Added feature twin (like the one of TowerEiffel) in GENERAL.&lt;br /&gt;
* Added features to_external and from_external in class STRING.&lt;br /&gt;
* Fixed some bugs in once pre-computed routines.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.96 - Friday May 10th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Internal renaming to suppress some warning messages and for a smooth integration with C++ software.&lt;br /&gt;
* DOS and Macintosh better portability.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.97 - Thursday May 2nd, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Inside of compiler cleaned.&lt;br /&gt;
* Pre-Computing of some once functions.&lt;br /&gt;
* Added class COLLECTION, LINK_LIST and FIXED_ARRAY in lib/base.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.98 - Friday March 15th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Command pretty added.&lt;br /&gt;
* Implements Eiffel expanded clause.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.99 - Saturday February 17th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* 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é&lt;br /&gt;
&lt;br /&gt;
=== Release - 1.00 - July 1995 ===&lt;br /&gt;
&lt;br /&gt;
* The very first bootstrap. SmallEiffel is born.&lt;/div&gt;</summary>
		<author><name>Cadrian</name></author>
	</entry>
	<entry>
		<id>https://wiki.liberty-eiffel.org/index.php?title=Upcoming_release_names&amp;diff=1787</id>
		<title>Upcoming release names</title>
		<link rel="alternate" type="text/html" href="https://wiki.liberty-eiffel.org/index.php?title=Upcoming_release_names&amp;diff=1787"/>
		<updated>2013-09-28T14:01:48Z</updated>

		<summary type="html">&lt;p&gt;Cadrian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Liberty releases are named after famous engineers names starting by A for the first release, B for the second, and so on.&lt;br /&gt;
Here is a list of name suggestions for future releases:&lt;br /&gt;
* Alexander Graham Bell ('''&amp;quot;bell&amp;quot;''')&lt;br /&gt;
* Glenn Curtiss ('''&amp;quot;curtiss&amp;quot;''')&lt;br /&gt;
* Jack Dennis ('''&amp;quot;dennis&amp;quot;''')&lt;br /&gt;
* Gustave Eiffel ('''&amp;quot;eiffel&amp;quot;''') -- or is it too obvious?&lt;br /&gt;
* F?&lt;br /&gt;
* G?&lt;br /&gt;
* Grace Hopper ('''&amp;quot;hopper&amp;quot;''')&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
Feel free to suggest any further names.&lt;br /&gt;
&lt;br /&gt;
Each &amp;quot;released release&amp;quot; (sic) will also have a numeric tag in the form of &amp;quot;year.month&amp;quot; which is more simple to remember.&lt;br /&gt;
&lt;br /&gt;
Already released versions are listed in [[Versions history]].&lt;/div&gt;</summary>
		<author><name>Cadrian</name></author>
	</entry>
	<entry>
		<id>https://wiki.liberty-eiffel.org/index.php?title=Upcoming_release_names&amp;diff=1786</id>
		<title>Upcoming release names</title>
		<link rel="alternate" type="text/html" href="https://wiki.liberty-eiffel.org/index.php?title=Upcoming_release_names&amp;diff=1786"/>
		<updated>2013-09-28T14:01:36Z</updated>

		<summary type="html">&lt;p&gt;Cadrian: more proposed release names&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Liberty releases are named after famous engineers names starting by A for the first release, B for the second, and so on.&lt;br /&gt;
Here is a list of name suggestions for future releases:&lt;br /&gt;
* Alexander Graham Bell ('''&amp;quot;bell&amp;quot;''')&lt;br /&gt;
* Glenn Curtiss ('''&amp;quot;curtiss&amp;quot;''')&lt;br /&gt;
* Jack Dennis ('''&amp;quot;dennis&amp;quot;''')&lt;br /&gt;
* Gustave Eiffel ('''&amp;quot;eiffel&amp;quot;''') -- or is it too obvious?&lt;br /&gt;
* F?&lt;br /&gt;
* G?&lt;br /&gt;
* Grace Hopper ('''&amp;quot;Hopper&amp;quot;''')&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
Feel free to suggest any further names.&lt;br /&gt;
&lt;br /&gt;
Each &amp;quot;released release&amp;quot; (sic) will also have a numeric tag in the form of &amp;quot;year.month&amp;quot; which is more simple to remember.&lt;br /&gt;
&lt;br /&gt;
Already released versions are listed in [[Versions history]].&lt;/div&gt;</summary>
		<author><name>Cadrian</name></author>
	</entry>
	<entry>
		<id>https://wiki.liberty-eiffel.org/index.php?title=Release_Notes_(Versions_history)&amp;diff=1785</id>
		<title>Release Notes (Versions history)</title>
		<link rel="alternate" type="text/html" href="https://wiki.liberty-eiffel.org/index.php?title=Release_Notes_(Versions_history)&amp;diff=1785"/>
		<updated>2013-09-16T08:43:05Z</updated>

		<summary type="html">&lt;p&gt;Cadrian: /* Adler (not yet released, named after Charles Adler, Jr.) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== LibertyEiffel (latest release first) ==&lt;br /&gt;
For upcoming releases see the [[upcoming releases|list of names]].&lt;br /&gt;
&lt;br /&gt;
=== Adler (not yet released, named after Charles Adler, Jr.) ===&lt;br /&gt;
* First release as LibertyEiffel&lt;br /&gt;
* User-visible changes:&lt;br /&gt;
** Added [[library_class:NATURAL_8|&amp;lt;tt&amp;gt;NATURAL_8&amp;lt;/tt&amp;gt;]], [[library_class:NATURAL_16|&amp;lt;tt&amp;gt;NATURAL_16&amp;lt;/tt&amp;gt;]], [[library_class:NATURAL_32|&amp;lt;tt&amp;gt;NATURAL_32&amp;lt;/tt&amp;gt;]], and [[library_class:NATURAL_64|&amp;lt;tt&amp;gt;NATURAL_64&amp;lt;/tt&amp;gt;]] classes. See &amp;lt;tt&amp;gt;tutorial/natural.e&amp;lt;/tt&amp;gt; for examples.&lt;br /&gt;
** Even low-level features (i.e. &amp;lt;tt&amp;gt;external &amp;quot;built_in&amp;quot;&amp;lt;/tt&amp;gt;) are now checking their assertions. As an example, division by zero is now checked by assertions.&lt;br /&gt;
** Inlined dynamic dispatch for better performance&lt;br /&gt;
** A missing export clause is deprecated. Use &amp;lt;tt&amp;gt;{ANY}&amp;lt;/tt&amp;gt; instead.&lt;br /&gt;
** New core libraries: cli, json, log, parse (beware, those libraries are not yet tuned to be used without GC)&lt;br /&gt;
** Improved libraries: string (with notably a new [[library_class:FIXED_STRING|&amp;lt;tt&amp;gt;FIXED_STRING&amp;lt;/tt&amp;gt;]] class)&lt;br /&gt;
** Wrapper libraries: gtk, gdk, readline, ffi, 0mq...&lt;br /&gt;
** A new tool that can generate mocks to help unit testing&lt;br /&gt;
* Developer changes:&lt;br /&gt;
** The web site now belongs to the repository&lt;br /&gt;
** Automatic testing tools (ET on the web, and &amp;lt;tt&amp;gt;watch_eiffeltest.sh&amp;lt;/tt&amp;gt; in the shell)&lt;br /&gt;
** Automatic Debian packages generation&lt;br /&gt;
&lt;br /&gt;
== SmartEiffel (all releases which are predecessors of Liberty) ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Release 2.3 [Antoine-Auguste Parmentier] - Wednesday July 11th 2007 ===&lt;br /&gt;
&lt;br /&gt;
Again, a lot of novelties for this release:&lt;br /&gt;
&lt;br /&gt;
* New [[Typing policy|typing rules]] have been revisited and are now crystal clear. See [[Typing policy|this page]] for details.&lt;br /&gt;
* Implemented a new [[class loading]] algorithm, which takes into account the &amp;quot;distance&amp;quot; between classes, thus reifying the notion of clusters and sub-clusters. Everything is transparent, there is no new keyword to learn.&lt;br /&gt;
* Installation: SmartEiffel now provides a streamlined installer for package maintainers. Of course, the interactive installer is still available via &amp;quot;make interactive&amp;quot;.&lt;br /&gt;
* Configuration: in the same spirit to simplify package maintainers' life, the configuration &amp;quot;file&amp;quot; can now be a directory.&lt;br /&gt;
* The new [[eiffeltest]] tool is now available too.&lt;br /&gt;
* Old style &amp;quot;rename.se&amp;quot; files are no longer considered. You can now use the same class name in different clusters.&lt;br /&gt;
* The &amp;lt;tt&amp;gt;NONE&amp;lt;/tt&amp;gt; type mark must no longer be used. Just use an empty &amp;lt;tt&amp;gt;{}&amp;lt;/tt&amp;gt; exportation list to indicate that the corresponding following features are not exported. This is better for newcomers.&lt;br /&gt;
* In class [[library_class:COLLECTION|&amp;lt;tt&amp;gt;COLLECTION&amp;lt;/tt&amp;gt;]], features &amp;lt;tt&amp;gt;index_of&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;fast_index_of&amp;lt;/tt&amp;gt; now have an extra argument to indicate where the search must start (as in class [[library_class:STRING|&amp;lt;tt&amp;gt;STRING&amp;lt;/tt&amp;gt;]]). See also &amp;lt;tt&amp;gt;first_index_of&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;fast_first_index_of&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* Microsoft's Visual C++ 2005 compiler is now supported.&lt;br /&gt;
* The debugging sections can be turned on with the new &amp;lt;tt&amp;gt;-debug&amp;lt;/tt&amp;gt; option, in all compilation modes other than &amp;lt;tt&amp;gt;-boost&amp;lt;/tt&amp;gt;. The &amp;lt;tt&amp;gt;-debug_check&amp;lt;/tt&amp;gt; mode has been deprecated.&lt;br /&gt;
* The regular expression library has been added.&lt;br /&gt;
* Sequencer's &amp;lt;tt&amp;gt;READY_DESCRIPTION&amp;lt;/tt&amp;gt; is now renamed as [[library_class:EVENTS_SET|&amp;lt;tt&amp;gt;EVENTS_SET&amp;lt;/tt&amp;gt;]] and has a unified interface for all kinds of events.&lt;br /&gt;
* Some work on the network cluster.&lt;br /&gt;
* Last but not least: SmartEiffel now has a logo that will help it fly!&lt;br /&gt;
&lt;br /&gt;
=== Release 2.2 [Pomme de terre] - Monday December 19th, 2005 ===&lt;br /&gt;
&lt;br /&gt;
Again, a lot of novelties for this release.&lt;br /&gt;
&lt;br /&gt;
First, the new [[eiffeldoc]] command has been completely revisited and is now part of the delivery. That command is 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.&lt;br /&gt;
&lt;br /&gt;
The second important novelty is that we now have a brand new introspection mechanism which allows us to implement the new persistency facility.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
* Added a new command, [[se]], which is meant to be the only command you ever need to put in your PATH!&lt;br /&gt;
* Added a new command, [[eiffeldoc]], that you can use to document your project. Currently only HTML output is supported.&lt;br /&gt;
* The [[plugins]] system is vastly improved and should now be preferred over older external specifications. See [[plugins|this page]] for details.&lt;br /&gt;
* Improved error messages legibility in order to avoid missunderstanding.&lt;br /&gt;
* Added a new OpenGL widget for Vision. Unix-based programs only have to inherit from [[library_class:UNIX_GL_WIDGET|&amp;lt;tt&amp;gt;UNIX_GL_WIDGET&amp;lt;/tt&amp;gt;]] and define all the OpenGL related routines.&lt;br /&gt;
* Added new abstract class named [[library_class:BIJECTIVE_DICTIONARY|&amp;lt;tt&amp;gt;BIJECTIVE_DICTIONARY&amp;lt;/tt&amp;gt;]] which is actually a replacement for the now obsolete [[library_class:DOUBLE_DICTIONARY|&amp;lt;tt&amp;gt;DOUBLE_DICTIONARY&amp;lt;/tt&amp;gt;]] class. At time being, there is only one implementation of [[library_class:BIJECTIVE_DICTIONARY|&amp;lt;tt&amp;gt;BIJECTIVE_DICTIONARY&amp;lt;/tt&amp;gt;]] named [[library_class:HASHED_BIJECTIVE_DICTIONARY|&amp;lt;tt&amp;gt;HASHED_BIJECTIVE_DICTIONARY&amp;lt;/tt&amp;gt;]] (a hash_code-based implementation).&lt;br /&gt;
* Removed class &amp;lt;tt&amp;gt;GENERAL&amp;lt;/tt&amp;gt; as well as some obsolete features of that class. In the past, &amp;lt;tt&amp;gt;GENERAL&amp;lt;/tt&amp;gt; was inherited by [[library_class:PLATFORM|&amp;lt;tt&amp;gt;PLATFORM&amp;lt;/tt&amp;gt;]] which was inherited by [[library_class:ANY.|&amp;lt;tt&amp;gt;ANY.&amp;lt;/tt&amp;gt;]] Now, [[library_class:ANY|&amp;lt;tt&amp;gt;ANY&amp;lt;/tt&amp;gt;]] has no more parent at all (no conforming parent and no non-conforming parents). The removal of &amp;lt;tt&amp;gt;GENERAL&amp;lt;/tt&amp;gt; is better for newcomers because they just need to know about [[library_class:ANY|&amp;lt;tt&amp;gt;ANY&amp;lt;/tt&amp;gt;]] and it is also better for the underlying model consistency. Because we have now removed &amp;lt;tt&amp;gt;equals&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;clone&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;deep_clone&amp;lt;/tt&amp;gt; you must now only use &amp;lt;tt&amp;gt;is_equal&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;twin&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;deep_twin&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;is_deep_equal&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;standard_is_equal&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;standard_twin&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* Removed the &amp;lt;tt&amp;gt;file_tools&amp;lt;/tt&amp;gt; feature from [[library_class:ANY.|&amp;lt;tt&amp;gt;ANY.&amp;lt;/tt&amp;gt;]] Also note that all other file manipulation features from [[library_class:ANY|&amp;lt;tt&amp;gt;ANY&amp;lt;/tt&amp;gt;]] are now obsolete (use the class [[library_class:FILE_TOOLS|&amp;lt;tt&amp;gt;FILE_TOOLS&amp;lt;/tt&amp;gt;]] instead).&lt;br /&gt;
* No more feature &amp;lt;tt&amp;gt;argument&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;argument_count&amp;lt;/tt&amp;gt; in class [[library_class:ANY.|&amp;lt;tt&amp;gt;ANY.&amp;lt;/tt&amp;gt;]] In order to access command-line arguments, just insert the class [[library_class:ARGUMENTS.|&amp;lt;tt&amp;gt;ARGUMENTS.&amp;lt;/tt&amp;gt;]]&lt;br /&gt;
* The &amp;lt;tt&amp;gt;-case_insensitive&amp;lt;/tt&amp;gt; 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 legibility of our code.&lt;br /&gt;
* You now get a warning for using the all lower-case spelling of the keywords &amp;lt;tt&amp;gt;current&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;result&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;void&amp;lt;/tt&amp;gt;. Please use the initial-caps spellings &amp;lt;tt&amp;gt;Current&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;Result&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;Void&amp;lt;/tt&amp;gt; instead.&lt;br /&gt;
* 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.&lt;br /&gt;
* 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.&lt;br /&gt;
* 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.&lt;br /&gt;
* 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.&lt;br /&gt;
* Feature &amp;lt;tt&amp;gt;is_equal&amp;lt;/tt&amp;gt; is now redefined in class [[library_class:HASHABLE|&amp;lt;tt&amp;gt;HASHABLE&amp;lt;/tt&amp;gt;]]. The new definition adds an ensure then assertion to check consistency with the &amp;lt;tt&amp;gt;hash_code&amp;lt;/tt&amp;gt; function. Note that the redefinition is deferred to force clients to select their preferred implementation.&lt;br /&gt;
* Added a new feature called &amp;lt;tt&amp;gt;set_storage&amp;lt;/tt&amp;gt; in class [[library_class:STRING.|&amp;lt;tt&amp;gt;STRING.&amp;lt;/tt&amp;gt;]] This low-level feature is only exported to [[library_class:STRING_HANDLER|&amp;lt;tt&amp;gt;STRING_HANDLER&amp;lt;/tt&amp;gt;]].&lt;br /&gt;
* Added a new features in class [[library_class:COLLECTION|&amp;lt;tt&amp;gt;COLLECTION&amp;lt;/tt&amp;gt;]]: &amp;lt;tt&amp;gt;remove_head&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;remove_tail&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;reverse_index_of&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;last_index_of&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;first_index_of&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;fast_reverse_index_of&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;fast_last_index_of&amp;lt;/tt&amp;gt;&lt;br /&gt;
* Added a new features in class [[library_class:DICTIONARY|&amp;lt;tt&amp;gt;DICTIONARY&amp;lt;/tt&amp;gt;]]: &amp;lt;tt&amp;gt;fast_reference_at&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;fast_put&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;fast_remove&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* Added a new Eiffel mode description for the Vim text editor. This mode is compatible with our emacs mode. File &amp;quot;misc/eiffel.vim&amp;quot; is for the Vim editor while file &amp;quot;misc/eiffel.el&amp;quot; is for emacs.&lt;br /&gt;
&lt;br /&gt;
=== Release 2.1 [Poirot] - Wednesday February 9th, 2005 ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
More details about changes from 2.0:&lt;br /&gt;
&lt;br /&gt;
* 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 &amp;quot;inherit&amp;quot; keyword. After that, you can use the &amp;quot;insert&amp;quot; keyword followed by the list of non-conforming parents. Like in the previous release, when a class has no &amp;quot;inherit&amp;quot; clause and no &amp;quot;insert&amp;quot; clause, the default insert ANY is automatically added.&lt;br /&gt;
The new compiler does not warn you anymore when multiple conforming paths 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).&lt;br /&gt;
* We introduced a brand new notation to generalize the old manifest array notation. You can now create an [[library_class:ARRAY|&amp;lt;tt&amp;gt;ARRAY&amp;lt;/tt&amp;gt;]] initialized with letters as follows:&lt;br /&gt;
        {ARRAY[CHARACTER] 1, &amp;lt;&amp;lt; 'a', 'b', 'c', 'd' &amp;gt;&amp;gt; }&lt;br /&gt;
or a LINKED_LIST doing:&lt;br /&gt;
        {LINKED_LIST[CHARACTER] &amp;lt;&amp;lt; 'a', 'b', 'c', 'd' &amp;gt;&amp;gt; }&lt;br /&gt;
as well as any kind of COLLECTION:&lt;br /&gt;
        {RING_ARRAY[CHARACTER] 1, &amp;lt;&amp;lt; 'a', 'b', 'c', 'd' &amp;gt;&amp;gt;}&lt;br /&gt;
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.&lt;br /&gt;
* Classes to manipulate floating point numbers have been completely revisited. Floating point number manipulation now uses [[library_class:REAL_32|&amp;lt;tt&amp;gt;REAL_32&amp;lt;/tt&amp;gt;]] for 32 bits floating points, [[library_class:REAL_64|&amp;lt;tt&amp;gt;REAL_64&amp;lt;/tt&amp;gt;]] which is equivalent of &amp;lt;tt&amp;gt;REAL&amp;lt;/tt&amp;gt; for 64 bits floating points, [[library_class:REAL_80|&amp;lt;tt&amp;gt;REAL_80&amp;lt;/tt&amp;gt;]] for architecture supporting 80 bits, [[library_class:REAL_128|&amp;lt;tt&amp;gt;REAL_128&amp;lt;/tt&amp;gt;]] for architecture supporting 128 bits and, [[library_class:REAL_EXTENDED|&amp;lt;tt&amp;gt;REAL_EXTENDED&amp;lt;/tt&amp;gt;]] which is automatically mapped on [[library_class:REAL_80|&amp;lt;tt&amp;gt;REAL_80&amp;lt;/tt&amp;gt;]] or [[library_class:REAL_128|&amp;lt;tt&amp;gt;REAL_128&amp;lt;/tt&amp;gt;]] depending on the architecture actually used. The old &amp;lt;tt&amp;gt;DOUBLE&amp;lt;/tt&amp;gt; class is now obsolete and is automatically replaced with simply &amp;lt;tt&amp;gt;REAL&amp;lt;/tt&amp;gt; (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 &amp;lt;tt&amp;gt;REAL&amp;lt;/tt&amp;gt;. As an example, ''1.5'' is of type &amp;lt;tt&amp;gt;REAL&amp;lt;/tt&amp;gt; whereas ''{REAL_32 1.5}'' is of type [[library_class:REAL_32|&amp;lt;tt&amp;gt;REAL_32&amp;lt;/tt&amp;gt;]] and ''{REAL_EXTENDED 1.5}'' is of type [[library_class:REAL_80|&amp;lt;tt&amp;gt;REAL_80&amp;lt;/tt&amp;gt;]] or [[library_class:REAL_128|&amp;lt;tt&amp;gt;REAL_128&amp;lt;/tt&amp;gt;]] depending on your hardware. See again SmartEiffel/tutorial/manifest_notation.e for details. Finally, also note that scientific notation has been added to display floating point.&lt;br /&gt;
* To handle downcasting in a better way than the still supported &amp;quot;?=&amp;quot; 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 &amp;quot;?:=&amp;quot; allows you to test if the downcasting can be safely done and the new &amp;quot;::=&amp;quot; assignment can actually perform the downcasting. In debug modes, the &amp;quot;?:=&amp;quot; predicate is considered as a require assertion of the &amp;quot;::=&amp;quot; assignment. The &amp;quot;?:=&amp;quot; predicate accepts type name for its left-hand side and is useful too in assertions. See SmartEiffel/tutorial/downcasting.e for examples.&lt;br /&gt;
* Command short improved: assertions are displayed according to the client's point of view (i.e. you do not see what you cannot call).&lt;br /&gt;
* Added classes [[library_class:STACK|&amp;lt;tt&amp;gt;STACK&amp;lt;/tt&amp;gt;]] and [[library_class:QUEUE|&amp;lt;tt&amp;gt;QUEUE&amp;lt;/tt&amp;gt;]]. Thanks to the &amp;quot;insert&amp;quot; mechanism, it is now safe and efficient to do so ([[library_class:STACK|&amp;lt;tt&amp;gt;STACK&amp;lt;/tt&amp;gt;]] shares the efficient implementation of [[library_class:FAST_ARRAY|&amp;lt;tt&amp;gt;FAST_ARRAY&amp;lt;/tt&amp;gt;]] and [[library_class:QUEUE|&amp;lt;tt&amp;gt;QUEUE&amp;lt;/tt&amp;gt;]] inserts [[library_class:RING_ARRAY|&amp;lt;tt&amp;gt;RING_ARRAY&amp;lt;/tt&amp;gt;]]).&lt;br /&gt;
* Improved memory usage for classes [[library_class:LINKED_LIST|&amp;lt;tt&amp;gt;LINKED_LIST&amp;lt;/tt&amp;gt;]], [[library_class:TWO_WAY_LINKED_LIST|&amp;lt;tt&amp;gt;TWO_WAY_LINKED_LIST&amp;lt;/tt&amp;gt;]], [[library_class:AVL_SET|&amp;lt;tt&amp;gt;AVL_SET&amp;lt;/tt&amp;gt;]], [[library_class:AVL_DICTIONARY|&amp;lt;tt&amp;gt;AVL_DICTIONARY&amp;lt;/tt&amp;gt;]], [[library_class:HASHED_SET|&amp;lt;tt&amp;gt;HASHED_SET&amp;lt;/tt&amp;gt;]] and [[library_class:HASHED_DICTIONARY|&amp;lt;tt&amp;gt;HASHED_DICTIONARY&amp;lt;/tt&amp;gt;]]. Free cells are automatically recycled between various instances of the same generic derivation. Thoses classes are now using our [[library_class:WEAK_REFERENCE|&amp;lt;tt&amp;gt;WEAK_REFERENCE&amp;lt;/tt&amp;gt;]] class silently.&lt;br /&gt;
* Removed obsolete class &amp;lt;tt&amp;gt;BIT&amp;lt;/tt&amp;gt;. Now, just use existing bit operations from [[library_class:INTEGER_8|&amp;lt;tt&amp;gt;INTEGER_8&amp;lt;/tt&amp;gt;]], [[library_class:INTEGER_16|&amp;lt;tt&amp;gt;INTEGER_16&amp;lt;/tt&amp;gt;]], [[library_class:INTEGER_32|&amp;lt;tt&amp;gt;INTEGER_32&amp;lt;/tt&amp;gt;]], &amp;lt;tt&amp;gt;INTEGER&amp;lt;/tt&amp;gt;, [[library_class:INTEGER_64|&amp;lt;tt&amp;gt;INTEGER_64&amp;lt;/tt&amp;gt;]] or, for very long sequences of bits, the completely revisited [[library_class:BIT_STRING|&amp;lt;tt&amp;gt;BIT_STRING&amp;lt;/tt&amp;gt;]] class.&lt;br /&gt;
* 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!&lt;br /&gt;
* 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:&lt;br /&gt;
        3.to_string &lt;br /&gt;
        3.5.print_on(io) &lt;br /&gt;
        &amp;quot;foo&amp;quot;.print_on(io) &lt;br /&gt;
* A new network library has been recently added. This is brand new work which is still in progress. See SmartEiffel/lib/net for details.&lt;br /&gt;
* The old Eiffel strip expression is no longer supported.&lt;br /&gt;
&lt;br /&gt;
=== Release 2.0 [Hercule] - Monday September 27th, 2004 ===&lt;br /&gt;
&lt;br /&gt;
Actually, this new 2.0 release is the beginning of a new era in SmartEiffel's life!&lt;br /&gt;
&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
More details about changes from 1.1:&lt;br /&gt;
&lt;br /&gt;
* Very large systems are handled far more efficiently (but maybe at a cost for smaller systems).&lt;br /&gt;
* The new non-conforming inheritance mechanism is now implemented. For code portatbility, we decided to stick with the &amp;quot;inherit&amp;quot; keyword for conforming parents. So just start your class as usual. Then, to describe the non-conforming parents, just use the &amp;quot;insert&amp;quot; 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 &amp;quot;select&amp;quot; clause (you'll be warned by the compiler). Also keep in mind that when a class has no &amp;quot;inherit&amp;quot; clause and no &amp;quot;insert&amp;quot; clause, the default insert [[library_class:ANY|&amp;lt;tt&amp;gt;ANY&amp;lt;/tt&amp;gt;]] 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.&lt;br /&gt;
* Repeated inheritance is now correctly handled.&lt;br /&gt;
* The optimizer is rewritten and can do more optimizations.&lt;br /&gt;
* 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).&lt;br /&gt;
* 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 [[library_class:NATIVE_ARRAY|&amp;lt;tt&amp;gt;NATIVE_ARRAY&amp;lt;/tt&amp;gt;]]s). Command such as ''p ..1'' is useful to get another element of the array or another attribute of the same object.&lt;br /&gt;
* Dead code is now checked, which explains the compiler takes more time and memory.&lt;br /&gt;
* 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 &amp;quot;good&amp;quot; cluster.&lt;br /&gt;
The new organization splits the classes by logical topics. Note that each cluster may contain two special clusters: &amp;quot;low_level&amp;quot;, containing classes that you might use if you need better performance (generally when you build some utility or library classes); &amp;quot;internal&amp;quot; containing support classes, and not meant to be used directly.&lt;br /&gt;
Now, the organization itself:&lt;br /&gt;
** &amp;quot;abilities&amp;quot; contains the &amp;quot;able&amp;quot; classes ([[library_class:COMPARABLE|&amp;lt;tt&amp;gt;COMPARABLE&amp;lt;/tt&amp;gt;]], [[library_class:HASHABLE|&amp;lt;tt&amp;gt;HASHABLE&amp;lt;/tt&amp;gt;]], and so on);&lt;br /&gt;
** &amp;quot;io&amp;quot; contains the input-out classes; this cluster has but changed from the old one (see below for more details);&lt;br /&gt;
** &amp;quot;iterator&amp;quot; still contains the iterator on storage classes (see the &amp;quot;storage&amp;quot; cluster);&lt;br /&gt;
** &amp;quot;kernel&amp;quot; contains the few general-purpose which could not be put in other clusters, and are quite mandatory for the compiler to work;&lt;br /&gt;
** &amp;quot;numeric&amp;quot; contains all the classes that can be use to manipulate numbers; you will find here &amp;lt;tt&amp;gt;INTEGER&amp;lt;/tt&amp;gt;s, &amp;lt;tt&amp;gt;REAL&amp;lt;/tt&amp;gt;s, but also [[library_class:NUMBER|&amp;lt;tt&amp;gt;NUMBER&amp;lt;/tt&amp;gt;]]s (the infinite-precision integers); This cluster also includes the new [[library_class:MUTABLE_BIG_INTEGER|&amp;lt;tt&amp;gt;MUTABLE_BIG_INTEGER&amp;lt;/tt&amp;gt;]] class which is an efficient tools for fast integer number crunching.&lt;br /&gt;
** &amp;quot;random&amp;quot; contains the pseudo-random number generation classes;&lt;br /&gt;
** &amp;quot;scoop&amp;quot; contains the SCOOP utilities (not that SCOOP works better than in SE 1.1...);&lt;br /&gt;
** &amp;quot;storage&amp;quot; contains all the classes that store data: [[library_class:COLLECTION|&amp;lt;tt&amp;gt;COLLECTION&amp;lt;/tt&amp;gt;]], [[library_class:DICTIONARY|&amp;lt;tt&amp;gt;DICTIONARY&amp;lt;/tt&amp;gt;]], [[library_class:SET|&amp;lt;tt&amp;gt;SET&amp;lt;/tt&amp;gt;]]... (Note: see below for more details on [[library_class:DICTIONARY|&amp;lt;tt&amp;gt;DICTIONARY&amp;lt;/tt&amp;gt;]] and [[library_class:SET|&amp;lt;tt&amp;gt;SET&amp;lt;/tt&amp;gt;]]);&lt;br /&gt;
** &amp;quot;string&amp;quot; contains the [[library_class:STRING|&amp;lt;tt&amp;gt;STRING&amp;lt;/tt&amp;gt;]] and related classes (also Unicode strings);&lt;br /&gt;
** &amp;quot;time&amp;quot; contains the [[library_class:TIME|&amp;lt;tt&amp;gt;TIME&amp;lt;/tt&amp;gt;]]-related classes;&lt;br /&gt;
** &amp;quot;vision&amp;quot; contains the vision graphical library classes;&lt;br /&gt;
** &amp;quot;sorting&amp;quot; contains most common algorithm to sort [[library_class:COLLECTION|&amp;lt;tt&amp;gt;COLLECTION&amp;lt;/tt&amp;gt;]]s;&lt;br /&gt;
** &amp;quot;misc&amp;quot; contains some useful classes that cannot be easily put elsewhere short of having their own cluster.&lt;br /&gt;
&lt;br /&gt;
* [[library_class:DICTIONARY|&amp;lt;tt&amp;gt;DICTIONARY&amp;lt;/tt&amp;gt;]] class is now deferred and has no more generic constraint. The library now includes two different implementations.&lt;br /&gt;
** The [[library_class:HASHED_DICTIONARY|&amp;lt;tt&amp;gt;HASHED_DICTIONARY&amp;lt;/tt&amp;gt;]] implementation is the hash_code based implementation (the generic constraint for [[library_class:HASHED_DICTIONARY|&amp;lt;tt&amp;gt;HASHED_DICTIONARY&amp;lt;/tt&amp;gt;]] is [[library_class:HASHABLE|&amp;lt;tt&amp;gt;HASHABLE&amp;lt;/tt&amp;gt;]]).&lt;br /&gt;
** The [[library_class:AVL_DICTIONARY|&amp;lt;tt&amp;gt;AVL_DICTIONARY&amp;lt;/tt&amp;gt;]] implementation is a balanced tree based implementation (the generic constraint for this implemetation is [[library_class:COMPARABLE|&amp;lt;tt&amp;gt;COMPARABLE&amp;lt;/tt&amp;gt;]]).&lt;br /&gt;
You should update all your create instructions by selecting [[library_class:HASHED_DICTIONARY|&amp;lt;tt&amp;gt;HASHED_DICTIONARY&amp;lt;/tt&amp;gt;]] or [[library_class:AVL_DICTIONARY|&amp;lt;tt&amp;gt;AVL_DICTIONARY&amp;lt;/tt&amp;gt;]]. In order to ease this code update, the compiler will warn you that [[library_class:HASHED_DICTIONARY|&amp;lt;tt&amp;gt;HASHED_DICTIONARY&amp;lt;/tt&amp;gt;]] is selected by default. Please update your code because this is a temporary warning of the compiler.&lt;br /&gt;
&lt;br /&gt;
* Some more [[library_class:DICTIONARY|&amp;lt;tt&amp;gt;DICTIONARY&amp;lt;/tt&amp;gt;]] classes were also added (among them: [[library_class:DOUBLE_DICTIONARY|&amp;lt;tt&amp;gt;DOUBLE_DICTIONARY&amp;lt;/tt&amp;gt;]] can be of interest).&lt;br /&gt;
* The [[library_class:SET|&amp;lt;tt&amp;gt;SET&amp;lt;/tt&amp;gt;]] class has undergone the same transformation ([[library_class:HASHED_SET|&amp;lt;tt&amp;gt;HASHED_SET&amp;lt;/tt&amp;gt;]] and [[library_class:AVL_SET|&amp;lt;tt&amp;gt;AVL_SET&amp;lt;/tt&amp;gt;]]).&lt;br /&gt;
* A [[library_class:RING_ARRAY|&amp;lt;tt&amp;gt;RING_ARRAY&amp;lt;/tt&amp;gt;]] class was added. This [[library_class:COLLECTION|&amp;lt;tt&amp;gt;COLLECTION&amp;lt;/tt&amp;gt;]] is quite similar to an [[library_class:ARRAY|&amp;lt;tt&amp;gt;ARRAY&amp;lt;/tt&amp;gt;]] that performs well for all queue operations (add|remove)_(first|last) thanks to its circular internal representation.&lt;br /&gt;
* The [[library_class:TUPLE|&amp;lt;tt&amp;gt;TUPLE&amp;lt;/tt&amp;gt;]] class is now defined in Eiffel. Thanks to this new source code implementation, we have added the definition for the `item' feature definition.&lt;br /&gt;
* The [[library_class:ROUTINE|&amp;lt;tt&amp;gt;ROUTINE&amp;lt;/tt&amp;gt;]], [[library_class:PROCEDURE|&amp;lt;tt&amp;gt;PROCEDURE&amp;lt;/tt&amp;gt;]] and [[library_class:FUNCTION|&amp;lt;tt&amp;gt;FUNCTION&amp;lt;/tt&amp;gt;]] classes are also defined in Eiffel.&lt;br /&gt;
* Added a new [[library_class:WEAK_REFERENCE|&amp;lt;tt&amp;gt;WEAK_REFERENCE&amp;lt;/tt&amp;gt;]] class with the appropriate garbage collector support.&lt;br /&gt;
* Split has been improved in order to reduce C files compilation after a change.&lt;br /&gt;
* Added a new &amp;quot;-profile&amp;quot; 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:&lt;br /&gt;
** the profiling output is written in the &amp;quot;profile.se&amp;quot; file;&lt;br /&gt;
** for each entry, the &amp;quot;own&amp;quot; and &amp;quot;cumul&amp;quot; times, total and average, are given; also, the caller features and the called ones are displayed;&lt;br /&gt;
** 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);&lt;br /&gt;
** the Eiffel called features are sorted by decreasing number of calls;&lt;br /&gt;
** 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).&lt;br /&gt;
**e that:&lt;br /&gt;
** profiled programs take MUCH longer to execute (a lot of, hem, time, is spent in the kernel merely to, hem, track time...)&lt;br /&gt;
** externals are not profiled; they are accounted in the &amp;quot;own&amp;quot; time of their caller;&lt;br /&gt;
** inlined features are not profiled either (only in -boost)&lt;br /&gt;
** 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.&lt;br /&gt;
**s to Lothar Scholz for having the idea in the first place.&lt;br /&gt;
**ped the input-output system to make it more general and more extensible. Provided features:&lt;br /&gt;
** now streams can be &amp;quot;filtered&amp;quot;. It means you can nest them to bring extra features such as encoding or encryption (among many other things)&lt;br /&gt;
** 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.&lt;br /&gt;
See also the cluster description on the SmartEiffel site.&lt;br /&gt;
* Visitors revisited. The architecture is now ready to be used (in 1.1 it was but a draft).&lt;br /&gt;
&lt;br /&gt;
== SmartEiffel (release 1.1 down to release 1.0) ==&lt;br /&gt;
&lt;br /&gt;
=== Release 1.1 [Charlemagne] - Monday June 16th, 2003 ===&lt;br /&gt;
&lt;br /&gt;
* Thoroughly changed the configuration handling. The new scheme is more complete, and much more flexible.&lt;br /&gt;
** 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 &amp;lt;Enter&amp;gt; key. For more informations about installation and all new configuration capabilities, please have a look to install page.&lt;br /&gt;
** Added the -c_mode option, in conjunction with the new configuration handling.&lt;br /&gt;
** Added a -loadpath flag to read an extra loadpath.&lt;br /&gt;
* 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.&lt;br /&gt;
* Added a small expression evaluator to sedb. One can now display the attributes of the objects on the stack. Be sure to read the &amp;quot;more-help&amp;quot; section on data display (for once functions, the result is unavailable if it has not yet been called).&lt;br /&gt;
* 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.&lt;br /&gt;
* Implemented inspect on [[library_class:STRING|&amp;lt;tt&amp;gt;STRING&amp;lt;/tt&amp;gt;]]s.&lt;br /&gt;
* 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!&lt;br /&gt;
* [[pretty]] significantly updated.&lt;br /&gt;
* The C files produced by the compiler now should work on any platform, even with the GC turned on.&lt;br /&gt;
* Added Unicode support in [[library_class:STRING|&amp;lt;tt&amp;gt;STRING&amp;lt;/tt&amp;gt;]]s (see the SmartEiffel/tutorial/unicode and SmartEiffel/lib/unicode directories).&lt;br /&gt;
* Added new abstract class [[library_class:FILE|&amp;lt;tt&amp;gt;FILE&amp;lt;/tt&amp;gt;]] and new features in class [[library_class:DIRECTORY|&amp;lt;tt&amp;gt;DIRECTORY&amp;lt;/tt&amp;gt;]].&lt;br /&gt;
* Added hexadecimal notation for &amp;lt;tt&amp;gt;INTEGER&amp;lt;/tt&amp;gt; constants, [[library_class:CHARACTER|&amp;lt;tt&amp;gt;CHARACTER&amp;lt;/tt&amp;gt;]] constants and inside manifest [[library_class:STRING|&amp;lt;tt&amp;gt;STRING&amp;lt;/tt&amp;gt;]]s as well. See the example in file SmartEiffel/tutorial/hexadecimal.e for more information.&lt;br /&gt;
* Added agent facilities on [[library_class:STRING|&amp;lt;tt&amp;gt;STRING&amp;lt;/tt&amp;gt;]] and [[library_class:UNICODE_STRING|&amp;lt;tt&amp;gt;UNICODE_STRING&amp;lt;/tt&amp;gt;]] (warning, those facilities are non-standard extensions).&lt;br /&gt;
* 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.&lt;br /&gt;
* Moved the bin_c directory to install/germ.&lt;br /&gt;
* Reorganized the SmartEiffel/sys/runtime directory:&lt;br /&gt;
** Clearly separated C and Java backend helpers&lt;br /&gt;
** 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&lt;br /&gt;
* Added the -compact option which produces much more compact C code.&lt;br /&gt;
* same_type from &amp;lt;tt&amp;gt;GENERAL&amp;lt;/tt&amp;gt; is now obsolete. Use same_dynamic_type instead.&lt;br /&gt;
* Obsoleted operators &amp;quot;and&amp;quot;, &amp;quot;or&amp;quot;, &amp;quot;xor&amp;quot; and &amp;quot;not&amp;quot; for &amp;lt;tt&amp;gt;INTEGER&amp;lt;/tt&amp;gt;s, and added prefix operator &amp;quot;~&amp;quot;.&lt;br /&gt;
* [[library_class:MEMORY|&amp;lt;tt&amp;gt;MEMORY&amp;lt;/tt&amp;gt;]].allocated_bytes is more accurate.&lt;br /&gt;
* Generated object files are now removed before calling C compiler.&lt;br /&gt;
* Various bug fixes and improvements (see details in the SmartZilla bug tracker).&lt;br /&gt;
&lt;br /&gt;
=== Release 1.0 - Friday December 6th, 2002 ===&lt;br /&gt;
&lt;br /&gt;
This is the very first release with the name SmartEiffel!&lt;br /&gt;
(Previous releases were named SmallEiffel.)&lt;br /&gt;
&lt;br /&gt;
The main changes between SmallEiffel -0.74 and SmartEiffel 1.0 are:&lt;br /&gt;
&lt;br /&gt;
* Name changed from SmallEiffel to SmartEiffel!&lt;br /&gt;
* Version numbering: now, versions are numbered from 1.0 beta 1 upward&lt;br /&gt;
* 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).&lt;br /&gt;
* The new Reference keyword is now implemented. Use reference &amp;lt;tt&amp;gt;INTEGER&amp;lt;/tt&amp;gt; instead of &amp;lt;tt&amp;gt;INTEGER_REF&amp;lt;/tt&amp;gt;. &amp;lt;tt&amp;gt;INTEGER_REF&amp;lt;/tt&amp;gt; will become obsolete.&lt;br /&gt;
* The new [[library_class:INTEGER_GENERAL|&amp;lt;tt&amp;gt;INTEGER_GENERAL&amp;lt;/tt&amp;gt;]], [[library_class:INTEGER_8|&amp;lt;tt&amp;gt;INTEGER_8&amp;lt;/tt&amp;gt;]], [[library_class:INTEGER_16|&amp;lt;tt&amp;gt;INTEGER_16&amp;lt;/tt&amp;gt;]], [[library_class:INTEGER_32|&amp;lt;tt&amp;gt;INTEGER_32&amp;lt;/tt&amp;gt;]], [[library_class:INTEGER_64|&amp;lt;tt&amp;gt;INTEGER_64&amp;lt;/tt&amp;gt;]] types are now implemented.&lt;br /&gt;
* After long discussions, we have decided to stick to our decision for the type of integer constants (as an example, 127 is of type [[library_class:INTEGER_8|&amp;lt;tt&amp;gt;INTEGER_8&amp;lt;/tt&amp;gt;]] and 128 is of type [[library_class:INTEGER_16|&amp;lt;tt&amp;gt;INTEGER_16&amp;lt;/tt&amp;gt;]] 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 &amp;lt;tt&amp;gt;&amp;lt;&amp;lt;...&amp;gt;&amp;gt;&amp;lt;/tt&amp;gt; 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 :)&lt;br /&gt;
* 64-bit architectures supported.&lt;br /&gt;
* Internal improvements in the type system (better C code produced)&lt;br /&gt;
* Buffered I/O. You may get big improvements on programs performing lots of file reading or writing ([[library_class:STD_INPUT|&amp;lt;tt&amp;gt;STD_INPUT&amp;lt;/tt&amp;gt;]] and [[library_class:STD_OUTPUT|&amp;lt;tt&amp;gt;STD_OUTPUT&amp;lt;/tt&amp;gt;]] are also buffered).&lt;br /&gt;
* The short command now has the &amp;quot;-client&amp;quot; option (see short command manual for more details).&lt;br /&gt;
* The &amp;quot;tcc&amp;quot; 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.&lt;br /&gt;
* New bug reporting tool. Now you can see all known bugs and their state. Allways refers to the bug report page on SmartEiffel site.&lt;br /&gt;
* As suggested on our mailing list, there are now two new classes in order to remove some definitions from &amp;lt;tt&amp;gt;GENERAL&amp;lt;/tt&amp;gt; (see class [[library_class:MATH_CONSTANTS|&amp;lt;tt&amp;gt;MATH_CONSTANTS&amp;lt;/tt&amp;gt;]] and class [[library_class:CHARACTER_CONSTANTS|&amp;lt;tt&amp;gt;CHARACTER_CONSTANTS&amp;lt;/tt&amp;gt;]]).&lt;br /&gt;
* 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 &amp;gt;&amp;gt; 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.&lt;br /&gt;
* Type mark must now follow the Precursor keyword.&lt;br /&gt;
* Fixed the bug recently reported by Wolfgang Jansen. (Well isolated bug report, thanks!) This bug was related to expanded objects and the twin feature.&lt;br /&gt;
* Fixed the -manifest_string_trace bug recently reported by Alexis Saettler. (Well isolated bug as well, thanks!)&lt;br /&gt;
* 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 &amp;quot;like Current&amp;quot; type mark into some hard-coded type mark (e.g. &amp;quot;FOO&amp;quot;). 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 [[library_class:NUMBER|&amp;lt;tt&amp;gt;NUMBER&amp;lt;/tt&amp;gt;]] library implementation of &amp;lt;tt&amp;gt;is_equal&amp;lt;/tt&amp;gt; (''like Current'' is now changed to [[library_class:NUMBER|&amp;lt;tt&amp;gt;NUMBER&amp;lt;/tt&amp;gt;]]) and changed the postcondition of &amp;lt;tt&amp;gt;is_equal&amp;lt;/tt&amp;gt; in &amp;lt;tt&amp;gt;GENERAL&amp;lt;/tt&amp;gt; (ensure assertion relaxed to no longer call standard_is_equal).&lt;br /&gt;
* 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/&lt;br /&gt;
* New Cygwin directory notation is now supported. Recent Cygwin systems will be automatically detected while install.&lt;br /&gt;
* Other &amp;quot;secret&amp;quot; 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.&lt;br /&gt;
* Improved internal lab process to more easily provide professional support contracts (see premium support for more details).&lt;br /&gt;
* New functions in [[library_class:COLLECTION_SORTER|&amp;lt;tt&amp;gt;COLLECTION_SORTER&amp;lt;/tt&amp;gt;]] classes using dichotomic search.&lt;br /&gt;
* GC support for the Elate system updated.&lt;br /&gt;
* Various bug fixes and improvements.&lt;br /&gt;
&lt;br /&gt;
== SmallEiffel (all releases of SmallEiffel) ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.74 - Tuesday May 7th, 2002 ===&lt;br /&gt;
&lt;br /&gt;
* The new agent mechanism is now implemented. See tutorial/agent directory for examples.&lt;br /&gt;
* 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.&lt;br /&gt;
* The new create instruction/expression is now fully implemented and correctly pretty-printed. The new default_create feature mechanism is also implemented.&lt;br /&gt;
* 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.&lt;br /&gt;
* Added examples for the new TUPLE type in directory tutorial/tuple.&lt;br /&gt;
* 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.)&lt;br /&gt;
* The external C interface is now compatible with the new ETL definition. (See directory tutorial/external/C for examples.)&lt;br /&gt;
* Added flag -high_memory_compiler to compile_to_c.&lt;br /&gt;
* 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.)&lt;br /&gt;
* 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.&lt;br /&gt;
* Added feature connect_append_to both in class TEXT_FILE_WRITE and BINARY_FILE_WRITE.&lt;br /&gt;
* 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.&lt;br /&gt;
* Added feature size_of and feature last_change_of in class FILE_TOOLS (see also tutorial/basic_time for examples).&lt;br /&gt;
* Added feature append_decimal_in and feature to_decimal in class NUMBER as well as a new example the tutorial/number directory.&lt;br /&gt;
* Added feature add both in class COLLECTION_SORTER and in class REVERSE_COLLECTION_SORTER.&lt;br /&gt;
* Added feature reference_at in class DICTIONARY.&lt;br /&gt;
* Added feature infix &amp;quot;+&amp;quot; in class POINTER.&lt;br /&gt;
* Various bug fixes and improvements.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.75 - Thursday July 16th, 2001 ===&lt;br /&gt;
&lt;br /&gt;
* 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.&lt;br /&gt;
* 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.&lt;br /&gt;
* Added a traditional -help flag for all commands to print a summary of available options.&lt;br /&gt;
* In ACE files as well as in &amp;quot;loadpath.se&amp;quot; files the ${SmallEiffelDirectory} environment variable is automatically defined using the value of the ${SmallEiffel} environment variable.&lt;br /&gt;
* 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.&lt;br /&gt;
* The new TUPLE type is now implemented.&lt;br /&gt;
* Added class TIME_IN_GERMAN to handle date and time in German. See tutorial/basic_time for examples.&lt;br /&gt;
* Feature is_equal of class COMPARABLE is now ELKS compatible.&lt;br /&gt;
* Added feature internal_key in class DICTIONARY.&lt;br /&gt;
* Various bug fixes and improvements.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.76 - Saturday November 11th, 2000 ===&lt;br /&gt;
&lt;br /&gt;
* 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.&lt;br /&gt;
* 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).&lt;br /&gt;
* Added feature reindex in class ARRAY.&lt;br /&gt;
* Added a brand new class SET[E-&amp;gt;HASHABLE].&lt;br /&gt;
* Added support for the Elate (Amiga) system as well as the vpcc C compiler.&lt;br /&gt;
* Added support for the QNX real time operating system.&lt;br /&gt;
* For feature dispose of class MEMORY (as well as redefinitions), the class invariant is no longer triggered.&lt;br /&gt;
* Added features atan2 and pow both in class REAL and DOUBLE.&lt;br /&gt;
* Internal implementation of BASIC_TIME revisited (using now a double for memorization).&lt;br /&gt;
* Implementation of class DICTIONARY completely revisited. Also added features add, item_map_in and key_map_in in the new class DICTIONARY.&lt;br /&gt;
* 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).&lt;br /&gt;
* Various bug fixes and improvements.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.77 - Saturday February 12th, 2000 ===&lt;br /&gt;
&lt;br /&gt;
* 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, ...&lt;br /&gt;
  To install SmallEiffel under some UNIX like system, just type make in the SmallEiffel directory.&lt;br /&gt;
  To install SmallEiffel under Windows, just run install.exe.&lt;br /&gt;
  On other systems, C compile and run the install.c file.&lt;br /&gt;
* 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.&lt;br /&gt;
* Added NUMBER library, for infinite precision and infinitely large numbers. See tutorial/number for examples.&lt;br /&gt;
* Added ITERATOR library, for external iterators on data structures. See tutorial/iterator for examples.&lt;br /&gt;
* 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).&lt;br /&gt;
* 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).&lt;br /&gt;
* Added class BIT_STRING for very large bit sequences, with reference semantics.&lt;br /&gt;
* 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).&lt;br /&gt;
* 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.&lt;br /&gt;
* Added feature to_hexadecimal and feature to_hexadecimal_in in class INTEGER.&lt;br /&gt;
* Improved incremental recompilation of the generated C code (also fixed a very old bug in incrementality).&lt;br /&gt;
* Exceptions handling: the default_rescue feature is now supported.&lt;br /&gt;
* Various bug fixes and improvements (type inference score increased, ...).&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.78 - Saturday June 05th, 1999 ===&lt;br /&gt;
&lt;br /&gt;
* New -html2 flag for command short generates a colorized HTML short form for classes.&lt;br /&gt;
* The garbage collector now takes into account feature dispose of class MEMORY for reference objects.&lt;br /&gt;
* Obsolete classes (obsolete keyword) now supported.&lt;br /&gt;
* Assertion tags are now displayed when an assertion fails.&lt;br /&gt;
* Added environment variable in loadpath files. Syntax: ${SOME_VAR}&lt;br /&gt;
* Added the -no_style_warning flag to suppress warnings when the recommended styles guidelines for Eiffel are not strictly followed.&lt;br /&gt;
* Added the -version flag to show SmallEiffel's version.&lt;br /&gt;
* 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.&lt;br /&gt;
* Class LINKED_LIST now replaces obsolete class LINK_LIST (simple renaming).&lt;br /&gt;
  Class TWO_WAY_LINKED_LIST now replaces obsolete class LINK2_LIST (simple renaming).&lt;br /&gt;
* Fixed &amp;quot;implicit renaming&amp;quot; bug.&lt;br /&gt;
* Cleaned all source code of tabulations at beginning of line (made code look ugly when using an editor whose tabs were not 8).&lt;br /&gt;
* Some new ELKS'95 features implemented.&lt;br /&gt;
* Validity rule VEEN fixed.&lt;br /&gt;
* Added class COLLECTION_SORTER and REVERSE_COLLECTION_SORTER to the library.&lt;br /&gt;
* Fixed file renaming portability bug (&amp;quot;.d files bug&amp;quot;).&lt;br /&gt;
* Validity rule VCFG.1 is now enforced.&lt;br /&gt;
* Validity rule VAPE is now enforced.&lt;br /&gt;
* Classes mentioned in a cecil.se file are now automatically made live. Makes it easier to link with external libraries.&lt;br /&gt;
* Various other bug fixes.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.79 - Tuesday December 22nd, 1998 ===&lt;br /&gt;
&lt;br /&gt;
* The new Eiffel construct Precursor as described OOSC2 is now implemented.&lt;br /&gt;
* The Eiffel expression strip is now implemented.&lt;br /&gt;
* Nested loadpath files now allowed.&lt;br /&gt;
* Extended anchored definition to accept infix and prefix feature names. For example, this kind of declaration is now accepted :      foo: like infix &amp;quot;+&amp;quot;.&lt;br /&gt;
* Classes COLLECTION2, ARRAY2 and FIXED_ARRAY2 of lib/base completely revisited.&lt;br /&gt;
* Fixed a bug related to calls of the form f.g.h; on expanded objects.&lt;br /&gt;
* Fixed a bug related to inheritance of generic classes.&lt;br /&gt;
* Fixed bugs related to assertions checking in case of exceptions (rescue clause, retry). Improved cycle detection in assertions.&lt;br /&gt;
* Fixed bug in GC related to recycling of &amp;quot;monsters&amp;quot; (very large resizable objets).&lt;br /&gt;
* Fixed an incredible bug in the implementation of the like Current type mark. ;-).&lt;br /&gt;
* Fixed many others bugs ($ operator, GC for alpha DEC, ...).&lt;br /&gt;
* System customization file for the BeOS system added in the &amp;quot;sys&amp;quot; sub-directory (more on system customization).&lt;br /&gt;
* Contents of the environment variable SmallEiffel must be now set with the absolute path of the file &amp;quot;system.se&amp;quot; which is in the sub-directory &amp;quot;sys&amp;quot; of the installation directory.&lt;br /&gt;
  Under a UNIX-like system, the value of the SmallEiffel environment variable may be for example: /usr/lib/SmallEiffel/sys/system.se&lt;br /&gt;
  Commands are also more robust when this environment variable contains non-alphanumeric characters.&lt;br /&gt;
* No more ensure assertion in GENERAL.get_environment_variable.&lt;br /&gt;
* Commands compile_to_jvm and print_jvm_class completely revisited. Java byte-code can be now used with the -verify Java option).&lt;br /&gt;
* Validity rule VDRD.6 is now enforced.&lt;br /&gt;
* Balancing rule (automatic promotion) for INTEGER, DOUBLE and REAL is now implemented.&lt;br /&gt;
* Recursive once routines now work correctly.&lt;br /&gt;
* Unmodified generated C files are not touched anymore.&lt;br /&gt;
* Assertions correctly checked for all external C routines.&lt;br /&gt;
* Exception handling now works when an exception occurs in external C code.&lt;br /&gt;
* Cleaned the compiler and decreased its memory footprint.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.80 - Thursday July 9th, 1998 ===&lt;br /&gt;
&lt;br /&gt;
* Exception handling implemented. Class EXCEPTIONS added in lib/kernel.&lt;br /&gt;
* 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).&lt;br /&gt;
* 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.&lt;br /&gt;
* Behavior of compilation flag -trace of command compile_to_c changed to allow step-by-step execution (embryo of Eiffel source code debugger).&lt;br /&gt;
* Feature ARRAY.resize completely revisited (added two features in class NATIVE_ARRAY: clear and move).&lt;br /&gt;
* Garbage Collector optimized (the GC should be more agressive and some benchmarks are included in directory SmallEiffel/misc/benchmarks/gc/*/bench.e).&lt;br /&gt;
* Associativity of infix operator &amp;quot;^&amp;quot; is now correctly handled.&lt;br /&gt;
* Fixed bugs in PLATFORM for Minimum_double, Minimum_real and Minimum_character_code.&lt;br /&gt;
* Fixed some others bugs about export rules, about expanded objects with expanded attributes.&lt;br /&gt;
* Fixed bugs in pretty.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.81 - Thursday April 9th, 1998 ===&lt;br /&gt;
&lt;br /&gt;
* 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).&lt;br /&gt;
* 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.)&lt;br /&gt;
  Added flag -clean which removes all the C and object files of the system. (This corresponds to the old default behavior.)&lt;br /&gt;
* Fixed a bug related to buffered input under Windows/MS VC.&lt;br /&gt;
* Fixed a bug in misc/INSTALL.SH script.&lt;br /&gt;
* Added require is_connected for all features put_* of class OUTPUT_STREAM.&lt;br /&gt;
* Fixed a bug in command short (require/ensure assertion of deferred routines are now printed).&lt;br /&gt;
* Added one useful hook for mode -html1 in command short (see hook Mcn).&lt;br /&gt;
* Added directory SmallEiffel/sys/runtime which contains the C runtime.&lt;br /&gt;
* Fixed a bug about instanciation of class ANY itself (not so common !).&lt;br /&gt;
* Fixed a bug about inlining of operator $.&lt;br /&gt;
* Fixed a bug about cyclic anchored definitions.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.82 - Friday January 16th, 1998 ===&lt;br /&gt;
&lt;br /&gt;
* Became the official GNU Eiffel compiler.&lt;br /&gt;
* Added first HTML mode to command short. Flag -html1. Thanks to Matthias Klause.&lt;br /&gt;
* Fixed bugs in command pretty.&lt;br /&gt;
* It is now possible to rename/redefine external &amp;quot;SmallEiffel&amp;quot; features.&lt;br /&gt;
* Files *.hlp of directory SmallEiffel/man no longer exists. All the documentation is now in *.html files plus corresponding automatically generated *.txt files.&lt;br /&gt;
* Manifest arrays creation has been optimized.&lt;br /&gt;
* Validity rule VHRC.2 is now enforced.&lt;br /&gt;
* Fixed bugs about export clause.&lt;br /&gt;
* Feature GENERAL.hash_code no longer exists. Added ELKS class HASHABLE in order to be compatible with others compilers/libraries.&lt;br /&gt;
* Fixed a bug in pre-computed once functions.&lt;br /&gt;
* Fixed a bug in REAL/DOUBLE keybord input.&lt;br /&gt;
* Reintroduced left hand side cast in C code for better performances (allowed by the C ANSI standard).&lt;br /&gt;
* Obsolete features (obsolete keyword) now generate a Warning.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.83 - Friday September 19th, 1997 ===&lt;br /&gt;
&lt;br /&gt;
* Added command short to the distribution.&lt;br /&gt;
* Added directory contrib in the distribution. This directory contains some scripts to use gdb as source level debugger for SmallEiffel.&lt;br /&gt;
* Added flag -no_warning to commands: compile_to_c, pretty, and compile_to_jvm.&lt;br /&gt;
* Added flag -case_insensitive to command compile_to_c.&lt;br /&gt;
* Fixed a bug for inherit/select.&lt;br /&gt;
* Fixed a bug for some pre-computed once function.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.84 - Monday August 18th, 1997 ===&lt;br /&gt;
&lt;br /&gt;
* Class BIT is now implemented in Java bytecode (command compile_to_jvm).&lt;br /&gt;
* Added external specification to call Java code (when using compile_to_jvm).&lt;br /&gt;
* 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.&lt;br /&gt;
* 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).&lt;br /&gt;
* Added STRING.substring_index (from ELKS written by Fridtjof SIEBERT).&lt;br /&gt;
* 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).&lt;br /&gt;
* Changed the behavior of end_of_input of INPUT_STREAM (this flag is true _after_ last character has been read).&lt;br /&gt;
* Fixed a bug in manifest arrays (mixed objects including Void).&lt;br /&gt;
* Fixed a bug dealing with some statically computed expressions.&lt;br /&gt;
* Fixed a bug in repeated inheritance.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.85 - Thursday July 3rd, 1997 ===&lt;br /&gt;
&lt;br /&gt;
* First beta-release of commands compile_to_jvm and print_jvm_class!&lt;br /&gt;
* 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.&lt;br /&gt;
* 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.&lt;br /&gt;
* Added feature to_hexadecimal and feature to_hexadecimal_in in class CHARACTER.&lt;br /&gt;
* Feature io, std_input, std_output and std_error of class GENERAL are no longer frozen.&lt;br /&gt;
* 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).&lt;br /&gt;
* Feature die_with_code of GENERAL now accepts any INTEGER code (not just predefined exit_success_code and exit_failure_code).&lt;br /&gt;
* Fixed a bug in STRING. The following expression is now true: (&amp;quot;a%/0/b&amp;quot;).count = 3&lt;br /&gt;
  Just try this on your favorite Eiffel compiler ;-)&lt;br /&gt;
* 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.&lt;br /&gt;
* Feature unread_character of class INPUT_STREAM is now implemented in Eiffel.&lt;br /&gt;
* Added OUTPUT_STREAM.put_pointer to view a POINTER.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.86 - Sunday April 13th, 1997 ===&lt;br /&gt;
&lt;br /&gt;
* All reported bugs at this time have been fixed.&lt;br /&gt;
* 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.&lt;br /&gt;
* Features BOOLEAN.infix &amp;quot;or&amp;quot; and BOOLEAN.infix &amp;quot;and&amp;quot; are now written in pure Eiffel. As a consequence, it is very important for the SmallEiffel programmer to make the distinction between BOOLEAN.infix &amp;quot;and then&amp;quot; and BOOLEAN.infix &amp;quot;and&amp;quot; (respectively for BOOLEAN.infix &amp;quot;or else&amp;quot; and BOOLEAN.infix &amp;quot;or&amp;quot;). When left-hand-side argument produces no side effect, the semi-strict operator (BOOLEAN.infix&amp;quot;and then&amp;quot;/&amp;quot;or else&amp;quot;) may run faster.&lt;br /&gt;
* Fixed REAL.sin (the old one was calling sqrt :-).&lt;br /&gt;
* Fixed a bug in INTEGER.append_in (you can now print Minimum_integer).&lt;br /&gt;
* Added feature in_range in class COMPARABLE.&lt;br /&gt;
* Result type of REAL.infix &amp;quot;^&amp;quot; is now DOUBLE for ELKS compatibility.&lt;br /&gt;
* Feature remove is now implemented in all subclasses of COLLECTION (i.e. ARRAY, FIXED_ARRAY, LINK_LIST and LINK2_LIST).&lt;br /&gt;
* Added feature add for all subclasses of COLLECTION.&lt;br /&gt;
* Conversion DOUBLE/STRING : ANSI C sscanf and sprintf is now used to avoid loss of precision.&lt;br /&gt;
* Added some more class invariant code generation when compiling in -invariant_check mode. Class invariant is now also checked before exit of a routine.&lt;br /&gt;
* Added feature file_tools in class GENERAL to ease access to class FILE_TOOLS.&lt;br /&gt;
* Changed printing format for basic *_REF classes. For example, instruction print(1); now prints 1.&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.87 - Tuesday January 7th, 1997 ===&lt;br /&gt;
&lt;br /&gt;
* Added a new flag -trace to ease debug (see man/compile_to_c file).&lt;br /&gt;
* More inlining at Eiffel level (-boost mode only).&lt;br /&gt;
* Class BIT_N completely revisited. It may be as fast as C.&lt;br /&gt;
* Added class C_ARRAY[E] to deal directly with C arrays at Eiffel level. Thus there are no more external &amp;quot;CSE&amp;quot; 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.&lt;br /&gt;
* Fixed a bug in STD_FILE_READ.read_double.&lt;br /&gt;
* Ordering of C output to increase gcc inlining.&lt;br /&gt;
* According to man/compile_to_c) , flag -debug_check now works (debug instructions are no longer generated in mode -all_check).&lt;br /&gt;
* Unused local variables removed at Eiffel level (warning added for -debug_check mode only).&lt;br /&gt;
* Default class ANY now inherits PLATFORM (as in ETL).&lt;br /&gt;
* Fixed a bug in floating-point constants.&lt;br /&gt;
* Added directory sys to customize default C compiler, default C linker and default loading path.&lt;br /&gt;
* Fixed some bugs with outside expanded types.&lt;br /&gt;
* Fixed a bug with rename/select.&lt;br /&gt;
* Redefinition of once routine is now allowed.&lt;br /&gt;
* Feature GENERAL.conforms_to is now implemented.&lt;br /&gt;
* Rule VFFD.7 is now enforced.&lt;br /&gt;
* Feature force implemented for all COLLECTION.&lt;br /&gt;
* Added conversions features CHARACTER.to_bit, INTEGER.to_bit, BIT_N.to_character and BIT_N.to_integer.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.88 - Wednesday October 30th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Fixed bugs dealing with inherit/rename/select.&lt;br /&gt;
* Added warning for missing colon in actual arguments list.&lt;br /&gt;
* Warning : INSTALL procedure has changed and you have to set manually the default loading path (see misc/INSTALL for details).&lt;br /&gt;
* Added some VMS customization.&lt;br /&gt;
* Fixed bugs when printing run-time stack.&lt;br /&gt;
* Warning added for missing colon in actual parameter list.&lt;br /&gt;
* Added flush in class STD_FILE_WRITE.&lt;br /&gt;
* No more left hand side cast in C code (because some C compilers don't like them).&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.89 - Sunday September 15th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Calling Eiffel from C is now implemented (see man/cecil) file).&lt;br /&gt;
* Object creation uses C calloc instead malloc+memset.&lt;br /&gt;
* Object creation is inlined.&lt;br /&gt;
* ARRAY/FIXED_ARRAY put and item are now inlined (-boost only).&lt;br /&gt;
* Added feature capacity and resize in FIXED_ARRAY.&lt;br /&gt;
* 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.&lt;br /&gt;
* More user's routines are inlined (-boost only).&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.90 - Friday August 23rd, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Added random number generator library (SmallEiffel/lib_rand).&lt;br /&gt;
* Added checking of assertions for external &amp;quot;CSE&amp;quot; features.&lt;br /&gt;
* Anchoring on expanded types are now allowed.&lt;br /&gt;
* Multiple level of anchoring definition allowed.&lt;br /&gt;
* Fixed a bug in STRING.from_external.&lt;br /&gt;
* Fixed a bug with mixed rename/redefine.&lt;br /&gt;
* Inheritance loop detection.&lt;br /&gt;
* Anchoring loop detection.&lt;br /&gt;
* Fixed a bug with renaming infix/prefix.&lt;br /&gt;
* Command clean also use the make suffix.&lt;br /&gt;
* Added ELKS95 sign in INTEGER/REAL/DOUBLE.&lt;br /&gt;
* Feature make is the default root feature name for compile.&lt;br /&gt;
* Optimized ARRAY.add_last and STRING.extend.&lt;br /&gt;
* Changed STRING.out (no more enclosing %&amp;quot; printed).&lt;br /&gt;
* Remove warning gcc messages for 64 bit machines (alpha/DEC).&lt;br /&gt;
* Added option -no_split for a better finalization (see man/compile_to_c) file).&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.91 - Wednesday July 24th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Incremental C compiling mode implemented (see option -c_code in help file man/compile) .&lt;br /&gt;
* Added command clean in help file man/clean.&lt;br /&gt;
* Added class FILE_TOOLS.&lt;br /&gt;
* No more empty C struct in generated C code (to avoid problems with Microsoft Windows C compiler).&lt;br /&gt;
* Fixed one more bug with conformance rule VNCG.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.92 - Saturday July 20th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Fixed some more bugs with conformance rule VNCG.&lt;br /&gt;
* Added math functions in DOUBLE/REAL (sin, cos, tan, asin, acos, atan, ... ANSI C names).&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.93 - Thursday July 18th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Fixed some more bugs with conformance rule VNCG.&lt;br /&gt;
* Type BIT is now implemented.&lt;br /&gt;
* Added ELKS 95 STRING.left_adjust and STRING.right_adjust.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.94 - Friday July 5th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Fixed some bugs with conformance rule VNCG.&lt;br /&gt;
* Static expressions are used to detect pre-computable once routines.&lt;br /&gt;
* Added features to_external and from_external both in classes ARRAY and FIXED_ARRAY.&lt;br /&gt;
* Fixed a bug for inheritance of ARRAY or FIXED_ARRAY.&lt;br /&gt;
* Contents of end of class comment checked.&lt;br /&gt;
* Added documentation file for external calls (see help file man/external ).&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.95 - Thursday May 30th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* It is now possible to inherit ARRAY.&lt;br /&gt;
* It is now possible to inherit STRING.&lt;br /&gt;
* Flag -cc of compile_to_c has changed.&lt;br /&gt;
* The PLATFORM class is now conform to ELKS95.&lt;br /&gt;
* Added feature twin (like the one of TowerEiffel) in GENERAL.&lt;br /&gt;
* Added features to_external and from_external in class STRING.&lt;br /&gt;
* Fixed some bugs in once pre-computed routines.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.96 - Friday May 10th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Internal renaming to suppress some warning messages and for a smooth integration with C++ software.&lt;br /&gt;
* DOS and Macintosh better portability.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.97 - Thursday May 2nd, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Inside of compiler cleaned.&lt;br /&gt;
* Pre-Computing of some once functions.&lt;br /&gt;
* Added class COLLECTION, LINK_LIST and FIXED_ARRAY in lib/base.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.98 - Friday March 15th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Command pretty added.&lt;br /&gt;
* Implements Eiffel expanded clause.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.99 - Saturday February 17th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* 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é&lt;br /&gt;
&lt;br /&gt;
=== Release - 1.00 - July 1995 ===&lt;br /&gt;
&lt;br /&gt;
* The very first bootstrap. SmallEiffel is born.&lt;/div&gt;</summary>
		<author><name>Cadrian</name></author>
	</entry>
	<entry>
		<id>https://wiki.liberty-eiffel.org/index.php?title=Release_Notes_(Versions_history)&amp;diff=1784</id>
		<title>Release Notes (Versions history)</title>
		<link rel="alternate" type="text/html" href="https://wiki.liberty-eiffel.org/index.php?title=Release_Notes_(Versions_history)&amp;diff=1784"/>
		<updated>2013-09-16T07:12:16Z</updated>

		<summary type="html">&lt;p&gt;Cadrian: /* Adler (not yet released, named after Charles Adler, Jr.) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== LibertyEiffel (latest release first) ==&lt;br /&gt;
For upcoming releases see the [[upcoming releases|list of names]].&lt;br /&gt;
&lt;br /&gt;
=== Adler (not yet released, named after Charles Adler, Jr.) ===&lt;br /&gt;
* First release as LibertyEiffel&lt;br /&gt;
* User-visible changes:&lt;br /&gt;
** Added [[library_class:NATURAL_8|&amp;lt;tt&amp;gt;NATURAL_8&amp;lt;/tt&amp;gt;]], [[library_class:NATURAL_16|&amp;lt;tt&amp;gt;NATURAL_16&amp;lt;/tt&amp;gt;]], [[library_class:NATURAL_32|&amp;lt;tt&amp;gt;NATURAL_32&amp;lt;/tt&amp;gt;]], and [[library_class:NATURAL_64|&amp;lt;tt&amp;gt;NATURAL_64&amp;lt;/tt&amp;gt;]] classes. See &amp;lt;tt&amp;gt;tutorial/natural.e&amp;lt;/tt&amp;gt; for examples.&lt;br /&gt;
** Even low-level features (i.e. &amp;lt;tt&amp;gt;external &amp;quot;built_in&amp;quot;&amp;lt;/tt&amp;gt;) are now checking their assertions. As an example, division by zero is now checked by assertions.&lt;br /&gt;
** Inlined dynamic dispatch for better performance&lt;br /&gt;
** A missing export clause is deprecated. Use &amp;lt;tt&amp;gt;{ANY}&amp;lt;/tt&amp;gt; instead.&lt;br /&gt;
** New core libraries: cli, json, log, parse (beware, those libraries are not yet tuned to be used without GC)&lt;br /&gt;
** Improved libraries: string (with notably a new [[library_class:FIXED_STRING|&amp;lt;tt&amp;gt;FIXED_STRING&amp;lt;/tt&amp;gt;]] class)&lt;br /&gt;
** Wrapper libraries: gtk, gdk, readline, ffi, 0mq...&lt;br /&gt;
** A new tool that can generate mocks to help unit testing&lt;br /&gt;
* Developer changes:&lt;br /&gt;
** The project name&lt;br /&gt;
** The project site: http://www.liberty-eiffel.org&lt;br /&gt;
** The web site now belongs to the repository&lt;br /&gt;
** Automatic testing tools (ET on the web, and &amp;lt;tt&amp;gt;watch_eiffeltest.sh&amp;lt;/tt&amp;gt; in the shell)&lt;br /&gt;
** Automatic Debian packages generation&lt;br /&gt;
&lt;br /&gt;
== SmartEiffel (all releases which are predecessors of Liberty) ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Release 2.3 [Antoine-Auguste Parmentier] - Wednesday July 11th 2007 ===&lt;br /&gt;
&lt;br /&gt;
Again, a lot of novelties for this release:&lt;br /&gt;
&lt;br /&gt;
* New [[Typing policy|typing rules]] have been revisited and are now crystal clear. See [[Typing policy|this page]] for details.&lt;br /&gt;
* Implemented a new [[class loading]] algorithm, which takes into account the &amp;quot;distance&amp;quot; between classes, thus reifying the notion of clusters and sub-clusters. Everything is transparent, there is no new keyword to learn.&lt;br /&gt;
* Installation: SmartEiffel now provides a streamlined installer for package maintainers. Of course, the interactive installer is still available via &amp;quot;make interactive&amp;quot;.&lt;br /&gt;
* Configuration: in the same spirit to simplify package maintainers' life, the configuration &amp;quot;file&amp;quot; can now be a directory.&lt;br /&gt;
* The new [[eiffeltest]] tool is now available too.&lt;br /&gt;
* Old style &amp;quot;rename.se&amp;quot; files are no longer considered. You can now use the same class name in different clusters.&lt;br /&gt;
* The &amp;lt;tt&amp;gt;NONE&amp;lt;/tt&amp;gt; type mark must no longer be used. Just use an empty &amp;lt;tt&amp;gt;{}&amp;lt;/tt&amp;gt; exportation list to indicate that the corresponding following features are not exported. This is better for newcomers.&lt;br /&gt;
* In class [[library_class:COLLECTION|&amp;lt;tt&amp;gt;COLLECTION&amp;lt;/tt&amp;gt;]], features &amp;lt;tt&amp;gt;index_of&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;fast_index_of&amp;lt;/tt&amp;gt; now have an extra argument to indicate where the search must start (as in class [[library_class:STRING|&amp;lt;tt&amp;gt;STRING&amp;lt;/tt&amp;gt;]]). See also &amp;lt;tt&amp;gt;first_index_of&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;fast_first_index_of&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* Microsoft's Visual C++ 2005 compiler is now supported.&lt;br /&gt;
* The debugging sections can be turned on with the new &amp;lt;tt&amp;gt;-debug&amp;lt;/tt&amp;gt; option, in all compilation modes other than &amp;lt;tt&amp;gt;-boost&amp;lt;/tt&amp;gt;. The &amp;lt;tt&amp;gt;-debug_check&amp;lt;/tt&amp;gt; mode has been deprecated.&lt;br /&gt;
* The regular expression library has been added.&lt;br /&gt;
* Sequencer's &amp;lt;tt&amp;gt;READY_DESCRIPTION&amp;lt;/tt&amp;gt; is now renamed as [[library_class:EVENTS_SET|&amp;lt;tt&amp;gt;EVENTS_SET&amp;lt;/tt&amp;gt;]] and has a unified interface for all kinds of events.&lt;br /&gt;
* Some work on the network cluster.&lt;br /&gt;
* Last but not least: SmartEiffel now has a logo that will help it fly!&lt;br /&gt;
&lt;br /&gt;
=== Release 2.2 [Pomme de terre] - Monday December 19th, 2005 ===&lt;br /&gt;
&lt;br /&gt;
Again, a lot of novelties for this release.&lt;br /&gt;
&lt;br /&gt;
First, the new [[eiffeldoc]] command has been completely revisited and is now part of the delivery. That command is 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.&lt;br /&gt;
&lt;br /&gt;
The second important novelty is that we now have a brand new introspection mechanism which allows us to implement the new persistency facility.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
* Added a new command, [[se]], which is meant to be the only command you ever need to put in your PATH!&lt;br /&gt;
* Added a new command, [[eiffeldoc]], that you can use to document your project. Currently only HTML output is supported.&lt;br /&gt;
* The [[plugins]] system is vastly improved and should now be preferred over older external specifications. See [[plugins|this page]] for details.&lt;br /&gt;
* Improved error messages legibility in order to avoid missunderstanding.&lt;br /&gt;
* Added a new OpenGL widget for Vision. Unix-based programs only have to inherit from [[library_class:UNIX_GL_WIDGET|&amp;lt;tt&amp;gt;UNIX_GL_WIDGET&amp;lt;/tt&amp;gt;]] and define all the OpenGL related routines.&lt;br /&gt;
* Added new abstract class named [[library_class:BIJECTIVE_DICTIONARY|&amp;lt;tt&amp;gt;BIJECTIVE_DICTIONARY&amp;lt;/tt&amp;gt;]] which is actually a replacement for the now obsolete [[library_class:DOUBLE_DICTIONARY|&amp;lt;tt&amp;gt;DOUBLE_DICTIONARY&amp;lt;/tt&amp;gt;]] class. At time being, there is only one implementation of [[library_class:BIJECTIVE_DICTIONARY|&amp;lt;tt&amp;gt;BIJECTIVE_DICTIONARY&amp;lt;/tt&amp;gt;]] named [[library_class:HASHED_BIJECTIVE_DICTIONARY|&amp;lt;tt&amp;gt;HASHED_BIJECTIVE_DICTIONARY&amp;lt;/tt&amp;gt;]] (a hash_code-based implementation).&lt;br /&gt;
* Removed class &amp;lt;tt&amp;gt;GENERAL&amp;lt;/tt&amp;gt; as well as some obsolete features of that class. In the past, &amp;lt;tt&amp;gt;GENERAL&amp;lt;/tt&amp;gt; was inherited by [[library_class:PLATFORM|&amp;lt;tt&amp;gt;PLATFORM&amp;lt;/tt&amp;gt;]] which was inherited by [[library_class:ANY.|&amp;lt;tt&amp;gt;ANY.&amp;lt;/tt&amp;gt;]] Now, [[library_class:ANY|&amp;lt;tt&amp;gt;ANY&amp;lt;/tt&amp;gt;]] has no more parent at all (no conforming parent and no non-conforming parents). The removal of &amp;lt;tt&amp;gt;GENERAL&amp;lt;/tt&amp;gt; is better for newcomers because they just need to know about [[library_class:ANY|&amp;lt;tt&amp;gt;ANY&amp;lt;/tt&amp;gt;]] and it is also better for the underlying model consistency. Because we have now removed &amp;lt;tt&amp;gt;equals&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;clone&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;deep_clone&amp;lt;/tt&amp;gt; you must now only use &amp;lt;tt&amp;gt;is_equal&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;twin&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;deep_twin&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;is_deep_equal&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;standard_is_equal&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;standard_twin&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* Removed the &amp;lt;tt&amp;gt;file_tools&amp;lt;/tt&amp;gt; feature from [[library_class:ANY.|&amp;lt;tt&amp;gt;ANY.&amp;lt;/tt&amp;gt;]] Also note that all other file manipulation features from [[library_class:ANY|&amp;lt;tt&amp;gt;ANY&amp;lt;/tt&amp;gt;]] are now obsolete (use the class [[library_class:FILE_TOOLS|&amp;lt;tt&amp;gt;FILE_TOOLS&amp;lt;/tt&amp;gt;]] instead).&lt;br /&gt;
* No more feature &amp;lt;tt&amp;gt;argument&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;argument_count&amp;lt;/tt&amp;gt; in class [[library_class:ANY.|&amp;lt;tt&amp;gt;ANY.&amp;lt;/tt&amp;gt;]] In order to access command-line arguments, just insert the class [[library_class:ARGUMENTS.|&amp;lt;tt&amp;gt;ARGUMENTS.&amp;lt;/tt&amp;gt;]]&lt;br /&gt;
* The &amp;lt;tt&amp;gt;-case_insensitive&amp;lt;/tt&amp;gt; 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 legibility of our code.&lt;br /&gt;
* You now get a warning for using the all lower-case spelling of the keywords &amp;lt;tt&amp;gt;current&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;result&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;void&amp;lt;/tt&amp;gt;. Please use the initial-caps spellings &amp;lt;tt&amp;gt;Current&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;Result&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;Void&amp;lt;/tt&amp;gt; instead.&lt;br /&gt;
* 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.&lt;br /&gt;
* 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.&lt;br /&gt;
* 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.&lt;br /&gt;
* 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.&lt;br /&gt;
* Feature &amp;lt;tt&amp;gt;is_equal&amp;lt;/tt&amp;gt; is now redefined in class [[library_class:HASHABLE|&amp;lt;tt&amp;gt;HASHABLE&amp;lt;/tt&amp;gt;]]. The new definition adds an ensure then assertion to check consistency with the &amp;lt;tt&amp;gt;hash_code&amp;lt;/tt&amp;gt; function. Note that the redefinition is deferred to force clients to select their preferred implementation.&lt;br /&gt;
* Added a new feature called &amp;lt;tt&amp;gt;set_storage&amp;lt;/tt&amp;gt; in class [[library_class:STRING.|&amp;lt;tt&amp;gt;STRING.&amp;lt;/tt&amp;gt;]] This low-level feature is only exported to [[library_class:STRING_HANDLER|&amp;lt;tt&amp;gt;STRING_HANDLER&amp;lt;/tt&amp;gt;]].&lt;br /&gt;
* Added a new features in class [[library_class:COLLECTION|&amp;lt;tt&amp;gt;COLLECTION&amp;lt;/tt&amp;gt;]]: &amp;lt;tt&amp;gt;remove_head&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;remove_tail&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;reverse_index_of&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;last_index_of&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;first_index_of&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;fast_reverse_index_of&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;fast_last_index_of&amp;lt;/tt&amp;gt;&lt;br /&gt;
* Added a new features in class [[library_class:DICTIONARY|&amp;lt;tt&amp;gt;DICTIONARY&amp;lt;/tt&amp;gt;]]: &amp;lt;tt&amp;gt;fast_reference_at&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;fast_put&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;fast_remove&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* Added a new Eiffel mode description for the Vim text editor. This mode is compatible with our emacs mode. File &amp;quot;misc/eiffel.vim&amp;quot; is for the Vim editor while file &amp;quot;misc/eiffel.el&amp;quot; is for emacs.&lt;br /&gt;
&lt;br /&gt;
=== Release 2.1 [Poirot] - Wednesday February 9th, 2005 ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
More details about changes from 2.0:&lt;br /&gt;
&lt;br /&gt;
* 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 &amp;quot;inherit&amp;quot; keyword. After that, you can use the &amp;quot;insert&amp;quot; keyword followed by the list of non-conforming parents. Like in the previous release, when a class has no &amp;quot;inherit&amp;quot; clause and no &amp;quot;insert&amp;quot; clause, the default insert ANY is automatically added.&lt;br /&gt;
The new compiler does not warn you anymore when multiple conforming paths 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).&lt;br /&gt;
* We introduced a brand new notation to generalize the old manifest array notation. You can now create an [[library_class:ARRAY|&amp;lt;tt&amp;gt;ARRAY&amp;lt;/tt&amp;gt;]] initialized with letters as follows:&lt;br /&gt;
        {ARRAY[CHARACTER] 1, &amp;lt;&amp;lt; 'a', 'b', 'c', 'd' &amp;gt;&amp;gt; }&lt;br /&gt;
or a LINKED_LIST doing:&lt;br /&gt;
        {LINKED_LIST[CHARACTER] &amp;lt;&amp;lt; 'a', 'b', 'c', 'd' &amp;gt;&amp;gt; }&lt;br /&gt;
as well as any kind of COLLECTION:&lt;br /&gt;
        {RING_ARRAY[CHARACTER] 1, &amp;lt;&amp;lt; 'a', 'b', 'c', 'd' &amp;gt;&amp;gt;}&lt;br /&gt;
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.&lt;br /&gt;
* Classes to manipulate floating point numbers have been completely revisited. Floating point number manipulation now uses [[library_class:REAL_32|&amp;lt;tt&amp;gt;REAL_32&amp;lt;/tt&amp;gt;]] for 32 bits floating points, [[library_class:REAL_64|&amp;lt;tt&amp;gt;REAL_64&amp;lt;/tt&amp;gt;]] which is equivalent of &amp;lt;tt&amp;gt;REAL&amp;lt;/tt&amp;gt; for 64 bits floating points, [[library_class:REAL_80|&amp;lt;tt&amp;gt;REAL_80&amp;lt;/tt&amp;gt;]] for architecture supporting 80 bits, [[library_class:REAL_128|&amp;lt;tt&amp;gt;REAL_128&amp;lt;/tt&amp;gt;]] for architecture supporting 128 bits and, [[library_class:REAL_EXTENDED|&amp;lt;tt&amp;gt;REAL_EXTENDED&amp;lt;/tt&amp;gt;]] which is automatically mapped on [[library_class:REAL_80|&amp;lt;tt&amp;gt;REAL_80&amp;lt;/tt&amp;gt;]] or [[library_class:REAL_128|&amp;lt;tt&amp;gt;REAL_128&amp;lt;/tt&amp;gt;]] depending on the architecture actually used. The old &amp;lt;tt&amp;gt;DOUBLE&amp;lt;/tt&amp;gt; class is now obsolete and is automatically replaced with simply &amp;lt;tt&amp;gt;REAL&amp;lt;/tt&amp;gt; (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 &amp;lt;tt&amp;gt;REAL&amp;lt;/tt&amp;gt;. As an example, ''1.5'' is of type &amp;lt;tt&amp;gt;REAL&amp;lt;/tt&amp;gt; whereas ''{REAL_32 1.5}'' is of type [[library_class:REAL_32|&amp;lt;tt&amp;gt;REAL_32&amp;lt;/tt&amp;gt;]] and ''{REAL_EXTENDED 1.5}'' is of type [[library_class:REAL_80|&amp;lt;tt&amp;gt;REAL_80&amp;lt;/tt&amp;gt;]] or [[library_class:REAL_128|&amp;lt;tt&amp;gt;REAL_128&amp;lt;/tt&amp;gt;]] depending on your hardware. See again SmartEiffel/tutorial/manifest_notation.e for details. Finally, also note that scientific notation has been added to display floating point.&lt;br /&gt;
* To handle downcasting in a better way than the still supported &amp;quot;?=&amp;quot; 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 &amp;quot;?:=&amp;quot; allows you to test if the downcasting can be safely done and the new &amp;quot;::=&amp;quot; assignment can actually perform the downcasting. In debug modes, the &amp;quot;?:=&amp;quot; predicate is considered as a require assertion of the &amp;quot;::=&amp;quot; assignment. The &amp;quot;?:=&amp;quot; predicate accepts type name for its left-hand side and is useful too in assertions. See SmartEiffel/tutorial/downcasting.e for examples.&lt;br /&gt;
* Command short improved: assertions are displayed according to the client's point of view (i.e. you do not see what you cannot call).&lt;br /&gt;
* Added classes [[library_class:STACK|&amp;lt;tt&amp;gt;STACK&amp;lt;/tt&amp;gt;]] and [[library_class:QUEUE|&amp;lt;tt&amp;gt;QUEUE&amp;lt;/tt&amp;gt;]]. Thanks to the &amp;quot;insert&amp;quot; mechanism, it is now safe and efficient to do so ([[library_class:STACK|&amp;lt;tt&amp;gt;STACK&amp;lt;/tt&amp;gt;]] shares the efficient implementation of [[library_class:FAST_ARRAY|&amp;lt;tt&amp;gt;FAST_ARRAY&amp;lt;/tt&amp;gt;]] and [[library_class:QUEUE|&amp;lt;tt&amp;gt;QUEUE&amp;lt;/tt&amp;gt;]] inserts [[library_class:RING_ARRAY|&amp;lt;tt&amp;gt;RING_ARRAY&amp;lt;/tt&amp;gt;]]).&lt;br /&gt;
* Improved memory usage for classes [[library_class:LINKED_LIST|&amp;lt;tt&amp;gt;LINKED_LIST&amp;lt;/tt&amp;gt;]], [[library_class:TWO_WAY_LINKED_LIST|&amp;lt;tt&amp;gt;TWO_WAY_LINKED_LIST&amp;lt;/tt&amp;gt;]], [[library_class:AVL_SET|&amp;lt;tt&amp;gt;AVL_SET&amp;lt;/tt&amp;gt;]], [[library_class:AVL_DICTIONARY|&amp;lt;tt&amp;gt;AVL_DICTIONARY&amp;lt;/tt&amp;gt;]], [[library_class:HASHED_SET|&amp;lt;tt&amp;gt;HASHED_SET&amp;lt;/tt&amp;gt;]] and [[library_class:HASHED_DICTIONARY|&amp;lt;tt&amp;gt;HASHED_DICTIONARY&amp;lt;/tt&amp;gt;]]. Free cells are automatically recycled between various instances of the same generic derivation. Thoses classes are now using our [[library_class:WEAK_REFERENCE|&amp;lt;tt&amp;gt;WEAK_REFERENCE&amp;lt;/tt&amp;gt;]] class silently.&lt;br /&gt;
* Removed obsolete class &amp;lt;tt&amp;gt;BIT&amp;lt;/tt&amp;gt;. Now, just use existing bit operations from [[library_class:INTEGER_8|&amp;lt;tt&amp;gt;INTEGER_8&amp;lt;/tt&amp;gt;]], [[library_class:INTEGER_16|&amp;lt;tt&amp;gt;INTEGER_16&amp;lt;/tt&amp;gt;]], [[library_class:INTEGER_32|&amp;lt;tt&amp;gt;INTEGER_32&amp;lt;/tt&amp;gt;]], &amp;lt;tt&amp;gt;INTEGER&amp;lt;/tt&amp;gt;, [[library_class:INTEGER_64|&amp;lt;tt&amp;gt;INTEGER_64&amp;lt;/tt&amp;gt;]] or, for very long sequences of bits, the completely revisited [[library_class:BIT_STRING|&amp;lt;tt&amp;gt;BIT_STRING&amp;lt;/tt&amp;gt;]] class.&lt;br /&gt;
* 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!&lt;br /&gt;
* 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:&lt;br /&gt;
        3.to_string &lt;br /&gt;
        3.5.print_on(io) &lt;br /&gt;
        &amp;quot;foo&amp;quot;.print_on(io) &lt;br /&gt;
* A new network library has been recently added. This is brand new work which is still in progress. See SmartEiffel/lib/net for details.&lt;br /&gt;
* The old Eiffel strip expression is no longer supported.&lt;br /&gt;
&lt;br /&gt;
=== Release 2.0 [Hercule] - Monday September 27th, 2004 ===&lt;br /&gt;
&lt;br /&gt;
Actually, this new 2.0 release is the beginning of a new era in SmartEiffel's life!&lt;br /&gt;
&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
More details about changes from 1.1:&lt;br /&gt;
&lt;br /&gt;
* Very large systems are handled far more efficiently (but maybe at a cost for smaller systems).&lt;br /&gt;
* The new non-conforming inheritance mechanism is now implemented. For code portatbility, we decided to stick with the &amp;quot;inherit&amp;quot; keyword for conforming parents. So just start your class as usual. Then, to describe the non-conforming parents, just use the &amp;quot;insert&amp;quot; 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 &amp;quot;select&amp;quot; clause (you'll be warned by the compiler). Also keep in mind that when a class has no &amp;quot;inherit&amp;quot; clause and no &amp;quot;insert&amp;quot; clause, the default insert [[library_class:ANY|&amp;lt;tt&amp;gt;ANY&amp;lt;/tt&amp;gt;]] 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.&lt;br /&gt;
* Repeated inheritance is now correctly handled.&lt;br /&gt;
* The optimizer is rewritten and can do more optimizations.&lt;br /&gt;
* 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).&lt;br /&gt;
* 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 [[library_class:NATIVE_ARRAY|&amp;lt;tt&amp;gt;NATIVE_ARRAY&amp;lt;/tt&amp;gt;]]s). Command such as ''p ..1'' is useful to get another element of the array or another attribute of the same object.&lt;br /&gt;
* Dead code is now checked, which explains the compiler takes more time and memory.&lt;br /&gt;
* 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 &amp;quot;good&amp;quot; cluster.&lt;br /&gt;
The new organization splits the classes by logical topics. Note that each cluster may contain two special clusters: &amp;quot;low_level&amp;quot;, containing classes that you might use if you need better performance (generally when you build some utility or library classes); &amp;quot;internal&amp;quot; containing support classes, and not meant to be used directly.&lt;br /&gt;
Now, the organization itself:&lt;br /&gt;
** &amp;quot;abilities&amp;quot; contains the &amp;quot;able&amp;quot; classes ([[library_class:COMPARABLE|&amp;lt;tt&amp;gt;COMPARABLE&amp;lt;/tt&amp;gt;]], [[library_class:HASHABLE|&amp;lt;tt&amp;gt;HASHABLE&amp;lt;/tt&amp;gt;]], and so on);&lt;br /&gt;
** &amp;quot;io&amp;quot; contains the input-out classes; this cluster has but changed from the old one (see below for more details);&lt;br /&gt;
** &amp;quot;iterator&amp;quot; still contains the iterator on storage classes (see the &amp;quot;storage&amp;quot; cluster);&lt;br /&gt;
** &amp;quot;kernel&amp;quot; contains the few general-purpose which could not be put in other clusters, and are quite mandatory for the compiler to work;&lt;br /&gt;
** &amp;quot;numeric&amp;quot; contains all the classes that can be use to manipulate numbers; you will find here &amp;lt;tt&amp;gt;INTEGER&amp;lt;/tt&amp;gt;s, &amp;lt;tt&amp;gt;REAL&amp;lt;/tt&amp;gt;s, but also [[library_class:NUMBER|&amp;lt;tt&amp;gt;NUMBER&amp;lt;/tt&amp;gt;]]s (the infinite-precision integers); This cluster also includes the new [[library_class:MUTABLE_BIG_INTEGER|&amp;lt;tt&amp;gt;MUTABLE_BIG_INTEGER&amp;lt;/tt&amp;gt;]] class which is an efficient tools for fast integer number crunching.&lt;br /&gt;
** &amp;quot;random&amp;quot; contains the pseudo-random number generation classes;&lt;br /&gt;
** &amp;quot;scoop&amp;quot; contains the SCOOP utilities (not that SCOOP works better than in SE 1.1...);&lt;br /&gt;
** &amp;quot;storage&amp;quot; contains all the classes that store data: [[library_class:COLLECTION|&amp;lt;tt&amp;gt;COLLECTION&amp;lt;/tt&amp;gt;]], [[library_class:DICTIONARY|&amp;lt;tt&amp;gt;DICTIONARY&amp;lt;/tt&amp;gt;]], [[library_class:SET|&amp;lt;tt&amp;gt;SET&amp;lt;/tt&amp;gt;]]... (Note: see below for more details on [[library_class:DICTIONARY|&amp;lt;tt&amp;gt;DICTIONARY&amp;lt;/tt&amp;gt;]] and [[library_class:SET|&amp;lt;tt&amp;gt;SET&amp;lt;/tt&amp;gt;]]);&lt;br /&gt;
** &amp;quot;string&amp;quot; contains the [[library_class:STRING|&amp;lt;tt&amp;gt;STRING&amp;lt;/tt&amp;gt;]] and related classes (also Unicode strings);&lt;br /&gt;
** &amp;quot;time&amp;quot; contains the [[library_class:TIME|&amp;lt;tt&amp;gt;TIME&amp;lt;/tt&amp;gt;]]-related classes;&lt;br /&gt;
** &amp;quot;vision&amp;quot; contains the vision graphical library classes;&lt;br /&gt;
** &amp;quot;sorting&amp;quot; contains most common algorithm to sort [[library_class:COLLECTION|&amp;lt;tt&amp;gt;COLLECTION&amp;lt;/tt&amp;gt;]]s;&lt;br /&gt;
** &amp;quot;misc&amp;quot; contains some useful classes that cannot be easily put elsewhere short of having their own cluster.&lt;br /&gt;
&lt;br /&gt;
* [[library_class:DICTIONARY|&amp;lt;tt&amp;gt;DICTIONARY&amp;lt;/tt&amp;gt;]] class is now deferred and has no more generic constraint. The library now includes two different implementations.&lt;br /&gt;
** The [[library_class:HASHED_DICTIONARY|&amp;lt;tt&amp;gt;HASHED_DICTIONARY&amp;lt;/tt&amp;gt;]] implementation is the hash_code based implementation (the generic constraint for [[library_class:HASHED_DICTIONARY|&amp;lt;tt&amp;gt;HASHED_DICTIONARY&amp;lt;/tt&amp;gt;]] is [[library_class:HASHABLE|&amp;lt;tt&amp;gt;HASHABLE&amp;lt;/tt&amp;gt;]]).&lt;br /&gt;
** The [[library_class:AVL_DICTIONARY|&amp;lt;tt&amp;gt;AVL_DICTIONARY&amp;lt;/tt&amp;gt;]] implementation is a balanced tree based implementation (the generic constraint for this implemetation is [[library_class:COMPARABLE|&amp;lt;tt&amp;gt;COMPARABLE&amp;lt;/tt&amp;gt;]]).&lt;br /&gt;
You should update all your create instructions by selecting [[library_class:HASHED_DICTIONARY|&amp;lt;tt&amp;gt;HASHED_DICTIONARY&amp;lt;/tt&amp;gt;]] or [[library_class:AVL_DICTIONARY|&amp;lt;tt&amp;gt;AVL_DICTIONARY&amp;lt;/tt&amp;gt;]]. In order to ease this code update, the compiler will warn you that [[library_class:HASHED_DICTIONARY|&amp;lt;tt&amp;gt;HASHED_DICTIONARY&amp;lt;/tt&amp;gt;]] is selected by default. Please update your code because this is a temporary warning of the compiler.&lt;br /&gt;
&lt;br /&gt;
* Some more [[library_class:DICTIONARY|&amp;lt;tt&amp;gt;DICTIONARY&amp;lt;/tt&amp;gt;]] classes were also added (among them: [[library_class:DOUBLE_DICTIONARY|&amp;lt;tt&amp;gt;DOUBLE_DICTIONARY&amp;lt;/tt&amp;gt;]] can be of interest).&lt;br /&gt;
* The [[library_class:SET|&amp;lt;tt&amp;gt;SET&amp;lt;/tt&amp;gt;]] class has undergone the same transformation ([[library_class:HASHED_SET|&amp;lt;tt&amp;gt;HASHED_SET&amp;lt;/tt&amp;gt;]] and [[library_class:AVL_SET|&amp;lt;tt&amp;gt;AVL_SET&amp;lt;/tt&amp;gt;]]).&lt;br /&gt;
* A [[library_class:RING_ARRAY|&amp;lt;tt&amp;gt;RING_ARRAY&amp;lt;/tt&amp;gt;]] class was added. This [[library_class:COLLECTION|&amp;lt;tt&amp;gt;COLLECTION&amp;lt;/tt&amp;gt;]] is quite similar to an [[library_class:ARRAY|&amp;lt;tt&amp;gt;ARRAY&amp;lt;/tt&amp;gt;]] that performs well for all queue operations (add|remove)_(first|last) thanks to its circular internal representation.&lt;br /&gt;
* The [[library_class:TUPLE|&amp;lt;tt&amp;gt;TUPLE&amp;lt;/tt&amp;gt;]] class is now defined in Eiffel. Thanks to this new source code implementation, we have added the definition for the `item' feature definition.&lt;br /&gt;
* The [[library_class:ROUTINE|&amp;lt;tt&amp;gt;ROUTINE&amp;lt;/tt&amp;gt;]], [[library_class:PROCEDURE|&amp;lt;tt&amp;gt;PROCEDURE&amp;lt;/tt&amp;gt;]] and [[library_class:FUNCTION|&amp;lt;tt&amp;gt;FUNCTION&amp;lt;/tt&amp;gt;]] classes are also defined in Eiffel.&lt;br /&gt;
* Added a new [[library_class:WEAK_REFERENCE|&amp;lt;tt&amp;gt;WEAK_REFERENCE&amp;lt;/tt&amp;gt;]] class with the appropriate garbage collector support.&lt;br /&gt;
* Split has been improved in order to reduce C files compilation after a change.&lt;br /&gt;
* Added a new &amp;quot;-profile&amp;quot; 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:&lt;br /&gt;
** the profiling output is written in the &amp;quot;profile.se&amp;quot; file;&lt;br /&gt;
** for each entry, the &amp;quot;own&amp;quot; and &amp;quot;cumul&amp;quot; times, total and average, are given; also, the caller features and the called ones are displayed;&lt;br /&gt;
** 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);&lt;br /&gt;
** the Eiffel called features are sorted by decreasing number of calls;&lt;br /&gt;
** 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).&lt;br /&gt;
**e that:&lt;br /&gt;
** profiled programs take MUCH longer to execute (a lot of, hem, time, is spent in the kernel merely to, hem, track time...)&lt;br /&gt;
** externals are not profiled; they are accounted in the &amp;quot;own&amp;quot; time of their caller;&lt;br /&gt;
** inlined features are not profiled either (only in -boost)&lt;br /&gt;
** 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.&lt;br /&gt;
**s to Lothar Scholz for having the idea in the first place.&lt;br /&gt;
**ped the input-output system to make it more general and more extensible. Provided features:&lt;br /&gt;
** now streams can be &amp;quot;filtered&amp;quot;. It means you can nest them to bring extra features such as encoding or encryption (among many other things)&lt;br /&gt;
** 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.&lt;br /&gt;
See also the cluster description on the SmartEiffel site.&lt;br /&gt;
* Visitors revisited. The architecture is now ready to be used (in 1.1 it was but a draft).&lt;br /&gt;
&lt;br /&gt;
== SmartEiffel (release 1.1 down to release 1.0) ==&lt;br /&gt;
&lt;br /&gt;
=== Release 1.1 [Charlemagne] - Monday June 16th, 2003 ===&lt;br /&gt;
&lt;br /&gt;
* Thoroughly changed the configuration handling. The new scheme is more complete, and much more flexible.&lt;br /&gt;
** 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 &amp;lt;Enter&amp;gt; key. For more informations about installation and all new configuration capabilities, please have a look to install page.&lt;br /&gt;
** Added the -c_mode option, in conjunction with the new configuration handling.&lt;br /&gt;
** Added a -loadpath flag to read an extra loadpath.&lt;br /&gt;
* 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.&lt;br /&gt;
* Added a small expression evaluator to sedb. One can now display the attributes of the objects on the stack. Be sure to read the &amp;quot;more-help&amp;quot; section on data display (for once functions, the result is unavailable if it has not yet been called).&lt;br /&gt;
* 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.&lt;br /&gt;
* Implemented inspect on [[library_class:STRING|&amp;lt;tt&amp;gt;STRING&amp;lt;/tt&amp;gt;]]s.&lt;br /&gt;
* 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!&lt;br /&gt;
* [[pretty]] significantly updated.&lt;br /&gt;
* The C files produced by the compiler now should work on any platform, even with the GC turned on.&lt;br /&gt;
* Added Unicode support in [[library_class:STRING|&amp;lt;tt&amp;gt;STRING&amp;lt;/tt&amp;gt;]]s (see the SmartEiffel/tutorial/unicode and SmartEiffel/lib/unicode directories).&lt;br /&gt;
* Added new abstract class [[library_class:FILE|&amp;lt;tt&amp;gt;FILE&amp;lt;/tt&amp;gt;]] and new features in class [[library_class:DIRECTORY|&amp;lt;tt&amp;gt;DIRECTORY&amp;lt;/tt&amp;gt;]].&lt;br /&gt;
* Added hexadecimal notation for &amp;lt;tt&amp;gt;INTEGER&amp;lt;/tt&amp;gt; constants, [[library_class:CHARACTER|&amp;lt;tt&amp;gt;CHARACTER&amp;lt;/tt&amp;gt;]] constants and inside manifest [[library_class:STRING|&amp;lt;tt&amp;gt;STRING&amp;lt;/tt&amp;gt;]]s as well. See the example in file SmartEiffel/tutorial/hexadecimal.e for more information.&lt;br /&gt;
* Added agent facilities on [[library_class:STRING|&amp;lt;tt&amp;gt;STRING&amp;lt;/tt&amp;gt;]] and [[library_class:UNICODE_STRING|&amp;lt;tt&amp;gt;UNICODE_STRING&amp;lt;/tt&amp;gt;]] (warning, those facilities are non-standard extensions).&lt;br /&gt;
* 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.&lt;br /&gt;
* Moved the bin_c directory to install/germ.&lt;br /&gt;
* Reorganized the SmartEiffel/sys/runtime directory:&lt;br /&gt;
** Clearly separated C and Java backend helpers&lt;br /&gt;
** 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&lt;br /&gt;
* Added the -compact option which produces much more compact C code.&lt;br /&gt;
* same_type from &amp;lt;tt&amp;gt;GENERAL&amp;lt;/tt&amp;gt; is now obsolete. Use same_dynamic_type instead.&lt;br /&gt;
* Obsoleted operators &amp;quot;and&amp;quot;, &amp;quot;or&amp;quot;, &amp;quot;xor&amp;quot; and &amp;quot;not&amp;quot; for &amp;lt;tt&amp;gt;INTEGER&amp;lt;/tt&amp;gt;s, and added prefix operator &amp;quot;~&amp;quot;.&lt;br /&gt;
* [[library_class:MEMORY|&amp;lt;tt&amp;gt;MEMORY&amp;lt;/tt&amp;gt;]].allocated_bytes is more accurate.&lt;br /&gt;
* Generated object files are now removed before calling C compiler.&lt;br /&gt;
* Various bug fixes and improvements (see details in the SmartZilla bug tracker).&lt;br /&gt;
&lt;br /&gt;
=== Release 1.0 - Friday December 6th, 2002 ===&lt;br /&gt;
&lt;br /&gt;
This is the very first release with the name SmartEiffel!&lt;br /&gt;
(Previous releases were named SmallEiffel.)&lt;br /&gt;
&lt;br /&gt;
The main changes between SmallEiffel -0.74 and SmartEiffel 1.0 are:&lt;br /&gt;
&lt;br /&gt;
* Name changed from SmallEiffel to SmartEiffel!&lt;br /&gt;
* Version numbering: now, versions are numbered from 1.0 beta 1 upward&lt;br /&gt;
* 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).&lt;br /&gt;
* The new Reference keyword is now implemented. Use reference &amp;lt;tt&amp;gt;INTEGER&amp;lt;/tt&amp;gt; instead of &amp;lt;tt&amp;gt;INTEGER_REF&amp;lt;/tt&amp;gt;. &amp;lt;tt&amp;gt;INTEGER_REF&amp;lt;/tt&amp;gt; will become obsolete.&lt;br /&gt;
* The new [[library_class:INTEGER_GENERAL|&amp;lt;tt&amp;gt;INTEGER_GENERAL&amp;lt;/tt&amp;gt;]], [[library_class:INTEGER_8|&amp;lt;tt&amp;gt;INTEGER_8&amp;lt;/tt&amp;gt;]], [[library_class:INTEGER_16|&amp;lt;tt&amp;gt;INTEGER_16&amp;lt;/tt&amp;gt;]], [[library_class:INTEGER_32|&amp;lt;tt&amp;gt;INTEGER_32&amp;lt;/tt&amp;gt;]], [[library_class:INTEGER_64|&amp;lt;tt&amp;gt;INTEGER_64&amp;lt;/tt&amp;gt;]] types are now implemented.&lt;br /&gt;
* After long discussions, we have decided to stick to our decision for the type of integer constants (as an example, 127 is of type [[library_class:INTEGER_8|&amp;lt;tt&amp;gt;INTEGER_8&amp;lt;/tt&amp;gt;]] and 128 is of type [[library_class:INTEGER_16|&amp;lt;tt&amp;gt;INTEGER_16&amp;lt;/tt&amp;gt;]] 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 &amp;lt;tt&amp;gt;&amp;lt;&amp;lt;...&amp;gt;&amp;gt;&amp;lt;/tt&amp;gt; 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 :)&lt;br /&gt;
* 64-bit architectures supported.&lt;br /&gt;
* Internal improvements in the type system (better C code produced)&lt;br /&gt;
* Buffered I/O. You may get big improvements on programs performing lots of file reading or writing ([[library_class:STD_INPUT|&amp;lt;tt&amp;gt;STD_INPUT&amp;lt;/tt&amp;gt;]] and [[library_class:STD_OUTPUT|&amp;lt;tt&amp;gt;STD_OUTPUT&amp;lt;/tt&amp;gt;]] are also buffered).&lt;br /&gt;
* The short command now has the &amp;quot;-client&amp;quot; option (see short command manual for more details).&lt;br /&gt;
* The &amp;quot;tcc&amp;quot; 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.&lt;br /&gt;
* New bug reporting tool. Now you can see all known bugs and their state. Allways refers to the bug report page on SmartEiffel site.&lt;br /&gt;
* As suggested on our mailing list, there are now two new classes in order to remove some definitions from &amp;lt;tt&amp;gt;GENERAL&amp;lt;/tt&amp;gt; (see class [[library_class:MATH_CONSTANTS|&amp;lt;tt&amp;gt;MATH_CONSTANTS&amp;lt;/tt&amp;gt;]] and class [[library_class:CHARACTER_CONSTANTS|&amp;lt;tt&amp;gt;CHARACTER_CONSTANTS&amp;lt;/tt&amp;gt;]]).&lt;br /&gt;
* 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 &amp;gt;&amp;gt; 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.&lt;br /&gt;
* Type mark must now follow the Precursor keyword.&lt;br /&gt;
* Fixed the bug recently reported by Wolfgang Jansen. (Well isolated bug report, thanks!) This bug was related to expanded objects and the twin feature.&lt;br /&gt;
* Fixed the -manifest_string_trace bug recently reported by Alexis Saettler. (Well isolated bug as well, thanks!)&lt;br /&gt;
* 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 &amp;quot;like Current&amp;quot; type mark into some hard-coded type mark (e.g. &amp;quot;FOO&amp;quot;). 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 [[library_class:NUMBER|&amp;lt;tt&amp;gt;NUMBER&amp;lt;/tt&amp;gt;]] library implementation of &amp;lt;tt&amp;gt;is_equal&amp;lt;/tt&amp;gt; (''like Current'' is now changed to [[library_class:NUMBER|&amp;lt;tt&amp;gt;NUMBER&amp;lt;/tt&amp;gt;]]) and changed the postcondition of &amp;lt;tt&amp;gt;is_equal&amp;lt;/tt&amp;gt; in &amp;lt;tt&amp;gt;GENERAL&amp;lt;/tt&amp;gt; (ensure assertion relaxed to no longer call standard_is_equal).&lt;br /&gt;
* 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/&lt;br /&gt;
* New Cygwin directory notation is now supported. Recent Cygwin systems will be automatically detected while install.&lt;br /&gt;
* Other &amp;quot;secret&amp;quot; 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.&lt;br /&gt;
* Improved internal lab process to more easily provide professional support contracts (see premium support for more details).&lt;br /&gt;
* New functions in [[library_class:COLLECTION_SORTER|&amp;lt;tt&amp;gt;COLLECTION_SORTER&amp;lt;/tt&amp;gt;]] classes using dichotomic search.&lt;br /&gt;
* GC support for the Elate system updated.&lt;br /&gt;
* Various bug fixes and improvements.&lt;br /&gt;
&lt;br /&gt;
== SmallEiffel (all releases of SmallEiffel) ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.74 - Tuesday May 7th, 2002 ===&lt;br /&gt;
&lt;br /&gt;
* The new agent mechanism is now implemented. See tutorial/agent directory for examples.&lt;br /&gt;
* 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.&lt;br /&gt;
* The new create instruction/expression is now fully implemented and correctly pretty-printed. The new default_create feature mechanism is also implemented.&lt;br /&gt;
* 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.&lt;br /&gt;
* Added examples for the new TUPLE type in directory tutorial/tuple.&lt;br /&gt;
* 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.)&lt;br /&gt;
* The external C interface is now compatible with the new ETL definition. (See directory tutorial/external/C for examples.)&lt;br /&gt;
* Added flag -high_memory_compiler to compile_to_c.&lt;br /&gt;
* 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.)&lt;br /&gt;
* 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.&lt;br /&gt;
* Added feature connect_append_to both in class TEXT_FILE_WRITE and BINARY_FILE_WRITE.&lt;br /&gt;
* 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.&lt;br /&gt;
* Added feature size_of and feature last_change_of in class FILE_TOOLS (see also tutorial/basic_time for examples).&lt;br /&gt;
* Added feature append_decimal_in and feature to_decimal in class NUMBER as well as a new example the tutorial/number directory.&lt;br /&gt;
* Added feature add both in class COLLECTION_SORTER and in class REVERSE_COLLECTION_SORTER.&lt;br /&gt;
* Added feature reference_at in class DICTIONARY.&lt;br /&gt;
* Added feature infix &amp;quot;+&amp;quot; in class POINTER.&lt;br /&gt;
* Various bug fixes and improvements.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.75 - Thursday July 16th, 2001 ===&lt;br /&gt;
&lt;br /&gt;
* 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.&lt;br /&gt;
* 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.&lt;br /&gt;
* Added a traditional -help flag for all commands to print a summary of available options.&lt;br /&gt;
* In ACE files as well as in &amp;quot;loadpath.se&amp;quot; files the ${SmallEiffelDirectory} environment variable is automatically defined using the value of the ${SmallEiffel} environment variable.&lt;br /&gt;
* 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.&lt;br /&gt;
* The new TUPLE type is now implemented.&lt;br /&gt;
* Added class TIME_IN_GERMAN to handle date and time in German. See tutorial/basic_time for examples.&lt;br /&gt;
* Feature is_equal of class COMPARABLE is now ELKS compatible.&lt;br /&gt;
* Added feature internal_key in class DICTIONARY.&lt;br /&gt;
* Various bug fixes and improvements.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.76 - Saturday November 11th, 2000 ===&lt;br /&gt;
&lt;br /&gt;
* 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.&lt;br /&gt;
* 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).&lt;br /&gt;
* Added feature reindex in class ARRAY.&lt;br /&gt;
* Added a brand new class SET[E-&amp;gt;HASHABLE].&lt;br /&gt;
* Added support for the Elate (Amiga) system as well as the vpcc C compiler.&lt;br /&gt;
* Added support for the QNX real time operating system.&lt;br /&gt;
* For feature dispose of class MEMORY (as well as redefinitions), the class invariant is no longer triggered.&lt;br /&gt;
* Added features atan2 and pow both in class REAL and DOUBLE.&lt;br /&gt;
* Internal implementation of BASIC_TIME revisited (using now a double for memorization).&lt;br /&gt;
* Implementation of class DICTIONARY completely revisited. Also added features add, item_map_in and key_map_in in the new class DICTIONARY.&lt;br /&gt;
* 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).&lt;br /&gt;
* Various bug fixes and improvements.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.77 - Saturday February 12th, 2000 ===&lt;br /&gt;
&lt;br /&gt;
* 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, ...&lt;br /&gt;
  To install SmallEiffel under some UNIX like system, just type make in the SmallEiffel directory.&lt;br /&gt;
  To install SmallEiffel under Windows, just run install.exe.&lt;br /&gt;
  On other systems, C compile and run the install.c file.&lt;br /&gt;
* 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.&lt;br /&gt;
* Added NUMBER library, for infinite precision and infinitely large numbers. See tutorial/number for examples.&lt;br /&gt;
* Added ITERATOR library, for external iterators on data structures. See tutorial/iterator for examples.&lt;br /&gt;
* 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).&lt;br /&gt;
* 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).&lt;br /&gt;
* Added class BIT_STRING for very large bit sequences, with reference semantics.&lt;br /&gt;
* 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).&lt;br /&gt;
* 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.&lt;br /&gt;
* Added feature to_hexadecimal and feature to_hexadecimal_in in class INTEGER.&lt;br /&gt;
* Improved incremental recompilation of the generated C code (also fixed a very old bug in incrementality).&lt;br /&gt;
* Exceptions handling: the default_rescue feature is now supported.&lt;br /&gt;
* Various bug fixes and improvements (type inference score increased, ...).&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.78 - Saturday June 05th, 1999 ===&lt;br /&gt;
&lt;br /&gt;
* New -html2 flag for command short generates a colorized HTML short form for classes.&lt;br /&gt;
* The garbage collector now takes into account feature dispose of class MEMORY for reference objects.&lt;br /&gt;
* Obsolete classes (obsolete keyword) now supported.&lt;br /&gt;
* Assertion tags are now displayed when an assertion fails.&lt;br /&gt;
* Added environment variable in loadpath files. Syntax: ${SOME_VAR}&lt;br /&gt;
* Added the -no_style_warning flag to suppress warnings when the recommended styles guidelines for Eiffel are not strictly followed.&lt;br /&gt;
* Added the -version flag to show SmallEiffel's version.&lt;br /&gt;
* 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.&lt;br /&gt;
* Class LINKED_LIST now replaces obsolete class LINK_LIST (simple renaming).&lt;br /&gt;
  Class TWO_WAY_LINKED_LIST now replaces obsolete class LINK2_LIST (simple renaming).&lt;br /&gt;
* Fixed &amp;quot;implicit renaming&amp;quot; bug.&lt;br /&gt;
* Cleaned all source code of tabulations at beginning of line (made code look ugly when using an editor whose tabs were not 8).&lt;br /&gt;
* Some new ELKS'95 features implemented.&lt;br /&gt;
* Validity rule VEEN fixed.&lt;br /&gt;
* Added class COLLECTION_SORTER and REVERSE_COLLECTION_SORTER to the library.&lt;br /&gt;
* Fixed file renaming portability bug (&amp;quot;.d files bug&amp;quot;).&lt;br /&gt;
* Validity rule VCFG.1 is now enforced.&lt;br /&gt;
* Validity rule VAPE is now enforced.&lt;br /&gt;
* Classes mentioned in a cecil.se file are now automatically made live. Makes it easier to link with external libraries.&lt;br /&gt;
* Various other bug fixes.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.79 - Tuesday December 22nd, 1998 ===&lt;br /&gt;
&lt;br /&gt;
* The new Eiffel construct Precursor as described OOSC2 is now implemented.&lt;br /&gt;
* The Eiffel expression strip is now implemented.&lt;br /&gt;
* Nested loadpath files now allowed.&lt;br /&gt;
* Extended anchored definition to accept infix and prefix feature names. For example, this kind of declaration is now accepted :      foo: like infix &amp;quot;+&amp;quot;.&lt;br /&gt;
* Classes COLLECTION2, ARRAY2 and FIXED_ARRAY2 of lib/base completely revisited.&lt;br /&gt;
* Fixed a bug related to calls of the form f.g.h; on expanded objects.&lt;br /&gt;
* Fixed a bug related to inheritance of generic classes.&lt;br /&gt;
* Fixed bugs related to assertions checking in case of exceptions (rescue clause, retry). Improved cycle detection in assertions.&lt;br /&gt;
* Fixed bug in GC related to recycling of &amp;quot;monsters&amp;quot; (very large resizable objets).&lt;br /&gt;
* Fixed an incredible bug in the implementation of the like Current type mark. ;-).&lt;br /&gt;
* Fixed many others bugs ($ operator, GC for alpha DEC, ...).&lt;br /&gt;
* System customization file for the BeOS system added in the &amp;quot;sys&amp;quot; sub-directory (more on system customization).&lt;br /&gt;
* Contents of the environment variable SmallEiffel must be now set with the absolute path of the file &amp;quot;system.se&amp;quot; which is in the sub-directory &amp;quot;sys&amp;quot; of the installation directory.&lt;br /&gt;
  Under a UNIX-like system, the value of the SmallEiffel environment variable may be for example: /usr/lib/SmallEiffel/sys/system.se&lt;br /&gt;
  Commands are also more robust when this environment variable contains non-alphanumeric characters.&lt;br /&gt;
* No more ensure assertion in GENERAL.get_environment_variable.&lt;br /&gt;
* Commands compile_to_jvm and print_jvm_class completely revisited. Java byte-code can be now used with the -verify Java option).&lt;br /&gt;
* Validity rule VDRD.6 is now enforced.&lt;br /&gt;
* Balancing rule (automatic promotion) for INTEGER, DOUBLE and REAL is now implemented.&lt;br /&gt;
* Recursive once routines now work correctly.&lt;br /&gt;
* Unmodified generated C files are not touched anymore.&lt;br /&gt;
* Assertions correctly checked for all external C routines.&lt;br /&gt;
* Exception handling now works when an exception occurs in external C code.&lt;br /&gt;
* Cleaned the compiler and decreased its memory footprint.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.80 - Thursday July 9th, 1998 ===&lt;br /&gt;
&lt;br /&gt;
* Exception handling implemented. Class EXCEPTIONS added in lib/kernel.&lt;br /&gt;
* 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).&lt;br /&gt;
* 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.&lt;br /&gt;
* Behavior of compilation flag -trace of command compile_to_c changed to allow step-by-step execution (embryo of Eiffel source code debugger).&lt;br /&gt;
* Feature ARRAY.resize completely revisited (added two features in class NATIVE_ARRAY: clear and move).&lt;br /&gt;
* Garbage Collector optimized (the GC should be more agressive and some benchmarks are included in directory SmallEiffel/misc/benchmarks/gc/*/bench.e).&lt;br /&gt;
* Associativity of infix operator &amp;quot;^&amp;quot; is now correctly handled.&lt;br /&gt;
* Fixed bugs in PLATFORM for Minimum_double, Minimum_real and Minimum_character_code.&lt;br /&gt;
* Fixed some others bugs about export rules, about expanded objects with expanded attributes.&lt;br /&gt;
* Fixed bugs in pretty.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.81 - Thursday April 9th, 1998 ===&lt;br /&gt;
&lt;br /&gt;
* 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).&lt;br /&gt;
* 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.)&lt;br /&gt;
  Added flag -clean which removes all the C and object files of the system. (This corresponds to the old default behavior.)&lt;br /&gt;
* Fixed a bug related to buffered input under Windows/MS VC.&lt;br /&gt;
* Fixed a bug in misc/INSTALL.SH script.&lt;br /&gt;
* Added require is_connected for all features put_* of class OUTPUT_STREAM.&lt;br /&gt;
* Fixed a bug in command short (require/ensure assertion of deferred routines are now printed).&lt;br /&gt;
* Added one useful hook for mode -html1 in command short (see hook Mcn).&lt;br /&gt;
* Added directory SmallEiffel/sys/runtime which contains the C runtime.&lt;br /&gt;
* Fixed a bug about instanciation of class ANY itself (not so common !).&lt;br /&gt;
* Fixed a bug about inlining of operator $.&lt;br /&gt;
* Fixed a bug about cyclic anchored definitions.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.82 - Friday January 16th, 1998 ===&lt;br /&gt;
&lt;br /&gt;
* Became the official GNU Eiffel compiler.&lt;br /&gt;
* Added first HTML mode to command short. Flag -html1. Thanks to Matthias Klause.&lt;br /&gt;
* Fixed bugs in command pretty.&lt;br /&gt;
* It is now possible to rename/redefine external &amp;quot;SmallEiffel&amp;quot; features.&lt;br /&gt;
* Files *.hlp of directory SmallEiffel/man no longer exists. All the documentation is now in *.html files plus corresponding automatically generated *.txt files.&lt;br /&gt;
* Manifest arrays creation has been optimized.&lt;br /&gt;
* Validity rule VHRC.2 is now enforced.&lt;br /&gt;
* Fixed bugs about export clause.&lt;br /&gt;
* Feature GENERAL.hash_code no longer exists. Added ELKS class HASHABLE in order to be compatible with others compilers/libraries.&lt;br /&gt;
* Fixed a bug in pre-computed once functions.&lt;br /&gt;
* Fixed a bug in REAL/DOUBLE keybord input.&lt;br /&gt;
* Reintroduced left hand side cast in C code for better performances (allowed by the C ANSI standard).&lt;br /&gt;
* Obsolete features (obsolete keyword) now generate a Warning.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.83 - Friday September 19th, 1997 ===&lt;br /&gt;
&lt;br /&gt;
* Added command short to the distribution.&lt;br /&gt;
* Added directory contrib in the distribution. This directory contains some scripts to use gdb as source level debugger for SmallEiffel.&lt;br /&gt;
* Added flag -no_warning to commands: compile_to_c, pretty, and compile_to_jvm.&lt;br /&gt;
* Added flag -case_insensitive to command compile_to_c.&lt;br /&gt;
* Fixed a bug for inherit/select.&lt;br /&gt;
* Fixed a bug for some pre-computed once function.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.84 - Monday August 18th, 1997 ===&lt;br /&gt;
&lt;br /&gt;
* Class BIT is now implemented in Java bytecode (command compile_to_jvm).&lt;br /&gt;
* Added external specification to call Java code (when using compile_to_jvm).&lt;br /&gt;
* 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.&lt;br /&gt;
* 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).&lt;br /&gt;
* Added STRING.substring_index (from ELKS written by Fridtjof SIEBERT).&lt;br /&gt;
* 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).&lt;br /&gt;
* Changed the behavior of end_of_input of INPUT_STREAM (this flag is true _after_ last character has been read).&lt;br /&gt;
* Fixed a bug in manifest arrays (mixed objects including Void).&lt;br /&gt;
* Fixed a bug dealing with some statically computed expressions.&lt;br /&gt;
* Fixed a bug in repeated inheritance.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.85 - Thursday July 3rd, 1997 ===&lt;br /&gt;
&lt;br /&gt;
* First beta-release of commands compile_to_jvm and print_jvm_class!&lt;br /&gt;
* 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.&lt;br /&gt;
* 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.&lt;br /&gt;
* Added feature to_hexadecimal and feature to_hexadecimal_in in class CHARACTER.&lt;br /&gt;
* Feature io, std_input, std_output and std_error of class GENERAL are no longer frozen.&lt;br /&gt;
* 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).&lt;br /&gt;
* Feature die_with_code of GENERAL now accepts any INTEGER code (not just predefined exit_success_code and exit_failure_code).&lt;br /&gt;
* Fixed a bug in STRING. The following expression is now true: (&amp;quot;a%/0/b&amp;quot;).count = 3&lt;br /&gt;
  Just try this on your favorite Eiffel compiler ;-)&lt;br /&gt;
* 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.&lt;br /&gt;
* Feature unread_character of class INPUT_STREAM is now implemented in Eiffel.&lt;br /&gt;
* Added OUTPUT_STREAM.put_pointer to view a POINTER.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.86 - Sunday April 13th, 1997 ===&lt;br /&gt;
&lt;br /&gt;
* All reported bugs at this time have been fixed.&lt;br /&gt;
* 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.&lt;br /&gt;
* Features BOOLEAN.infix &amp;quot;or&amp;quot; and BOOLEAN.infix &amp;quot;and&amp;quot; are now written in pure Eiffel. As a consequence, it is very important for the SmallEiffel programmer to make the distinction between BOOLEAN.infix &amp;quot;and then&amp;quot; and BOOLEAN.infix &amp;quot;and&amp;quot; (respectively for BOOLEAN.infix &amp;quot;or else&amp;quot; and BOOLEAN.infix &amp;quot;or&amp;quot;). When left-hand-side argument produces no side effect, the semi-strict operator (BOOLEAN.infix&amp;quot;and then&amp;quot;/&amp;quot;or else&amp;quot;) may run faster.&lt;br /&gt;
* Fixed REAL.sin (the old one was calling sqrt :-).&lt;br /&gt;
* Fixed a bug in INTEGER.append_in (you can now print Minimum_integer).&lt;br /&gt;
* Added feature in_range in class COMPARABLE.&lt;br /&gt;
* Result type of REAL.infix &amp;quot;^&amp;quot; is now DOUBLE for ELKS compatibility.&lt;br /&gt;
* Feature remove is now implemented in all subclasses of COLLECTION (i.e. ARRAY, FIXED_ARRAY, LINK_LIST and LINK2_LIST).&lt;br /&gt;
* Added feature add for all subclasses of COLLECTION.&lt;br /&gt;
* Conversion DOUBLE/STRING : ANSI C sscanf and sprintf is now used to avoid loss of precision.&lt;br /&gt;
* Added some more class invariant code generation when compiling in -invariant_check mode. Class invariant is now also checked before exit of a routine.&lt;br /&gt;
* Added feature file_tools in class GENERAL to ease access to class FILE_TOOLS.&lt;br /&gt;
* Changed printing format for basic *_REF classes. For example, instruction print(1); now prints 1.&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.87 - Tuesday January 7th, 1997 ===&lt;br /&gt;
&lt;br /&gt;
* Added a new flag -trace to ease debug (see man/compile_to_c file).&lt;br /&gt;
* More inlining at Eiffel level (-boost mode only).&lt;br /&gt;
* Class BIT_N completely revisited. It may be as fast as C.&lt;br /&gt;
* Added class C_ARRAY[E] to deal directly with C arrays at Eiffel level. Thus there are no more external &amp;quot;CSE&amp;quot; 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.&lt;br /&gt;
* Fixed a bug in STD_FILE_READ.read_double.&lt;br /&gt;
* Ordering of C output to increase gcc inlining.&lt;br /&gt;
* According to man/compile_to_c) , flag -debug_check now works (debug instructions are no longer generated in mode -all_check).&lt;br /&gt;
* Unused local variables removed at Eiffel level (warning added for -debug_check mode only).&lt;br /&gt;
* Default class ANY now inherits PLATFORM (as in ETL).&lt;br /&gt;
* Fixed a bug in floating-point constants.&lt;br /&gt;
* Added directory sys to customize default C compiler, default C linker and default loading path.&lt;br /&gt;
* Fixed some bugs with outside expanded types.&lt;br /&gt;
* Fixed a bug with rename/select.&lt;br /&gt;
* Redefinition of once routine is now allowed.&lt;br /&gt;
* Feature GENERAL.conforms_to is now implemented.&lt;br /&gt;
* Rule VFFD.7 is now enforced.&lt;br /&gt;
* Feature force implemented for all COLLECTION.&lt;br /&gt;
* Added conversions features CHARACTER.to_bit, INTEGER.to_bit, BIT_N.to_character and BIT_N.to_integer.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.88 - Wednesday October 30th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Fixed bugs dealing with inherit/rename/select.&lt;br /&gt;
* Added warning for missing colon in actual arguments list.&lt;br /&gt;
* Warning : INSTALL procedure has changed and you have to set manually the default loading path (see misc/INSTALL for details).&lt;br /&gt;
* Added some VMS customization.&lt;br /&gt;
* Fixed bugs when printing run-time stack.&lt;br /&gt;
* Warning added for missing colon in actual parameter list.&lt;br /&gt;
* Added flush in class STD_FILE_WRITE.&lt;br /&gt;
* No more left hand side cast in C code (because some C compilers don't like them).&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.89 - Sunday September 15th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Calling Eiffel from C is now implemented (see man/cecil) file).&lt;br /&gt;
* Object creation uses C calloc instead malloc+memset.&lt;br /&gt;
* Object creation is inlined.&lt;br /&gt;
* ARRAY/FIXED_ARRAY put and item are now inlined (-boost only).&lt;br /&gt;
* Added feature capacity and resize in FIXED_ARRAY.&lt;br /&gt;
* 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.&lt;br /&gt;
* More user's routines are inlined (-boost only).&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.90 - Friday August 23rd, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Added random number generator library (SmallEiffel/lib_rand).&lt;br /&gt;
* Added checking of assertions for external &amp;quot;CSE&amp;quot; features.&lt;br /&gt;
* Anchoring on expanded types are now allowed.&lt;br /&gt;
* Multiple level of anchoring definition allowed.&lt;br /&gt;
* Fixed a bug in STRING.from_external.&lt;br /&gt;
* Fixed a bug with mixed rename/redefine.&lt;br /&gt;
* Inheritance loop detection.&lt;br /&gt;
* Anchoring loop detection.&lt;br /&gt;
* Fixed a bug with renaming infix/prefix.&lt;br /&gt;
* Command clean also use the make suffix.&lt;br /&gt;
* Added ELKS95 sign in INTEGER/REAL/DOUBLE.&lt;br /&gt;
* Feature make is the default root feature name for compile.&lt;br /&gt;
* Optimized ARRAY.add_last and STRING.extend.&lt;br /&gt;
* Changed STRING.out (no more enclosing %&amp;quot; printed).&lt;br /&gt;
* Remove warning gcc messages for 64 bit machines (alpha/DEC).&lt;br /&gt;
* Added option -no_split for a better finalization (see man/compile_to_c) file).&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.91 - Wednesday July 24th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Incremental C compiling mode implemented (see option -c_code in help file man/compile) .&lt;br /&gt;
* Added command clean in help file man/clean.&lt;br /&gt;
* Added class FILE_TOOLS.&lt;br /&gt;
* No more empty C struct in generated C code (to avoid problems with Microsoft Windows C compiler).&lt;br /&gt;
* Fixed one more bug with conformance rule VNCG.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.92 - Saturday July 20th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Fixed some more bugs with conformance rule VNCG.&lt;br /&gt;
* Added math functions in DOUBLE/REAL (sin, cos, tan, asin, acos, atan, ... ANSI C names).&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.93 - Thursday July 18th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Fixed some more bugs with conformance rule VNCG.&lt;br /&gt;
* Type BIT is now implemented.&lt;br /&gt;
* Added ELKS 95 STRING.left_adjust and STRING.right_adjust.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.94 - Friday July 5th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Fixed some bugs with conformance rule VNCG.&lt;br /&gt;
* Static expressions are used to detect pre-computable once routines.&lt;br /&gt;
* Added features to_external and from_external both in classes ARRAY and FIXED_ARRAY.&lt;br /&gt;
* Fixed a bug for inheritance of ARRAY or FIXED_ARRAY.&lt;br /&gt;
* Contents of end of class comment checked.&lt;br /&gt;
* Added documentation file for external calls (see help file man/external ).&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.95 - Thursday May 30th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* It is now possible to inherit ARRAY.&lt;br /&gt;
* It is now possible to inherit STRING.&lt;br /&gt;
* Flag -cc of compile_to_c has changed.&lt;br /&gt;
* The PLATFORM class is now conform to ELKS95.&lt;br /&gt;
* Added feature twin (like the one of TowerEiffel) in GENERAL.&lt;br /&gt;
* Added features to_external and from_external in class STRING.&lt;br /&gt;
* Fixed some bugs in once pre-computed routines.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.96 - Friday May 10th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Internal renaming to suppress some warning messages and for a smooth integration with C++ software.&lt;br /&gt;
* DOS and Macintosh better portability.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.97 - Thursday May 2nd, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Inside of compiler cleaned.&lt;br /&gt;
* Pre-Computing of some once functions.&lt;br /&gt;
* Added class COLLECTION, LINK_LIST and FIXED_ARRAY in lib/base.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.98 - Friday March 15th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Command pretty added.&lt;br /&gt;
* Implements Eiffel expanded clause.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.99 - Saturday February 17th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* 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é&lt;br /&gt;
&lt;br /&gt;
=== Release - 1.00 - July 1995 ===&lt;br /&gt;
&lt;br /&gt;
* The very first bootstrap. SmallEiffel is born.&lt;/div&gt;</summary>
		<author><name>Cadrian</name></author>
	</entry>
	<entry>
		<id>https://wiki.liberty-eiffel.org/index.php?title=Release_Notes_(Versions_history)&amp;diff=1783</id>
		<title>Release Notes (Versions history)</title>
		<link rel="alternate" type="text/html" href="https://wiki.liberty-eiffel.org/index.php?title=Release_Notes_(Versions_history)&amp;diff=1783"/>
		<updated>2013-09-16T07:10:35Z</updated>

		<summary type="html">&lt;p&gt;Cadrian: /* Adler (not yet released, named after Charles Adler, Jr.) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== LibertyEiffel (latest release first) ==&lt;br /&gt;
For upcoming releases see the [[upcoming releases|list of names]].&lt;br /&gt;
&lt;br /&gt;
=== Adler (not yet released, named after Charles Adler, Jr.) ===&lt;br /&gt;
* First release as LibertyEiffel&lt;br /&gt;
* User-visible changes:&lt;br /&gt;
** Added &amp;lt;tt&amp;gt;NATURAL_8&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;NATURAL_16&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;NATURAL_32&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;NATURAL_64&amp;lt;/tt&amp;gt; classes. See tutorial/natural.e for examples.&lt;br /&gt;
** Even low-level features (i.e. &amp;lt;tt&amp;gt;external &amp;quot;built_in&amp;quot;&amp;lt;/tt&amp;gt;) are now checking their assertions. As an example, division by zero is now checked by assertions.&lt;br /&gt;
** Inlined dynamic dispatch for better performance&lt;br /&gt;
** A missing export clause is deprecated. Use &amp;lt;tt&amp;gt;{ANY}&amp;lt;/tt&amp;gt; instead.&lt;br /&gt;
** New core libraries: cli, json, log, parse (beware, those libraries are not yet tuned to be used without GC)&lt;br /&gt;
** Improved libraries: string (with notably a new &amp;lt;tt&amp;gt;FIXED_STRING&amp;lt;/tt&amp;gt; class)&lt;br /&gt;
** Wrapper libraries: gtk, gdk, readline, ffi, 0mq...&lt;br /&gt;
** A new tool that can generate mocks to help unit testing&lt;br /&gt;
* Developer changes:&lt;br /&gt;
** The project name&lt;br /&gt;
** The project site: http://www.liberty-eiffel.org&lt;br /&gt;
** The web site now belongs to the repository&lt;br /&gt;
** Automatic testing tools (ET on the web, and &amp;lt;tt&amp;gt;watch_eiffeltest.sh&amp;lt;/tt&amp;gt; in the shell)&lt;br /&gt;
** Automatic Debian packages generation&lt;br /&gt;
&lt;br /&gt;
== SmartEiffel (all releases which are predecessors of Liberty) ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Release 2.3 [Antoine-Auguste Parmentier] - Wednesday July 11th 2007 ===&lt;br /&gt;
&lt;br /&gt;
Again, a lot of novelties for this release:&lt;br /&gt;
&lt;br /&gt;
* New [[Typing policy|typing rules]] have been revisited and are now crystal clear. See [[Typing policy|this page]] for details.&lt;br /&gt;
* Implemented a new [[class loading]] algorithm, which takes into account the &amp;quot;distance&amp;quot; between classes, thus reifying the notion of clusters and sub-clusters. Everything is transparent, there is no new keyword to learn.&lt;br /&gt;
* Installation: SmartEiffel now provides a streamlined installer for package maintainers. Of course, the interactive installer is still available via &amp;quot;make interactive&amp;quot;.&lt;br /&gt;
* Configuration: in the same spirit to simplify package maintainers' life, the configuration &amp;quot;file&amp;quot; can now be a directory.&lt;br /&gt;
* The new [[eiffeltest]] tool is now available too.&lt;br /&gt;
* Old style &amp;quot;rename.se&amp;quot; files are no longer considered. You can now use the same class name in different clusters.&lt;br /&gt;
* The &amp;lt;tt&amp;gt;NONE&amp;lt;/tt&amp;gt; type mark must no longer be used. Just use an empty &amp;lt;tt&amp;gt;{}&amp;lt;/tt&amp;gt; exportation list to indicate that the corresponding following features are not exported. This is better for newcomers.&lt;br /&gt;
* In class [[library_class:COLLECTION|&amp;lt;tt&amp;gt;COLLECTION&amp;lt;/tt&amp;gt;]], features &amp;lt;tt&amp;gt;index_of&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;fast_index_of&amp;lt;/tt&amp;gt; now have an extra argument to indicate where the search must start (as in class [[library_class:STRING|&amp;lt;tt&amp;gt;STRING&amp;lt;/tt&amp;gt;]]). See also &amp;lt;tt&amp;gt;first_index_of&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;fast_first_index_of&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* Microsoft's Visual C++ 2005 compiler is now supported.&lt;br /&gt;
* The debugging sections can be turned on with the new &amp;lt;tt&amp;gt;-debug&amp;lt;/tt&amp;gt; option, in all compilation modes other than &amp;lt;tt&amp;gt;-boost&amp;lt;/tt&amp;gt;. The &amp;lt;tt&amp;gt;-debug_check&amp;lt;/tt&amp;gt; mode has been deprecated.&lt;br /&gt;
* The regular expression library has been added.&lt;br /&gt;
* Sequencer's &amp;lt;tt&amp;gt;READY_DESCRIPTION&amp;lt;/tt&amp;gt; is now renamed as [[library_class:EVENTS_SET|&amp;lt;tt&amp;gt;EVENTS_SET&amp;lt;/tt&amp;gt;]] and has a unified interface for all kinds of events.&lt;br /&gt;
* Some work on the network cluster.&lt;br /&gt;
* Last but not least: SmartEiffel now has a logo that will help it fly!&lt;br /&gt;
&lt;br /&gt;
=== Release 2.2 [Pomme de terre] - Monday December 19th, 2005 ===&lt;br /&gt;
&lt;br /&gt;
Again, a lot of novelties for this release.&lt;br /&gt;
&lt;br /&gt;
First, the new [[eiffeldoc]] command has been completely revisited and is now part of the delivery. That command is 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.&lt;br /&gt;
&lt;br /&gt;
The second important novelty is that we now have a brand new introspection mechanism which allows us to implement the new persistency facility.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
* Added a new command, [[se]], which is meant to be the only command you ever need to put in your PATH!&lt;br /&gt;
* Added a new command, [[eiffeldoc]], that you can use to document your project. Currently only HTML output is supported.&lt;br /&gt;
* The [[plugins]] system is vastly improved and should now be preferred over older external specifications. See [[plugins|this page]] for details.&lt;br /&gt;
* Improved error messages legibility in order to avoid missunderstanding.&lt;br /&gt;
* Added a new OpenGL widget for Vision. Unix-based programs only have to inherit from [[library_class:UNIX_GL_WIDGET|&amp;lt;tt&amp;gt;UNIX_GL_WIDGET&amp;lt;/tt&amp;gt;]] and define all the OpenGL related routines.&lt;br /&gt;
* Added new abstract class named [[library_class:BIJECTIVE_DICTIONARY|&amp;lt;tt&amp;gt;BIJECTIVE_DICTIONARY&amp;lt;/tt&amp;gt;]] which is actually a replacement for the now obsolete [[library_class:DOUBLE_DICTIONARY|&amp;lt;tt&amp;gt;DOUBLE_DICTIONARY&amp;lt;/tt&amp;gt;]] class. At time being, there is only one implementation of [[library_class:BIJECTIVE_DICTIONARY|&amp;lt;tt&amp;gt;BIJECTIVE_DICTIONARY&amp;lt;/tt&amp;gt;]] named [[library_class:HASHED_BIJECTIVE_DICTIONARY|&amp;lt;tt&amp;gt;HASHED_BIJECTIVE_DICTIONARY&amp;lt;/tt&amp;gt;]] (a hash_code-based implementation).&lt;br /&gt;
* Removed class &amp;lt;tt&amp;gt;GENERAL&amp;lt;/tt&amp;gt; as well as some obsolete features of that class. In the past, &amp;lt;tt&amp;gt;GENERAL&amp;lt;/tt&amp;gt; was inherited by [[library_class:PLATFORM|&amp;lt;tt&amp;gt;PLATFORM&amp;lt;/tt&amp;gt;]] which was inherited by [[library_class:ANY.|&amp;lt;tt&amp;gt;ANY.&amp;lt;/tt&amp;gt;]] Now, [[library_class:ANY|&amp;lt;tt&amp;gt;ANY&amp;lt;/tt&amp;gt;]] has no more parent at all (no conforming parent and no non-conforming parents). The removal of &amp;lt;tt&amp;gt;GENERAL&amp;lt;/tt&amp;gt; is better for newcomers because they just need to know about [[library_class:ANY|&amp;lt;tt&amp;gt;ANY&amp;lt;/tt&amp;gt;]] and it is also better for the underlying model consistency. Because we have now removed &amp;lt;tt&amp;gt;equals&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;clone&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;deep_clone&amp;lt;/tt&amp;gt; you must now only use &amp;lt;tt&amp;gt;is_equal&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;twin&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;deep_twin&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;is_deep_equal&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;standard_is_equal&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;standard_twin&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* Removed the &amp;lt;tt&amp;gt;file_tools&amp;lt;/tt&amp;gt; feature from [[library_class:ANY.|&amp;lt;tt&amp;gt;ANY.&amp;lt;/tt&amp;gt;]] Also note that all other file manipulation features from [[library_class:ANY|&amp;lt;tt&amp;gt;ANY&amp;lt;/tt&amp;gt;]] are now obsolete (use the class [[library_class:FILE_TOOLS|&amp;lt;tt&amp;gt;FILE_TOOLS&amp;lt;/tt&amp;gt;]] instead).&lt;br /&gt;
* No more feature &amp;lt;tt&amp;gt;argument&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;argument_count&amp;lt;/tt&amp;gt; in class [[library_class:ANY.|&amp;lt;tt&amp;gt;ANY.&amp;lt;/tt&amp;gt;]] In order to access command-line arguments, just insert the class [[library_class:ARGUMENTS.|&amp;lt;tt&amp;gt;ARGUMENTS.&amp;lt;/tt&amp;gt;]]&lt;br /&gt;
* The &amp;lt;tt&amp;gt;-case_insensitive&amp;lt;/tt&amp;gt; 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 legibility of our code.&lt;br /&gt;
* You now get a warning for using the all lower-case spelling of the keywords &amp;lt;tt&amp;gt;current&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;result&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;void&amp;lt;/tt&amp;gt;. Please use the initial-caps spellings &amp;lt;tt&amp;gt;Current&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;Result&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;Void&amp;lt;/tt&amp;gt; instead.&lt;br /&gt;
* 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.&lt;br /&gt;
* 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.&lt;br /&gt;
* 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.&lt;br /&gt;
* 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.&lt;br /&gt;
* Feature &amp;lt;tt&amp;gt;is_equal&amp;lt;/tt&amp;gt; is now redefined in class [[library_class:HASHABLE|&amp;lt;tt&amp;gt;HASHABLE&amp;lt;/tt&amp;gt;]]. The new definition adds an ensure then assertion to check consistency with the &amp;lt;tt&amp;gt;hash_code&amp;lt;/tt&amp;gt; function. Note that the redefinition is deferred to force clients to select their preferred implementation.&lt;br /&gt;
* Added a new feature called &amp;lt;tt&amp;gt;set_storage&amp;lt;/tt&amp;gt; in class [[library_class:STRING.|&amp;lt;tt&amp;gt;STRING.&amp;lt;/tt&amp;gt;]] This low-level feature is only exported to [[library_class:STRING_HANDLER|&amp;lt;tt&amp;gt;STRING_HANDLER&amp;lt;/tt&amp;gt;]].&lt;br /&gt;
* Added a new features in class [[library_class:COLLECTION|&amp;lt;tt&amp;gt;COLLECTION&amp;lt;/tt&amp;gt;]]: &amp;lt;tt&amp;gt;remove_head&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;remove_tail&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;reverse_index_of&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;last_index_of&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;first_index_of&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;fast_reverse_index_of&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;fast_last_index_of&amp;lt;/tt&amp;gt;&lt;br /&gt;
* Added a new features in class [[library_class:DICTIONARY|&amp;lt;tt&amp;gt;DICTIONARY&amp;lt;/tt&amp;gt;]]: &amp;lt;tt&amp;gt;fast_reference_at&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;fast_put&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;fast_remove&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* Added a new Eiffel mode description for the Vim text editor. This mode is compatible with our emacs mode. File &amp;quot;misc/eiffel.vim&amp;quot; is for the Vim editor while file &amp;quot;misc/eiffel.el&amp;quot; is for emacs.&lt;br /&gt;
&lt;br /&gt;
=== Release 2.1 [Poirot] - Wednesday February 9th, 2005 ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
More details about changes from 2.0:&lt;br /&gt;
&lt;br /&gt;
* 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 &amp;quot;inherit&amp;quot; keyword. After that, you can use the &amp;quot;insert&amp;quot; keyword followed by the list of non-conforming parents. Like in the previous release, when a class has no &amp;quot;inherit&amp;quot; clause and no &amp;quot;insert&amp;quot; clause, the default insert ANY is automatically added.&lt;br /&gt;
The new compiler does not warn you anymore when multiple conforming paths 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).&lt;br /&gt;
* We introduced a brand new notation to generalize the old manifest array notation. You can now create an [[library_class:ARRAY|&amp;lt;tt&amp;gt;ARRAY&amp;lt;/tt&amp;gt;]] initialized with letters as follows:&lt;br /&gt;
        {ARRAY[CHARACTER] 1, &amp;lt;&amp;lt; 'a', 'b', 'c', 'd' &amp;gt;&amp;gt; }&lt;br /&gt;
or a LINKED_LIST doing:&lt;br /&gt;
        {LINKED_LIST[CHARACTER] &amp;lt;&amp;lt; 'a', 'b', 'c', 'd' &amp;gt;&amp;gt; }&lt;br /&gt;
as well as any kind of COLLECTION:&lt;br /&gt;
        {RING_ARRAY[CHARACTER] 1, &amp;lt;&amp;lt; 'a', 'b', 'c', 'd' &amp;gt;&amp;gt;}&lt;br /&gt;
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.&lt;br /&gt;
* Classes to manipulate floating point numbers have been completely revisited. Floating point number manipulation now uses [[library_class:REAL_32|&amp;lt;tt&amp;gt;REAL_32&amp;lt;/tt&amp;gt;]] for 32 bits floating points, [[library_class:REAL_64|&amp;lt;tt&amp;gt;REAL_64&amp;lt;/tt&amp;gt;]] which is equivalent of &amp;lt;tt&amp;gt;REAL&amp;lt;/tt&amp;gt; for 64 bits floating points, [[library_class:REAL_80|&amp;lt;tt&amp;gt;REAL_80&amp;lt;/tt&amp;gt;]] for architecture supporting 80 bits, [[library_class:REAL_128|&amp;lt;tt&amp;gt;REAL_128&amp;lt;/tt&amp;gt;]] for architecture supporting 128 bits and, [[library_class:REAL_EXTENDED|&amp;lt;tt&amp;gt;REAL_EXTENDED&amp;lt;/tt&amp;gt;]] which is automatically mapped on [[library_class:REAL_80|&amp;lt;tt&amp;gt;REAL_80&amp;lt;/tt&amp;gt;]] or [[library_class:REAL_128|&amp;lt;tt&amp;gt;REAL_128&amp;lt;/tt&amp;gt;]] depending on the architecture actually used. The old &amp;lt;tt&amp;gt;DOUBLE&amp;lt;/tt&amp;gt; class is now obsolete and is automatically replaced with simply &amp;lt;tt&amp;gt;REAL&amp;lt;/tt&amp;gt; (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 &amp;lt;tt&amp;gt;REAL&amp;lt;/tt&amp;gt;. As an example, ''1.5'' is of type &amp;lt;tt&amp;gt;REAL&amp;lt;/tt&amp;gt; whereas ''{REAL_32 1.5}'' is of type [[library_class:REAL_32|&amp;lt;tt&amp;gt;REAL_32&amp;lt;/tt&amp;gt;]] and ''{REAL_EXTENDED 1.5}'' is of type [[library_class:REAL_80|&amp;lt;tt&amp;gt;REAL_80&amp;lt;/tt&amp;gt;]] or [[library_class:REAL_128|&amp;lt;tt&amp;gt;REAL_128&amp;lt;/tt&amp;gt;]] depending on your hardware. See again SmartEiffel/tutorial/manifest_notation.e for details. Finally, also note that scientific notation has been added to display floating point.&lt;br /&gt;
* To handle downcasting in a better way than the still supported &amp;quot;?=&amp;quot; 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 &amp;quot;?:=&amp;quot; allows you to test if the downcasting can be safely done and the new &amp;quot;::=&amp;quot; assignment can actually perform the downcasting. In debug modes, the &amp;quot;?:=&amp;quot; predicate is considered as a require assertion of the &amp;quot;::=&amp;quot; assignment. The &amp;quot;?:=&amp;quot; predicate accepts type name for its left-hand side and is useful too in assertions. See SmartEiffel/tutorial/downcasting.e for examples.&lt;br /&gt;
* Command short improved: assertions are displayed according to the client's point of view (i.e. you do not see what you cannot call).&lt;br /&gt;
* Added classes [[library_class:STACK|&amp;lt;tt&amp;gt;STACK&amp;lt;/tt&amp;gt;]] and [[library_class:QUEUE|&amp;lt;tt&amp;gt;QUEUE&amp;lt;/tt&amp;gt;]]. Thanks to the &amp;quot;insert&amp;quot; mechanism, it is now safe and efficient to do so ([[library_class:STACK|&amp;lt;tt&amp;gt;STACK&amp;lt;/tt&amp;gt;]] shares the efficient implementation of [[library_class:FAST_ARRAY|&amp;lt;tt&amp;gt;FAST_ARRAY&amp;lt;/tt&amp;gt;]] and [[library_class:QUEUE|&amp;lt;tt&amp;gt;QUEUE&amp;lt;/tt&amp;gt;]] inserts [[library_class:RING_ARRAY|&amp;lt;tt&amp;gt;RING_ARRAY&amp;lt;/tt&amp;gt;]]).&lt;br /&gt;
* Improved memory usage for classes [[library_class:LINKED_LIST|&amp;lt;tt&amp;gt;LINKED_LIST&amp;lt;/tt&amp;gt;]], [[library_class:TWO_WAY_LINKED_LIST|&amp;lt;tt&amp;gt;TWO_WAY_LINKED_LIST&amp;lt;/tt&amp;gt;]], [[library_class:AVL_SET|&amp;lt;tt&amp;gt;AVL_SET&amp;lt;/tt&amp;gt;]], [[library_class:AVL_DICTIONARY|&amp;lt;tt&amp;gt;AVL_DICTIONARY&amp;lt;/tt&amp;gt;]], [[library_class:HASHED_SET|&amp;lt;tt&amp;gt;HASHED_SET&amp;lt;/tt&amp;gt;]] and [[library_class:HASHED_DICTIONARY|&amp;lt;tt&amp;gt;HASHED_DICTIONARY&amp;lt;/tt&amp;gt;]]. Free cells are automatically recycled between various instances of the same generic derivation. Thoses classes are now using our [[library_class:WEAK_REFERENCE|&amp;lt;tt&amp;gt;WEAK_REFERENCE&amp;lt;/tt&amp;gt;]] class silently.&lt;br /&gt;
* Removed obsolete class &amp;lt;tt&amp;gt;BIT&amp;lt;/tt&amp;gt;. Now, just use existing bit operations from [[library_class:INTEGER_8|&amp;lt;tt&amp;gt;INTEGER_8&amp;lt;/tt&amp;gt;]], [[library_class:INTEGER_16|&amp;lt;tt&amp;gt;INTEGER_16&amp;lt;/tt&amp;gt;]], [[library_class:INTEGER_32|&amp;lt;tt&amp;gt;INTEGER_32&amp;lt;/tt&amp;gt;]], &amp;lt;tt&amp;gt;INTEGER&amp;lt;/tt&amp;gt;, [[library_class:INTEGER_64|&amp;lt;tt&amp;gt;INTEGER_64&amp;lt;/tt&amp;gt;]] or, for very long sequences of bits, the completely revisited [[library_class:BIT_STRING|&amp;lt;tt&amp;gt;BIT_STRING&amp;lt;/tt&amp;gt;]] class.&lt;br /&gt;
* 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!&lt;br /&gt;
* 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:&lt;br /&gt;
        3.to_string &lt;br /&gt;
        3.5.print_on(io) &lt;br /&gt;
        &amp;quot;foo&amp;quot;.print_on(io) &lt;br /&gt;
* A new network library has been recently added. This is brand new work which is still in progress. See SmartEiffel/lib/net for details.&lt;br /&gt;
* The old Eiffel strip expression is no longer supported.&lt;br /&gt;
&lt;br /&gt;
=== Release 2.0 [Hercule] - Monday September 27th, 2004 ===&lt;br /&gt;
&lt;br /&gt;
Actually, this new 2.0 release is the beginning of a new era in SmartEiffel's life!&lt;br /&gt;
&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
More details about changes from 1.1:&lt;br /&gt;
&lt;br /&gt;
* Very large systems are handled far more efficiently (but maybe at a cost for smaller systems).&lt;br /&gt;
* The new non-conforming inheritance mechanism is now implemented. For code portatbility, we decided to stick with the &amp;quot;inherit&amp;quot; keyword for conforming parents. So just start your class as usual. Then, to describe the non-conforming parents, just use the &amp;quot;insert&amp;quot; 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 &amp;quot;select&amp;quot; clause (you'll be warned by the compiler). Also keep in mind that when a class has no &amp;quot;inherit&amp;quot; clause and no &amp;quot;insert&amp;quot; clause, the default insert [[library_class:ANY|&amp;lt;tt&amp;gt;ANY&amp;lt;/tt&amp;gt;]] 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.&lt;br /&gt;
* Repeated inheritance is now correctly handled.&lt;br /&gt;
* The optimizer is rewritten and can do more optimizations.&lt;br /&gt;
* 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).&lt;br /&gt;
* 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 [[library_class:NATIVE_ARRAY|&amp;lt;tt&amp;gt;NATIVE_ARRAY&amp;lt;/tt&amp;gt;]]s). Command such as ''p ..1'' is useful to get another element of the array or another attribute of the same object.&lt;br /&gt;
* Dead code is now checked, which explains the compiler takes more time and memory.&lt;br /&gt;
* 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 &amp;quot;good&amp;quot; cluster.&lt;br /&gt;
The new organization splits the classes by logical topics. Note that each cluster may contain two special clusters: &amp;quot;low_level&amp;quot;, containing classes that you might use if you need better performance (generally when you build some utility or library classes); &amp;quot;internal&amp;quot; containing support classes, and not meant to be used directly.&lt;br /&gt;
Now, the organization itself:&lt;br /&gt;
** &amp;quot;abilities&amp;quot; contains the &amp;quot;able&amp;quot; classes ([[library_class:COMPARABLE|&amp;lt;tt&amp;gt;COMPARABLE&amp;lt;/tt&amp;gt;]], [[library_class:HASHABLE|&amp;lt;tt&amp;gt;HASHABLE&amp;lt;/tt&amp;gt;]], and so on);&lt;br /&gt;
** &amp;quot;io&amp;quot; contains the input-out classes; this cluster has but changed from the old one (see below for more details);&lt;br /&gt;
** &amp;quot;iterator&amp;quot; still contains the iterator on storage classes (see the &amp;quot;storage&amp;quot; cluster);&lt;br /&gt;
** &amp;quot;kernel&amp;quot; contains the few general-purpose which could not be put in other clusters, and are quite mandatory for the compiler to work;&lt;br /&gt;
** &amp;quot;numeric&amp;quot; contains all the classes that can be use to manipulate numbers; you will find here &amp;lt;tt&amp;gt;INTEGER&amp;lt;/tt&amp;gt;s, &amp;lt;tt&amp;gt;REAL&amp;lt;/tt&amp;gt;s, but also [[library_class:NUMBER|&amp;lt;tt&amp;gt;NUMBER&amp;lt;/tt&amp;gt;]]s (the infinite-precision integers); This cluster also includes the new [[library_class:MUTABLE_BIG_INTEGER|&amp;lt;tt&amp;gt;MUTABLE_BIG_INTEGER&amp;lt;/tt&amp;gt;]] class which is an efficient tools for fast integer number crunching.&lt;br /&gt;
** &amp;quot;random&amp;quot; contains the pseudo-random number generation classes;&lt;br /&gt;
** &amp;quot;scoop&amp;quot; contains the SCOOP utilities (not that SCOOP works better than in SE 1.1...);&lt;br /&gt;
** &amp;quot;storage&amp;quot; contains all the classes that store data: [[library_class:COLLECTION|&amp;lt;tt&amp;gt;COLLECTION&amp;lt;/tt&amp;gt;]], [[library_class:DICTIONARY|&amp;lt;tt&amp;gt;DICTIONARY&amp;lt;/tt&amp;gt;]], [[library_class:SET|&amp;lt;tt&amp;gt;SET&amp;lt;/tt&amp;gt;]]... (Note: see below for more details on [[library_class:DICTIONARY|&amp;lt;tt&amp;gt;DICTIONARY&amp;lt;/tt&amp;gt;]] and [[library_class:SET|&amp;lt;tt&amp;gt;SET&amp;lt;/tt&amp;gt;]]);&lt;br /&gt;
** &amp;quot;string&amp;quot; contains the [[library_class:STRING|&amp;lt;tt&amp;gt;STRING&amp;lt;/tt&amp;gt;]] and related classes (also Unicode strings);&lt;br /&gt;
** &amp;quot;time&amp;quot; contains the [[library_class:TIME|&amp;lt;tt&amp;gt;TIME&amp;lt;/tt&amp;gt;]]-related classes;&lt;br /&gt;
** &amp;quot;vision&amp;quot; contains the vision graphical library classes;&lt;br /&gt;
** &amp;quot;sorting&amp;quot; contains most common algorithm to sort [[library_class:COLLECTION|&amp;lt;tt&amp;gt;COLLECTION&amp;lt;/tt&amp;gt;]]s;&lt;br /&gt;
** &amp;quot;misc&amp;quot; contains some useful classes that cannot be easily put elsewhere short of having their own cluster.&lt;br /&gt;
&lt;br /&gt;
* [[library_class:DICTIONARY|&amp;lt;tt&amp;gt;DICTIONARY&amp;lt;/tt&amp;gt;]] class is now deferred and has no more generic constraint. The library now includes two different implementations.&lt;br /&gt;
** The [[library_class:HASHED_DICTIONARY|&amp;lt;tt&amp;gt;HASHED_DICTIONARY&amp;lt;/tt&amp;gt;]] implementation is the hash_code based implementation (the generic constraint for [[library_class:HASHED_DICTIONARY|&amp;lt;tt&amp;gt;HASHED_DICTIONARY&amp;lt;/tt&amp;gt;]] is [[library_class:HASHABLE|&amp;lt;tt&amp;gt;HASHABLE&amp;lt;/tt&amp;gt;]]).&lt;br /&gt;
** The [[library_class:AVL_DICTIONARY|&amp;lt;tt&amp;gt;AVL_DICTIONARY&amp;lt;/tt&amp;gt;]] implementation is a balanced tree based implementation (the generic constraint for this implemetation is [[library_class:COMPARABLE|&amp;lt;tt&amp;gt;COMPARABLE&amp;lt;/tt&amp;gt;]]).&lt;br /&gt;
You should update all your create instructions by selecting [[library_class:HASHED_DICTIONARY|&amp;lt;tt&amp;gt;HASHED_DICTIONARY&amp;lt;/tt&amp;gt;]] or [[library_class:AVL_DICTIONARY|&amp;lt;tt&amp;gt;AVL_DICTIONARY&amp;lt;/tt&amp;gt;]]. In order to ease this code update, the compiler will warn you that [[library_class:HASHED_DICTIONARY|&amp;lt;tt&amp;gt;HASHED_DICTIONARY&amp;lt;/tt&amp;gt;]] is selected by default. Please update your code because this is a temporary warning of the compiler.&lt;br /&gt;
&lt;br /&gt;
* Some more [[library_class:DICTIONARY|&amp;lt;tt&amp;gt;DICTIONARY&amp;lt;/tt&amp;gt;]] classes were also added (among them: [[library_class:DOUBLE_DICTIONARY|&amp;lt;tt&amp;gt;DOUBLE_DICTIONARY&amp;lt;/tt&amp;gt;]] can be of interest).&lt;br /&gt;
* The [[library_class:SET|&amp;lt;tt&amp;gt;SET&amp;lt;/tt&amp;gt;]] class has undergone the same transformation ([[library_class:HASHED_SET|&amp;lt;tt&amp;gt;HASHED_SET&amp;lt;/tt&amp;gt;]] and [[library_class:AVL_SET|&amp;lt;tt&amp;gt;AVL_SET&amp;lt;/tt&amp;gt;]]).&lt;br /&gt;
* A [[library_class:RING_ARRAY|&amp;lt;tt&amp;gt;RING_ARRAY&amp;lt;/tt&amp;gt;]] class was added. This [[library_class:COLLECTION|&amp;lt;tt&amp;gt;COLLECTION&amp;lt;/tt&amp;gt;]] is quite similar to an [[library_class:ARRAY|&amp;lt;tt&amp;gt;ARRAY&amp;lt;/tt&amp;gt;]] that performs well for all queue operations (add|remove)_(first|last) thanks to its circular internal representation.&lt;br /&gt;
* The [[library_class:TUPLE|&amp;lt;tt&amp;gt;TUPLE&amp;lt;/tt&amp;gt;]] class is now defined in Eiffel. Thanks to this new source code implementation, we have added the definition for the `item' feature definition.&lt;br /&gt;
* The [[library_class:ROUTINE|&amp;lt;tt&amp;gt;ROUTINE&amp;lt;/tt&amp;gt;]], [[library_class:PROCEDURE|&amp;lt;tt&amp;gt;PROCEDURE&amp;lt;/tt&amp;gt;]] and [[library_class:FUNCTION|&amp;lt;tt&amp;gt;FUNCTION&amp;lt;/tt&amp;gt;]] classes are also defined in Eiffel.&lt;br /&gt;
* Added a new [[library_class:WEAK_REFERENCE|&amp;lt;tt&amp;gt;WEAK_REFERENCE&amp;lt;/tt&amp;gt;]] class with the appropriate garbage collector support.&lt;br /&gt;
* Split has been improved in order to reduce C files compilation after a change.&lt;br /&gt;
* Added a new &amp;quot;-profile&amp;quot; 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:&lt;br /&gt;
** the profiling output is written in the &amp;quot;profile.se&amp;quot; file;&lt;br /&gt;
** for each entry, the &amp;quot;own&amp;quot; and &amp;quot;cumul&amp;quot; times, total and average, are given; also, the caller features and the called ones are displayed;&lt;br /&gt;
** 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);&lt;br /&gt;
** the Eiffel called features are sorted by decreasing number of calls;&lt;br /&gt;
** 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).&lt;br /&gt;
**e that:&lt;br /&gt;
** profiled programs take MUCH longer to execute (a lot of, hem, time, is spent in the kernel merely to, hem, track time...)&lt;br /&gt;
** externals are not profiled; they are accounted in the &amp;quot;own&amp;quot; time of their caller;&lt;br /&gt;
** inlined features are not profiled either (only in -boost)&lt;br /&gt;
** 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.&lt;br /&gt;
**s to Lothar Scholz for having the idea in the first place.&lt;br /&gt;
**ped the input-output system to make it more general and more extensible. Provided features:&lt;br /&gt;
** now streams can be &amp;quot;filtered&amp;quot;. It means you can nest them to bring extra features such as encoding or encryption (among many other things)&lt;br /&gt;
** 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.&lt;br /&gt;
See also the cluster description on the SmartEiffel site.&lt;br /&gt;
* Visitors revisited. The architecture is now ready to be used (in 1.1 it was but a draft).&lt;br /&gt;
&lt;br /&gt;
== SmartEiffel (release 1.1 down to release 1.0) ==&lt;br /&gt;
&lt;br /&gt;
=== Release 1.1 [Charlemagne] - Monday June 16th, 2003 ===&lt;br /&gt;
&lt;br /&gt;
* Thoroughly changed the configuration handling. The new scheme is more complete, and much more flexible.&lt;br /&gt;
** 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 &amp;lt;Enter&amp;gt; key. For more informations about installation and all new configuration capabilities, please have a look to install page.&lt;br /&gt;
** Added the -c_mode option, in conjunction with the new configuration handling.&lt;br /&gt;
** Added a -loadpath flag to read an extra loadpath.&lt;br /&gt;
* 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.&lt;br /&gt;
* Added a small expression evaluator to sedb. One can now display the attributes of the objects on the stack. Be sure to read the &amp;quot;more-help&amp;quot; section on data display (for once functions, the result is unavailable if it has not yet been called).&lt;br /&gt;
* 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.&lt;br /&gt;
* Implemented inspect on [[library_class:STRING|&amp;lt;tt&amp;gt;STRING&amp;lt;/tt&amp;gt;]]s.&lt;br /&gt;
* 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!&lt;br /&gt;
* [[pretty]] significantly updated.&lt;br /&gt;
* The C files produced by the compiler now should work on any platform, even with the GC turned on.&lt;br /&gt;
* Added Unicode support in [[library_class:STRING|&amp;lt;tt&amp;gt;STRING&amp;lt;/tt&amp;gt;]]s (see the SmartEiffel/tutorial/unicode and SmartEiffel/lib/unicode directories).&lt;br /&gt;
* Added new abstract class [[library_class:FILE|&amp;lt;tt&amp;gt;FILE&amp;lt;/tt&amp;gt;]] and new features in class [[library_class:DIRECTORY|&amp;lt;tt&amp;gt;DIRECTORY&amp;lt;/tt&amp;gt;]].&lt;br /&gt;
* Added hexadecimal notation for &amp;lt;tt&amp;gt;INTEGER&amp;lt;/tt&amp;gt; constants, [[library_class:CHARACTER|&amp;lt;tt&amp;gt;CHARACTER&amp;lt;/tt&amp;gt;]] constants and inside manifest [[library_class:STRING|&amp;lt;tt&amp;gt;STRING&amp;lt;/tt&amp;gt;]]s as well. See the example in file SmartEiffel/tutorial/hexadecimal.e for more information.&lt;br /&gt;
* Added agent facilities on [[library_class:STRING|&amp;lt;tt&amp;gt;STRING&amp;lt;/tt&amp;gt;]] and [[library_class:UNICODE_STRING|&amp;lt;tt&amp;gt;UNICODE_STRING&amp;lt;/tt&amp;gt;]] (warning, those facilities are non-standard extensions).&lt;br /&gt;
* 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.&lt;br /&gt;
* Moved the bin_c directory to install/germ.&lt;br /&gt;
* Reorganized the SmartEiffel/sys/runtime directory:&lt;br /&gt;
** Clearly separated C and Java backend helpers&lt;br /&gt;
** 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&lt;br /&gt;
* Added the -compact option which produces much more compact C code.&lt;br /&gt;
* same_type from &amp;lt;tt&amp;gt;GENERAL&amp;lt;/tt&amp;gt; is now obsolete. Use same_dynamic_type instead.&lt;br /&gt;
* Obsoleted operators &amp;quot;and&amp;quot;, &amp;quot;or&amp;quot;, &amp;quot;xor&amp;quot; and &amp;quot;not&amp;quot; for &amp;lt;tt&amp;gt;INTEGER&amp;lt;/tt&amp;gt;s, and added prefix operator &amp;quot;~&amp;quot;.&lt;br /&gt;
* [[library_class:MEMORY|&amp;lt;tt&amp;gt;MEMORY&amp;lt;/tt&amp;gt;]].allocated_bytes is more accurate.&lt;br /&gt;
* Generated object files are now removed before calling C compiler.&lt;br /&gt;
* Various bug fixes and improvements (see details in the SmartZilla bug tracker).&lt;br /&gt;
&lt;br /&gt;
=== Release 1.0 - Friday December 6th, 2002 ===&lt;br /&gt;
&lt;br /&gt;
This is the very first release with the name SmartEiffel!&lt;br /&gt;
(Previous releases were named SmallEiffel.)&lt;br /&gt;
&lt;br /&gt;
The main changes between SmallEiffel -0.74 and SmartEiffel 1.0 are:&lt;br /&gt;
&lt;br /&gt;
* Name changed from SmallEiffel to SmartEiffel!&lt;br /&gt;
* Version numbering: now, versions are numbered from 1.0 beta 1 upward&lt;br /&gt;
* 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).&lt;br /&gt;
* The new Reference keyword is now implemented. Use reference &amp;lt;tt&amp;gt;INTEGER&amp;lt;/tt&amp;gt; instead of &amp;lt;tt&amp;gt;INTEGER_REF&amp;lt;/tt&amp;gt;. &amp;lt;tt&amp;gt;INTEGER_REF&amp;lt;/tt&amp;gt; will become obsolete.&lt;br /&gt;
* The new [[library_class:INTEGER_GENERAL|&amp;lt;tt&amp;gt;INTEGER_GENERAL&amp;lt;/tt&amp;gt;]], [[library_class:INTEGER_8|&amp;lt;tt&amp;gt;INTEGER_8&amp;lt;/tt&amp;gt;]], [[library_class:INTEGER_16|&amp;lt;tt&amp;gt;INTEGER_16&amp;lt;/tt&amp;gt;]], [[library_class:INTEGER_32|&amp;lt;tt&amp;gt;INTEGER_32&amp;lt;/tt&amp;gt;]], [[library_class:INTEGER_64|&amp;lt;tt&amp;gt;INTEGER_64&amp;lt;/tt&amp;gt;]] types are now implemented.&lt;br /&gt;
* After long discussions, we have decided to stick to our decision for the type of integer constants (as an example, 127 is of type [[library_class:INTEGER_8|&amp;lt;tt&amp;gt;INTEGER_8&amp;lt;/tt&amp;gt;]] and 128 is of type [[library_class:INTEGER_16|&amp;lt;tt&amp;gt;INTEGER_16&amp;lt;/tt&amp;gt;]] 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 &amp;lt;tt&amp;gt;&amp;lt;&amp;lt;...&amp;gt;&amp;gt;&amp;lt;/tt&amp;gt; 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 :)&lt;br /&gt;
* 64-bit architectures supported.&lt;br /&gt;
* Internal improvements in the type system (better C code produced)&lt;br /&gt;
* Buffered I/O. You may get big improvements on programs performing lots of file reading or writing ([[library_class:STD_INPUT|&amp;lt;tt&amp;gt;STD_INPUT&amp;lt;/tt&amp;gt;]] and [[library_class:STD_OUTPUT|&amp;lt;tt&amp;gt;STD_OUTPUT&amp;lt;/tt&amp;gt;]] are also buffered).&lt;br /&gt;
* The short command now has the &amp;quot;-client&amp;quot; option (see short command manual for more details).&lt;br /&gt;
* The &amp;quot;tcc&amp;quot; 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.&lt;br /&gt;
* New bug reporting tool. Now you can see all known bugs and their state. Allways refers to the bug report page on SmartEiffel site.&lt;br /&gt;
* As suggested on our mailing list, there are now two new classes in order to remove some definitions from &amp;lt;tt&amp;gt;GENERAL&amp;lt;/tt&amp;gt; (see class [[library_class:MATH_CONSTANTS|&amp;lt;tt&amp;gt;MATH_CONSTANTS&amp;lt;/tt&amp;gt;]] and class [[library_class:CHARACTER_CONSTANTS|&amp;lt;tt&amp;gt;CHARACTER_CONSTANTS&amp;lt;/tt&amp;gt;]]).&lt;br /&gt;
* 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 &amp;gt;&amp;gt; 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.&lt;br /&gt;
* Type mark must now follow the Precursor keyword.&lt;br /&gt;
* Fixed the bug recently reported by Wolfgang Jansen. (Well isolated bug report, thanks!) This bug was related to expanded objects and the twin feature.&lt;br /&gt;
* Fixed the -manifest_string_trace bug recently reported by Alexis Saettler. (Well isolated bug as well, thanks!)&lt;br /&gt;
* 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 &amp;quot;like Current&amp;quot; type mark into some hard-coded type mark (e.g. &amp;quot;FOO&amp;quot;). 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 [[library_class:NUMBER|&amp;lt;tt&amp;gt;NUMBER&amp;lt;/tt&amp;gt;]] library implementation of &amp;lt;tt&amp;gt;is_equal&amp;lt;/tt&amp;gt; (''like Current'' is now changed to [[library_class:NUMBER|&amp;lt;tt&amp;gt;NUMBER&amp;lt;/tt&amp;gt;]]) and changed the postcondition of &amp;lt;tt&amp;gt;is_equal&amp;lt;/tt&amp;gt; in &amp;lt;tt&amp;gt;GENERAL&amp;lt;/tt&amp;gt; (ensure assertion relaxed to no longer call standard_is_equal).&lt;br /&gt;
* 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/&lt;br /&gt;
* New Cygwin directory notation is now supported. Recent Cygwin systems will be automatically detected while install.&lt;br /&gt;
* Other &amp;quot;secret&amp;quot; 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.&lt;br /&gt;
* Improved internal lab process to more easily provide professional support contracts (see premium support for more details).&lt;br /&gt;
* New functions in [[library_class:COLLECTION_SORTER|&amp;lt;tt&amp;gt;COLLECTION_SORTER&amp;lt;/tt&amp;gt;]] classes using dichotomic search.&lt;br /&gt;
* GC support for the Elate system updated.&lt;br /&gt;
* Various bug fixes and improvements.&lt;br /&gt;
&lt;br /&gt;
== SmallEiffel (all releases of SmallEiffel) ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.74 - Tuesday May 7th, 2002 ===&lt;br /&gt;
&lt;br /&gt;
* The new agent mechanism is now implemented. See tutorial/agent directory for examples.&lt;br /&gt;
* 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.&lt;br /&gt;
* The new create instruction/expression is now fully implemented and correctly pretty-printed. The new default_create feature mechanism is also implemented.&lt;br /&gt;
* 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.&lt;br /&gt;
* Added examples for the new TUPLE type in directory tutorial/tuple.&lt;br /&gt;
* 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.)&lt;br /&gt;
* The external C interface is now compatible with the new ETL definition. (See directory tutorial/external/C for examples.)&lt;br /&gt;
* Added flag -high_memory_compiler to compile_to_c.&lt;br /&gt;
* 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.)&lt;br /&gt;
* 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.&lt;br /&gt;
* Added feature connect_append_to both in class TEXT_FILE_WRITE and BINARY_FILE_WRITE.&lt;br /&gt;
* 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.&lt;br /&gt;
* Added feature size_of and feature last_change_of in class FILE_TOOLS (see also tutorial/basic_time for examples).&lt;br /&gt;
* Added feature append_decimal_in and feature to_decimal in class NUMBER as well as a new example the tutorial/number directory.&lt;br /&gt;
* Added feature add both in class COLLECTION_SORTER and in class REVERSE_COLLECTION_SORTER.&lt;br /&gt;
* Added feature reference_at in class DICTIONARY.&lt;br /&gt;
* Added feature infix &amp;quot;+&amp;quot; in class POINTER.&lt;br /&gt;
* Various bug fixes and improvements.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.75 - Thursday July 16th, 2001 ===&lt;br /&gt;
&lt;br /&gt;
* 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.&lt;br /&gt;
* 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.&lt;br /&gt;
* Added a traditional -help flag for all commands to print a summary of available options.&lt;br /&gt;
* In ACE files as well as in &amp;quot;loadpath.se&amp;quot; files the ${SmallEiffelDirectory} environment variable is automatically defined using the value of the ${SmallEiffel} environment variable.&lt;br /&gt;
* 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.&lt;br /&gt;
* The new TUPLE type is now implemented.&lt;br /&gt;
* Added class TIME_IN_GERMAN to handle date and time in German. See tutorial/basic_time for examples.&lt;br /&gt;
* Feature is_equal of class COMPARABLE is now ELKS compatible.&lt;br /&gt;
* Added feature internal_key in class DICTIONARY.&lt;br /&gt;
* Various bug fixes and improvements.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.76 - Saturday November 11th, 2000 ===&lt;br /&gt;
&lt;br /&gt;
* 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.&lt;br /&gt;
* 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).&lt;br /&gt;
* Added feature reindex in class ARRAY.&lt;br /&gt;
* Added a brand new class SET[E-&amp;gt;HASHABLE].&lt;br /&gt;
* Added support for the Elate (Amiga) system as well as the vpcc C compiler.&lt;br /&gt;
* Added support for the QNX real time operating system.&lt;br /&gt;
* For feature dispose of class MEMORY (as well as redefinitions), the class invariant is no longer triggered.&lt;br /&gt;
* Added features atan2 and pow both in class REAL and DOUBLE.&lt;br /&gt;
* Internal implementation of BASIC_TIME revisited (using now a double for memorization).&lt;br /&gt;
* Implementation of class DICTIONARY completely revisited. Also added features add, item_map_in and key_map_in in the new class DICTIONARY.&lt;br /&gt;
* 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).&lt;br /&gt;
* Various bug fixes and improvements.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.77 - Saturday February 12th, 2000 ===&lt;br /&gt;
&lt;br /&gt;
* 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, ...&lt;br /&gt;
  To install SmallEiffel under some UNIX like system, just type make in the SmallEiffel directory.&lt;br /&gt;
  To install SmallEiffel under Windows, just run install.exe.&lt;br /&gt;
  On other systems, C compile and run the install.c file.&lt;br /&gt;
* 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.&lt;br /&gt;
* Added NUMBER library, for infinite precision and infinitely large numbers. See tutorial/number for examples.&lt;br /&gt;
* Added ITERATOR library, for external iterators on data structures. See tutorial/iterator for examples.&lt;br /&gt;
* 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).&lt;br /&gt;
* 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).&lt;br /&gt;
* Added class BIT_STRING for very large bit sequences, with reference semantics.&lt;br /&gt;
* 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).&lt;br /&gt;
* 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.&lt;br /&gt;
* Added feature to_hexadecimal and feature to_hexadecimal_in in class INTEGER.&lt;br /&gt;
* Improved incremental recompilation of the generated C code (also fixed a very old bug in incrementality).&lt;br /&gt;
* Exceptions handling: the default_rescue feature is now supported.&lt;br /&gt;
* Various bug fixes and improvements (type inference score increased, ...).&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.78 - Saturday June 05th, 1999 ===&lt;br /&gt;
&lt;br /&gt;
* New -html2 flag for command short generates a colorized HTML short form for classes.&lt;br /&gt;
* The garbage collector now takes into account feature dispose of class MEMORY for reference objects.&lt;br /&gt;
* Obsolete classes (obsolete keyword) now supported.&lt;br /&gt;
* Assertion tags are now displayed when an assertion fails.&lt;br /&gt;
* Added environment variable in loadpath files. Syntax: ${SOME_VAR}&lt;br /&gt;
* Added the -no_style_warning flag to suppress warnings when the recommended styles guidelines for Eiffel are not strictly followed.&lt;br /&gt;
* Added the -version flag to show SmallEiffel's version.&lt;br /&gt;
* 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.&lt;br /&gt;
* Class LINKED_LIST now replaces obsolete class LINK_LIST (simple renaming).&lt;br /&gt;
  Class TWO_WAY_LINKED_LIST now replaces obsolete class LINK2_LIST (simple renaming).&lt;br /&gt;
* Fixed &amp;quot;implicit renaming&amp;quot; bug.&lt;br /&gt;
* Cleaned all source code of tabulations at beginning of line (made code look ugly when using an editor whose tabs were not 8).&lt;br /&gt;
* Some new ELKS'95 features implemented.&lt;br /&gt;
* Validity rule VEEN fixed.&lt;br /&gt;
* Added class COLLECTION_SORTER and REVERSE_COLLECTION_SORTER to the library.&lt;br /&gt;
* Fixed file renaming portability bug (&amp;quot;.d files bug&amp;quot;).&lt;br /&gt;
* Validity rule VCFG.1 is now enforced.&lt;br /&gt;
* Validity rule VAPE is now enforced.&lt;br /&gt;
* Classes mentioned in a cecil.se file are now automatically made live. Makes it easier to link with external libraries.&lt;br /&gt;
* Various other bug fixes.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.79 - Tuesday December 22nd, 1998 ===&lt;br /&gt;
&lt;br /&gt;
* The new Eiffel construct Precursor as described OOSC2 is now implemented.&lt;br /&gt;
* The Eiffel expression strip is now implemented.&lt;br /&gt;
* Nested loadpath files now allowed.&lt;br /&gt;
* Extended anchored definition to accept infix and prefix feature names. For example, this kind of declaration is now accepted :      foo: like infix &amp;quot;+&amp;quot;.&lt;br /&gt;
* Classes COLLECTION2, ARRAY2 and FIXED_ARRAY2 of lib/base completely revisited.&lt;br /&gt;
* Fixed a bug related to calls of the form f.g.h; on expanded objects.&lt;br /&gt;
* Fixed a bug related to inheritance of generic classes.&lt;br /&gt;
* Fixed bugs related to assertions checking in case of exceptions (rescue clause, retry). Improved cycle detection in assertions.&lt;br /&gt;
* Fixed bug in GC related to recycling of &amp;quot;monsters&amp;quot; (very large resizable objets).&lt;br /&gt;
* Fixed an incredible bug in the implementation of the like Current type mark. ;-).&lt;br /&gt;
* Fixed many others bugs ($ operator, GC for alpha DEC, ...).&lt;br /&gt;
* System customization file for the BeOS system added in the &amp;quot;sys&amp;quot; sub-directory (more on system customization).&lt;br /&gt;
* Contents of the environment variable SmallEiffel must be now set with the absolute path of the file &amp;quot;system.se&amp;quot; which is in the sub-directory &amp;quot;sys&amp;quot; of the installation directory.&lt;br /&gt;
  Under a UNIX-like system, the value of the SmallEiffel environment variable may be for example: /usr/lib/SmallEiffel/sys/system.se&lt;br /&gt;
  Commands are also more robust when this environment variable contains non-alphanumeric characters.&lt;br /&gt;
* No more ensure assertion in GENERAL.get_environment_variable.&lt;br /&gt;
* Commands compile_to_jvm and print_jvm_class completely revisited. Java byte-code can be now used with the -verify Java option).&lt;br /&gt;
* Validity rule VDRD.6 is now enforced.&lt;br /&gt;
* Balancing rule (automatic promotion) for INTEGER, DOUBLE and REAL is now implemented.&lt;br /&gt;
* Recursive once routines now work correctly.&lt;br /&gt;
* Unmodified generated C files are not touched anymore.&lt;br /&gt;
* Assertions correctly checked for all external C routines.&lt;br /&gt;
* Exception handling now works when an exception occurs in external C code.&lt;br /&gt;
* Cleaned the compiler and decreased its memory footprint.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.80 - Thursday July 9th, 1998 ===&lt;br /&gt;
&lt;br /&gt;
* Exception handling implemented. Class EXCEPTIONS added in lib/kernel.&lt;br /&gt;
* 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).&lt;br /&gt;
* 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.&lt;br /&gt;
* Behavior of compilation flag -trace of command compile_to_c changed to allow step-by-step execution (embryo of Eiffel source code debugger).&lt;br /&gt;
* Feature ARRAY.resize completely revisited (added two features in class NATIVE_ARRAY: clear and move).&lt;br /&gt;
* Garbage Collector optimized (the GC should be more agressive and some benchmarks are included in directory SmallEiffel/misc/benchmarks/gc/*/bench.e).&lt;br /&gt;
* Associativity of infix operator &amp;quot;^&amp;quot; is now correctly handled.&lt;br /&gt;
* Fixed bugs in PLATFORM for Minimum_double, Minimum_real and Minimum_character_code.&lt;br /&gt;
* Fixed some others bugs about export rules, about expanded objects with expanded attributes.&lt;br /&gt;
* Fixed bugs in pretty.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.81 - Thursday April 9th, 1998 ===&lt;br /&gt;
&lt;br /&gt;
* 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).&lt;br /&gt;
* 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.)&lt;br /&gt;
  Added flag -clean which removes all the C and object files of the system. (This corresponds to the old default behavior.)&lt;br /&gt;
* Fixed a bug related to buffered input under Windows/MS VC.&lt;br /&gt;
* Fixed a bug in misc/INSTALL.SH script.&lt;br /&gt;
* Added require is_connected for all features put_* of class OUTPUT_STREAM.&lt;br /&gt;
* Fixed a bug in command short (require/ensure assertion of deferred routines are now printed).&lt;br /&gt;
* Added one useful hook for mode -html1 in command short (see hook Mcn).&lt;br /&gt;
* Added directory SmallEiffel/sys/runtime which contains the C runtime.&lt;br /&gt;
* Fixed a bug about instanciation of class ANY itself (not so common !).&lt;br /&gt;
* Fixed a bug about inlining of operator $.&lt;br /&gt;
* Fixed a bug about cyclic anchored definitions.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.82 - Friday January 16th, 1998 ===&lt;br /&gt;
&lt;br /&gt;
* Became the official GNU Eiffel compiler.&lt;br /&gt;
* Added first HTML mode to command short. Flag -html1. Thanks to Matthias Klause.&lt;br /&gt;
* Fixed bugs in command pretty.&lt;br /&gt;
* It is now possible to rename/redefine external &amp;quot;SmallEiffel&amp;quot; features.&lt;br /&gt;
* Files *.hlp of directory SmallEiffel/man no longer exists. All the documentation is now in *.html files plus corresponding automatically generated *.txt files.&lt;br /&gt;
* Manifest arrays creation has been optimized.&lt;br /&gt;
* Validity rule VHRC.2 is now enforced.&lt;br /&gt;
* Fixed bugs about export clause.&lt;br /&gt;
* Feature GENERAL.hash_code no longer exists. Added ELKS class HASHABLE in order to be compatible with others compilers/libraries.&lt;br /&gt;
* Fixed a bug in pre-computed once functions.&lt;br /&gt;
* Fixed a bug in REAL/DOUBLE keybord input.&lt;br /&gt;
* Reintroduced left hand side cast in C code for better performances (allowed by the C ANSI standard).&lt;br /&gt;
* Obsolete features (obsolete keyword) now generate a Warning.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.83 - Friday September 19th, 1997 ===&lt;br /&gt;
&lt;br /&gt;
* Added command short to the distribution.&lt;br /&gt;
* Added directory contrib in the distribution. This directory contains some scripts to use gdb as source level debugger for SmallEiffel.&lt;br /&gt;
* Added flag -no_warning to commands: compile_to_c, pretty, and compile_to_jvm.&lt;br /&gt;
* Added flag -case_insensitive to command compile_to_c.&lt;br /&gt;
* Fixed a bug for inherit/select.&lt;br /&gt;
* Fixed a bug for some pre-computed once function.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.84 - Monday August 18th, 1997 ===&lt;br /&gt;
&lt;br /&gt;
* Class BIT is now implemented in Java bytecode (command compile_to_jvm).&lt;br /&gt;
* Added external specification to call Java code (when using compile_to_jvm).&lt;br /&gt;
* 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.&lt;br /&gt;
* 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).&lt;br /&gt;
* Added STRING.substring_index (from ELKS written by Fridtjof SIEBERT).&lt;br /&gt;
* 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).&lt;br /&gt;
* Changed the behavior of end_of_input of INPUT_STREAM (this flag is true _after_ last character has been read).&lt;br /&gt;
* Fixed a bug in manifest arrays (mixed objects including Void).&lt;br /&gt;
* Fixed a bug dealing with some statically computed expressions.&lt;br /&gt;
* Fixed a bug in repeated inheritance.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.85 - Thursday July 3rd, 1997 ===&lt;br /&gt;
&lt;br /&gt;
* First beta-release of commands compile_to_jvm and print_jvm_class!&lt;br /&gt;
* 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.&lt;br /&gt;
* 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.&lt;br /&gt;
* Added feature to_hexadecimal and feature to_hexadecimal_in in class CHARACTER.&lt;br /&gt;
* Feature io, std_input, std_output and std_error of class GENERAL are no longer frozen.&lt;br /&gt;
* 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).&lt;br /&gt;
* Feature die_with_code of GENERAL now accepts any INTEGER code (not just predefined exit_success_code and exit_failure_code).&lt;br /&gt;
* Fixed a bug in STRING. The following expression is now true: (&amp;quot;a%/0/b&amp;quot;).count = 3&lt;br /&gt;
  Just try this on your favorite Eiffel compiler ;-)&lt;br /&gt;
* 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.&lt;br /&gt;
* Feature unread_character of class INPUT_STREAM is now implemented in Eiffel.&lt;br /&gt;
* Added OUTPUT_STREAM.put_pointer to view a POINTER.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.86 - Sunday April 13th, 1997 ===&lt;br /&gt;
&lt;br /&gt;
* All reported bugs at this time have been fixed.&lt;br /&gt;
* 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.&lt;br /&gt;
* Features BOOLEAN.infix &amp;quot;or&amp;quot; and BOOLEAN.infix &amp;quot;and&amp;quot; are now written in pure Eiffel. As a consequence, it is very important for the SmallEiffel programmer to make the distinction between BOOLEAN.infix &amp;quot;and then&amp;quot; and BOOLEAN.infix &amp;quot;and&amp;quot; (respectively for BOOLEAN.infix &amp;quot;or else&amp;quot; and BOOLEAN.infix &amp;quot;or&amp;quot;). When left-hand-side argument produces no side effect, the semi-strict operator (BOOLEAN.infix&amp;quot;and then&amp;quot;/&amp;quot;or else&amp;quot;) may run faster.&lt;br /&gt;
* Fixed REAL.sin (the old one was calling sqrt :-).&lt;br /&gt;
* Fixed a bug in INTEGER.append_in (you can now print Minimum_integer).&lt;br /&gt;
* Added feature in_range in class COMPARABLE.&lt;br /&gt;
* Result type of REAL.infix &amp;quot;^&amp;quot; is now DOUBLE for ELKS compatibility.&lt;br /&gt;
* Feature remove is now implemented in all subclasses of COLLECTION (i.e. ARRAY, FIXED_ARRAY, LINK_LIST and LINK2_LIST).&lt;br /&gt;
* Added feature add for all subclasses of COLLECTION.&lt;br /&gt;
* Conversion DOUBLE/STRING : ANSI C sscanf and sprintf is now used to avoid loss of precision.&lt;br /&gt;
* Added some more class invariant code generation when compiling in -invariant_check mode. Class invariant is now also checked before exit of a routine.&lt;br /&gt;
* Added feature file_tools in class GENERAL to ease access to class FILE_TOOLS.&lt;br /&gt;
* Changed printing format for basic *_REF classes. For example, instruction print(1); now prints 1.&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.87 - Tuesday January 7th, 1997 ===&lt;br /&gt;
&lt;br /&gt;
* Added a new flag -trace to ease debug (see man/compile_to_c file).&lt;br /&gt;
* More inlining at Eiffel level (-boost mode only).&lt;br /&gt;
* Class BIT_N completely revisited. It may be as fast as C.&lt;br /&gt;
* Added class C_ARRAY[E] to deal directly with C arrays at Eiffel level. Thus there are no more external &amp;quot;CSE&amp;quot; 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.&lt;br /&gt;
* Fixed a bug in STD_FILE_READ.read_double.&lt;br /&gt;
* Ordering of C output to increase gcc inlining.&lt;br /&gt;
* According to man/compile_to_c) , flag -debug_check now works (debug instructions are no longer generated in mode -all_check).&lt;br /&gt;
* Unused local variables removed at Eiffel level (warning added for -debug_check mode only).&lt;br /&gt;
* Default class ANY now inherits PLATFORM (as in ETL).&lt;br /&gt;
* Fixed a bug in floating-point constants.&lt;br /&gt;
* Added directory sys to customize default C compiler, default C linker and default loading path.&lt;br /&gt;
* Fixed some bugs with outside expanded types.&lt;br /&gt;
* Fixed a bug with rename/select.&lt;br /&gt;
* Redefinition of once routine is now allowed.&lt;br /&gt;
* Feature GENERAL.conforms_to is now implemented.&lt;br /&gt;
* Rule VFFD.7 is now enforced.&lt;br /&gt;
* Feature force implemented for all COLLECTION.&lt;br /&gt;
* Added conversions features CHARACTER.to_bit, INTEGER.to_bit, BIT_N.to_character and BIT_N.to_integer.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.88 - Wednesday October 30th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Fixed bugs dealing with inherit/rename/select.&lt;br /&gt;
* Added warning for missing colon in actual arguments list.&lt;br /&gt;
* Warning : INSTALL procedure has changed and you have to set manually the default loading path (see misc/INSTALL for details).&lt;br /&gt;
* Added some VMS customization.&lt;br /&gt;
* Fixed bugs when printing run-time stack.&lt;br /&gt;
* Warning added for missing colon in actual parameter list.&lt;br /&gt;
* Added flush in class STD_FILE_WRITE.&lt;br /&gt;
* No more left hand side cast in C code (because some C compilers don't like them).&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.89 - Sunday September 15th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Calling Eiffel from C is now implemented (see man/cecil) file).&lt;br /&gt;
* Object creation uses C calloc instead malloc+memset.&lt;br /&gt;
* Object creation is inlined.&lt;br /&gt;
* ARRAY/FIXED_ARRAY put and item are now inlined (-boost only).&lt;br /&gt;
* Added feature capacity and resize in FIXED_ARRAY.&lt;br /&gt;
* 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.&lt;br /&gt;
* More user's routines are inlined (-boost only).&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.90 - Friday August 23rd, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Added random number generator library (SmallEiffel/lib_rand).&lt;br /&gt;
* Added checking of assertions for external &amp;quot;CSE&amp;quot; features.&lt;br /&gt;
* Anchoring on expanded types are now allowed.&lt;br /&gt;
* Multiple level of anchoring definition allowed.&lt;br /&gt;
* Fixed a bug in STRING.from_external.&lt;br /&gt;
* Fixed a bug with mixed rename/redefine.&lt;br /&gt;
* Inheritance loop detection.&lt;br /&gt;
* Anchoring loop detection.&lt;br /&gt;
* Fixed a bug with renaming infix/prefix.&lt;br /&gt;
* Command clean also use the make suffix.&lt;br /&gt;
* Added ELKS95 sign in INTEGER/REAL/DOUBLE.&lt;br /&gt;
* Feature make is the default root feature name for compile.&lt;br /&gt;
* Optimized ARRAY.add_last and STRING.extend.&lt;br /&gt;
* Changed STRING.out (no more enclosing %&amp;quot; printed).&lt;br /&gt;
* Remove warning gcc messages for 64 bit machines (alpha/DEC).&lt;br /&gt;
* Added option -no_split for a better finalization (see man/compile_to_c) file).&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.91 - Wednesday July 24th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Incremental C compiling mode implemented (see option -c_code in help file man/compile) .&lt;br /&gt;
* Added command clean in help file man/clean.&lt;br /&gt;
* Added class FILE_TOOLS.&lt;br /&gt;
* No more empty C struct in generated C code (to avoid problems with Microsoft Windows C compiler).&lt;br /&gt;
* Fixed one more bug with conformance rule VNCG.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.92 - Saturday July 20th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Fixed some more bugs with conformance rule VNCG.&lt;br /&gt;
* Added math functions in DOUBLE/REAL (sin, cos, tan, asin, acos, atan, ... ANSI C names).&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.93 - Thursday July 18th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Fixed some more bugs with conformance rule VNCG.&lt;br /&gt;
* Type BIT is now implemented.&lt;br /&gt;
* Added ELKS 95 STRING.left_adjust and STRING.right_adjust.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.94 - Friday July 5th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Fixed some bugs with conformance rule VNCG.&lt;br /&gt;
* Static expressions are used to detect pre-computable once routines.&lt;br /&gt;
* Added features to_external and from_external both in classes ARRAY and FIXED_ARRAY.&lt;br /&gt;
* Fixed a bug for inheritance of ARRAY or FIXED_ARRAY.&lt;br /&gt;
* Contents of end of class comment checked.&lt;br /&gt;
* Added documentation file for external calls (see help file man/external ).&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.95 - Thursday May 30th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* It is now possible to inherit ARRAY.&lt;br /&gt;
* It is now possible to inherit STRING.&lt;br /&gt;
* Flag -cc of compile_to_c has changed.&lt;br /&gt;
* The PLATFORM class is now conform to ELKS95.&lt;br /&gt;
* Added feature twin (like the one of TowerEiffel) in GENERAL.&lt;br /&gt;
* Added features to_external and from_external in class STRING.&lt;br /&gt;
* Fixed some bugs in once pre-computed routines.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.96 - Friday May 10th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Internal renaming to suppress some warning messages and for a smooth integration with C++ software.&lt;br /&gt;
* DOS and Macintosh better portability.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.97 - Thursday May 2nd, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Inside of compiler cleaned.&lt;br /&gt;
* Pre-Computing of some once functions.&lt;br /&gt;
* Added class COLLECTION, LINK_LIST and FIXED_ARRAY in lib/base.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.98 - Friday March 15th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Command pretty added.&lt;br /&gt;
* Implements Eiffel expanded clause.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.99 - Saturday February 17th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* 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é&lt;br /&gt;
&lt;br /&gt;
=== Release - 1.00 - July 1995 ===&lt;br /&gt;
&lt;br /&gt;
* The very first bootstrap. SmallEiffel is born.&lt;/div&gt;</summary>
		<author><name>Cadrian</name></author>
	</entry>
	<entry>
		<id>https://wiki.liberty-eiffel.org/index.php?title=Release_Notes_(Versions_history)&amp;diff=1782</id>
		<title>Release Notes (Versions history)</title>
		<link rel="alternate" type="text/html" href="https://wiki.liberty-eiffel.org/index.php?title=Release_Notes_(Versions_history)&amp;diff=1782"/>
		<updated>2013-09-16T07:06:23Z</updated>

		<summary type="html">&lt;p&gt;Cadrian: gathering Adler changes and removing SmartEiffel 2.4 (never released)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== LibertyEiffel (latest release first) ==&lt;br /&gt;
For upcoming releases see the [[upcoming releases|list of names]].&lt;br /&gt;
&lt;br /&gt;
=== Adler (not yet released, named after Charles Adler, Jr.) ===&lt;br /&gt;
* First release as LibertyEiffel&lt;br /&gt;
* Added &amp;lt;tt&amp;gt;NATURAL_8&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;NATURAL_16&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;NATURAL_32&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;NATURAL_64&amp;lt;/tt&amp;gt; classes. See tutorial/natural.e for examples.&lt;br /&gt;
* Even low-level features (i.e. &amp;lt;tt&amp;gt;external &amp;quot;built_in&amp;quot;&amp;lt;/tt&amp;gt;) are now checking their assertions. As an example, division by zero is now checked by assertions.&lt;br /&gt;
* Inlined dynamic dispatch for better performance&lt;br /&gt;
* A missing export clause is deprecated. Use &amp;lt;tt&amp;gt;{ANY}&amp;lt;/tt&amp;gt; instead.&lt;br /&gt;
* New core libraries: cli, json, log, parse (beware, those libraries are not yet tuned to be used without GC)&lt;br /&gt;
* Improved libraries: string (with notably a new &amp;lt;tt&amp;gt;FIXED_STRING&amp;lt;/tt&amp;gt; class)&lt;br /&gt;
* Wrapper libraries: gtk, gdk, readline, ffi, 0mq...&lt;br /&gt;
* A new tool that can generate mocks to help unit testing&lt;br /&gt;
&lt;br /&gt;
== SmartEiffel (all releases which are predecessors of Liberty) ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Release 2.3 [Antoine-Auguste Parmentier] - Wednesday July 11th 2007 ===&lt;br /&gt;
&lt;br /&gt;
Again, a lot of novelties for this release:&lt;br /&gt;
&lt;br /&gt;
* New [[Typing policy|typing rules]] have been revisited and are now crystal clear. See [[Typing policy|this page]] for details.&lt;br /&gt;
* Implemented a new [[class loading]] algorithm, which takes into account the &amp;quot;distance&amp;quot; between classes, thus reifying the notion of clusters and sub-clusters. Everything is transparent, there is no new keyword to learn.&lt;br /&gt;
* Installation: SmartEiffel now provides a streamlined installer for package maintainers. Of course, the interactive installer is still available via &amp;quot;make interactive&amp;quot;.&lt;br /&gt;
* Configuration: in the same spirit to simplify package maintainers' life, the configuration &amp;quot;file&amp;quot; can now be a directory.&lt;br /&gt;
* The new [[eiffeltest]] tool is now available too.&lt;br /&gt;
* Old style &amp;quot;rename.se&amp;quot; files are no longer considered. You can now use the same class name in different clusters.&lt;br /&gt;
* The &amp;lt;tt&amp;gt;NONE&amp;lt;/tt&amp;gt; type mark must no longer be used. Just use an empty &amp;lt;tt&amp;gt;{}&amp;lt;/tt&amp;gt; exportation list to indicate that the corresponding following features are not exported. This is better for newcomers.&lt;br /&gt;
* In class [[library_class:COLLECTION|&amp;lt;tt&amp;gt;COLLECTION&amp;lt;/tt&amp;gt;]], features &amp;lt;tt&amp;gt;index_of&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;fast_index_of&amp;lt;/tt&amp;gt; now have an extra argument to indicate where the search must start (as in class [[library_class:STRING|&amp;lt;tt&amp;gt;STRING&amp;lt;/tt&amp;gt;]]). See also &amp;lt;tt&amp;gt;first_index_of&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;fast_first_index_of&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* Microsoft's Visual C++ 2005 compiler is now supported.&lt;br /&gt;
* The debugging sections can be turned on with the new &amp;lt;tt&amp;gt;-debug&amp;lt;/tt&amp;gt; option, in all compilation modes other than &amp;lt;tt&amp;gt;-boost&amp;lt;/tt&amp;gt;. The &amp;lt;tt&amp;gt;-debug_check&amp;lt;/tt&amp;gt; mode has been deprecated.&lt;br /&gt;
* The regular expression library has been added.&lt;br /&gt;
* Sequencer's &amp;lt;tt&amp;gt;READY_DESCRIPTION&amp;lt;/tt&amp;gt; is now renamed as [[library_class:EVENTS_SET|&amp;lt;tt&amp;gt;EVENTS_SET&amp;lt;/tt&amp;gt;]] and has a unified interface for all kinds of events.&lt;br /&gt;
* Some work on the network cluster.&lt;br /&gt;
* Last but not least: SmartEiffel now has a logo that will help it fly!&lt;br /&gt;
&lt;br /&gt;
=== Release 2.2 [Pomme de terre] - Monday December 19th, 2005 ===&lt;br /&gt;
&lt;br /&gt;
Again, a lot of novelties for this release.&lt;br /&gt;
&lt;br /&gt;
First, the new [[eiffeldoc]] command has been completely revisited and is now part of the delivery. That command is 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.&lt;br /&gt;
&lt;br /&gt;
The second important novelty is that we now have a brand new introspection mechanism which allows us to implement the new persistency facility.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
* Added a new command, [[se]], which is meant to be the only command you ever need to put in your PATH!&lt;br /&gt;
* Added a new command, [[eiffeldoc]], that you can use to document your project. Currently only HTML output is supported.&lt;br /&gt;
* The [[plugins]] system is vastly improved and should now be preferred over older external specifications. See [[plugins|this page]] for details.&lt;br /&gt;
* Improved error messages legibility in order to avoid missunderstanding.&lt;br /&gt;
* Added a new OpenGL widget for Vision. Unix-based programs only have to inherit from [[library_class:UNIX_GL_WIDGET|&amp;lt;tt&amp;gt;UNIX_GL_WIDGET&amp;lt;/tt&amp;gt;]] and define all the OpenGL related routines.&lt;br /&gt;
* Added new abstract class named [[library_class:BIJECTIVE_DICTIONARY|&amp;lt;tt&amp;gt;BIJECTIVE_DICTIONARY&amp;lt;/tt&amp;gt;]] which is actually a replacement for the now obsolete [[library_class:DOUBLE_DICTIONARY|&amp;lt;tt&amp;gt;DOUBLE_DICTIONARY&amp;lt;/tt&amp;gt;]] class. At time being, there is only one implementation of [[library_class:BIJECTIVE_DICTIONARY|&amp;lt;tt&amp;gt;BIJECTIVE_DICTIONARY&amp;lt;/tt&amp;gt;]] named [[library_class:HASHED_BIJECTIVE_DICTIONARY|&amp;lt;tt&amp;gt;HASHED_BIJECTIVE_DICTIONARY&amp;lt;/tt&amp;gt;]] (a hash_code-based implementation).&lt;br /&gt;
* Removed class &amp;lt;tt&amp;gt;GENERAL&amp;lt;/tt&amp;gt; as well as some obsolete features of that class. In the past, &amp;lt;tt&amp;gt;GENERAL&amp;lt;/tt&amp;gt; was inherited by [[library_class:PLATFORM|&amp;lt;tt&amp;gt;PLATFORM&amp;lt;/tt&amp;gt;]] which was inherited by [[library_class:ANY.|&amp;lt;tt&amp;gt;ANY.&amp;lt;/tt&amp;gt;]] Now, [[library_class:ANY|&amp;lt;tt&amp;gt;ANY&amp;lt;/tt&amp;gt;]] has no more parent at all (no conforming parent and no non-conforming parents). The removal of &amp;lt;tt&amp;gt;GENERAL&amp;lt;/tt&amp;gt; is better for newcomers because they just need to know about [[library_class:ANY|&amp;lt;tt&amp;gt;ANY&amp;lt;/tt&amp;gt;]] and it is also better for the underlying model consistency. Because we have now removed &amp;lt;tt&amp;gt;equals&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;clone&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;deep_clone&amp;lt;/tt&amp;gt; you must now only use &amp;lt;tt&amp;gt;is_equal&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;twin&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;deep_twin&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;is_deep_equal&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;standard_is_equal&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;standard_twin&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* Removed the &amp;lt;tt&amp;gt;file_tools&amp;lt;/tt&amp;gt; feature from [[library_class:ANY.|&amp;lt;tt&amp;gt;ANY.&amp;lt;/tt&amp;gt;]] Also note that all other file manipulation features from [[library_class:ANY|&amp;lt;tt&amp;gt;ANY&amp;lt;/tt&amp;gt;]] are now obsolete (use the class [[library_class:FILE_TOOLS|&amp;lt;tt&amp;gt;FILE_TOOLS&amp;lt;/tt&amp;gt;]] instead).&lt;br /&gt;
* No more feature &amp;lt;tt&amp;gt;argument&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;argument_count&amp;lt;/tt&amp;gt; in class [[library_class:ANY.|&amp;lt;tt&amp;gt;ANY.&amp;lt;/tt&amp;gt;]] In order to access command-line arguments, just insert the class [[library_class:ARGUMENTS.|&amp;lt;tt&amp;gt;ARGUMENTS.&amp;lt;/tt&amp;gt;]]&lt;br /&gt;
* The &amp;lt;tt&amp;gt;-case_insensitive&amp;lt;/tt&amp;gt; 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 legibility of our code.&lt;br /&gt;
* You now get a warning for using the all lower-case spelling of the keywords &amp;lt;tt&amp;gt;current&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;result&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;void&amp;lt;/tt&amp;gt;. Please use the initial-caps spellings &amp;lt;tt&amp;gt;Current&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;Result&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;Void&amp;lt;/tt&amp;gt; instead.&lt;br /&gt;
* 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.&lt;br /&gt;
* 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.&lt;br /&gt;
* 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.&lt;br /&gt;
* 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.&lt;br /&gt;
* Feature &amp;lt;tt&amp;gt;is_equal&amp;lt;/tt&amp;gt; is now redefined in class [[library_class:HASHABLE|&amp;lt;tt&amp;gt;HASHABLE&amp;lt;/tt&amp;gt;]]. The new definition adds an ensure then assertion to check consistency with the &amp;lt;tt&amp;gt;hash_code&amp;lt;/tt&amp;gt; function. Note that the redefinition is deferred to force clients to select their preferred implementation.&lt;br /&gt;
* Added a new feature called &amp;lt;tt&amp;gt;set_storage&amp;lt;/tt&amp;gt; in class [[library_class:STRING.|&amp;lt;tt&amp;gt;STRING.&amp;lt;/tt&amp;gt;]] This low-level feature is only exported to [[library_class:STRING_HANDLER|&amp;lt;tt&amp;gt;STRING_HANDLER&amp;lt;/tt&amp;gt;]].&lt;br /&gt;
* Added a new features in class [[library_class:COLLECTION|&amp;lt;tt&amp;gt;COLLECTION&amp;lt;/tt&amp;gt;]]: &amp;lt;tt&amp;gt;remove_head&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;remove_tail&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;reverse_index_of&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;last_index_of&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;first_index_of&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;fast_reverse_index_of&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;fast_last_index_of&amp;lt;/tt&amp;gt;&lt;br /&gt;
* Added a new features in class [[library_class:DICTIONARY|&amp;lt;tt&amp;gt;DICTIONARY&amp;lt;/tt&amp;gt;]]: &amp;lt;tt&amp;gt;fast_reference_at&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;fast_put&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;fast_remove&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* Added a new Eiffel mode description for the Vim text editor. This mode is compatible with our emacs mode. File &amp;quot;misc/eiffel.vim&amp;quot; is for the Vim editor while file &amp;quot;misc/eiffel.el&amp;quot; is for emacs.&lt;br /&gt;
&lt;br /&gt;
=== Release 2.1 [Poirot] - Wednesday February 9th, 2005 ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
More details about changes from 2.0:&lt;br /&gt;
&lt;br /&gt;
* 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 &amp;quot;inherit&amp;quot; keyword. After that, you can use the &amp;quot;insert&amp;quot; keyword followed by the list of non-conforming parents. Like in the previous release, when a class has no &amp;quot;inherit&amp;quot; clause and no &amp;quot;insert&amp;quot; clause, the default insert ANY is automatically added.&lt;br /&gt;
The new compiler does not warn you anymore when multiple conforming paths 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).&lt;br /&gt;
* We introduced a brand new notation to generalize the old manifest array notation. You can now create an [[library_class:ARRAY|&amp;lt;tt&amp;gt;ARRAY&amp;lt;/tt&amp;gt;]] initialized with letters as follows:&lt;br /&gt;
        {ARRAY[CHARACTER] 1, &amp;lt;&amp;lt; 'a', 'b', 'c', 'd' &amp;gt;&amp;gt; }&lt;br /&gt;
or a LINKED_LIST doing:&lt;br /&gt;
        {LINKED_LIST[CHARACTER] &amp;lt;&amp;lt; 'a', 'b', 'c', 'd' &amp;gt;&amp;gt; }&lt;br /&gt;
as well as any kind of COLLECTION:&lt;br /&gt;
        {RING_ARRAY[CHARACTER] 1, &amp;lt;&amp;lt; 'a', 'b', 'c', 'd' &amp;gt;&amp;gt;}&lt;br /&gt;
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.&lt;br /&gt;
* Classes to manipulate floating point numbers have been completely revisited. Floating point number manipulation now uses [[library_class:REAL_32|&amp;lt;tt&amp;gt;REAL_32&amp;lt;/tt&amp;gt;]] for 32 bits floating points, [[library_class:REAL_64|&amp;lt;tt&amp;gt;REAL_64&amp;lt;/tt&amp;gt;]] which is equivalent of &amp;lt;tt&amp;gt;REAL&amp;lt;/tt&amp;gt; for 64 bits floating points, [[library_class:REAL_80|&amp;lt;tt&amp;gt;REAL_80&amp;lt;/tt&amp;gt;]] for architecture supporting 80 bits, [[library_class:REAL_128|&amp;lt;tt&amp;gt;REAL_128&amp;lt;/tt&amp;gt;]] for architecture supporting 128 bits and, [[library_class:REAL_EXTENDED|&amp;lt;tt&amp;gt;REAL_EXTENDED&amp;lt;/tt&amp;gt;]] which is automatically mapped on [[library_class:REAL_80|&amp;lt;tt&amp;gt;REAL_80&amp;lt;/tt&amp;gt;]] or [[library_class:REAL_128|&amp;lt;tt&amp;gt;REAL_128&amp;lt;/tt&amp;gt;]] depending on the architecture actually used. The old &amp;lt;tt&amp;gt;DOUBLE&amp;lt;/tt&amp;gt; class is now obsolete and is automatically replaced with simply &amp;lt;tt&amp;gt;REAL&amp;lt;/tt&amp;gt; (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 &amp;lt;tt&amp;gt;REAL&amp;lt;/tt&amp;gt;. As an example, ''1.5'' is of type &amp;lt;tt&amp;gt;REAL&amp;lt;/tt&amp;gt; whereas ''{REAL_32 1.5}'' is of type [[library_class:REAL_32|&amp;lt;tt&amp;gt;REAL_32&amp;lt;/tt&amp;gt;]] and ''{REAL_EXTENDED 1.5}'' is of type [[library_class:REAL_80|&amp;lt;tt&amp;gt;REAL_80&amp;lt;/tt&amp;gt;]] or [[library_class:REAL_128|&amp;lt;tt&amp;gt;REAL_128&amp;lt;/tt&amp;gt;]] depending on your hardware. See again SmartEiffel/tutorial/manifest_notation.e for details. Finally, also note that scientific notation has been added to display floating point.&lt;br /&gt;
* To handle downcasting in a better way than the still supported &amp;quot;?=&amp;quot; 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 &amp;quot;?:=&amp;quot; allows you to test if the downcasting can be safely done and the new &amp;quot;::=&amp;quot; assignment can actually perform the downcasting. In debug modes, the &amp;quot;?:=&amp;quot; predicate is considered as a require assertion of the &amp;quot;::=&amp;quot; assignment. The &amp;quot;?:=&amp;quot; predicate accepts type name for its left-hand side and is useful too in assertions. See SmartEiffel/tutorial/downcasting.e for examples.&lt;br /&gt;
* Command short improved: assertions are displayed according to the client's point of view (i.e. you do not see what you cannot call).&lt;br /&gt;
* Added classes [[library_class:STACK|&amp;lt;tt&amp;gt;STACK&amp;lt;/tt&amp;gt;]] and [[library_class:QUEUE|&amp;lt;tt&amp;gt;QUEUE&amp;lt;/tt&amp;gt;]]. Thanks to the &amp;quot;insert&amp;quot; mechanism, it is now safe and efficient to do so ([[library_class:STACK|&amp;lt;tt&amp;gt;STACK&amp;lt;/tt&amp;gt;]] shares the efficient implementation of [[library_class:FAST_ARRAY|&amp;lt;tt&amp;gt;FAST_ARRAY&amp;lt;/tt&amp;gt;]] and [[library_class:QUEUE|&amp;lt;tt&amp;gt;QUEUE&amp;lt;/tt&amp;gt;]] inserts [[library_class:RING_ARRAY|&amp;lt;tt&amp;gt;RING_ARRAY&amp;lt;/tt&amp;gt;]]).&lt;br /&gt;
* Improved memory usage for classes [[library_class:LINKED_LIST|&amp;lt;tt&amp;gt;LINKED_LIST&amp;lt;/tt&amp;gt;]], [[library_class:TWO_WAY_LINKED_LIST|&amp;lt;tt&amp;gt;TWO_WAY_LINKED_LIST&amp;lt;/tt&amp;gt;]], [[library_class:AVL_SET|&amp;lt;tt&amp;gt;AVL_SET&amp;lt;/tt&amp;gt;]], [[library_class:AVL_DICTIONARY|&amp;lt;tt&amp;gt;AVL_DICTIONARY&amp;lt;/tt&amp;gt;]], [[library_class:HASHED_SET|&amp;lt;tt&amp;gt;HASHED_SET&amp;lt;/tt&amp;gt;]] and [[library_class:HASHED_DICTIONARY|&amp;lt;tt&amp;gt;HASHED_DICTIONARY&amp;lt;/tt&amp;gt;]]. Free cells are automatically recycled between various instances of the same generic derivation. Thoses classes are now using our [[library_class:WEAK_REFERENCE|&amp;lt;tt&amp;gt;WEAK_REFERENCE&amp;lt;/tt&amp;gt;]] class silently.&lt;br /&gt;
* Removed obsolete class &amp;lt;tt&amp;gt;BIT&amp;lt;/tt&amp;gt;. Now, just use existing bit operations from [[library_class:INTEGER_8|&amp;lt;tt&amp;gt;INTEGER_8&amp;lt;/tt&amp;gt;]], [[library_class:INTEGER_16|&amp;lt;tt&amp;gt;INTEGER_16&amp;lt;/tt&amp;gt;]], [[library_class:INTEGER_32|&amp;lt;tt&amp;gt;INTEGER_32&amp;lt;/tt&amp;gt;]], &amp;lt;tt&amp;gt;INTEGER&amp;lt;/tt&amp;gt;, [[library_class:INTEGER_64|&amp;lt;tt&amp;gt;INTEGER_64&amp;lt;/tt&amp;gt;]] or, for very long sequences of bits, the completely revisited [[library_class:BIT_STRING|&amp;lt;tt&amp;gt;BIT_STRING&amp;lt;/tt&amp;gt;]] class.&lt;br /&gt;
* 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!&lt;br /&gt;
* 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:&lt;br /&gt;
        3.to_string &lt;br /&gt;
        3.5.print_on(io) &lt;br /&gt;
        &amp;quot;foo&amp;quot;.print_on(io) &lt;br /&gt;
* A new network library has been recently added. This is brand new work which is still in progress. See SmartEiffel/lib/net for details.&lt;br /&gt;
* The old Eiffel strip expression is no longer supported.&lt;br /&gt;
&lt;br /&gt;
=== Release 2.0 [Hercule] - Monday September 27th, 2004 ===&lt;br /&gt;
&lt;br /&gt;
Actually, this new 2.0 release is the beginning of a new era in SmartEiffel's life!&lt;br /&gt;
&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
More details about changes from 1.1:&lt;br /&gt;
&lt;br /&gt;
* Very large systems are handled far more efficiently (but maybe at a cost for smaller systems).&lt;br /&gt;
* The new non-conforming inheritance mechanism is now implemented. For code portatbility, we decided to stick with the &amp;quot;inherit&amp;quot; keyword for conforming parents. So just start your class as usual. Then, to describe the non-conforming parents, just use the &amp;quot;insert&amp;quot; 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 &amp;quot;select&amp;quot; clause (you'll be warned by the compiler). Also keep in mind that when a class has no &amp;quot;inherit&amp;quot; clause and no &amp;quot;insert&amp;quot; clause, the default insert [[library_class:ANY|&amp;lt;tt&amp;gt;ANY&amp;lt;/tt&amp;gt;]] 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.&lt;br /&gt;
* Repeated inheritance is now correctly handled.&lt;br /&gt;
* The optimizer is rewritten and can do more optimizations.&lt;br /&gt;
* 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).&lt;br /&gt;
* 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 [[library_class:NATIVE_ARRAY|&amp;lt;tt&amp;gt;NATIVE_ARRAY&amp;lt;/tt&amp;gt;]]s). Command such as ''p ..1'' is useful to get another element of the array or another attribute of the same object.&lt;br /&gt;
* Dead code is now checked, which explains the compiler takes more time and memory.&lt;br /&gt;
* 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 &amp;quot;good&amp;quot; cluster.&lt;br /&gt;
The new organization splits the classes by logical topics. Note that each cluster may contain two special clusters: &amp;quot;low_level&amp;quot;, containing classes that you might use if you need better performance (generally when you build some utility or library classes); &amp;quot;internal&amp;quot; containing support classes, and not meant to be used directly.&lt;br /&gt;
Now, the organization itself:&lt;br /&gt;
** &amp;quot;abilities&amp;quot; contains the &amp;quot;able&amp;quot; classes ([[library_class:COMPARABLE|&amp;lt;tt&amp;gt;COMPARABLE&amp;lt;/tt&amp;gt;]], [[library_class:HASHABLE|&amp;lt;tt&amp;gt;HASHABLE&amp;lt;/tt&amp;gt;]], and so on);&lt;br /&gt;
** &amp;quot;io&amp;quot; contains the input-out classes; this cluster has but changed from the old one (see below for more details);&lt;br /&gt;
** &amp;quot;iterator&amp;quot; still contains the iterator on storage classes (see the &amp;quot;storage&amp;quot; cluster);&lt;br /&gt;
** &amp;quot;kernel&amp;quot; contains the few general-purpose which could not be put in other clusters, and are quite mandatory for the compiler to work;&lt;br /&gt;
** &amp;quot;numeric&amp;quot; contains all the classes that can be use to manipulate numbers; you will find here &amp;lt;tt&amp;gt;INTEGER&amp;lt;/tt&amp;gt;s, &amp;lt;tt&amp;gt;REAL&amp;lt;/tt&amp;gt;s, but also [[library_class:NUMBER|&amp;lt;tt&amp;gt;NUMBER&amp;lt;/tt&amp;gt;]]s (the infinite-precision integers); This cluster also includes the new [[library_class:MUTABLE_BIG_INTEGER|&amp;lt;tt&amp;gt;MUTABLE_BIG_INTEGER&amp;lt;/tt&amp;gt;]] class which is an efficient tools for fast integer number crunching.&lt;br /&gt;
** &amp;quot;random&amp;quot; contains the pseudo-random number generation classes;&lt;br /&gt;
** &amp;quot;scoop&amp;quot; contains the SCOOP utilities (not that SCOOP works better than in SE 1.1...);&lt;br /&gt;
** &amp;quot;storage&amp;quot; contains all the classes that store data: [[library_class:COLLECTION|&amp;lt;tt&amp;gt;COLLECTION&amp;lt;/tt&amp;gt;]], [[library_class:DICTIONARY|&amp;lt;tt&amp;gt;DICTIONARY&amp;lt;/tt&amp;gt;]], [[library_class:SET|&amp;lt;tt&amp;gt;SET&amp;lt;/tt&amp;gt;]]... (Note: see below for more details on [[library_class:DICTIONARY|&amp;lt;tt&amp;gt;DICTIONARY&amp;lt;/tt&amp;gt;]] and [[library_class:SET|&amp;lt;tt&amp;gt;SET&amp;lt;/tt&amp;gt;]]);&lt;br /&gt;
** &amp;quot;string&amp;quot; contains the [[library_class:STRING|&amp;lt;tt&amp;gt;STRING&amp;lt;/tt&amp;gt;]] and related classes (also Unicode strings);&lt;br /&gt;
** &amp;quot;time&amp;quot; contains the [[library_class:TIME|&amp;lt;tt&amp;gt;TIME&amp;lt;/tt&amp;gt;]]-related classes;&lt;br /&gt;
** &amp;quot;vision&amp;quot; contains the vision graphical library classes;&lt;br /&gt;
** &amp;quot;sorting&amp;quot; contains most common algorithm to sort [[library_class:COLLECTION|&amp;lt;tt&amp;gt;COLLECTION&amp;lt;/tt&amp;gt;]]s;&lt;br /&gt;
** &amp;quot;misc&amp;quot; contains some useful classes that cannot be easily put elsewhere short of having their own cluster.&lt;br /&gt;
&lt;br /&gt;
* [[library_class:DICTIONARY|&amp;lt;tt&amp;gt;DICTIONARY&amp;lt;/tt&amp;gt;]] class is now deferred and has no more generic constraint. The library now includes two different implementations.&lt;br /&gt;
** The [[library_class:HASHED_DICTIONARY|&amp;lt;tt&amp;gt;HASHED_DICTIONARY&amp;lt;/tt&amp;gt;]] implementation is the hash_code based implementation (the generic constraint for [[library_class:HASHED_DICTIONARY|&amp;lt;tt&amp;gt;HASHED_DICTIONARY&amp;lt;/tt&amp;gt;]] is [[library_class:HASHABLE|&amp;lt;tt&amp;gt;HASHABLE&amp;lt;/tt&amp;gt;]]).&lt;br /&gt;
** The [[library_class:AVL_DICTIONARY|&amp;lt;tt&amp;gt;AVL_DICTIONARY&amp;lt;/tt&amp;gt;]] implementation is a balanced tree based implementation (the generic constraint for this implemetation is [[library_class:COMPARABLE|&amp;lt;tt&amp;gt;COMPARABLE&amp;lt;/tt&amp;gt;]]).&lt;br /&gt;
You should update all your create instructions by selecting [[library_class:HASHED_DICTIONARY|&amp;lt;tt&amp;gt;HASHED_DICTIONARY&amp;lt;/tt&amp;gt;]] or [[library_class:AVL_DICTIONARY|&amp;lt;tt&amp;gt;AVL_DICTIONARY&amp;lt;/tt&amp;gt;]]. In order to ease this code update, the compiler will warn you that [[library_class:HASHED_DICTIONARY|&amp;lt;tt&amp;gt;HASHED_DICTIONARY&amp;lt;/tt&amp;gt;]] is selected by default. Please update your code because this is a temporary warning of the compiler.&lt;br /&gt;
&lt;br /&gt;
* Some more [[library_class:DICTIONARY|&amp;lt;tt&amp;gt;DICTIONARY&amp;lt;/tt&amp;gt;]] classes were also added (among them: [[library_class:DOUBLE_DICTIONARY|&amp;lt;tt&amp;gt;DOUBLE_DICTIONARY&amp;lt;/tt&amp;gt;]] can be of interest).&lt;br /&gt;
* The [[library_class:SET|&amp;lt;tt&amp;gt;SET&amp;lt;/tt&amp;gt;]] class has undergone the same transformation ([[library_class:HASHED_SET|&amp;lt;tt&amp;gt;HASHED_SET&amp;lt;/tt&amp;gt;]] and [[library_class:AVL_SET|&amp;lt;tt&amp;gt;AVL_SET&amp;lt;/tt&amp;gt;]]).&lt;br /&gt;
* A [[library_class:RING_ARRAY|&amp;lt;tt&amp;gt;RING_ARRAY&amp;lt;/tt&amp;gt;]] class was added. This [[library_class:COLLECTION|&amp;lt;tt&amp;gt;COLLECTION&amp;lt;/tt&amp;gt;]] is quite similar to an [[library_class:ARRAY|&amp;lt;tt&amp;gt;ARRAY&amp;lt;/tt&amp;gt;]] that performs well for all queue operations (add|remove)_(first|last) thanks to its circular internal representation.&lt;br /&gt;
* The [[library_class:TUPLE|&amp;lt;tt&amp;gt;TUPLE&amp;lt;/tt&amp;gt;]] class is now defined in Eiffel. Thanks to this new source code implementation, we have added the definition for the `item' feature definition.&lt;br /&gt;
* The [[library_class:ROUTINE|&amp;lt;tt&amp;gt;ROUTINE&amp;lt;/tt&amp;gt;]], [[library_class:PROCEDURE|&amp;lt;tt&amp;gt;PROCEDURE&amp;lt;/tt&amp;gt;]] and [[library_class:FUNCTION|&amp;lt;tt&amp;gt;FUNCTION&amp;lt;/tt&amp;gt;]] classes are also defined in Eiffel.&lt;br /&gt;
* Added a new [[library_class:WEAK_REFERENCE|&amp;lt;tt&amp;gt;WEAK_REFERENCE&amp;lt;/tt&amp;gt;]] class with the appropriate garbage collector support.&lt;br /&gt;
* Split has been improved in order to reduce C files compilation after a change.&lt;br /&gt;
* Added a new &amp;quot;-profile&amp;quot; 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:&lt;br /&gt;
** the profiling output is written in the &amp;quot;profile.se&amp;quot; file;&lt;br /&gt;
** for each entry, the &amp;quot;own&amp;quot; and &amp;quot;cumul&amp;quot; times, total and average, are given; also, the caller features and the called ones are displayed;&lt;br /&gt;
** 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);&lt;br /&gt;
** the Eiffel called features are sorted by decreasing number of calls;&lt;br /&gt;
** 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).&lt;br /&gt;
**e that:&lt;br /&gt;
** profiled programs take MUCH longer to execute (a lot of, hem, time, is spent in the kernel merely to, hem, track time...)&lt;br /&gt;
** externals are not profiled; they are accounted in the &amp;quot;own&amp;quot; time of their caller;&lt;br /&gt;
** inlined features are not profiled either (only in -boost)&lt;br /&gt;
** 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.&lt;br /&gt;
**s to Lothar Scholz for having the idea in the first place.&lt;br /&gt;
**ped the input-output system to make it more general and more extensible. Provided features:&lt;br /&gt;
** now streams can be &amp;quot;filtered&amp;quot;. It means you can nest them to bring extra features such as encoding or encryption (among many other things)&lt;br /&gt;
** 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.&lt;br /&gt;
See also the cluster description on the SmartEiffel site.&lt;br /&gt;
* Visitors revisited. The architecture is now ready to be used (in 1.1 it was but a draft).&lt;br /&gt;
&lt;br /&gt;
== SmartEiffel (release 1.1 down to release 1.0) ==&lt;br /&gt;
&lt;br /&gt;
=== Release 1.1 [Charlemagne] - Monday June 16th, 2003 ===&lt;br /&gt;
&lt;br /&gt;
* Thoroughly changed the configuration handling. The new scheme is more complete, and much more flexible.&lt;br /&gt;
** 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 &amp;lt;Enter&amp;gt; key. For more informations about installation and all new configuration capabilities, please have a look to install page.&lt;br /&gt;
** Added the -c_mode option, in conjunction with the new configuration handling.&lt;br /&gt;
** Added a -loadpath flag to read an extra loadpath.&lt;br /&gt;
* 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.&lt;br /&gt;
* Added a small expression evaluator to sedb. One can now display the attributes of the objects on the stack. Be sure to read the &amp;quot;more-help&amp;quot; section on data display (for once functions, the result is unavailable if it has not yet been called).&lt;br /&gt;
* 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.&lt;br /&gt;
* Implemented inspect on [[library_class:STRING|&amp;lt;tt&amp;gt;STRING&amp;lt;/tt&amp;gt;]]s.&lt;br /&gt;
* 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!&lt;br /&gt;
* [[pretty]] significantly updated.&lt;br /&gt;
* The C files produced by the compiler now should work on any platform, even with the GC turned on.&lt;br /&gt;
* Added Unicode support in [[library_class:STRING|&amp;lt;tt&amp;gt;STRING&amp;lt;/tt&amp;gt;]]s (see the SmartEiffel/tutorial/unicode and SmartEiffel/lib/unicode directories).&lt;br /&gt;
* Added new abstract class [[library_class:FILE|&amp;lt;tt&amp;gt;FILE&amp;lt;/tt&amp;gt;]] and new features in class [[library_class:DIRECTORY|&amp;lt;tt&amp;gt;DIRECTORY&amp;lt;/tt&amp;gt;]].&lt;br /&gt;
* Added hexadecimal notation for &amp;lt;tt&amp;gt;INTEGER&amp;lt;/tt&amp;gt; constants, [[library_class:CHARACTER|&amp;lt;tt&amp;gt;CHARACTER&amp;lt;/tt&amp;gt;]] constants and inside manifest [[library_class:STRING|&amp;lt;tt&amp;gt;STRING&amp;lt;/tt&amp;gt;]]s as well. See the example in file SmartEiffel/tutorial/hexadecimal.e for more information.&lt;br /&gt;
* Added agent facilities on [[library_class:STRING|&amp;lt;tt&amp;gt;STRING&amp;lt;/tt&amp;gt;]] and [[library_class:UNICODE_STRING|&amp;lt;tt&amp;gt;UNICODE_STRING&amp;lt;/tt&amp;gt;]] (warning, those facilities are non-standard extensions).&lt;br /&gt;
* 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.&lt;br /&gt;
* Moved the bin_c directory to install/germ.&lt;br /&gt;
* Reorganized the SmartEiffel/sys/runtime directory:&lt;br /&gt;
** Clearly separated C and Java backend helpers&lt;br /&gt;
** 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&lt;br /&gt;
* Added the -compact option which produces much more compact C code.&lt;br /&gt;
* same_type from &amp;lt;tt&amp;gt;GENERAL&amp;lt;/tt&amp;gt; is now obsolete. Use same_dynamic_type instead.&lt;br /&gt;
* Obsoleted operators &amp;quot;and&amp;quot;, &amp;quot;or&amp;quot;, &amp;quot;xor&amp;quot; and &amp;quot;not&amp;quot; for &amp;lt;tt&amp;gt;INTEGER&amp;lt;/tt&amp;gt;s, and added prefix operator &amp;quot;~&amp;quot;.&lt;br /&gt;
* [[library_class:MEMORY|&amp;lt;tt&amp;gt;MEMORY&amp;lt;/tt&amp;gt;]].allocated_bytes is more accurate.&lt;br /&gt;
* Generated object files are now removed before calling C compiler.&lt;br /&gt;
* Various bug fixes and improvements (see details in the SmartZilla bug tracker).&lt;br /&gt;
&lt;br /&gt;
=== Release 1.0 - Friday December 6th, 2002 ===&lt;br /&gt;
&lt;br /&gt;
This is the very first release with the name SmartEiffel!&lt;br /&gt;
(Previous releases were named SmallEiffel.)&lt;br /&gt;
&lt;br /&gt;
The main changes between SmallEiffel -0.74 and SmartEiffel 1.0 are:&lt;br /&gt;
&lt;br /&gt;
* Name changed from SmallEiffel to SmartEiffel!&lt;br /&gt;
* Version numbering: now, versions are numbered from 1.0 beta 1 upward&lt;br /&gt;
* 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).&lt;br /&gt;
* The new Reference keyword is now implemented. Use reference &amp;lt;tt&amp;gt;INTEGER&amp;lt;/tt&amp;gt; instead of &amp;lt;tt&amp;gt;INTEGER_REF&amp;lt;/tt&amp;gt;. &amp;lt;tt&amp;gt;INTEGER_REF&amp;lt;/tt&amp;gt; will become obsolete.&lt;br /&gt;
* The new [[library_class:INTEGER_GENERAL|&amp;lt;tt&amp;gt;INTEGER_GENERAL&amp;lt;/tt&amp;gt;]], [[library_class:INTEGER_8|&amp;lt;tt&amp;gt;INTEGER_8&amp;lt;/tt&amp;gt;]], [[library_class:INTEGER_16|&amp;lt;tt&amp;gt;INTEGER_16&amp;lt;/tt&amp;gt;]], [[library_class:INTEGER_32|&amp;lt;tt&amp;gt;INTEGER_32&amp;lt;/tt&amp;gt;]], [[library_class:INTEGER_64|&amp;lt;tt&amp;gt;INTEGER_64&amp;lt;/tt&amp;gt;]] types are now implemented.&lt;br /&gt;
* After long discussions, we have decided to stick to our decision for the type of integer constants (as an example, 127 is of type [[library_class:INTEGER_8|&amp;lt;tt&amp;gt;INTEGER_8&amp;lt;/tt&amp;gt;]] and 128 is of type [[library_class:INTEGER_16|&amp;lt;tt&amp;gt;INTEGER_16&amp;lt;/tt&amp;gt;]] 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 &amp;lt;tt&amp;gt;&amp;lt;&amp;lt;...&amp;gt;&amp;gt;&amp;lt;/tt&amp;gt; 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 :)&lt;br /&gt;
* 64-bit architectures supported.&lt;br /&gt;
* Internal improvements in the type system (better C code produced)&lt;br /&gt;
* Buffered I/O. You may get big improvements on programs performing lots of file reading or writing ([[library_class:STD_INPUT|&amp;lt;tt&amp;gt;STD_INPUT&amp;lt;/tt&amp;gt;]] and [[library_class:STD_OUTPUT|&amp;lt;tt&amp;gt;STD_OUTPUT&amp;lt;/tt&amp;gt;]] are also buffered).&lt;br /&gt;
* The short command now has the &amp;quot;-client&amp;quot; option (see short command manual for more details).&lt;br /&gt;
* The &amp;quot;tcc&amp;quot; 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.&lt;br /&gt;
* New bug reporting tool. Now you can see all known bugs and their state. Allways refers to the bug report page on SmartEiffel site.&lt;br /&gt;
* As suggested on our mailing list, there are now two new classes in order to remove some definitions from &amp;lt;tt&amp;gt;GENERAL&amp;lt;/tt&amp;gt; (see class [[library_class:MATH_CONSTANTS|&amp;lt;tt&amp;gt;MATH_CONSTANTS&amp;lt;/tt&amp;gt;]] and class [[library_class:CHARACTER_CONSTANTS|&amp;lt;tt&amp;gt;CHARACTER_CONSTANTS&amp;lt;/tt&amp;gt;]]).&lt;br /&gt;
* 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 &amp;gt;&amp;gt; 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.&lt;br /&gt;
* Type mark must now follow the Precursor keyword.&lt;br /&gt;
* Fixed the bug recently reported by Wolfgang Jansen. (Well isolated bug report, thanks!) This bug was related to expanded objects and the twin feature.&lt;br /&gt;
* Fixed the -manifest_string_trace bug recently reported by Alexis Saettler. (Well isolated bug as well, thanks!)&lt;br /&gt;
* 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 &amp;quot;like Current&amp;quot; type mark into some hard-coded type mark (e.g. &amp;quot;FOO&amp;quot;). 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 [[library_class:NUMBER|&amp;lt;tt&amp;gt;NUMBER&amp;lt;/tt&amp;gt;]] library implementation of &amp;lt;tt&amp;gt;is_equal&amp;lt;/tt&amp;gt; (''like Current'' is now changed to [[library_class:NUMBER|&amp;lt;tt&amp;gt;NUMBER&amp;lt;/tt&amp;gt;]]) and changed the postcondition of &amp;lt;tt&amp;gt;is_equal&amp;lt;/tt&amp;gt; in &amp;lt;tt&amp;gt;GENERAL&amp;lt;/tt&amp;gt; (ensure assertion relaxed to no longer call standard_is_equal).&lt;br /&gt;
* 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/&lt;br /&gt;
* New Cygwin directory notation is now supported. Recent Cygwin systems will be automatically detected while install.&lt;br /&gt;
* Other &amp;quot;secret&amp;quot; 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.&lt;br /&gt;
* Improved internal lab process to more easily provide professional support contracts (see premium support for more details).&lt;br /&gt;
* New functions in [[library_class:COLLECTION_SORTER|&amp;lt;tt&amp;gt;COLLECTION_SORTER&amp;lt;/tt&amp;gt;]] classes using dichotomic search.&lt;br /&gt;
* GC support for the Elate system updated.&lt;br /&gt;
* Various bug fixes and improvements.&lt;br /&gt;
&lt;br /&gt;
== SmallEiffel (all releases of SmallEiffel) ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.74 - Tuesday May 7th, 2002 ===&lt;br /&gt;
&lt;br /&gt;
* The new agent mechanism is now implemented. See tutorial/agent directory for examples.&lt;br /&gt;
* 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.&lt;br /&gt;
* The new create instruction/expression is now fully implemented and correctly pretty-printed. The new default_create feature mechanism is also implemented.&lt;br /&gt;
* 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.&lt;br /&gt;
* Added examples for the new TUPLE type in directory tutorial/tuple.&lt;br /&gt;
* 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.)&lt;br /&gt;
* The external C interface is now compatible with the new ETL definition. (See directory tutorial/external/C for examples.)&lt;br /&gt;
* Added flag -high_memory_compiler to compile_to_c.&lt;br /&gt;
* 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.)&lt;br /&gt;
* 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.&lt;br /&gt;
* Added feature connect_append_to both in class TEXT_FILE_WRITE and BINARY_FILE_WRITE.&lt;br /&gt;
* 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.&lt;br /&gt;
* Added feature size_of and feature last_change_of in class FILE_TOOLS (see also tutorial/basic_time for examples).&lt;br /&gt;
* Added feature append_decimal_in and feature to_decimal in class NUMBER as well as a new example the tutorial/number directory.&lt;br /&gt;
* Added feature add both in class COLLECTION_SORTER and in class REVERSE_COLLECTION_SORTER.&lt;br /&gt;
* Added feature reference_at in class DICTIONARY.&lt;br /&gt;
* Added feature infix &amp;quot;+&amp;quot; in class POINTER.&lt;br /&gt;
* Various bug fixes and improvements.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.75 - Thursday July 16th, 2001 ===&lt;br /&gt;
&lt;br /&gt;
* 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.&lt;br /&gt;
* 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.&lt;br /&gt;
* Added a traditional -help flag for all commands to print a summary of available options.&lt;br /&gt;
* In ACE files as well as in &amp;quot;loadpath.se&amp;quot; files the ${SmallEiffelDirectory} environment variable is automatically defined using the value of the ${SmallEiffel} environment variable.&lt;br /&gt;
* 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.&lt;br /&gt;
* The new TUPLE type is now implemented.&lt;br /&gt;
* Added class TIME_IN_GERMAN to handle date and time in German. See tutorial/basic_time for examples.&lt;br /&gt;
* Feature is_equal of class COMPARABLE is now ELKS compatible.&lt;br /&gt;
* Added feature internal_key in class DICTIONARY.&lt;br /&gt;
* Various bug fixes and improvements.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.76 - Saturday November 11th, 2000 ===&lt;br /&gt;
&lt;br /&gt;
* 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.&lt;br /&gt;
* 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).&lt;br /&gt;
* Added feature reindex in class ARRAY.&lt;br /&gt;
* Added a brand new class SET[E-&amp;gt;HASHABLE].&lt;br /&gt;
* Added support for the Elate (Amiga) system as well as the vpcc C compiler.&lt;br /&gt;
* Added support for the QNX real time operating system.&lt;br /&gt;
* For feature dispose of class MEMORY (as well as redefinitions), the class invariant is no longer triggered.&lt;br /&gt;
* Added features atan2 and pow both in class REAL and DOUBLE.&lt;br /&gt;
* Internal implementation of BASIC_TIME revisited (using now a double for memorization).&lt;br /&gt;
* Implementation of class DICTIONARY completely revisited. Also added features add, item_map_in and key_map_in in the new class DICTIONARY.&lt;br /&gt;
* 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).&lt;br /&gt;
* Various bug fixes and improvements.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.77 - Saturday February 12th, 2000 ===&lt;br /&gt;
&lt;br /&gt;
* 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, ...&lt;br /&gt;
  To install SmallEiffel under some UNIX like system, just type make in the SmallEiffel directory.&lt;br /&gt;
  To install SmallEiffel under Windows, just run install.exe.&lt;br /&gt;
  On other systems, C compile and run the install.c file.&lt;br /&gt;
* 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.&lt;br /&gt;
* Added NUMBER library, for infinite precision and infinitely large numbers. See tutorial/number for examples.&lt;br /&gt;
* Added ITERATOR library, for external iterators on data structures. See tutorial/iterator for examples.&lt;br /&gt;
* 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).&lt;br /&gt;
* 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).&lt;br /&gt;
* Added class BIT_STRING for very large bit sequences, with reference semantics.&lt;br /&gt;
* 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).&lt;br /&gt;
* 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.&lt;br /&gt;
* Added feature to_hexadecimal and feature to_hexadecimal_in in class INTEGER.&lt;br /&gt;
* Improved incremental recompilation of the generated C code (also fixed a very old bug in incrementality).&lt;br /&gt;
* Exceptions handling: the default_rescue feature is now supported.&lt;br /&gt;
* Various bug fixes and improvements (type inference score increased, ...).&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.78 - Saturday June 05th, 1999 ===&lt;br /&gt;
&lt;br /&gt;
* New -html2 flag for command short generates a colorized HTML short form for classes.&lt;br /&gt;
* The garbage collector now takes into account feature dispose of class MEMORY for reference objects.&lt;br /&gt;
* Obsolete classes (obsolete keyword) now supported.&lt;br /&gt;
* Assertion tags are now displayed when an assertion fails.&lt;br /&gt;
* Added environment variable in loadpath files. Syntax: ${SOME_VAR}&lt;br /&gt;
* Added the -no_style_warning flag to suppress warnings when the recommended styles guidelines for Eiffel are not strictly followed.&lt;br /&gt;
* Added the -version flag to show SmallEiffel's version.&lt;br /&gt;
* 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.&lt;br /&gt;
* Class LINKED_LIST now replaces obsolete class LINK_LIST (simple renaming).&lt;br /&gt;
  Class TWO_WAY_LINKED_LIST now replaces obsolete class LINK2_LIST (simple renaming).&lt;br /&gt;
* Fixed &amp;quot;implicit renaming&amp;quot; bug.&lt;br /&gt;
* Cleaned all source code of tabulations at beginning of line (made code look ugly when using an editor whose tabs were not 8).&lt;br /&gt;
* Some new ELKS'95 features implemented.&lt;br /&gt;
* Validity rule VEEN fixed.&lt;br /&gt;
* Added class COLLECTION_SORTER and REVERSE_COLLECTION_SORTER to the library.&lt;br /&gt;
* Fixed file renaming portability bug (&amp;quot;.d files bug&amp;quot;).&lt;br /&gt;
* Validity rule VCFG.1 is now enforced.&lt;br /&gt;
* Validity rule VAPE is now enforced.&lt;br /&gt;
* Classes mentioned in a cecil.se file are now automatically made live. Makes it easier to link with external libraries.&lt;br /&gt;
* Various other bug fixes.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.79 - Tuesday December 22nd, 1998 ===&lt;br /&gt;
&lt;br /&gt;
* The new Eiffel construct Precursor as described OOSC2 is now implemented.&lt;br /&gt;
* The Eiffel expression strip is now implemented.&lt;br /&gt;
* Nested loadpath files now allowed.&lt;br /&gt;
* Extended anchored definition to accept infix and prefix feature names. For example, this kind of declaration is now accepted :      foo: like infix &amp;quot;+&amp;quot;.&lt;br /&gt;
* Classes COLLECTION2, ARRAY2 and FIXED_ARRAY2 of lib/base completely revisited.&lt;br /&gt;
* Fixed a bug related to calls of the form f.g.h; on expanded objects.&lt;br /&gt;
* Fixed a bug related to inheritance of generic classes.&lt;br /&gt;
* Fixed bugs related to assertions checking in case of exceptions (rescue clause, retry). Improved cycle detection in assertions.&lt;br /&gt;
* Fixed bug in GC related to recycling of &amp;quot;monsters&amp;quot; (very large resizable objets).&lt;br /&gt;
* Fixed an incredible bug in the implementation of the like Current type mark. ;-).&lt;br /&gt;
* Fixed many others bugs ($ operator, GC for alpha DEC, ...).&lt;br /&gt;
* System customization file for the BeOS system added in the &amp;quot;sys&amp;quot; sub-directory (more on system customization).&lt;br /&gt;
* Contents of the environment variable SmallEiffel must be now set with the absolute path of the file &amp;quot;system.se&amp;quot; which is in the sub-directory &amp;quot;sys&amp;quot; of the installation directory.&lt;br /&gt;
  Under a UNIX-like system, the value of the SmallEiffel environment variable may be for example: /usr/lib/SmallEiffel/sys/system.se&lt;br /&gt;
  Commands are also more robust when this environment variable contains non-alphanumeric characters.&lt;br /&gt;
* No more ensure assertion in GENERAL.get_environment_variable.&lt;br /&gt;
* Commands compile_to_jvm and print_jvm_class completely revisited. Java byte-code can be now used with the -verify Java option).&lt;br /&gt;
* Validity rule VDRD.6 is now enforced.&lt;br /&gt;
* Balancing rule (automatic promotion) for INTEGER, DOUBLE and REAL is now implemented.&lt;br /&gt;
* Recursive once routines now work correctly.&lt;br /&gt;
* Unmodified generated C files are not touched anymore.&lt;br /&gt;
* Assertions correctly checked for all external C routines.&lt;br /&gt;
* Exception handling now works when an exception occurs in external C code.&lt;br /&gt;
* Cleaned the compiler and decreased its memory footprint.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.80 - Thursday July 9th, 1998 ===&lt;br /&gt;
&lt;br /&gt;
* Exception handling implemented. Class EXCEPTIONS added in lib/kernel.&lt;br /&gt;
* 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).&lt;br /&gt;
* 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.&lt;br /&gt;
* Behavior of compilation flag -trace of command compile_to_c changed to allow step-by-step execution (embryo of Eiffel source code debugger).&lt;br /&gt;
* Feature ARRAY.resize completely revisited (added two features in class NATIVE_ARRAY: clear and move).&lt;br /&gt;
* Garbage Collector optimized (the GC should be more agressive and some benchmarks are included in directory SmallEiffel/misc/benchmarks/gc/*/bench.e).&lt;br /&gt;
* Associativity of infix operator &amp;quot;^&amp;quot; is now correctly handled.&lt;br /&gt;
* Fixed bugs in PLATFORM for Minimum_double, Minimum_real and Minimum_character_code.&lt;br /&gt;
* Fixed some others bugs about export rules, about expanded objects with expanded attributes.&lt;br /&gt;
* Fixed bugs in pretty.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.81 - Thursday April 9th, 1998 ===&lt;br /&gt;
&lt;br /&gt;
* 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).&lt;br /&gt;
* 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.)&lt;br /&gt;
  Added flag -clean which removes all the C and object files of the system. (This corresponds to the old default behavior.)&lt;br /&gt;
* Fixed a bug related to buffered input under Windows/MS VC.&lt;br /&gt;
* Fixed a bug in misc/INSTALL.SH script.&lt;br /&gt;
* Added require is_connected for all features put_* of class OUTPUT_STREAM.&lt;br /&gt;
* Fixed a bug in command short (require/ensure assertion of deferred routines are now printed).&lt;br /&gt;
* Added one useful hook for mode -html1 in command short (see hook Mcn).&lt;br /&gt;
* Added directory SmallEiffel/sys/runtime which contains the C runtime.&lt;br /&gt;
* Fixed a bug about instanciation of class ANY itself (not so common !).&lt;br /&gt;
* Fixed a bug about inlining of operator $.&lt;br /&gt;
* Fixed a bug about cyclic anchored definitions.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.82 - Friday January 16th, 1998 ===&lt;br /&gt;
&lt;br /&gt;
* Became the official GNU Eiffel compiler.&lt;br /&gt;
* Added first HTML mode to command short. Flag -html1. Thanks to Matthias Klause.&lt;br /&gt;
* Fixed bugs in command pretty.&lt;br /&gt;
* It is now possible to rename/redefine external &amp;quot;SmallEiffel&amp;quot; features.&lt;br /&gt;
* Files *.hlp of directory SmallEiffel/man no longer exists. All the documentation is now in *.html files plus corresponding automatically generated *.txt files.&lt;br /&gt;
* Manifest arrays creation has been optimized.&lt;br /&gt;
* Validity rule VHRC.2 is now enforced.&lt;br /&gt;
* Fixed bugs about export clause.&lt;br /&gt;
* Feature GENERAL.hash_code no longer exists. Added ELKS class HASHABLE in order to be compatible with others compilers/libraries.&lt;br /&gt;
* Fixed a bug in pre-computed once functions.&lt;br /&gt;
* Fixed a bug in REAL/DOUBLE keybord input.&lt;br /&gt;
* Reintroduced left hand side cast in C code for better performances (allowed by the C ANSI standard).&lt;br /&gt;
* Obsolete features (obsolete keyword) now generate a Warning.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.83 - Friday September 19th, 1997 ===&lt;br /&gt;
&lt;br /&gt;
* Added command short to the distribution.&lt;br /&gt;
* Added directory contrib in the distribution. This directory contains some scripts to use gdb as source level debugger for SmallEiffel.&lt;br /&gt;
* Added flag -no_warning to commands: compile_to_c, pretty, and compile_to_jvm.&lt;br /&gt;
* Added flag -case_insensitive to command compile_to_c.&lt;br /&gt;
* Fixed a bug for inherit/select.&lt;br /&gt;
* Fixed a bug for some pre-computed once function.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.84 - Monday August 18th, 1997 ===&lt;br /&gt;
&lt;br /&gt;
* Class BIT is now implemented in Java bytecode (command compile_to_jvm).&lt;br /&gt;
* Added external specification to call Java code (when using compile_to_jvm).&lt;br /&gt;
* 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.&lt;br /&gt;
* 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).&lt;br /&gt;
* Added STRING.substring_index (from ELKS written by Fridtjof SIEBERT).&lt;br /&gt;
* 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).&lt;br /&gt;
* Changed the behavior of end_of_input of INPUT_STREAM (this flag is true _after_ last character has been read).&lt;br /&gt;
* Fixed a bug in manifest arrays (mixed objects including Void).&lt;br /&gt;
* Fixed a bug dealing with some statically computed expressions.&lt;br /&gt;
* Fixed a bug in repeated inheritance.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.85 - Thursday July 3rd, 1997 ===&lt;br /&gt;
&lt;br /&gt;
* First beta-release of commands compile_to_jvm and print_jvm_class!&lt;br /&gt;
* 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.&lt;br /&gt;
* 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.&lt;br /&gt;
* Added feature to_hexadecimal and feature to_hexadecimal_in in class CHARACTER.&lt;br /&gt;
* Feature io, std_input, std_output and std_error of class GENERAL are no longer frozen.&lt;br /&gt;
* 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).&lt;br /&gt;
* Feature die_with_code of GENERAL now accepts any INTEGER code (not just predefined exit_success_code and exit_failure_code).&lt;br /&gt;
* Fixed a bug in STRING. The following expression is now true: (&amp;quot;a%/0/b&amp;quot;).count = 3&lt;br /&gt;
  Just try this on your favorite Eiffel compiler ;-)&lt;br /&gt;
* 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.&lt;br /&gt;
* Feature unread_character of class INPUT_STREAM is now implemented in Eiffel.&lt;br /&gt;
* Added OUTPUT_STREAM.put_pointer to view a POINTER.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.86 - Sunday April 13th, 1997 ===&lt;br /&gt;
&lt;br /&gt;
* All reported bugs at this time have been fixed.&lt;br /&gt;
* 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.&lt;br /&gt;
* Features BOOLEAN.infix &amp;quot;or&amp;quot; and BOOLEAN.infix &amp;quot;and&amp;quot; are now written in pure Eiffel. As a consequence, it is very important for the SmallEiffel programmer to make the distinction between BOOLEAN.infix &amp;quot;and then&amp;quot; and BOOLEAN.infix &amp;quot;and&amp;quot; (respectively for BOOLEAN.infix &amp;quot;or else&amp;quot; and BOOLEAN.infix &amp;quot;or&amp;quot;). When left-hand-side argument produces no side effect, the semi-strict operator (BOOLEAN.infix&amp;quot;and then&amp;quot;/&amp;quot;or else&amp;quot;) may run faster.&lt;br /&gt;
* Fixed REAL.sin (the old one was calling sqrt :-).&lt;br /&gt;
* Fixed a bug in INTEGER.append_in (you can now print Minimum_integer).&lt;br /&gt;
* Added feature in_range in class COMPARABLE.&lt;br /&gt;
* Result type of REAL.infix &amp;quot;^&amp;quot; is now DOUBLE for ELKS compatibility.&lt;br /&gt;
* Feature remove is now implemented in all subclasses of COLLECTION (i.e. ARRAY, FIXED_ARRAY, LINK_LIST and LINK2_LIST).&lt;br /&gt;
* Added feature add for all subclasses of COLLECTION.&lt;br /&gt;
* Conversion DOUBLE/STRING : ANSI C sscanf and sprintf is now used to avoid loss of precision.&lt;br /&gt;
* Added some more class invariant code generation when compiling in -invariant_check mode. Class invariant is now also checked before exit of a routine.&lt;br /&gt;
* Added feature file_tools in class GENERAL to ease access to class FILE_TOOLS.&lt;br /&gt;
* Changed printing format for basic *_REF classes. For example, instruction print(1); now prints 1.&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.87 - Tuesday January 7th, 1997 ===&lt;br /&gt;
&lt;br /&gt;
* Added a new flag -trace to ease debug (see man/compile_to_c file).&lt;br /&gt;
* More inlining at Eiffel level (-boost mode only).&lt;br /&gt;
* Class BIT_N completely revisited. It may be as fast as C.&lt;br /&gt;
* Added class C_ARRAY[E] to deal directly with C arrays at Eiffel level. Thus there are no more external &amp;quot;CSE&amp;quot; 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.&lt;br /&gt;
* Fixed a bug in STD_FILE_READ.read_double.&lt;br /&gt;
* Ordering of C output to increase gcc inlining.&lt;br /&gt;
* According to man/compile_to_c) , flag -debug_check now works (debug instructions are no longer generated in mode -all_check).&lt;br /&gt;
* Unused local variables removed at Eiffel level (warning added for -debug_check mode only).&lt;br /&gt;
* Default class ANY now inherits PLATFORM (as in ETL).&lt;br /&gt;
* Fixed a bug in floating-point constants.&lt;br /&gt;
* Added directory sys to customize default C compiler, default C linker and default loading path.&lt;br /&gt;
* Fixed some bugs with outside expanded types.&lt;br /&gt;
* Fixed a bug with rename/select.&lt;br /&gt;
* Redefinition of once routine is now allowed.&lt;br /&gt;
* Feature GENERAL.conforms_to is now implemented.&lt;br /&gt;
* Rule VFFD.7 is now enforced.&lt;br /&gt;
* Feature force implemented for all COLLECTION.&lt;br /&gt;
* Added conversions features CHARACTER.to_bit, INTEGER.to_bit, BIT_N.to_character and BIT_N.to_integer.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.88 - Wednesday October 30th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Fixed bugs dealing with inherit/rename/select.&lt;br /&gt;
* Added warning for missing colon in actual arguments list.&lt;br /&gt;
* Warning : INSTALL procedure has changed and you have to set manually the default loading path (see misc/INSTALL for details).&lt;br /&gt;
* Added some VMS customization.&lt;br /&gt;
* Fixed bugs when printing run-time stack.&lt;br /&gt;
* Warning added for missing colon in actual parameter list.&lt;br /&gt;
* Added flush in class STD_FILE_WRITE.&lt;br /&gt;
* No more left hand side cast in C code (because some C compilers don't like them).&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.89 - Sunday September 15th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Calling Eiffel from C is now implemented (see man/cecil) file).&lt;br /&gt;
* Object creation uses C calloc instead malloc+memset.&lt;br /&gt;
* Object creation is inlined.&lt;br /&gt;
* ARRAY/FIXED_ARRAY put and item are now inlined (-boost only).&lt;br /&gt;
* Added feature capacity and resize in FIXED_ARRAY.&lt;br /&gt;
* 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.&lt;br /&gt;
* More user's routines are inlined (-boost only).&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.90 - Friday August 23rd, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Added random number generator library (SmallEiffel/lib_rand).&lt;br /&gt;
* Added checking of assertions for external &amp;quot;CSE&amp;quot; features.&lt;br /&gt;
* Anchoring on expanded types are now allowed.&lt;br /&gt;
* Multiple level of anchoring definition allowed.&lt;br /&gt;
* Fixed a bug in STRING.from_external.&lt;br /&gt;
* Fixed a bug with mixed rename/redefine.&lt;br /&gt;
* Inheritance loop detection.&lt;br /&gt;
* Anchoring loop detection.&lt;br /&gt;
* Fixed a bug with renaming infix/prefix.&lt;br /&gt;
* Command clean also use the make suffix.&lt;br /&gt;
* Added ELKS95 sign in INTEGER/REAL/DOUBLE.&lt;br /&gt;
* Feature make is the default root feature name for compile.&lt;br /&gt;
* Optimized ARRAY.add_last and STRING.extend.&lt;br /&gt;
* Changed STRING.out (no more enclosing %&amp;quot; printed).&lt;br /&gt;
* Remove warning gcc messages for 64 bit machines (alpha/DEC).&lt;br /&gt;
* Added option -no_split for a better finalization (see man/compile_to_c) file).&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.91 - Wednesday July 24th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Incremental C compiling mode implemented (see option -c_code in help file man/compile) .&lt;br /&gt;
* Added command clean in help file man/clean.&lt;br /&gt;
* Added class FILE_TOOLS.&lt;br /&gt;
* No more empty C struct in generated C code (to avoid problems with Microsoft Windows C compiler).&lt;br /&gt;
* Fixed one more bug with conformance rule VNCG.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.92 - Saturday July 20th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Fixed some more bugs with conformance rule VNCG.&lt;br /&gt;
* Added math functions in DOUBLE/REAL (sin, cos, tan, asin, acos, atan, ... ANSI C names).&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.93 - Thursday July 18th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Fixed some more bugs with conformance rule VNCG.&lt;br /&gt;
* Type BIT is now implemented.&lt;br /&gt;
* Added ELKS 95 STRING.left_adjust and STRING.right_adjust.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.94 - Friday July 5th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Fixed some bugs with conformance rule VNCG.&lt;br /&gt;
* Static expressions are used to detect pre-computable once routines.&lt;br /&gt;
* Added features to_external and from_external both in classes ARRAY and FIXED_ARRAY.&lt;br /&gt;
* Fixed a bug for inheritance of ARRAY or FIXED_ARRAY.&lt;br /&gt;
* Contents of end of class comment checked.&lt;br /&gt;
* Added documentation file for external calls (see help file man/external ).&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.95 - Thursday May 30th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* It is now possible to inherit ARRAY.&lt;br /&gt;
* It is now possible to inherit STRING.&lt;br /&gt;
* Flag -cc of compile_to_c has changed.&lt;br /&gt;
* The PLATFORM class is now conform to ELKS95.&lt;br /&gt;
* Added feature twin (like the one of TowerEiffel) in GENERAL.&lt;br /&gt;
* Added features to_external and from_external in class STRING.&lt;br /&gt;
* Fixed some bugs in once pre-computed routines.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.96 - Friday May 10th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Internal renaming to suppress some warning messages and for a smooth integration with C++ software.&lt;br /&gt;
* DOS and Macintosh better portability.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.97 - Thursday May 2nd, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Inside of compiler cleaned.&lt;br /&gt;
* Pre-Computing of some once functions.&lt;br /&gt;
* Added class COLLECTION, LINK_LIST and FIXED_ARRAY in lib/base.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.98 - Friday March 15th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* Command pretty added.&lt;br /&gt;
* Implements Eiffel expanded clause.&lt;br /&gt;
&lt;br /&gt;
=== Release - 0.99 - Saturday February 17th, 1996 ===&lt;br /&gt;
&lt;br /&gt;
* 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é&lt;br /&gt;
&lt;br /&gt;
=== Release - 1.00 - July 1995 ===&lt;br /&gt;
&lt;br /&gt;
* The very first bootstrap. SmallEiffel is born.&lt;/div&gt;</summary>
		<author><name>Cadrian</name></author>
	</entry>
	<entry>
		<id>https://wiki.liberty-eiffel.org/index.php?title=ECMA&amp;diff=1762</id>
		<title>ECMA</title>
		<link rel="alternate" type="text/html" href="https://wiki.liberty-eiffel.org/index.php?title=ECMA&amp;diff=1762"/>
		<updated>2013-05-29T13:08:51Z</updated>

		<summary type="html">&lt;p&gt;Cadrian: /* Not yet decided: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In [http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-367.pdf ECMA-367] the ECMA committee TC39-TG4 defines an Eiffel standard. Liberty is not committed to fully implement this standard, but there will be much more of the improvements as in SmartEiffel. Liberty will implement those parts of ECMA that match the effective, efficient and simple design of previous versions of Eiffel. The parts requiring an extensive run-time model will not be currently implemented; those that needlessly complicates the language to comply to widespread programming conventions will be evaluated case-by-case&lt;br /&gt;
&lt;br /&gt;
==These ECMA features are already implemented:==&lt;br /&gt;
&lt;br /&gt;
With small deviations:&lt;br /&gt;
* Non-conforming inheritance ('''insert''' instead of '''inherit {NONE}''') see [[Typing policy]]&lt;br /&gt;
* [https://github.com/LibertyEiffel/Liberty/issues/78 Assigners] with the following deviations:&lt;br /&gt;
** VFAC is not enforced (let the standard rules of the replacing procedure call play instead)&lt;br /&gt;
** assigners are inherited with proper renames (ECMA does not explicit the rules in either way)&lt;br /&gt;
&lt;br /&gt;
==These features are planned:==&lt;br /&gt;
* [[issue:81|generic inheritance]]&lt;br /&gt;
* [[issue:80|generic creation]]&lt;br /&gt;
* [[issue:79|conversions]] - maybe with a slightly stricter interpretation&lt;br /&gt;
* [[issue:61|named TUPLE elements]]&lt;br /&gt;
* [[issue:83|void-safety]] (Liberty implementation will probably differ from ECMA)&lt;br /&gt;
* [[issue:90|small syntax changes]]  - the old syntax will be kept for compatibility for quite some time.&lt;br /&gt;
&lt;br /&gt;
==These ECMA features are not planned in Liberty:==&lt;br /&gt;
* No-variant agent arguments.&lt;br /&gt;
&lt;br /&gt;
==These features are not in ECMA but implemented in Liberty:==&lt;br /&gt;
* inline agents are closures ([https://github.com/LibertyEiffel/Liberty/issues/55 planned])&lt;br /&gt;
* explicit agent conformance rules (see [http://www.jot.fm/issues/issue_2004_04/article7/ this JOT paper])&lt;br /&gt;
&lt;br /&gt;
==Not yet decided:==&lt;br /&gt;
* Bracket indexing&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;TYPE[G]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; and explicit conversion&lt;br /&gt;
&lt;br /&gt;
See also [[Compatibility]].&lt;/div&gt;</summary>
		<author><name>Cadrian</name></author>
	</entry>
	<entry>
		<id>https://wiki.liberty-eiffel.org/index.php?title=ECMA&amp;diff=1761</id>
		<title>ECMA</title>
		<link rel="alternate" type="text/html" href="https://wiki.liberty-eiffel.org/index.php?title=ECMA&amp;diff=1761"/>
		<updated>2013-05-29T12:56:36Z</updated>

		<summary type="html">&lt;p&gt;Cadrian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In [http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-367.pdf ECMA-367] the ECMA committee TC39-TG4 defines an Eiffel standard. Liberty is not committed to fully implement this standard, but there will be much more of the improvements as in SmartEiffel. Liberty will implement those parts of ECMA that match the effective, efficient and simple design of previous versions of Eiffel. The parts requiring an extensive run-time model will not be currently implemented; those that needlessly complicates the language to comply to widespread programming conventions will be evaluated case-by-case&lt;br /&gt;
&lt;br /&gt;
==These ECMA features are already implemented:==&lt;br /&gt;
&lt;br /&gt;
With small deviations:&lt;br /&gt;
* Non-conforming inheritance ('''insert''' instead of '''inherit {NONE}''') see [[Typing policy]]&lt;br /&gt;
* [https://github.com/LibertyEiffel/Liberty/issues/78 Assigners] with the following deviations:&lt;br /&gt;
** VFAC is not enforced (let the standard rules of the replacing procedure call play instead)&lt;br /&gt;
** assigners are inherited with proper renames (ECMA does not explicit the rules in either way)&lt;br /&gt;
&lt;br /&gt;
==These features are planned:==&lt;br /&gt;
* [[issue:81|generic inheritance]]&lt;br /&gt;
* [[issue:80|generic creation]]&lt;br /&gt;
* [[issue:79|conversions]] - maybe with a slightly stricter interpretation&lt;br /&gt;
* [[issue:61|named TUPLE elements]]&lt;br /&gt;
* [[issue:83|void-safety]] (Liberty implementation will probably differ from ECMA)&lt;br /&gt;
* [[issue:90|small syntax changes]]  - the old syntax will be kept for compatibility for quite some time.&lt;br /&gt;
&lt;br /&gt;
==These ECMA features are not planned in Liberty:==&lt;br /&gt;
* No-variant agent arguments.&lt;br /&gt;
&lt;br /&gt;
==These features are not in ECMA but implemented in Liberty:==&lt;br /&gt;
* inline agents are closures ([https://github.com/LibertyEiffel/Liberty/issues/55 planned])&lt;br /&gt;
* explicit agent conformance rules (see [http://www.jot.fm/issues/issue_2004_04/article7/ this JOT paper])&lt;br /&gt;
&lt;br /&gt;
==Not yet decided:==&lt;br /&gt;
* Bracket indexing&lt;br /&gt;
&lt;br /&gt;
See also [[Compatibility]].&lt;/div&gt;</summary>
		<author><name>Cadrian</name></author>
	</entry>
</feed>