I Graphical environment ======================= - New Look and feel. - New way of starting EiffelBench and simplified the process of compiling an existing project. - New editor with: - smart syntax highlighting - feature completion (by pressing Ctrl+Space after an identifier). - syntax completion of major control statement (if, from, is,...) and of symbols such as `{', `[', `(', `"',... - smart autoindenting - block indent and exdent. - Infinite level of Undo/Redo - When edition a class text which has been successfully compiled, the class will be fully `pick-and-dropable'. - Faster rendering for Clickable, Flat, Short and Flat/Short format. - System tool has been replaced by a `project setting' window. The underlying mechanism of the Ace file is kept, but all changes are done through a nice GUI making it simpler for beginner to create their first Ace file. - Toolbar are now customizable - EiffelCase has been merged within EiffelBench providing a true reverse engineering using the BON notation. II Compiler =========== - Compiler now fixes an incrementality issue with frozen code. Where after many iteration either your frozen code would not link because of some missing externals, or your frozen code will crash when accessing an attribute which is the implementation of a deferred feature. - Degree 4/Degree 3 crash on *_SERVER when doing an incremental recompilation has been fixed. - New run-time speed improvement (between 30 to 100% faster than the 4.5 release. - Compiler that is largely faster (between 200 and 300% faster than 4.5). - Compiler now detects unused local variables (at freeze/finalize time only) - Fixed crash when using creation expression that includes a feature call. - Implementation of new external syntax. - Implementation of verbatim strings. - Implementation of agent creations on `Result' and `Current' object. - Implementation of new agent syntax. - Better incrementality of C compilation where fewer directories will have their C files which have been changed after a freeze. - New MSIL generation. - Fixed creation of an ARRAY of BIT type. - Introduction of 4 new basic classes: INTEGER_8 INTEGER_16 INTEGER_64 WIDE_CHARACTER - CHARACTER has been extended to support the extended ASCII which means that the following expressions are now True instead of being False as it was in our previous version: '%/127/' < '%/128/' "%/127/" < "%/128/" - Changed the storable mechanism so that we do not store POINTER objects with their value, instead we store a NULL value. As a consequence it is safe to store on disk object that have references to C object. Upon retrieval those reference will be equal to `default_pointer'. This is now the default behavior, if someone wants to have the previous behavior, simply call `set_discard_pointers' from STORABLE. - Independent store format has been changed. Application compiled with 4.5 will not able to read a storable generated by an application compiled with 5.0. If you need the compatibility, simply call `set_old_independent_format' from STORABLE. - When using `independent_store', in case of retrieval error due to a name change in one of the class attribute we will display the original attribute name that was used to make the storable file. This will help when you manage many storable files. - Fixed type checking error in following typed creation/creation expression, with following code: class A [G -> COMPARABLE] create make feature .... end then somewhere you do a: ANY create {A [ANY]} a.make or print (create {A [ANY]}.make) compiler used not to detect that this code is wrong, which could result in segmentation fault when running your code. III Debugger ============ - New debugger functionalities: 1 - one can step-in, step-out, step-by-step when he wants 2 - one can put a breakpoint on the fly (Windows Only) 3 - more accurate stop on user request (tested each instruction instead of each `n' instruction). 4 - one can see all local/arguments variables 5 - debugging is faster 6 - one can set a breakpoints in all kind of assertions clauses except in invariants. Note from Arnaud about 5: When a routine implements a deferred feature that has no precondition, the precondition of the routine is automatically True, thus we do not generate any precondition (In 4.5 it was done sometimes, see FILE.start for example) nor any breakable mark in flat/short form. IV Documentation ================ - New documentation generation (limited now to HTML) which is completely clickable as within EiffelBench. It also includes an EiffelCase like documentation generation. - Generation of XMI which can be used in tools such as Rational Rose. V Libraries =========== 1 - EiffelBase -------------- - No more GENERAL class as proposed by the NICE comittee. It has been replaced by ANY which does not inherit anymore from PLATFORM. - Adaptation of the ARRAY class to the ELKS 2000 standard. - This implies a change in our CONTAINER class where we renamed `empty' into `is_empty' and made `empty' obsolete. If you were inheriting from CONTAINER and redefining `empty', make sure to update your code so that you redefine `is_empty' instead. That way your polymorphic calls will still work as expected without having to change all call to `empty' into calls to `is_empty'. - New implementation of `is_equal' on LIST which will now check that two lists are identical if their items are identical. - New implementation of `copy' on LIST. - New implementation of an iterative `is_equal' on TREE which will now check that two lists are identical if their items are identical. - New implementation of an iterative `copy' on TREE, which creates a deep copy of the tree. - New ROUTINE classes which performed better type checking on argument passing. - Introduction of binary operations on INTEGER types: `&', `|', `bit_xor', `bit_not', `bit_shift', `|>>', `|<<' and bit_text. - Removed `infix "^"' on NUMERIC. It does not break any inheritance, but break clients that were using this operator on an entity declared of type NUMERIC. This is due to the different return type of this operator depending the NUMERIC type you are handling. - Changed the signature of `pruned' in BINARY_SEARCH_TREE to take an extra argument. This was necessary to fix a problem that caused the `parent' attributes to become inconsistent under certain conditions when calling `pruned'. - Reimplemented the features `disjoint' and `symdif' of SUBSET. These features caused problems under certain conditions and also were quite inefficent. The new implementation of these features uses the strategy pattern to choose among different versions of these calculations depending on the properties of the elements contained in the set. - All features on SUBSET that take another subset as an argument (e.g. `intersect') now accept any other subset type as an argument, independent of its underlying implementation, and not only subsets of type `like Current'. - Many smaller bugfixes that have been reported by our customers and have been discovered during our development and testing. 2 - WEL ------- - Modified classes related to the use of registry keys to be written only using Eiffel and externals to Win32 API (no more C intermediate). In the process `close_key' and `delete_key' are now commands and not queries. To find out if it their call was successful, you can query `last_call_successful'. - `children' from WEL_COMPOSITE_WINDOW has its return type changed from `LINKED_LIST [WEL_WINDOW]' to `LIST [WEL_WINDOW]'. 3 - EiffelThreads ----------------- - Following classes have been removed: OBJECT_CONTROL, ONCE_CONTROL and PRECOMP. * OBJECT_CONTROL was internally used and is not needed anymore. If you were using it simply disregard the calls to `freeze' and `unfreeze' they are no necessary. * ONCE_CONTROL is deprecated and you should use the following syntax to create global onces: my_global_once: MY_OBJECT is indexing once_status: global once .... end If you are not using the indexing clause, the once will be evaluated in a per-thread basis. * PRECOMP was needed only for precompilation purpose, its removal should not affect your code. - You do not need the PROXY class anymore, you can safely pass objects from one thread to another without having to put special protection for the GC.