Major changes between ISE Eiffel 6.4 and ISE Eiffel 6.5

What's new

See Also: Differences between standard ECMA-367 and Eiffel Software implementation

  • Added support for transient attribute. A transient attribute is an attribute which is not stored at runtime and for which its absence in the retrieval system has no effect. Only implemented for C based storable.
  • New loop constructs implementation per a draft specification of the next ECMA standard. Although the compiler supports the new construct, the library counterpart was not included in this release. It will be available as a separate download a few weeks after the 6.5 release.

Improvements

No major improvements in 6.5 as this release was mostly focused on quality improvements.

Changes

  • All the void-safe project configuration files have been removed from the non-experimental version. The rationale is that the usage of ARRAY and SPECIAL would not be void-safe and you need to switch to the experimental version to ensure complete void-safety.
  • The command line compilation has been fixed to use the current working directory unless -project_path is specified (restoring pre-ecf behavior)
  • When an ecf file has been specified with -config, the previously compiled target is chosen as the first option in the compilable target list.

Bug fixes

Language issues

  • Ensured that code generation in .NET mode with experimental compiler worked properly. The current limitation is that manifest type instances are not unique unlike their classic counterpart and that {ANY}.generating_type cannot be applied on .NET types.

Compiler issues

  • Fixed eweasel test#incr313, test#incr317 and test#incr318 where removal of a convert clause was not taken into account by the compiler.
  • Fixed eweasel test#svalid022 where conversion to a target of a detachable type was not accepted, and also now the compiler will verify that the source of the conversion is always attached. Ensured that the source or the target type mentioned in a convert clause is attached.
  • Fixed eweasel test#svalid024 where using an inspect clause with static constant access would failed to compile in a descendant class when full class checking is enabled.
  • Fixed eweasel test#term156 and test#svalid025 where compiler would crash while compiling code that needs to be regenerated in descendant classes (e.g. code from precondition) involving anchors or formal generic parameters.
  • Supported tracking changes made to a shared library definition file to trigger freeze automatically when there are any modifications to this file.
  • Fixed bug on Unix platforms where spaces in project/installation paths failed to create the necessary symbolic links, when using precompiles.
  • Fixed eweasel test#final083 where compiler would crash when inlining certain type of code involving generic classes.

Runtime/code generation issues

  • Fixed eweasel test#final086 where an object test could evaluate the expression more than once.
  • Fixed bug#13969 where an Eiffel generated DLL trying to print something to the console would cause a crash.
  • Fixed bug#15553 where querying {FILE}.is_socket and some other file properties would not work properly on some Unix platforms (Solaris in particular).
  • Fixed bug#13852 and bug#13816 where allocating large arrays would cause a memory corruption.
  • Improved runtime protection of certain routines if a signal is delivered to avoid either corruption or memory leak (Fixes bug#13851, bug#13842, bug#13849, bug#13850 and bug#13840).
  • Fixed bug#15241 where finalizing with assertions enabled would cause a C compilation error when freezing later in the same EiffelStudio session.
  • Fixed a bug in CECIL macros which would cause a segmentation violation on some platforms at the first GC cycle.
  • Fixed creation of manifest array with an attached actual generic parameter to not throw a precondition violation in void-safe mode.
  • Fixed eweasel test#array006 where creating a manifest array would trigger an unjustified invariant violation.
  • Fixed eweasel test#final084 where compiler would generate incorrect type at run-time causing some memory corruption or a general failure.

Store/Retrieve issues

  • Fixed bug#16395 and eweasel test#store026 to avoid mismatch if the metadata stored in eskelet is simplified or not (i.e. for class A[G] feature g: B[G], and then having A [INTEGER] could either describe g as either B[G] or B[INTEGER], even though different they are the same type and should not yield a mismatch).
  • Fixed eweasel test#store028 where retrieving an object whose type involves a TUPLE type without a TUPLE instance could corrupt the retrieval system.