mirror of
https://github.com/EiffelSoftware/eiffel-org.git
synced 2026-04-26 14:21:45 +02:00
merged from 19.05
git-svn-id: https://svn.eiffel.com/eiffel-org/trunk@2228 abb3cda0-5349-4a8f-a601-0c33ac3a8c38
This commit is contained in:
@@ -1,7 +1,11 @@
|
||||
[[Property:modification_date|Tue, 12 Nov 2019 13:31:36 GMT]]
|
||||
[[Property:publication_date|Tue, 12 Nov 2019 13:20:00 GMT]]
|
||||
[[Property:title|Compiler History]]
|
||||
[[Property:weight|-8]]
|
||||
[[Property:uuid|359395e7-4933-bb74-4397-353c8b6955cd]]
|
||||
==Compiler version history==
|
||||
|
||||
|
||||
{{Warning|This page as not been maintained}}
|
||||
|
||||
{{Note|Please check the -> [[EiffelStudio_release_notes|EiffelStudio Release Notes]]}}
|
||||
@@ -1,3 +1,5 @@
|
||||
[[Property:modification_date|Mon, 29 Jul 2019 05:54:09 GMT]]
|
||||
[[Property:publication_date|Tue, 09 Jul 2019 08:25:22 GMT]]
|
||||
[[Property:title|Differences between ETL 2nd printing and Eiffel Software implementation]]
|
||||
[[Property:link_title|ETL 2nd printing vs implementation]]
|
||||
[[Property:weight|-9]]
|
||||
@@ -7,68 +9,46 @@
|
||||
"ETL 2nd printing" refers to the book "Eiffel: The Language" (2nd printing), published by Prentice Hall.
|
||||
|
||||
==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>.{{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.
|
||||
* New basic classes have been added: <eiffel>INTEGER_8</eiffel>, <eiffel>INTEGER_16</eiffel>, <eiffel>INTEGER_64</eiffel>, <eiffel>CHARACTER_32</eiffel>. <eiffel>INTEGER</eiffel>, <eiffel>CHARACTER</eiffel>, <eiffel>REAL</eiffel>, <eiffel>DOUBLE</eiffel> are aliases to <eiffel>INTEGER_32</eiffel>, <eiffel>CHARACTER_8</eiffel>, <eiffel>REAL_32</eiffel>, <eiffel>REAL_64</eiffel>. {{seealso|[[Differences between standard ECMA-367 and Eiffel Software implementation|Differences between standard ECMA-367 and Eiffel Software implementation]]}}
|
||||
* New <eiffel>TUPLE</eiffel>, <eiffel>ROUTINE</eiffel>, <eiffel>PROCEDURE</eiffel>, <eiffel>FUNCTION</eiffel>, <eiffel>PREDICATE</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
|
||||
|}
|
||||
* <code>note</code>: replacement for the keyword <code>indexing</code>.
|
||||
* <code>attribute</code>: new keyword to declare attribute body.
|
||||
* <code>attached</code>: new keyword to specify attached types and object tests.
|
||||
* <code>detachable</code>: new keyword to specify detachable types.
|
||||
* <eiffel>Precursor</eiffel>
|
||||
* <eiffel>reference</eiffel> (now obsolete): a keyword to specify that a type is used as a reference type.
|
||||
* <eiffel>agent</eiffel>: a keyword used by the agent mechanism.
|
||||
* <eiffel>create</eiffel>: Instead of using the famous exclamation mark to create an instance of a class, you can use the keyword <eiffel>create</eiffel>. 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 `!! a` => new syntax `create a`
|
||||
** Old syntax `!! a.make` => new syntax `create a.make`
|
||||
** Old syntax `!B! a` => new syntax `create {B} a`
|
||||
** Old syntax `!B! a.make` => new syntax `create {B} a.make`
|
||||
|
||||
* <eiffel>note</eiffel>: replacement for the keyword <code>indexing</code>.
|
||||
* <eiffel>attribute</eiffel>: a keyword to declare attribute body.
|
||||
* <eiffel>attached</eiffel>: a keyword to specify attached types and object tests.
|
||||
* <eiffel>detachable</eiffel>: a keyword to specify detachable types.
|
||||
|
||||
==Added semantics==
|
||||
* [[ET: 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
|
||||
|-
|
||||
|
|
||||
** Old method:
|
||||
<code>
|
||||
local
|
||||
a: STRING
|
||||
do
|
||||
!! a.make (10)
|
||||
‼ a.make (10)
|
||||
f (a)
|
||||
end
|
||||
</code>
|
||||
|
||||
|
|
||||
** 'New method:
|
||||
<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.
|
||||
* 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`.
|
||||
* [[ET: Other Mechanisms|Tuples]]
|
||||
* [[ET: Agents|Agents]]
|
||||
* Feature access: <br/>
|
||||
@@ -83,13 +63,11 @@ end
|
||||
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
|
||||
** <eiffel>value</eiffel> is an IL static external feature
|
||||
|
||||
==Obsolete constructs==
|
||||
* Explicit values should be used to specify constant attributes instead of keyword `unique`.
|
||||
|
||||
==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.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
[[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]]
|
||||
@@ -116,10 +118,10 @@ for free operator names
|
||||
| Yes
|
||||
|-
|
||||
| Bang-bang syntax
|
||||
| <code>!! a</code><br/>
|
||||
<code>!! a.make</code><br/>
|
||||
<code>!B! a</code><br/>
|
||||
<code>!B! a.make</code>
|
||||
| !! a<br/>
|
||||
!! a.make<br/>
|
||||
!B! a<br/>
|
||||
!B! a.make
|
||||
| Yes
|
||||
| No
|
||||
| Yes, marked as obsolete
|
||||
@@ -196,13 +198,13 @@ reattachment
|
||||
| Yes
|
||||
|-
|
||||
| Assigner call
|
||||
| <code>x</code> <code>[</code><code>i</code><code>]</code> <code>:=</code> <code>x</code> <code>[</code><code>i</code><code>]</code> <code>+</code> <code>1</code>
|
||||
| <eiffel>x [i] := x [i] + 1</eiffel>
|
||||
| No
|
||||
| Yes
|
||||
| Yes
|
||||
|-
|
||||
| Bracket expression as call target
|
||||
| <code>x</code> <code>[</code><code>i</code><code>]</code><code>.</code><eiffel>update</eiffel>
|
||||
| <eiffel>x [i].update</eiffel>
|
||||
| No
|
||||
| No
|
||||
| Yes
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
[[Property:modification_date|Mon, 11 Nov 2019 19:13:26 GMT]]
|
||||
[[Property:publication_date|Mon, 11 Nov 2019 19:13:26 GMT]]
|
||||
[[Property:title|Supported C compilers]]
|
||||
[[Property:weight|-14]]
|
||||
[[Property:uuid|4d4a70fa-b6da-cecb-83e0-dcc18d6ed54a]]
|
||||
@@ -52,7 +54,22 @@ Alternatively, you can set the environment variable <code lang="text">ISE_C_COMP
|
||||
| Microsoft Visual Studio C++ 2015 (v14.0)
|
||||
| `msc_vc140`
|
||||
|-
|
||||
| Microsoft Visual Studio C++ 2017 (v15.0)
|
||||
| Microsoft Visual Studio C++ 2017 (v14.1)
|
||||
| `msc_vc140`
|
||||
|-
|
||||
| Microsoft Visual Studio C++ 2019 (v14.2)
|
||||
| `msc_vc140`
|
||||
|-
|
||||
|}
|
||||
|
||||
===Availability of free compilers===
|
||||
|
||||
'' Microsoft ''
|
||||
|
||||
Download the free [https://visualstudio.microsoft.com/vs/community/|Visual Studio Community Edition]
|
||||
|
||||
If required download [https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads|Microsoft Visual C++ Redistributable for Visual Studio 2015, 2017 and 2019].
|
||||
|
||||
'' MinGW ''
|
||||
|
||||
Copy included with the Eiffel Software distribution.
|
||||
|
||||
Reference in New Issue
Block a user