Difference between revisions of "Language Roadmap"
(→4.3 (March 1999)) |
(→See also) |
||
(55 intermediate revisions by 7 users not shown) | |||
Line 1: | Line 1: | ||
[[Category:Releases]] | [[Category:Releases]] | ||
− | + | ==See also== | |
− | + | The present page focuses on '''language''' constructs. Related information: | |
− | The Eiffel language is described by an international standard, ECMA standard 367, <i>Eiffel: Analysis, Design and Programming Language</i>. 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. " | + | *For the '''general EiffelStudio Roadmap''': the [[Environment_Roadmap|Roadmap relevant page]]. |
+ | *For a history of Eiffel development and its milestones: the [http://www.eiffel.com/general/ relevant page] at Eiffel Software. | ||
+ | *For a detailed list of the ISO/ECMA facilities listed in relation with various releases below, and when each of them is integrated into releases: the [[ECMA_Implementation|ISO/ECMA implementation page]]. | ||
+ | |||
+ | |||
+ | __TOC__ | ||
+ | |||
+ | ==OVERVIEW== | ||
+ | |||
+ | |||
+ | The Eiffel language is described by an international standard, ECMA standard 367, <i>Eiffel: Analysis, Design and Programming Language</i>. 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 [http://www.ecma-international.org/publications/standards/Ecma-367.htm this location] on the ECMA site. | The text can be found, among other places, at [http://www.ecma-international.org/publications/standards/Ecma-367.htm this location] on the ECMA site. | ||
− | While | + | 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. | 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. | ||
− | + | ||
+ | ==THE BI-YEARLY RELEASE SCHEDULE== | ||
+ | |||
+ | Starting with 6.0 the release cycle is fixed: two official releases a year, "Northern Spring" in May (June in 2007) and "Southern Spring" in November (with Eiffel, it's Spring Eternal). In addition, beta releases continue to be provided at frequent intervals for the EiffelStudio open-source development community. | ||
==HISTORICAL NOTE: UP TO EIFFEL 3== | ==HISTORICAL NOTE: UP TO EIFFEL 3== | ||
Line 42: | Line 55: | ||
===4.4 (July 1999)=== | ===4.4 (July 1999)=== | ||
− | *Major new language mechanism: default_create semantics | + | *Major new language mechanism: ''default_create'' semantics. |
===5.0 (July 2001)=== | ===5.0 (July 2001)=== | ||
Line 49: | Line 62: | ||
*Verbatim strings, as introduced by ISO/ECMA Eiffel. | *Verbatim strings, as introduced by ISO/ECMA Eiffel. | ||
*Agent creation on '''Result''' and '''Current'''. | *Agent creation on '''Result''' and '''Current'''. | ||
− | *New basic | + | *New basic types: ''INTEGER_8'', ''INTEGER_16'', ''INTEGER_64'', ''WIDE_CHARACTER''. |
===5.1 (November 2001)=== | ===5.1 (November 2001)=== | ||
Line 55: | Line 68: | ||
*INTEGER_64 constants | *INTEGER_64 constants | ||
− | ==5.2 (October 2002)== | + | ===5.2 (October 2002)=== |
*Extended support for integer constants of sized types (''INTEGER_xx'' etc.) per ISO/ECMA Eiffel. | *Extended support for integer constants of sized types (''INTEGER_xx'' etc.) per ISO/ECMA Eiffel. | ||
See [http://docs.eiffel.com/eiffelstudio/tools/eiffelstudio/reference/02_what_s_new/Eiffel52.html release notes]. | See [http://docs.eiffel.com/eiffelstudio/tools/eiffelstudio/reference/02_what_s_new/Eiffel52.html release notes]. | ||
− | ==5.4 (October 2003)== | + | ===5.4 (October 2003)=== |
Major improvements in support for external language interfaces (C, C++...) per ISO/ECMA EIffel: | Major improvements in support for external language interfaces (C, C++...) per ISO/ECMA EIffel: | ||
Line 67: | Line 80: | ||
See [http://docs.eiffel.com/eiffelstudio/tools/eiffelstudio/reference/02_what_s_new/Eiffel54.html release notes]. | See [http://docs.eiffel.com/eiffelstudio/tools/eiffelstudio/reference/02_what_s_new/Eiffel54.html release notes]. | ||
− | ==5.5 (September | + | ===5.5 (September 2004)=== |
*Major new mechanism: full support for '''convert''' facility of ISO/ECMA Eiffel. | *Major new mechanism: full support for '''convert''' facility of ISO/ECMA Eiffel. | ||
Line 74: | Line 87: | ||
See [http://docs.eiffel.com/eiffelstudio/tools/eiffelstudio/reference/02_what_s_new/Eiffel55.html release notes]. | See [http://docs.eiffel.com/eiffelstudio/tools/eiffelstudio/reference/02_what_s_new/Eiffel55.html release notes]. | ||
− | + | ===5.6 (July 2005)=== | |
− | ==5.6 ( | + | |
Major ISO/ECMA additions: | Major ISO/ECMA additions: | ||
*Alias features (replacing infix/prefix features, still supported of course for compatibility). | *Alias features (replacing infix/prefix features, still supported of course for compatibility). | ||
Line 86: | Line 98: | ||
See [http://docs.eiffel.com/eiffelstudio/tools/eiffelstudio/reference/02_what_s_new/Eiffel56.html release notes]. | See [http://docs.eiffel.com/eiffelstudio/tools/eiffelstudio/reference/02_what_s_new/Eiffel56.html release notes]. | ||
− | + | ===5.7 (October 2006)=== | |
− | ==5.7 (October 2006)== | + | |
*Major ISO/ECMA Eiffel addition: inline agents. | *Major ISO/ECMA Eiffel addition: inline agents. | ||
*Major semantics update per ISO/ECMA Eiffel: new "expanded" semantics. | *Major semantics update per ISO/ECMA Eiffel: new "expanded" semantics. | ||
*Major ISO/ECMA Eiffel addition: named tuples. | *Major ISO/ECMA Eiffel addition: named tuples. | ||
− | *Unicode support: CHARACTER_32, per ISO/ECMA | + | *Unicode support: CHARACTER_32, per ISO/ECMA Eiffel. |
+ | *Keyword "is" no longer required (but still supported) | ||
See [http://docs.eiffel.com/eiffelstudio/docs_no_content.html release notes]. | See [http://docs.eiffel.com/eiffelstudio/docs_no_content.html release notes]. | ||
− | == | + | ===6.0 (June 2007): Northern Spring release=== |
+ | 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. | |
− | *"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.) | ||
+ | |||
+ | *Multiple generic constraints: the ability to specify that a formal generic parameter of a class represents a type that conforms to several listed types. For example | ||
+ | '''class''' ''SORTABLE_VECTOR'' [''G'' -> {''NUMERIC'', ''COMPARABLE''}] ... | ||
+ | |||
+ | meaning that ''SORTABLE_VECTOR'' [''T''] is only valid if ''T'' is a descendant of both ''NUMERIC'' and ''COMPARABLE''. | ||
+ | |||
+ | ===6.1 (November 2007): Southern Spring Release=== | ||
+ | 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 [http://se.ethz.ch/~meyer/publications/lncs/attached.pdf 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 [http://eiffelsoftware.origo.ethz.ch/index.php/Attached_types 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. | ||
+ | |||
+ | ===6.2 (June 2008): Northern Spring release=== | ||
+ | *`~' symbol for object equality. `''a'' ~ ''b'' means ''a''.''is_equal'' (''b'') (or ''equal'' (''a'', ''b'')) and follows the redefinitions of ''is_equal''. | ||
+ | * Implementation of exception as objects | ||
+ | |||
+ | ==FUTURE RELEASES== | ||
− | + | ===6.3 (November 2008): Southern Spring release === | |
+ | No new features are planned as this is a quality focused release. | ||
− | ==6. | + | ===6.4 (June 2009): Northern Spring release=== |
− | + | This release is currently in the planning stage. |
Latest revision as of 12:16, 22 January 2014
See also
The present page focuses on language constructs. Related information:
- For the general EiffelStudio Roadmap: the Roadmap relevant page.
- For a history of Eiffel development and its milestones: the relevant page at Eiffel Software.
- For a detailed list of the ISO/ECMA facilities listed in relation with various releases below, and when each of them is integrated into releases: the ISO/ECMA implementation page.
Contents
- 1 See also
- 2 OVERVIEW
- 3 THE BI-YEARLY RELEASE SCHEDULE
- 4 HISTORICAL NOTE: UP TO EIFFEL 3
- 5 PAST RELEASES AFTER EIFFEL 3
- 5.1 4.1 (June 1996)
- 5.2 4.2 (February 1998)
- 5.3 4.3 (March 1999)
- 5.4 4.4 (July 1999)
- 5.5 5.0 (July 2001)
- 5.6 5.1 (November 2001)
- 5.7 5.2 (October 2002)
- 5.8 5.4 (October 2003)
- 5.9 5.5 (September 2004)
- 5.10 5.6 (July 2005)
- 5.11 5.7 (October 2006)
- 5.12 6.0 (June 2007): Northern Spring release
- 5.13 6.1 (November 2007): Southern Spring Release
- 5.14 6.2 (June 2008): Northern Spring release
- 6 FUTURE RELEASES
OVERVIEW
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.
THE BI-YEARLY RELEASE SCHEDULE
Starting with 6.0 the release cycle is fixed: two official releases a year, "Northern Spring" in May (June in 2007) and "Southern Spring" in November (with Eiffel, it's Spring Eternal). In addition, beta releases continue to be provided at frequent intervals for the EiffelStudio open-source development community.
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)
- Precursor mechanism; see initial description.
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.
- Keyword "is" no longer required (but still supported)
See release notes.
6.0 (June 2007): Northern Spring release
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.)
- Multiple generic constraints: the ability to specify that a formal generic parameter of a class represents a type that conforms to several listed types. For example
class SORTABLE_VECTOR [G -> {NUMERIC, COMPARABLE}] ...
meaning that SORTABLE_VECTOR [T] is only valid if T is a descendant of both NUMERIC and COMPARABLE.
6.1 (November 2007): Southern Spring Release
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.
6.2 (June 2008): Northern Spring release
- `~' symbol for object equality. `a ~ b means a.is_equal (b) (or equal (a, b)) and follows the redefinitions of is_equal.
- Implementation of exception as objects
FUTURE RELEASES
6.3 (November 2008): Southern Spring release
No new features are planned as this is a quality focused release.
6.4 (June 2009): Northern Spring release
This release is currently in the planning stage.