mirror of
https://github.com/EiffelSoftware/eiffel-org.git
synced 2025-12-07 07:12:25 +01:00
Date:2008-09-25T16:19:15.000000Z git-svn-id: https://svn.eiffel.com/eiffel-org/trunk@44 abb3cda0-5349-4a8f-a601-0c33ac3a8c38
87 lines
3.1 KiB
Plaintext
87 lines
3.1 KiB
Plaintext
[[Property:title|Differences between ETL 2nd printing and Eiffel Software implementation]]
|
|
[[Property:link_title|]]
|
|
[[Property:weight|-9]]
|
|
[[Property:uuid|fc1e73f4-5646-aa41-e7fe-97dc6f3ceb04]]
|
|
{{seealso|[[Differences between standard ECMA-367 and Eiffel Software implementation|Differences between standard ECMA-367 and Eiffel Software implementation]] }}
|
|
|
|
==Added classes==
|
|
* New basic classes have been added: <eiffel>INTEGER_8</eiffel>, <eiffel>INTEGER_16</eiffel>, <eiffel>INTEGER_64</eiffel> and <eiffel>WIDE_CHARACTER</eiffel>. <eiffel>INTEGER</eiffel> is now specified as having a 32 bits representation
|
|
* New <eiffel>TUPLE</eiffel>, <eiffel>ROUTINE</eiffel>, <eiffel>PROCEDURE</eiffel> and <eiffel>FUNCTION</eiffel> classes required by the agent mechanism.
|
|
|
|
==Added keywords==
|
|
* <code>Precursor</code>
|
|
* <code>reference</code>: new keyword to specify that a type is used as a reference type.
|
|
* <code> agent</code>: new keyword used by the agent mechanism.
|
|
* <code>create</code>: Instead of using the famous exclamation mark to create an instance of a class, you can use the keyword <code>create</code>. Below you will find a correspondence table between the old and the new syntaxes. The old syntax is still valid, but at some points Eiffel Software will remove it from its implementation:
|
|
{|
|
|
|-
|
|
| Old syntax
|
|
| New syntax
|
|
|-
|
|
| !! a
|
|
| <code>create</code> a
|
|
|-
|
|
| !! a.make
|
|
| <code>create</code> a.make
|
|
|-
|
|
| !<eiffel>B</eiffel>! a
|
|
| <code>create</code> {<eiffel>B</eiffel>} a
|
|
|-
|
|
| !<eiffel>B</eiffel>! a.make
|
|
| <code>create</code> {<eiffel>B</eiffel>} a.make
|
|
|}
|
|
|
|
|
|
==Added semantics==
|
|
* [[7 Genericity and Arrays|Generic creation]]
|
|
* Expression creation: you can now create an object within an expression. For example, you want to create an object and pass it as an argument to a function. Whereas you had to create a local variable, create the object and pass it to the function, you now simply need to pass to the function the creation expression. Here is a small example:
|
|
{|
|
|
|-
|
|
| Old method
|
|
| New method
|
|
|-
|
|
|
|
|
<code>
|
|
local
|
|
a: STRING
|
|
do
|
|
!! a.make (10)
|
|
f (a)
|
|
end
|
|
</code>
|
|
|
|
|
|
|
<code>
|
|
do
|
|
f (create {STRING}.make (10))
|
|
end
|
|
</code>
|
|
|
|
|}
|
|
This is also very useful since it can improve the power of assertions.
|
|
* Mutually recursive constraints: one can now write class A [H, G->H] or class B [H -> C, G -> ARRAY [H]]. As a result, the declaration A [D, E] is valid only if E is a descendant of D. Similarly, the declaration B [E, ARRAY [D]] is not valid, if E is a descendant of D.
|
|
* [[10 Other Mechanisms|Tuples]]
|
|
* [[11 Agents|Agents]]
|
|
* Feature access: <br/>
|
|
<code>
|
|
local
|
|
value: INTEGER
|
|
do
|
|
value := {MY_CLASS}.value
|
|
end
|
|
</code>
|
|
<br/>
|
|
The previous call is valid, if and only if:
|
|
** <eiffel>value</eiffel> is a feature representing a constant of a basic type (<eiffel>INTEGER</eiffel>, <eiffel>DOUBLE</eiffel> or <eiffel>CHARACTER</eiffel>)
|
|
** <eiffel>value</eiffel> is a C/C++/DLL external feature
|
|
** <eiffel>value</eiffel> is an IL static external feature
|
|
|
|
|
|
==Added external support==
|
|
|
|
Look at the page for [[C externals|C]] and [[C++ Externals|C++]] with the introduction of `struct' and C++ external features encapsulation.
|
|
|
|
|
|
|
|
|