| Online Eiffel Documentation

EiffelStudio

# Differences between standard ECMA-367 and Eiffel Software implementation

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

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

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

## 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, except for inline agents
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 | Hexadecimal integers
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 | No
Other external software | Basic syntax for any external software | Unregistered sub-language | No