[[Property:title|Differences between standard ECMA-367 and Eiffel Software implementation]] [[Property:weight|-10]] [[Property:uuid|0eb58761-5b06-585f-ea92-cab2b8cd74b2]] ==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 | 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 |- | [[7 Genericity and Arrays|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 | x ?= y | Yes | No | 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 |} ==Void safety== {| |- |
'''Feature'''
|
'''Example'''
|
'''ETL2'''
|
'''ECMA-367'''
|
'''EiffelStudio'''
|- | Attachment marks | a: !ANY
b: ?ANY | No | Yes, attached by default | Yes, default attachment status is controlled by option ''is_attached_by_default'' |- | Object test | {o: !STRING} e | No | Yes | Yes, all object tests should use different names for locals inside a feature, object tests are not permitted in preconditions and check instructions |- | Attached target of a call | x.f | No | Yes | Yes, by option ''is_void_safe'' |- | Properly set variable | x := value
use (x) | No | Yes | Yes, by option ''is_void_safe'' |} ==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 [[10 Other Mechanisms|tuple]] | [a, b, c] | No | Yes | Yes |- | [[11 Agents|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 | 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|C externals]] |- | Access to software written in C++ | Basic syntax for any external software | Registered sub-language | See details for [[C++ Externals|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 |}