[[Property:title|Release notes for EiffelStudio 6.4]]
[[Property:link_title|6.4]]
[[Property:weight|-11]]
[[Property:uuid|2f88d204-6e51-6150-8fbe-f6a3b41d5ec1]]
==Graphical environment==
===What's new===
* Initial support for the iPhone platform to develop command line applications. Support for graphical applications will be available in the next release.
* Added new libraries: '''api wrapper''', '''diff''', '''encoding''', and '''internationalization''' libraries.
* To minimize breaking changes, EiffelStudio comes with two sets of libraries. The first set, which is the default set, is compatible with previous versions of EiffelStudio. The second set, which is labeled '''experimental''', is void-safe and contains some breaking changes such as new ARRAY, ARRAYED_LIST, HASH_TABLE, SPECIAL classes. Users are encouraged to compile with the experimental libraries in order to prepare their code for the future when today's experimental libraries will become the de facto libraries. It is possible to adjust code so that a single version compiles against both sets of libraries.
* Added new tools to the EiffelStudio delivery. They are located under $ISE_EIFFEL/tools/spec/$ISE_PLATFORM/bin. The new tools are:
:*'''compile_all''': compile all the Eiffel Configuration File projects found under a directory and report which ones do and do not compile.
:*'''syntax_updater''': update the Eiffel code found under a directory to use the latest ECMA syntax in your code.
===Improvements===
* Added automatic completion of the attribute keyword to create an attribute body.
* The completion window will now show a feature or class description tool tip.
* Added support for new attached syntax for code completion.
* Better formatting of verbatim strings, guaranteeing that copy/pasting from the formatted text will yield the same string content as the one in the Eiffel source code.
* Improved display of ~ and /~ operators, as well as object test expressions.
* The project name is displayed in the status bar, when a configuration is loaded (i.e: even before any compilation)
* Vastly improved population of the error list tool when thousands of errors/warnings are generated.
* Added option in the new library dialog to show only void-safe libraries, for void-safe projects.
===Changes===
* The EiffelNet library with IPv6 support is now the default library. The old one is still available as part of our obsolete libraries.
* The project configuration format has a new version with new settings for void-safety compilation. The compiler will choose the default options based on the version of the project configuration file. Making it easy to have the same code compile identically with old versions of EiffelStudio.
* Changed the Eiffel Information System to use the note element in project configuraton file in this style: .
* The experimental version of gobo had its ECF removed and replaced by several corresponding to sub-libraries of the Gobo framework.
===Bug fixes===
* Fixed failure when generating the flat view of some classes.
* Fixed various issues with the testing tool.
* Fixed a bug which caused editor to disappear when debugging.
* Fixed some corruptions of the docking layout of EiffelStudio.
==Compiler==
* Click [[Major changes between ISE Eiffel 6.3 and ISE Eiffel 6.4|here]] for the compiler release notes.
==Debugger==
===Graphical environment===
* Fixed various execution cursor issues in feature tool (especially with loop variant, and also inherited assertions) when debugging.
* EiffelStudio now remembers the breakpoints and profiles even after recompiling from scratch.
===Debugger engine===
* Added support for object test locals.
* Support void-safe expression evaluation.
* Fixed evaluation of is_equal, equal, =, ~ in expression (watch tool).
==EiffelBuild==
* Click [[EiffelBuild Version History|here]] for the EiffelBuild release notes.
==Libraries==
===EiffelBase===
* Changed the default assigner of {TABLE}.item from originally put to force. As a consequence, descendants of TABLE might get a VDRD error if redefining item
* Added same_keys to HASH_TABLE. You can redefine this feature to use a different comparison criterion for the keys.
* For object comparison, containers are now using the ~ operator instead of is_equal. As a result, if you had heterogeneous containers, then it might not find items that were found before (although it was a catcall).
* EiffelBase is now using the alias notation instead of infix/prefix.
* Updated the IMMUTABLE_STRING classes to have an efficient string extraction query shared_substring which will let you create a substring of an existing immutable string without actually duplicating the data.
* The creation procedure default_create from CELL has been removed to ensure that the same code can be compiled in both non-void-safe and void-safe mode.
* Implemented {EXCEPTION}.cause which returns the exception object that caused the current exception while executing the rescue clause.
* Fixed the inconsistent behaviors of {EXCEPTIONS}.original* with 5.7 potentially breaking code using exceptions.
* Ensured that in void-safe mode, one can call {INTERNAL}.set_reference_field to set a reference attribute to Void if the attribute is of a detachable type.
* In INTERNAL, fixed a bug that would not recognize a class name A_SOMETHING as a valid identifier for INTERNAL.
* Changed IO_MEDIUM.last_string to be attached so that existing code can easily be migrated to void-safe without changing the pattern read_line/last_string.
* The following classes have been excluded from the void-safe version of EiffelBase as they cannot be made void-safe under their current design:
:* COMPACT_CURSOR_TREE
:* LINKED_CURSOR_TREE
:* TWO_WAY_CURSOR_TREE
:* COMPACT_TREE_CURSOR
:* LINKED_CURSOR_TREE_CURSOR
:* TWO_WAY_CURSOR_TREE_CURSOR
* Fixed eweasel test#list003 where calling copy on a non-empty LINKED_LIST and providing the same list as argument would wipe out the content of the LINKED_LIST instead of preserving the elements.
* Fixed eweasel test#list014 where calling merge_left and merge_right on a TWO_WAY_LIST was violating the invariant.
* Fixed eweasel test#array005 where calling wipe_out on an ARRAY2 was violating the invariant.
* Fixed eweasel test#except035 where we incorrectly merged the code value for IO_EXCEPTION and RUNTIME_IO_EXCEPTION thus breaking existing code not based on Eiffel exception object.
* Fixed eweasel test#except033 that an exception thrown through rescues caused infinite loop.
===EiffelNet===
* Added ability to only listen on the loopback address in NETWORK_STREAM_SOCKET.
* Fixed some issues when trying to listen for either any address or the loopback address in both IPv4 and IPv6 mode on Windows. The fix also solves a security issue, because if you have IPv6 enabled, then listening to the loopback would also listen to any address on the IPv4 interface.
* Fixed a memory leak in read and receive from SOCKET caused by failure to free the temporary buffer used to hold the data.
* Renamed privately exported make_from_fd to make_from_descriptor_and_address.
* Re-enabled listening on 256 ports on Windows for the IPv6 library.
===EiffelProcess===
* Changed the redirection semantics so that the output is now appended to a file rather than recreating it.
===EiffelVision2===
* [[Revisions and Bug Fixes|Click here for EiffelVision2 release notes.]]
[[EiffelStudio release notes|Click here to check out what was new in other versions]]