Major changes between ISE Eiffel 6.0 and ISE Eiffel 6.1

What's new

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

  • Multiple errors are reported for each compilation degree.
  • Experimental support for Non-conforming Inheritance has been added (Classic only). Classes may now be inherited (using inherit {NONE} but no conformance of that class is implied.
  • Attachment marks are supported. Now it's possible to specify whether an entity is attached or detachable:

a: !A -- a cannot be used before it is attached b: ?A -- b can be used before it is attachedDefault attachment status (for types without an attachment mark) is controlled by the option is_attached_by_default.

  • Object test expression is a replacement for the reverse assignment construct with a new notion of scope:

if {o: !A} e then do_something_with (o) end

  • Attached variables are subject to the new check that they are properly set before use, in particular, attached attributes must be set by a creation procedure and all attached local variables must be set before they are used. The checks are performed when the option is_void_safe is turned on.
  • A feature call can be performed only on an attached target if the option is_void_safe is turned on.
  • Certified attachment patterns (CAP) are used to identify additional cases when an entity is attached (controlled by the option is_void_safe). In particular, the following code is considered void-safe:

f (a: ?ANY) do if a /= void then x := a.out end end

Improvements

  • Improved speed of degree 3. Improvements are even more visible when the checking of inherited features in their descendants is enabled.

Changes

  • No major known changes.

Bug fixes

  • Fixed an issue where the version of default_create from ANY would not yield a dynamic binding if statically it had an empty body (See test#exec280).

Compiler issues

  • The options is_void_safe and is_attached_by_default are not tracked during recompilation, so in order to take any changes in their settings, the project has to be recompiled from scratch.
  • Object test is not permitted inside a precondition or a check instruction.
  • Object tests inside a feature should use different names for the corresponding locals.

Runtime/code generation issues

  • Non-conforming inheritance dynamic conformance only works with Classic compilations, for .Net non-conforming inheritance has no effect on code generation
  • Implemented time accounting on Windows.

Store/Retrieve issues

  • Fixed a potential dead lock when an exception occurs while retrieving an object in a multithreaded environment (See test#store012).