Differences between ETL 2nd printing and Eiffel Software implementation

    Contents
  1. Added classes
  2. Added keywords
  3. Added semantics
  4. Obsolete constructs
  5. Added external support

See Also: See also: Differences between standard ECMA-367 and Eiffel Software implementation

"ETL 2nd printing" refers to the book "Eiffel: The Language" (2nd printing), published by Prentice Hall.

Added classes

Added keywords

  • Precursor
  • reference (now obsolete): a keyword to specify that a type is used as a reference type.
  • agent: a keyword used by the agent mechanism.
  • create: Instead of using the famous exclamation mark to create an instance of a class, you can use the keyword create. Below you will find a correspondence table between the old and the new syntaxes. The old syntax is still valid, but at some points Eiffel Software will remove it from its implementation:
    • Old syntax !! a => new syntax create a
    • Old syntax !! a.make => new syntax create a.make
    • Old syntax !B! a => new syntax create {B} a
    • Old syntax !B! a.make => new syntax create {B} a.make
  • note: replacement for the keyword indexing.
  • attribute: a keyword to declare attribute body.
  • attached: a keyword to specify attached types and object tests.
  • detachable: a keyword to specify detachable types.

Added semantics

  • Generic creation
  • Expression creation: you can now create an object within an expression. For example, you want to create an object and pass it as an argument to a function. Whereas you had to create a local variable, create the object and pass it to the function, you now simply need to pass to the function the creation expression. Here is a small example:
    • Old method:

local a: STRING do ‼ a.make (10) f (a) end

    • 'New method:

do f (create {STRING}.make (10)) end

This is also very useful since it can improve the power of assertions.

  • Mutually recursive constraints: one can now write class A [H, G->H] or class B [H -> C, G -> ARRAY [H]]. As a result, the declaration A [D, E] is valid only if E is a descendant of D. Similarly, the declaration B [E, ARRAY [D]] is not valid, if E is a descendant of D.
  • Tuples
  • Agents
  • Feature access:

local value: INTEGER do value := {MY_CLASS}.value end
The previous call is valid, if and only if:

    • value is a feature representing a constant of a basic type (INTEGER, DOUBLE or CHARACTER)
    • value is a C/C++/DLL external feature
    • value is an IL static external feature

Obsolete constructs

  • Explicit values should be used to specify constant attributes instead of keyword unique.

Added external support

Look at the page for C and C++ with the introduction of struct and C++ external features encapsulation.

cached: 12/06/2019 3:25:10.000 PM