Language Roadmap

Revision as of 10:21, 11 April 2007 by Bmeyer (Talk | contribs) (2007 Spring release: 6.0 (June))


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 tpes: 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 2003)

  • 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 (September 2003)

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

2007 Spring 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'.

2007 Fall release: 6.1 (November)

This release will be a major upgrade towards full ISO/ECMA Eiffel, introducing some of the principal remaining constructs including the first step towards the attached type mechanism guaranteeing the absence of any "void calls" (also known as null pointer errors).