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