Major changes between ISE Eiffel 15.01 and ISE Eiffel 15.08

What's new

  • Supported a new inline separate instruction that allows making feature calls on uncontrolled separate targets inline rather than calling dedicated routines:

separate some_expression_of_separate_type as x, other_expression_of_separate_type as y do end

  • Supported creation of passive regions in SCOOP that execute all logged calls on caller's processors:

create <NONE> foo.make -- Creation instruction. bar := create <NONE> {separate BAZ}.make -- Creation expression.A side effect is that all calls on passive regions are synchronous.


  • runtime: Improved memory management by performing O(log N) lookups when looking for a large block of memory instead of O(N). This would occur after allocating many large objects whose size is greater than 512 bytes (on 32-bit platform) and 1024 bytes on 64-bit platform and then freeing all those objects. Next time you look for a large object it might have to go through all those large objects without finding one that is large enough.
  • code generation: Made code slightly more compact (2 to 6% size reduction on some platform).
  • Optimized expr and False and expr and then False to just False if expr is a local, a argument, Result, Current, an attribute access or if it is the and boolean op.


Bug fixes

Compiler issues

  • Fixed eweasel test#final122 and bug#19028 where we would incorrectly optimize expr and False or expr and then False into just expr which is wrong if expr is True (as the whole expression would be True and not False).

SCOOP issues

  • The SCOOP runtime is now fully written in C to avoid portability issues.
  • Corrected access to tuple fields in SCOOP mode that now follow the validity rules and the semantics of ordinary attributes of a class.
  • test#scoop034 - Fixed a code generation bug in finalized mode for a generic derivation with an actual generic of a basic type.
  • test#term216 - Fixed a crash when processing conversion queries defined as constant attributes.
  • Changed agent creation rules for separate targets. This change makes it possible to introduce library features that help users to avoid writing small little wrapper features in SCOOP to control an object. It is now possible to create agents on separate, uncontrolled target. The newly created agent object is placed on the same processor as the target, and it inherits the 'is_controlled' status.