Version
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
x.foo
y.bar
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.
Improvements
- 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
andexpr and then False
to just False ifexpr
is a local, a argument, Result, Current, an attribute access or if it is theand
boolean op.
Changes
Bug fixes
Compiler issues
- Fixed eweasel test#final122 and bug#19028 where we would incorrectly optimize
expr and False
orexpr and then False
into justexpr
which is wrong ifexpr
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.
Back to Compiler History