Language Roadmap

Revision as of 18:14, 17 April 2007 by Peter gummer (Talk | contribs) (5.7 (October 2006))


Information.png Note: this page focuses on language constructs. For the general EiffelStudio Roadmap please see the relevant page. For a general list of Eiffel milestones see this page at Eiffel Software.


The Eiffel language is described by an international standard, ECMA standard 367, Eiffel: Analysis, Design and Programming Language. The first version was published in June of 2005; the current revision (revision 2) is from June, 2006. In November 2006 this standard was adopted by the International Standards Organization (ISO). The text of the ISO standard is identical to the text of the ECMA standard except for a few differences in front matter and typography. "ISO/ECMA Eiffel" denotes here the language defined by these standards.

The text can be found, among other places, at this location on the ECMA site.

While ISO/ECMA Eiffel for a large part consolidates the current language as implemented by Eiffel compilers, a number of innovative aspects have preceded actual releases of the environment, and some are not implemented yet. Eiffel Software is committed to implementing the full ISO/ECMA Eiffel specification. Each successive release of the compiler brings the implementation closer to that goal. This effort started several years before the completion of the ISO/ECMA standard, indeed before the start of the ECMA process, with the experimental introduction of language revisions either as input to the committee or to validate the committee's ongoing work.

The following sections present the plan for integration of all novelties, both in past versions and in future ones. The future part is for informative purposes only and subject to revision as the implementation work progresses.


HISTORICAL NOTE: UP TO EIFFEL 3

Earlier versions included:

  • ISE Eiffel 1: 1986
  • ISE Eiffel 2: 1988 (corresponds to the language used in the first edition of Object-Oriented Software Construction).
  • ISE Eiffel 2.3: 1989
  • ISE Eiffel 3: 1990-1992 (corresponds to the language described in Eiffel: The Language, Prentice Hall, 1992, and until the start of the ECMA committee the version of reference).

PAST RELEASES AFTER EIFFEL 3

Note that the ECMA Eiffel committee (TC-39/TG4) started its work in mid-2002. Many of the language innovations and improvements introduced in the standard were, however, implemented by ISE Eiffel compiler versions starting in 1997.

Only the releases that introduced significant language innovations are listed. For a more complete timeline see here.

4.1 (June 1996)

  • Thread support

4.2 (February 1998)

4.3 (March 1999)

This release introduced a whole set of new constructs and mechanisms which later (with adaptations) provided the basis for much of the ISO/ECMA standard work. For a summary of its novelties see Extension Season, a short article published in the Journal of Object-Oriented Programming.

  • Major new language mechanism: agents.
  • Another key addition: tuples.
  • New creation syntax (replacing the !! syntax by a more Eiffel-style form using the create keyword).
  • Recursive generic constraints
  • Generic conformance; see description. Note that this mechanism is generalized and superseded by ISO/ECMA Eiffel.

4.4 (July 1999)

  • Major new language mechanism: default_create semantics.

5.0 (July 2001)

See release notes.

  • Extended and improved external syntax, later adopted by ISO/ECMA Eiffel.
  • Verbatim strings, as introduced by ISO/ECMA Eiffel.
  • Agent creation on Result and Current.
  • New basic types: INTEGER_8, INTEGER_16, INTEGER_64, WIDE_CHARACTER.

5.1 (November 2001)

See release notes.

  • INTEGER_64 constants

5.2 (October 2002)

  • Extended support for integer constants of sized types (INTEGER_xx etc.) per ISO/ECMA Eiffel.

See release notes.

5.4 (October 2003)

Major improvements in support for external language interfaces (C, C++...) per ISO/ECMA EIffel:

  • Contracts on external features.
  • Inline C.

Also initial, limited support for new conversion mechanism (convert keyword).

See release notes.

5.5 (September 2004)

  • Major new mechanism: full support for convert facility of ISO/ECMA Eiffel.
  • Void becomes a keyword as per ISO/ECMA Eiffel (previously was a feature of class ANY).
  • Agent creation on operator features.

See release notes.

5.6 (July 2005)

Major ISO/ECMA additions:

  • Alias features (replacing infix/prefix features, still supported of course for compatibility).
  • Bracket features, allowing notations such as your_array [i] or your_dictionary [HELLO] as per ISO/ECMA Eiffel.
  • Assigner commands, allowing e.g. your_array [i] := 5, or your_dictionary [HELLO] := "GUTEN TAG", or a.item (i) := 3, as per ISO/ECMA Eiffel.
  • Once manifest strings mechanism of ISO/ECMA Eiffel.
  • Aligned and non-aligned verbatim strings as per ISO/ECMA Eiffel
  • Manifest type expressions ({YOUR_TYPE} denotes a run-time object representing the given type).
  • New sized types: NATURAL_8, NATURAL_16, NATURAL_32, NATURAL_64 as per ISO/ECMA Eiffel.

See release notes.

5.7 (October 2006)

  • Major ISO/ECMA Eiffel addition: inline agents.
  • Major semantics update per ISO/ECMA Eiffel: new "expanded" semantics.
  • Major ISO/ECMA Eiffel addition: named tuples.
  • Unicode support: CHARACTER_32, per ISO/ECMA Eiffel.

See release notes.

FUTURE RELEASES

Starting with 6.0 the release cycle is fixed: two official releases a year, Spring and Fall. In addition, beta releases continue to be provided at frequent intervals for the EiffelStudio open-source development community.

The Q2 2007 release: 6.0 (June)

This release introduces a number of critical additions to the EiffelStudio environment; on the language front it introduces a number of important ISO/ECMA Eiffel mechanisms with a focus on not breaking existing code.

  • "Flat" class checking: type checking of features performed in every class, even for inherited features.
For example x := y in a routine r could be valid in a class C, but in a descendant of C that redefines the type of x or y it might become invalid.
The type policy of ISO/ECMA Eiffel explicitly specifies that every feature must be valid in every class that has it.)
  • `~' symbol for object equality. `a ~ b means a.is_equal (b) (or equal (a, b)) and follows the redefinitions of is_equal. This goes with a change of signature for is_equal, reducing the risk of catcalls: is_equal (x: ANY) rather than with an argument of type `like Current'.

The Q4 2007 release: 6.1 (November)

This release will be a critical upgrade towards full ISO/ECMA Eiffel. Its specific focus is to make a major advance in what is already one of the principal Eiffel advantages: the ability to produce highly reliable software. ISO/ECMA Eiffel goes further than any existing programming language through a number of mechanisms including in particular:

  • The attached type mechanism guaranteeing the absence of any "void calls" (also known as null pointer errors). 6.1 will introduce the first step towards full implementation of this mechanism, with special attention on facilitating migration to void-safe programs. A working document describes the strategy towards this goal.

Unlike 6.0, release 6.1 may introduce "code-breaking" changes, necessary to gain full advantage of the most advanced mechanisms of ISO/ECMA Eiffel. The principles are:

  • In all cases provide a backward-compatibility option so that all existing code will still compile and run.
  • Allow incremental introduction of language innovations, and the corresponding checking and update of code as necessary, through fine-tuned compilation options.
  • Provide support for migration, e.g. through automatic or semi-automatic translation tools integrated in the refactoring mechanism of EiffelStudio.
  • Clearly explain to all Eiffel developers the benefit of the needed changes, and help them through the process.
  • Provide these explanations long in advance (starting in April 2007 for release in November).
  • As much as possible concentrate all potentially breaking or delicate changes on 6.1, so that developers go through no more than one update process. Previous and subsequent releases are free from such changes