Release notes for EiffelStudio 5.7

    1. Graphical environment
      1. What's new
      2. Improvements
      3. Changes
      4. Bug fixes
    2. Compiler
    3. Debugger
      1. Graphical environment
      2. Debugger engine
    4. EiffelBuild
    5. Libraries
      1. EiffelBase
      2. EiffelNet
      3. EiffelThread
      4. EiffelVision2
      5. Process
      6. UUID
      7. WEL

Graphical environment

What's new

  • Dual licensing of EiffelStudio both commercial and open-source.
  • Refactoring facilities: renaming and feature pull-up.
  • Metric engine. It lets you define more advanced metrics. This is the first result of our new query engine.
  • UUID library for generating UUID.
  • Process library for launching, waiting, redirecting outputs of processes.
  • Configuration system. It brings a new dimension to the way you manage multiple projects and simplifies it.


  • Output of C compilation now appears within the EiffelStudio environment.
  • Improved tool for launching external commands from within the EiffelStudio environment.
  • Introduced basic support for Unicode in Eiffel libraries, namely EiffelBase, EiffelVision2 and WEL.
  • Improved display of clusters, libraries and assemblies.
  • Added ability to see more relations in the diagram tool. For example, you can select a class and choose to see its descendants in the diagram.
  • If a project that needs a precompile is opened and the precompile does not exist it will automatically be compiled.
  • New projects use precompiles by default which speeds up the initial compilation.
  • Improved search facility that has two faces: a quick search bar in the editor for finding text in the current editor, and a search panel to perform exhaustive search over your project.
  • Profiler output is now sortable and can also be represented as a tree.
  • Redesigned completion engine:
    • Completion on wild-cards to quickly find a routine in a long list.
    • Completion list is now available anytime a text field accepts a class or an expression (Class creation dialog, debugger evaluation expression, ...)
    • On .NET, overloaded routines are all put together under one name.
    • Hidden option can now be set with a toolbar at its bottom.
    • Completion is available even if you have a syntax error in your class.
  • Formatters are now presenting results in a structured way with sorting capability.
  • Overridden classes are now shown with the list of classes they are overriding.


  • New configuration system. EiffelStudio will automatically convert your existing ace or epr files to the new format.
  • Compilation progress is now displayed in the status bar and in the output pane, no more dialog box.
  • Display of errors and warnings is now done in different panes, so that you do not lose their content when the output pane has changed.
  • Pick and drop is now a dashed line.
  • Redesigned the starting dialog to make it easier to create new projects as well as managing many existing projects.

Bug fixes

  • When in a different format than the editable format, one can now select a feature and it will bring you to the feature in the selected format, rather than going back to the editable format.
  • Fixed various formatting issue for our documentation format.
  • Fixed some memory corruption that could cause EiffelStudio to randomly crash.


  • Click here for the compiler release notes.


Graphical environment

  • More flexibility has been added for the layout in the debugging tool. One can merge the Current objects with the locals and arguments.
  • The objects and watches tools restore the tree structure when stepping, and highlight value differences.
  • New thread tool that let you switch from one thread to another while debugging.
  • New Exception handling tool that let you ignore or catch certain kind of exceptions.
  • New breakpoint tool to see at glance the status of all your breakpoints.
  • Added ability to see the routine that defines an agent object (classic only for now).

