[[Property:modification_date|Tue, 09 Jul 2019 09:52:07 GMT]] [[Property:publication_date|Tue, 09 Jul 2019 09:46:53 GMT]] [[Property:title|Differences between standard ECMA-367 and Eiffel Software implementation]] [[Property:link_title|ECMA-367 vs implementation]] [[Property:weight|-10]] [[Property:uuid|0eb58761-5b06-585f-ea92-cab2b8cd74b2]] "ETL 2" refers to the book "Eiffel: The Language" (2nd printing), published by Prentice Hall. ==Kernel classes== {| class="doctable" |- !
'''Feature'''
!
'''Example'''
!
'''ETL2'''
!
'''ECMA-367'''
!
'''EiffelStudio'''
|- | Fictitious class for tuples | TUPLE | No | Yes | Yes |} ==Features== {| class="doctable" |- !
'''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== {| class="doctable" |- !
'''Feature'''
!
'''Example'''
!
'''ETL2'''
!
'''ECMA-367'''
!
'''EiffelStudio'''
|- | Only postcondition clauses | ensure only a, b | No | Yes | No |} ==Genericity== {| class="doctable" |- !
'''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== {| class="doctable" |- !
'''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 |- | [[ET: Genericity and Arrays|Generic creation]] | create {G} x.make | No | Yes | Yes |} ==Attachment== {| class="doctable" |- !
'''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== {| class="doctable" |- !
'''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== {| class="doctable" |- !
'''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'' |} ==[[Concurrent programming with SCOOP|SCOOP]]== {| class="doctable" |- !
'''Feature'''
! width="160pt"|
'''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== {| class="doctable" |- !
'''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 [[ET: Other Mechanisms|tuple]] | [a, b, c] | No | Yes | Yes |- | [[ET: Agents|Agent]] | list.do_all (agent print (?)) | No | Yes | Yes |- | Once manifest string | once "abc" | No | Yes | Yes |} ==Constants== {| class="doctable" |- !
'''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== {| class="doctable" |- !
'''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 | See details for [[uuid:4ad177dd-13ec-c237-99b3-efc9851995a5|Interfacing with DLLs]]. |- | Other external software | Basic syntax for any external software | Unregistered sub-language | No |}