Major changes between ISE Eiffel 5.3 and ISE Eiffel 5.4
- Support for assertion checking on external routines.
- Removed limitation about implementing or redefining a non-external routine by an external one and vice versa.
- Support for new C/C++ inline specification.
- For .NET, allow calling of overloaded features for a .NET classes to be called without using disambiguated names. Disambiguated names are still needed when redefining inherited features from .NET classes.
- Support for inclusion of .NET resources within Eiffel assemblies.
- Launch C compilation when needed if "-c_compile" option is specified on the "ec" command line.
- Added ability to define custom attributes on assembly. One as to define custom attributes under the new
assembly_metadataindex clause of the root class.
- Limited support for new
convertkeyword (only on argument passing and assignments. Not supported when used with infix routines).
- Improved speed of compilation by about 20-30%
- Improved run-time memory allocation speed and footprint so that it has a 15%-20% faster allocation scheme and takes less memory than before.
- Reduced waiting time at the end of the degree 6 when performing a compilation from scratch (reduced to about 50% or more of the time it used to take)
- Improved speed of
TUPLEcreation and TUPLEaccess which generates more compact C code.
- Improved speed of agent calls by a factor of 2 to 3.
- Improved speed of Eiffel calls from C (CECIL and use of $ operator on routines). It also makes generated executables smaller (about 1-5% smaller depending on number of routines used in this context)
- Changed the way we generate calls to C/C++ external routines. It is possible that because of this change, code that used to C compile, will not compile anymore. This happens mostly when mixing C and C++ code and the C call being made is incorrect but was not previously checked against the C header files if provided.
- In multithreaded mode, all C externals that could potentially block the execution of the system should be marked
sleep (m: INTEGER) is
endNot doing it could generate dead-lock during the execution of a multithreaded system.
- Static access on externals is now only authorized when external is a frozen external without assertions.
- Compiler will now report a warning for assignments like those:
td: TUPLE [DOUBLE]
ti: TUPLE [INTEGER]
td := tiThe warning will help you correct code using this pattern, because in the next release this will be rejected in order to conform to the Eiffel programming language specification.
- Now we do not generate by default the .NET attribute
ComVisibleAttributewith a False value. If needed it has to be done through the new compiler functionality to add custom attributes on assembly.
- Changed indexing clause tag for specifying custom attributes for .NET systems. Now
attributeis replaced by
metadata. Now you can have:
- metadata: generated for both interface and implementation classes
- assembly_metadata: generated for assembly only when specified in root class of system
- class_metadata: generated only for implementation class
- interface_metadata: generated only for interface class
- Now checks for valid export status in agent creation. Meaning that in class
MY_CLASS, the following agent creation
target. callis valid if and only if callis exported to MY_CLASS.
- Allowed type specification for open operands in agent creation, i.e. one can now write:
- Fixed bug which allowed compiler to accept the following incorrect code:
- Fixed bug in error reporting for incompatible
BITtypes involving bit manifest constants. It would always report BIT 0, instead of the actual number of bits in the bit manifest constant.
- Fixed non-detection of changes when changing code from
call. Which should check for the validity of export of callto current class.
- Fixed creation and assignment attempts on generic types that have anchored types in their generic parameter, and the anchor is itself generic.
Runtime/code generation issues
- Fixed issue when shared library definition file did not exist or was invalid. Now it will not produce any C compilation errors.
- Fixed bug in recoverable storable when there is a mismatch. The first assignment attempt in
internal_correct_mismatchfrom ANYwould crash.
- Fixed issue when retrieving storable files that contain TUPLE instances.
- Fixed issues when using agents in a multithreaded application, they will sometimes disable the garbage collector and the application might quickly run out of memory.
- Fixed random crashes when EIF_MEMORY_CHUNK, EIF_MEMORY_SCAVENGE and EIF_STACK_CHUNK environment variables had an incorrect value. Instead the runtime will now fix the value to an appropriate one.
- Fixed bug in code generation with following statement:
- Fixed incorrect code generation with code accessing attributes of .NET expanded types.
- Fixed incorrect computation of equal when used with basic types, e.g. equal (1, 1) would return False instead of True.
- Fixed memory corruption bug with recoverable storable when a mismatch was detected
- Fixed issue where mismatch was not detected if attributes were dropped
- Fixed issue with independent store when storing
TUPLEobjects where it would crash if storable did not include a reference to ANY.