Debugger engine

  • One can debug multithreaded application.
  • One can ignore certain kind of exceptions.
  • One can disable Assertion checking during debugging (only classic system for now).
  • Dotnet debugger is now much more stable for dotnet 2.0
  • Improved expression evaluation error reporting system to provide more information


  • Click here for the EiffelBuild release notes.



    • Added Unicode support through the addition of STRING_32. For the moment Unicode support is limited to the data-structure.
    • Added STRING_GENERAL, a common ancestor to STRING_8 and STRING_32. It is useful if you want to handle both ASCII and Unicode string. For example this facility is used in EiffelVision2 and WEL.
    • STRING can be either STRING_8 or STRING_32 depending on your configuration. Default is STRING_8.
    • Added is_integer_xx, is_natural_xx, to_integer_xx and to_natural_xx where xx stands for 8, 16, 32 or 64.
    • Added is_number_sequence which is semantically identical to the behavior of is_integer in 5.6. Changed behavior of is_integer to check that it fits into a 32-bit integer value.
    • Updated is_double, is_real, is_real_32, is_real_64 so that the specification allows optional integral part or decimal part, but not both (as per the ECMA specification of a real constant). This fixes the bug where 1.e-4 was not considered a valid floating point value.
    • Changed behavior of is_boolean to match the ELKS specification which says the lower case version of the string should either be true or false.
    • Fixed issue in from_c_substring which would not properly if argument start_pos was greater than 1.
    • Removed WIDE_CHARACTER and WIDE_CHARACTER_REF; they are replaced by CHARACTER_32 and CHARACTER_32_REF.
  • REAL_32 and REAL_64:
    • Renamed REAL into REAL_32, and DOUBLE into REAL_64. REAL can be either REAL_32 or REAL_64 depending on your configuration. Default is REAL_32.
    • Added rounded_xxx, floor_xxx and ceiling_xxx where xxx is the current floating point type, as the version returning an INTEGER is definitely not precise for large numbers.
  • SED serialization facility:
    • Fixed read_attributes in SED_INDEPENDENT_DESERIALIZER because we simply forgot to check that between the retrieved system and the stored system, a type has the same number of attributes.
    • Fixed wipe_out in SED_OBJECTS_TABLE' which did not reset last_index. As a consequence if you were doing several storing in a row, then last_index kept being incremented but when retrieving the data it would fail because it would expect last_index to start at 1, not at the last incremented value.
    • Changed SED_MEDIUM_READER_WRITER encoding so that it can also be used in a networking context. Basically now before sending the data, we first send the number of bytes of the data, and then the data. The old encoding is still available in SED_MEDIUM_READER_WRITER_1.
  • Added lock_marking and unlock_marking to use lock and unlock in INTERNAL in a multithreaded context. Currently used by the serialization classes.
    • Added read_integer_XX, put_integer_XX, last_integer_xx and read_natural_XX, put_natural_XX, last_natural_XX where XX stands for 8, 16, 32, 64.
    • Fixed an infinite cycle when using replace_key with a key which is not present in the table.
    • Improved correct_mismatch to also retrieve HASH_TABLEs from version 5.4.
    • Prevented catcalls in HASH_TABLE when you have keys which have a different type.
  • Added a bracket feature to item from ARRAY2.
  • In ACTIVE_INTEGER_INTERVAL the action sequence will only be called if the range actually changes.
  • Fixed launch from EXECUTION_ENVIRONMENT to not inherit handles on Windows.
  • Moved list_eiffel3 and table_eiffel3 to the obsolete library.
  • Changed .NET implementation of the feature FILE.read_line to follow the behavior of the feature in classic mode and to treat either single '%N' or a sequence of '%R' and '%N' as an end of line.
  • Ensured that feature POINTER.out produces under .NET a hexadecimal number like in classic mode rather than a decimal number preceded by 0x.


  • Added in SOCKET read_integer_XX, put_integer_XX, last_integer_xx and read_natural_XX, put_natural_XX, last_natural_XX where XX stands for 8, 16, 32, 64.
  • Modified put and read in NETWORK_RESOURCE, FTP_PROTOCOL, HTTP_PROTOCOL, FILE_PROTOCOL so that the error checking code is not using socket_ok which might triggers error when there are none.
  • Improved handling of recipients and header_from in SMTP_PROTOCOL so that you can provide a nice From or To in the message since they are different from the addresses you have to pass from MAIL FROM and RCPT TO.
  • Improved error handling in EiffelNet. Now each time an error occurs you get an exception and the operating system error code is preserved.
  • Added ability to get the number of bytes read for all the read operation through the bytes_read query. This is useful to detect graceful shutdown of sockets.


  • Refactored the library so that even if you do not have the multithreaded option set, it will compile. However new preconditions have been added so that you know when you are using the library when you cannot.



  • New library to launch processes and redirect their output.


  • New library to generate UUID.


  • Added Unicode support:
    • All routines taking an argument of type STRING or a generic type with STRING in one of the actual generic parameter have been changed to take an argument of type STRING_GENERAL which should not impact you at all, however make sure that if your redefine such a routine, you need to change the signature to STRING_GENERAL, otherwise you may introduce a CATCALL.
    • All queries of type STRING have been changed to STRING_32. Because STRING_32 should not be convertible to STRING, it would break a lot of existing code, as a result and only for a transition period, we made STRING_32 convert to STRING. In the next release this conversion will be marked obsolete, and in the release after the next it will be removed.
    • For queries whose type is a generic with STRING as one of the actual generic parameter, we changed STRING into STRING_32. Because no automatic conversion can be done in this case, we have introduced for a routine nnnnn following this pattern a new routine nnnnn_8 whose actual generic parameter is still STRING.
    • Fixed get_item_rect which was always returning a 0,0,0,0 rect as we were not correctly initializing the rect structure with the pointer to the item.
    • Added get_item_text_rect which returns a rect only for the text of the items.
    • Improved window_of_item to reduce the number of cases where we might get an exception. This makes debugging easier.
    • Fixed resource_string_id which generated a call on Void target exception.
  • Added ability to have drop down menus in WEL_TOOL_BAR_BUTTON.
  • Added the ability to add an icon to the SystemTray.
  • Added ability to drop files to WEL_WINDOW components.
  • Made all contextual menus being selectable from both left and right click (formerly it was only left click).
  • Fixed issue with contextual menus which might not appear correctly, nor respond to click or Esc key properly because the menu is not at the front.
  • Fixed in WEL_LIST_VIEW a bug where if the text of the string is too long, it would be displayed but truncated.
  • Fixed incorrect result for title_bar_height in WEL_SYSTEM_METRICS.
  • Fixed a memory corruption due to Windows not sending a WM_DESTROY or WM_NCDESTROY message in all cases when a window is actually destroyed.
  • Fixed a bug in WEL_REGISTRY_KEY_VALUE.string_value that might cause assertion violation when a value is an empty string, because a check whether the last character is null was done without checking if string has at least one character.

Click here to check out what was new in other versions