[[Property:title|Release notes for EiffelStudio 5.6]]
[[Property:link_title|5.6]]
[[Property:weight|-14]]
[[Property:uuid|c0aa1026-8c13-9975-0de4-3412624cf89a]]
==Graphical environment==

===Improvements===
* New implementation of the diagram tool with enhanced performance and functionalities 
** Support for UML view.
** Physics: auto-arrangement of classes using force directed graph.
** Multiple selection of classes.
** Improved speed/behavior of drawing/scrolling operations especially on large diagram.

* Added ability to find features performing an assignment to an attribute, or creating an attribute, as well as features using a procedure as creation procedure.
* Feature tree is now showing a different icon for frozen and obsolete features.
* Improved look and feel of applications using the EiffelVision library under Windows XP theme engine.
* Improved keyboard navigation in EiffelStudio windows/dialogs.
* Full support for 64 bits operating systems such as Windows, Linux, Solaris, Irix, OpenVMS,...
* Features tree is also available for classes which are part of the universe, but not yet compiled.
* New EiffelCOM wizard. Click [[EiffelCOM Wizard|here]]  for more details.
* Improved speed of class completion for large system.
* Added new toggles for alias names and assigner commands to feature tree.

===Changes===
*  Changed the default C compilation flags on Windows when using Visual Studio as a back-end C compiler. It will now compile C code using the -MT option. It may cause some linking problems if you are using C libraries compiled against the static C library. To solve those issues recompile your C code using the -MT option. 
* Provided keyword highlighting in editor and different views for new keyword <code>assign</code>.

===Bug fixes===
* Fixed infinite loop in finish_freezing which could use all the available memory.
* Fixed some issues with formatting of agent using expressions as target, and display of character and string constants in context tool.
* Fixed issue where tools that have been externally docked were not properly restored when reopening EiffelStudio.
* Fixed issue where one could not remove entries added to the list of external commands.
* Supported keyword highlighting for the keywords <code>infix</code> and <code>prefix</code> in editor and different views.

==Compiler==
* Click [[Major changes between ISE Eiffel 5.5 and ISE Eiffel 5.6|here]]  for the compiler release notes.

==Debugger==
* Click [[Release notes for EiffelStudio 5.6 related to the debugger|here]]  for the EiffelStudio's debugger release notes.

==EiffelBuild==
* Click [[EiffelBuild Version History|here]]  for the EiffelBuild release notes.

==Libraries==

===CECIL===
* Due to renaming of EIF_REAL and EIF_DOUBLE into EIF_REAL_32 and EIF_REAL_64, we have also changed the names of some CECIL facilities. Although old names are still valid we may remove their definition in future releases of the compiler. Below is the list of old names and their corresponding new names: 
{| 
|- 
| '''Old name'''
| '''New name'''
|- 
| EIF_REAL_FUNCTION
| EIF_REAL_32_FUNCTION
|- 
| EIF_DOUBLE_FUNCTION
| EIF_REAL_64_FUNCTION
|- 
| eif_real_function
| eif_real_32_function
|- 
| eif_double_function
| eif_real_64_function
|- 
| EIF_REAL_TYPE
| EIF_REAL_32_TYPE
|- 
| EIF_DOUBLE_TYPE
| EIF_REAL_64_TYPE
|- 
| EIF_FN_FLOAT
| EIF_FN_REAL_32
|- 
| EIF_FN_DOUBLE
| EIF_FN_REAL_64
|}


===EiffelBase===
* Added new storable facility entierly written in Eiffel which enables you to exchange data between classic and .NET. Former version built-in in the Eiffel run-time did not apply for .NET. The classes are located in the new <eiffel>serialization</eiffel> cluster of EiffelBase.
* <eiffel>ARRAY</eiffel>: 
** Changed signature of <eiffel>subarray</eiffel> to match ELKS specification. It now returns an <eiffel>ARRAY [G]</eiffel> instead of <code>like Current</code>.
** Fixed <eiffel>has</eiffel> to return <code>True</code> when searching for <code>Void</code> when comparing objects in an array containing a <code>Void</code> element.
** Fixed issue on .NET with <eiffel>clone</eiffel>/<eiffel>copy</eiffel> which were not really duplicating the internal of the array, and therefore enabling aliasing of its content by more than one array.
** Fixed a bug in feature <code>occurences </code> that returned <code>0</code> when called with <code>void</code> argument and <code>object_comparision</code> is <code>true</code>.
** Fixed a bug in feature <code>is_equal</code> that caused stack overflow when some array item is the array itself and <code>object_comparision</code> is <code>true</code>.

