Major changes between ISE Eiffel 6.1 and ISE Eiffel 6.2

What's new

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

  • Exceptions as objects are now implemented.
  • Added support for new ~ operator which can compare 2 objects safely regardless of their type.
  • Added detection of harmful catcall at runtime (harmless ones are currently ignored).
  • Added support for note keyword with a migration path in case note is being used as an identifier in your code.
  • Added -gc_stats option to get some information on how much CPU time is spent in GC during an Eiffel compilation.
  • Introduced several new much more powerful CAPs that now can be applied not only to read-only entities, but also to local variables (including Result), and can take into account execution paths as well as some obvious void-safe patterns.

Improvements

  • Improved speed of compiler by a significant factor for large system.
  • Generated code is about 3-4% faster with a size reduction of about 2-3%.
  • Improved number of dynamic to static bindings in finalized code. Improved quality of inlined code for reducing even more of the dynamic calls.
  • Reduced the size of the AST stored in memory during a compilation by 20/25% which results in a memory usage reduction for EiffelStudio of about 15%. For example when compiling EiffelStudio on Windows 64-bit, it was taking 920MB with the previous version, and now it would be 800MB.
  • Fixed performance issue with {SPECIAL}.clear_all when handling a special of reference.
  • Removed VUOT(2) that required that the type of an object test local is attached.

Changes

  • Protected several calls to eif_wean on the same EIF_OBJECT. This will prevent a memory corruption for people using it incorrectly with a minor slow down since in a typical application there should not be too many protected objects.
  • Removed VFAV(4) validity error that is no longer specified in the standard.
  • Due to new meaning of ~, the old syntax for agents is not being supported anymore. If you still have some code using the old agent syntax, compile it with 6.1 with syntax warning enabled to fix your code before upgrading to 6.2.

Bug fixes

Language issues

  • Fixed various limitations with support of attached types in 6.1, including support for
    • attachment marks for tuple types and formal generics
    • object tests in class invariants

Compiler issues

  • Fixed eweasel test#final046 by avoiding useless creation of temporary objects during dynamic dispatch. It can also dramatically speed up certain kinds of code; on the compiler itself, the speed up is about 8-10%. In the worst case scenario it is 400% or more. Note this bug was introduced in version 6.0. Compared to 5.7, in 6.2 the worst case scenario is still about 10% slower.
  • Fixed an incorrect code generation for is_equal in ANY when exception trace is off which could cause a memory corruption.
  • Fixed various issues with compiler when inlining is enabled.
  • Fixed compiler crash when compiling a class where a type used in a signature of a feature has the wrong number of generic parameters. Fixed eweasel test#incr285.
  • Fixed an incorrect code generation for the dynamic binding of routines defined in generic classes and attribute access in general. Fixed eweasel test#exec272 and test#final039.
  • Fixed eweasel test#melt081 where having a redefined routine involving an anchor to a non-existing feature would crash the compiler instead of reporting a VEEN error.
  • Various bug fixes with respect of handling of expanded generic classes used in generic classes.

Runtime/code generation issues

  • Changed the usage of eif_adopt, eif_protect, eif_wean, eif_freeze and eif_unfreeze so that they can be used in concurrent thread, meaning that it is safe to use them as long as the argument is different in various threads.

Store/Retrieve issues

  • Fixed some issues with the storing or retrieving of generic expanded types.