Differences between standard ECMA-367 and Eiffel Software implementation

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

Kernel classes

Feature
Example
ETL2
ECMA-367
EiffelStudio
Fictitious class for tuples TUPLE No Yes Yes

Features

Feature
Example
ETL2
ECMA-367
EiffelStudio
Prefix and infix feature names infix "+" Yes No Yes, marked as obsolete
Operator and bracket aliases add alias "+" No Yes Yes, except for new rules for free operator names
Assigner command item alias "[]" (index: INTEGER): G assign put No Yes Yes

Design by Contract

Feature
Example
ETL2
ECMA-367
EiffelStudio
Only postcondition clauses ensure only a, b No Yes No

Genericity

Feature
Example
ETL2
ECMA-367
EiffelStudio
Mutually recursive constraints A [H, G -> H]
B [H -> C, G -> ARRAY [H]]
No Yes Yes
Full mutually recursive constraints A [H -> G, G -> H]
No Yes Yes
Expandedness restriction on formal generic A [reference G]
B [expanded H]
No No Yes

Creating objects

Feature
Example
ETL2
ECMA-367
EiffelStudio
Implicit creation procedure (version of ANY.default_create) class A feature ... end
-- The following instructions are equivalent:
create {A} a
create {A} a.default_create
No Yes Yes
Bang-bang syntax !! a
!! a.make
!B! a
!B! a.make
Yes No Yes, marked as obsolete
Keyword syntax create a
create a.make
create {B} a
create {B} a.make
No Yes Yes
Creation expression print (create {TIME}.make_now) No Yes Yes
Generic creation create {G} x.make No Yes Yes

Attachment

Feature
Example
ETL2
ECMA-367
EiffelStudio
Preserving expandedness status when attaching expanded object to reference entity x := y No, object is copied to new object of the corresponding reference type Yes Yes, except for TYPED_POINTER that is converted to POINTER before reattachment
Reverse assignment (assignment attempt) x ?= y Yes No Yes. Marked as obsolete (V7.1).

Feature calls

Feature
Example
ETL2
ECMA-367
EiffelStudio
Precursor call Precursor No Yes Yes
Non-object call c := {COLOR}.green No Yes Yes
Assigner call x [i] := x [i] + 1 No Yes Yes
Bracket expression as call target x [i].update No No Yes

Void-safety

Feature
Example
ETL2
ECMA-367
EiffelStudio
Attachment marks a: attached ANY
b: detachable ANY
No Yes, attached by default Yes, attached by default
Object test attached {STRING} e as o No Yes Yes
Attached target of a call x.f No Yes Yes, by option void_safety
Properly set variable x := value
use (x)
No Yes Yes, by option void_safety

SCOOP

Feature
Example
ETL2
ECMA-367
EiffelStudio
Separate declaration a: separate ANY No No. separate reserved but not used Yes. Object attached to a may be handled by different SCOOP processor.

Expressions

Feature
Example
ETL2
ECMA-367
EiffelStudio
Bracket expression y := x [i] No Yes Yes
Creation expression set_buffer (create {STRING}.make (100)) No Yes Yes
Manifest type {MY_TYPE} No Yes Yes
Manifest tuple [a, b, c] No Yes Yes
Agent list.do_all (agent print (?)) No Yes Yes
Once manifest string once "abc" No Yes Yes

Constants

Feature
Example
ETL2
ECMA-367
EiffelStudio
Verbatim string x := "[ This string is left-adjusted. ]" y := "{ This string is used "as is". }" No Yes Yes
Manifest type qualifier {INTEGER_8} 123 No Yes Yes
Non-decimal integer 0xFF No Yes Yes
Integer with intermediate underscores 1_000 0xFFFF_0000 In groups by 3 digits Yes Yes

Interfacing with external software

Feature
ETL2
ECMA-367
EiffelStudio
Access to software written in C Basic syntax for any external software Registered sub-language See details for C externals.
Access to software written in C++ Basic syntax for any external software Registered sub-language See details for C++ externals.
Access to dynamically loaded libraries (DLLs) Basic syntax for any external software Registered sub-language See details for Interfacing with DLLs.
Other external software Basic syntax for any external software Unregistered sub-language No