* <eiffel>ARRAYED_LIST</eiffel>: 
** Removed <eiffel>array_valid_index</eiffel> from <eiffel>ARRAYED_LIST</eiffel>. Descendants of <eiffel>ARRAYED_LIST</eiffel> may need to update their inheritance clause. This fixes ability to use <eiffel>put_i_th</eiffel> with indexes that may violate the invariant of <eiffel>ARRAYED_LIST</eiffel>, for example the code below should trigger a precondition and not violate the invariant of <eiffel>ARRAYED_LIST</eiffel>:
<code>list: ARRAYED_LIST [INTEGER]

create list.make (5)
list.put_i_th (3, 3)</code>

** Added implementation query <eiffel>new_filled_list</eiffel> in <eiffel>ARRAYED_LIST</eiffel>. Descendants of <eiffel>ARRAYED_LIST</eiffel> may need to update their inheritance clause.

* <eiffel>HASH_TABLE</eiffel>: 
** Added <eiffel>merge</eiffel> to <eiffel>HASH_TABLE</eiffel>.
** Now <eiffel>remove</eiffel> will reset <eiffel>found_item</eiffel> when an element is removed.

* <eiffel>INTERNAL</eiffel>: 
** Implemented all the routines in the .NET version.
** Added support for creating <eiffel>TUPLE</eiffel> types in <eiffel>dynamic_type_from_string</eiffel>.
** Added precondition to <eiffel>set_reference_field</eiffel> to ensure validity of reattachement to attributes.

* <eiffel>STRING</eiffel>: 
** Changed signature of <eiffel>infix "+"</eiffel> to match ELKS specification. It now returns <code>like Current</code> instead of <eiffel>STRING</eiffel>.
** Added implementation query <eiffel>new_string</eiffel>. Descendants of <eiffel>STRING</eiffel> may need to update their inheritance clause.
** Fixed a bug in .NET implementation of feature <code>replace_substring</code> that might produce incorrect result when argument and target of the call is the same object.
** Merged .NET and classic implementation of STRING so that all features of STRING are now properly implemented for both platforms.
** Fixed <eiffel>center_justify</eiffel> that would corrupt memory on classic.
** Changed <eiffel>character_justify</eiffel>, <eiffel>left_justify</eiffel>, <eiffel>right_justify</eiffel> and <eiffel>center_justify</eiffel> so that justification is now done on <eiffel>count</eiffel> instead of <eiffel>capacity</eiffel>. You might expect different results after upgrading, thus check all callers of those routines.
** Added <eiffel>is_case_insenstive_equal</eiffel> to compare two strings regardless of their case.
** Rewrote routines <eiffel>is_integer</eiffel>, <eiffel>is_real</eiffel>, <eiffel>is_double</eiffel>, <eiffel>to_integer</eiffel>, <eiffel>to_real</eiffel> and <eiffel>to_double</eiffel> so that they do not rely on C externals. This could breeak some existing code relying on specific locale to read floating numbers.

