| Online Eiffel Documentation |
| Documentation Home > Tools > EiffelStudio > EiffelStudio Reference > Compiler > Differences between ETL 2nd printing and Eiffel Software implementation |
| EiffelStudio |
Differences between standard ECMA-367 and Eiffel Software implementation |
| Feature | Example | ETL2 | ECMA-367 | EiffelStudio |
| Fictitious class for tuples | TUPLE | No | Yes | Yes |
| 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 |
| 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 |
| 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 | 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 |
| 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 |
| 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 |
| 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 |
| Copyright 1993-2006 Eiffel Software. All rights reserved. |