Difference between revisions of "Language Roadmap"

Line 27: Line 27:
 
Only the releases that introduced significant language innovations are listed. For a more complete timeline see [http://www.eiffel.com/general/ here].
 
Only the releases that introduced significant language innovations are listed. For a more complete timeline see [http://www.eiffel.com/general/ here].
  
==4.2 (February 1998)==
+
===4.2 (February 1998)===
 
*Precursor mechanism; see [http://archive.eiffel.com/doc/manuals/technology/precursor/page.html initial description].
 
*Precursor mechanism; see [http://archive.eiffel.com/doc/manuals/technology/precursor/page.html initial description].
  
==4.3 (March 1999)==
+
===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 [http://se.ethz.ch/~meyer/publications/joop/extensions.pdf article] published in the Journal of Object-Oriented Programming.
 
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 [http://se.ethz.ch/~meyer/publications/joop/extensions.pdf article] published in the Journal of Object-Oriented Programming.
 
*Major new language mechanism: agents.
 
*Major new language mechanism: agents.
Line 38: Line 38:
 
*Generic conformance; see [http://archive.eiffel.com/doc/manuals/language/genconf/page.html description]. Note that this mechanism is generalized and superseded by ISO/ECMA Eiffel.
 
*Generic conformance; see [http://archive.eiffel.com/doc/manuals/language/genconf/page.html description]. Note that this mechanism is generalized and superseded by ISO/ECMA Eiffel.
  
==5.0 (July 2001)==
+
===5.0 (July 2001)===
 
See [http://docs.eiffel.com/eiffelstudio/tools/eiffelstudio/reference/02_what_s_new/Eiffel50.html release notes].
 
See [http://docs.eiffel.com/eiffelstudio/tools/eiffelstudio/reference/02_what_s_new/Eiffel50.html release notes].
 
*Extended and improved external syntax, later adopted by ISO/ECMA Eiffel.
 
*Extended and improved external syntax, later adopted by ISO/ECMA Eiffel.
Line 45: Line 45:
 
*New basic tpes: ''INTEGER_8'', ''INTEGER_16'', ''INTEGER_64'', ''WIDE_CHARACTER''.
 
*New basic tpes: ''INTEGER_8'', ''INTEGER_16'', ''INTEGER_64'', ''WIDE_CHARACTER''.
  
==5.1 (November 2001)==
+
===5.1 (November 2001)===
 
See [http://docs.eiffel.com/eiffelstudio/tools/eiffelstudio/reference/02_what_s_new/Eiffel51.html release notes].
 
See [http://docs.eiffel.com/eiffelstudio/tools/eiffelstudio/reference/02_what_s_new/Eiffel51.html release notes].
 
*INTEGER_64 constants
 
*INTEGER_64 constants

Revision as of 09:19, 11 April 2007


 Note: this page focuses on language constructs. For the general EiffelStudio Road Map please see here. 

Road map to ISO/ECMA Eiffel

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. "ECMA/ISO 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 ECMA/ISO 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 ECMA/ISO 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 ECMA standard, with the experimental introduction of language revisions as they were being refined by the committee.

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.

For a general list of Eiffel milestones see this page at Eiffel Software.

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.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.

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

6.0 (June 2007)

  • "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 ECMA/ISO 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'.

6.1 (November 2007)

  • To be completed