* Changed behavior of <eiffel>item</eiffel> and <eiffel>eval</eiffel> in <eiffel>FUNCTION</eiffel>. They will not set <eiffel>last_result</eiffel> with their result. If you want to use <eiffel>last_result</eiffel> you should use <eiffel>call</eiffel> instead.
* Added new set of classes <eiffel>NATURAL_8</eiffel>, <eiffel>NATURAL_16</eiffel>, <eiffel>NATURAL_32</eiffel> and <eiffel>NATURAL_64</eiffel> to perform unsigned integer operations.
* Made implementations of <eiffel>cursor</eiffel> in descendants of <eiffel>CURSOR_STRUCTURE</eiffel> return a precise <eiffel>CURSOR</eiffel> type.
* Reduced feature exportation of routines also used as creation procedures of <eiffel>CURSOR</eiffel> descendants to <eiffel>NONE</eiffel>
* Removed <eiffel>make_sublist</eiffel> from <eiffel>TWO_WAY_LIST</eiffel> public creation procedures.
* Made <eiffel>file_prunable</eiffel> from <eiffel>FILE</eiffel> obsolete. Use <eiffel>prunable</eiffel> instead.
* Implemented features <eiffel>collect</eiffel> and <eiffel>full_collect</eiffel> of class <eiffel>MEMORY</eiffel> for .NET.
* Changed type of feature <eiffel>sign</eiffel> in classes <eiffel>INTEGER_8</eiffel> and <eiffel>INTEGER_16</eiffel> to <eiffel>INTEGER_8</eiffel> and <eiffel>INTEGER_16</eiffel> respectively.
* Added a subcluster <eiffel>refactoring</eiffel> with classes that can be helpful for performing code refactoring.
* Augmented many features that are used to access items by their index (such as <eiffel>ARRAY</eiffel>.<eiffel>item</eiffel> and <eiffel>TABLE</eiffel>.<eiffel>item</eiffel>) with a bracket alias and an assigner command.

===EiffelNet===
* Enable to open an URL on a virtual host.
* Enable to open an URL with login and password (for instance http://login:password@host/path/).
* Fixed wrong URL analysis.

===EiffelThread===
* Added feature <code>sleep</code> to class <code>THREAD_CONTROL</code>.
* Provided inheritance link between classes <code>THREAD</code> and <code>THREAD_CONTROL</code> on all platforms.

===EiffelTime===
* Breaking changes: 
** In time format, the use of hh12 alone without specifying AM or PM will default to AM.
** Changed implementation of <eiffel>DATE_SET</eiffel> to use <eiffel>ordered_compact_date</eiffel> as storage.

* Added support for [0]hh12 hour format.
* Added support for specifying hh12 as a standalone format string.
* Fixed a bug where calling <eiffel>TIME</eiffel>.<eiffel>make_by_fine_seconds</eiffel> would set <eiffel>fractional_second</eiffel> to zero rather than to the expected value.
* In <eiffel>TIME</eiffel>, comparison of <eiffel>fractional_second</eiffel> is done using a precision of 1.0e-10.
* Fixed <eiffel>is_positive</eiffel> in <eiffel>DATE_TIME_DURATION</eiffel> so that it is true when either the date or time is zero but the other is positive.
* Fixed incorrect postcondition of <eiffel>set_origine_date_time</eiffel> in <eiffel>DATE_TIME_DURATION</eiffel> which would fail when argument was <code>Void</code>.
* Fixed <eiffel>is_correct_date</eiffel> in <eiffel>DATE_VALIDITY_CHECKER</eiffel> to check that year is less than 65535.
* Fixed <eiffel>DATE_TIME_PARSER</eiffel> when handling time in 12h format, but internally we would convert it into 24h format thus making <eiffel>is_time</eiffel> and <eiffel>is_date_time</eiffel> return <code>False</code> where <code>True</code> was expected.

===EiffelVision2===
* [[Revisions and Bug Fixes|Click here for EiffelVision2 release notes.]] 

===WEL===
* Made WEL 64 bits compliant. This required a breaking change in signatures. Some routines were actually using an <eiffel>INTEGER</eiffel> to represent a <eiffel>POINTER</eiffel>. On 64 bits platform this is not working as <eiffel>INTEGER</eiffel> is 32 bits and <eiffel>POINTER</eiffel> is 64 bits. As a consequence if you are using low level facilities of WEL your code might not compile anymore. Simply replace <eiffel>INTEGER</eiffel> by <eiffel>POINTER</eiffel> to make it compile.

[[EiffelStudio release notes|Click here to check out what was new in other versions]]  




