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:
jfiat
2019-12-28 20:03:38 +00:00
parent 539829febe
commit 4e06893808
22 changed files with 696 additions and 596 deletions

View File

@@ -1,9 +1,11 @@
[[Property:modification_date|Wed, 11 Sep 2019 23:28:26 GMT]]
[[Property:publication_date|Wed, 11 Sep 2019 23:28:26 GMT]]
[[Property:uuid|C652AC71-8BAD-4387-A46C-21C9F5C3A68F]] [[Property:uuid|C652AC71-8BAD-4387-A46C-21C9F5C3A68F]]
[[Property:weight|0]] [[Property:weight|0]]
[[Property:title|Conditional expression]] [[Property:title|Conditional expression]]
[[Property:link_title|Conditional]] [[Property:link_title|Conditional]]
[[Eiffel%20Programming%20Language%20Syntax#Conditionals|Conditional expressions]] compute a value using different expressions depending on one or more conditions. If all expressions have the same type, the conditional expression as a whole has this type as well: [[Eiffel_programming_language_syntax#Conditionals|Conditional expressions]] compute a value using different expressions depending on one or more conditions. If all expressions have the same type, the conditional expression as a whole has this type as well:
<e> <e>
if time < noon then if time < noon then
@@ -17,7 +19,7 @@
has type `STRING`. has type `STRING`.
If the types of the expressions are different, the [[Types#Common ancestor types|common ancestor type]] is used as a type of the whole expression. If the types of the expressions are different, the [[Types#Common_ancestor_types|common ancestor type]] is used as a type of the whole expression.
<e> <e>
if time < noon then if time < noon then

View File

@@ -1,3 +1,5 @@
[[Property:modification_date|Wed, 11 Sep 2019 18:53:32 GMT]]
[[Property:publication_date|Wed, 11 Sep 2019 14:10:27 GMT]]
[[Property:title|Eiffel programming language reserved words]] [[Property:title|Eiffel programming language reserved words]]
[[Property:link_title|Reserved words]] [[Property:link_title|Reserved words]]
[[Property:weight|1]] [[Property:weight|1]]
@@ -152,12 +154,16 @@ Introduces a sequence of instructions as a routine body, as shown in the [[ET: H
===else=== ===else===
Used in [[ET: Other Mechanisms#Conditional|conditional]] and [[ET: Other Mechanisms#Multi-branch|multi-branch]] instructions to introduce a sequence of instructions to be executed in the case that no specified conditions are met. Used in [[ET-_Instructions#Conditional|conditional]] and [[ET-_Instructions#Multi-branch|multi-branch]] instructions to introduce a sequence of instructions to be executed in the case that no specified conditions are met.
:[[Eiffel programming language syntax#Conditionals|Conditional syntax.]] :[[Eiffel programming language syntax#Conditionals|Conditional syntax.]]
:[[Eiffel programming language syntax#Multi-branch instructions|Multi-branch syntax.]] :[[Eiffel programming language syntax#Multi-branch instructions|Multi-branch syntax.]]
Used in a [[Conditional_expression|conditional expression]] to compute a value in the case that no specified conditions are met.
:[[Eiffel programming language syntax#Conditionals|Conditional expression syntax.]]
Used as part of the double reserved word <code>or else</code>, the semi-strict disjunction operator. Used as part of the double reserved word <code>or else</code>, the semi-strict disjunction operator.
:[[Eiffel programming language syntax#Operators|Syntax.]] :[[Eiffel programming language syntax#Operators|Syntax.]]
@@ -169,10 +175,14 @@ Used after the reserved word [[#require|<code>require</code>]] as a precondition
===elseif=== ===elseif===
Used in [[ET: Other Mechanisms#Conditional|conditional]] instructions to effect a "multi-branch" choice instruction. Used in [[ET-_Instructions#Conditional|conditional]] instructions to effect a "multi-branch" choice instruction.
:[[Eiffel programming language syntax#Conditionals|Syntax.]] :[[Eiffel programming language syntax#Conditionals|Syntax.]]
Used in a [[Conditional_expression|conditional expression]] to effect a "multi-branch" choice to compute of a value.
:[[Eiffel programming language syntax#Conditionals|Conditional expression syntax.]]
===end=== ===end===
@@ -186,6 +196,7 @@ Serves to terminate several Eiffel programming language constructs.
::[[Eiffel programming language syntax#Generic constraints|Generic constraints: renaming and constraint creators]] ::[[Eiffel programming language syntax#Generic constraints|Generic constraints: renaming and constraint creators]]
::[[Eiffel programming language syntax#Conditionals|Conditional instructions]] ::[[Eiffel programming language syntax#Conditionals|Conditional instructions]]
::[[Eiffel programming language syntax#Multi-branch instructions|Multi-branch instructions]] ::[[Eiffel programming language syntax#Multi-branch instructions|Multi-branch instructions]]
::[[Eiffel programming language syntax#Conditionals|Conditional expressions]]
::[[Eiffel programming language syntax#Loops|Loops]] ::[[Eiffel programming language syntax#Loops|Loops]]
::[[Eiffel programming language syntax#Debug instructions|Debug instructions]] ::[[Eiffel programming language syntax#Debug instructions|Debug instructions]]
@@ -258,9 +269,13 @@ Used with a formal generic parameter to indicate that conformance of generic der
===if=== ===if===
Introduces a [[ET: Other Mechanisms#Conditional|conditional]]. Used to introduce a [[ET-_Instructions#Conditional|conditional]].
:[[Eiffel programming language syntax#Conditionals|Syntax.]] :[[Eiffel programming language syntax#Conditionals|Conditional syntax.]]
Used to introduce a [[Conditional_expression|Conditional expression]].
:[[Eiffel programming language syntax#Conditionals|Conditional expression syntax.]]
===implies=== ===implies===
@@ -277,7 +292,7 @@ Used in an [[ET: Inheritance|inherit]] clause.
===inspect=== ===inspect===
Introduces a [[ET: Other Mechanisms#Multi-branch|multi-branch]] instruction. Introduces a [[ET-_Instructions#Multi-branch|multi-branch]] instruction.
:[[Eiffel programming language syntax#Multi-branch instructions|Syntax.]] :[[Eiffel programming language syntax#Multi-branch instructions|Syntax.]]
@@ -437,12 +452,16 @@ Reserved for future use.
===then=== ===then===
Used in [[ET: Other Mechanisms#Conditional|conditional]] and [[ET: Other Mechanisms#Multi-branch|multi-branch]] instructions to introduce a sequence of instructions to be executed in the case that a condition is met. Used in [[ET-_Instructions#Conditional|conditional]] and [[ET-_Instructions#Multi-branch|multi-branch]] instructions to introduce a sequence of instructions to be executed in the case that a condition is met.
:[[Eiffel programming language syntax#Conditionals|Conditional syntax.]] :[[Eiffel programming language syntax#Conditionals|Conditional syntax.]]
:[[Eiffel programming language syntax#Multi-branch instructions|Multi-branch syntax.]] :[[Eiffel programming language syntax#Multi-branch instructions|Multi-branch syntax.]]
Used in a [[Conditional_expression|conditional expression]] to compute of a value in the case that a condition is met.
:[[Eiffel programming language syntax#Conditionals|Conditional expression syntax.]]
Used as part of the double reserved word <code>and then</code>, the semi-strict conjunction operator. Used as part of the double reserved word <code>and then</code>, the semi-strict conjunction operator.
:[[Eiffel programming language syntax#Operators|Syntax.]] :[[Eiffel programming language syntax#Operators|Syntax.]]
@@ -494,7 +513,7 @@ A predefined entity name representing a [[ET: The Dynamic Structure: Execution M
===when=== ===when===
Used in a [[ET: Other Mechanisms#Multi-branch|multi-branch instruction]] to introduce cases. Used in a [[ET-_Instructions#Multi-branch|multi-branch instruction]] to introduce cases.
:[[Eiffel programming language syntax#Multi-branch instructions|Syntax.]] :[[Eiffel programming language syntax#Multi-branch instructions|Syntax.]]

View File

@@ -1,4 +1,4 @@
[[Property:modification_date|Tue, 30 Apr 2019 07:27:55 GMT]] [[Property:modification_date|Mon, 29 Jul 2019 16:52:51 GMT]]
[[Property:publication_date|Mon, 29 Apr 2019 14:08:51 GMT]] [[Property:publication_date|Mon, 29 Apr 2019 14:08:51 GMT]]
[[Property:title|Eiffel programming language syntax]] [[Property:title|Eiffel programming language syntax]]
[[Property:link_title|Syntax]] [[Property:link_title|Syntax]]
@@ -118,6 +118,9 @@ A sequence of characters consisting of the following, in order:
Line wrapping parts are used as separators between one [[#Simple strings|Simple_string]] and the next in a [[#Manifest strings|Basic_manifest_string]] so that the string can be split across lines. Line wrapping parts are used as separators between one [[#Simple strings|Simple_string]] and the next in a [[#Manifest strings|Basic_manifest_string]] so that the string can be split across lines.
===New line===
A specimen of New_line is a New Line.
==Eiffel BNF-E Syntax== ==Eiffel BNF-E Syntax==
@@ -334,12 +337,14 @@ Assertion ::= {Assertion_clause ";" ...}*
Assertion_clause ::= <nowiki>[</nowiki>Tag_mark<nowiki>]</nowiki> Unlabeled_assertion_clause Assertion_clause ::= <nowiki>[</nowiki>Tag_mark<nowiki>]</nowiki> Unlabeled_assertion_clause
Unlabeled_assertion_clause ::= [[#Expressions|Boolean_expression]] | [[#Comments|Comment]] Unlabeled_assertion_clause ::= [[#Expressions|Boolean_expression]] | [[#Comments|Comment]] | `class`
Tag_mark ::= Tag ":" Tag_mark ::= Tag ":"
Tag ::= [[#Identfiers|Identifier]] Tag ::= [[#Identfiers|Identifier]]
{{Note|Unlabeled_assertion_clause of the form `class` can be used only in a postcondition. It marks a feature that does not depend on object state and can be called without a target object using non-object call of the form `{CLASS_NAME}.feature_name (arguments)`.}}
==="Old" postcondition expressions === ==="Old" postcondition expressions ===
Old ::= <code>old</code> [[#Expressions|Expression]] Old ::= <code>old</code> [[#Expressions|Expression]]
@@ -702,16 +707,11 @@ Verbatim_string_closer ::= Close_bracket <nowiki>[</nowiki>[[#Simple strings|Sim
Open_bracket ::= <nowiki>"[" | "{"</nowiki> Open_bracket ::= <nowiki>"[" | "{"</nowiki>
Close_bracket ::= "]" | "}"Verbatim_string ::= Verbatim_string_opener Line_sequence Verbatim_string_closer Close_bracket ::= "]" | "}"
Verbatim_string_opener ::= ' " ' <nowiki>[</nowiki>[[#Simple strings|Simple_string]]<nowiki>]</nowiki> Open_bracket Line_sequence ::= {[[#Simple strings|Simple_string]] [[#New line|New_line]] ...}+
Verbatim_string_closer ::= Close_bracket <nowiki>[</nowiki>[[#Simple strings|Simple_string]]<nowiki>]</nowiki> ' " '
Open_bracket ::= <nowiki>"[" | "{" </nowiki>
Close_bracket ::= <nowiki>"]" | "}" </nowiki>
{{Note|Exactly the same [[#Simple strings|Simple_string]] (including embedded white space, if any) should be used in ''Verbatim_string_opener'' and ''Verbatim_string_closer'' of the same verbatim string.}}
===External routines === ===External routines ===
External ::= <code>external</code> External_language <nowiki>[External_name]</nowiki> External ::= <code>external</code> External_language <nowiki>[External_name]</nowiki>

View File

@@ -1,3 +1,5 @@
[[Property:modification_date|Tue, 09 Jul 2019 09:42:22 GMT]]
[[Property:publication_date|Tue, 09 Jul 2019 09:42:22 GMT]]
[[Property:title|Common myths and misconceptions about Eiffel]] [[Property:title|Common myths and misconceptions about Eiffel]]
[[Property:link_title|]] [[Property:link_title|]]
[[Property:weight|4]] [[Property:weight|4]]
@@ -37,7 +39,7 @@ The answer to this one depends a bit upon your frame of reference. Some time ago
If this is true, then relatively speaking, we have to admit that Eiffels market share ''is'' considerably smaller than that of Visual Basic. If this is true, then relatively speaking, we have to admit that Eiffels market share ''is'' considerably smaller than that of Visual Basic.
Despite that, its not correct to say that not many people use Eiffel. Eiffel licenses world wide number in the tens of thousands. If you use Eiffel, you are not alone. These license-holders have formed a lasting worldwide quorum. Many world-class organizations are committed now, and will continue to be committed to the Eiffel framework. There is support through your maintenance contract with Eiffel Software. Help and information are available online in the form of the [https://www.eiffel.com/company/customers/ Eiffel Software users list] and websites like [http://community.eiffel.com/room/ EiffelRoom]. Despite that, its not correct to say that not many people use Eiffel. Eiffel licenses world wide number in the tens of thousands. If you use Eiffel, you are not alone. These license-holders have formed a lasting worldwide quorum. Many world-class organizations are committed now, and will continue to be committed to the Eiffel framework. There is support through your maintenance contract with Eiffel Software. Help and information are available online in the form of the [https://www.eiffel.com/company/customers/ Eiffel Software users list] and websites like [https://www.eiffel.org/ Eiffel.org].
Eiffel Software's dual licensing model gives developers the opportunity to learn Eiffel without a great initial financial commitment. Eiffel Software's dual licensing model gives developers the opportunity to learn Eiffel without a great initial financial commitment.
@@ -65,7 +67,7 @@ And of course, its not true.
Eiffel is more complete and functionally superior in most ways to every other commercially viable software development technology … and there are enough people around who recognize this (that quorum of users I mentioned earlier) to ensure that Eiffel will be around for a long time to come. Eiffel is more complete and functionally superior in most ways to every other commercially viable software development technology … and there are enough people around who recognize this (that quorum of users I mentioned earlier) to ensure that Eiffel will be around for a long time to come.
Its possible that twenty-five years from now, there will be a significantly better software engineering idea … but certainly there hasnt been anything thats come close since Eiffels original design in 1985. In most areas, other technologies are playing “catch-up” to Eiffel. Its possible that twenty-five years from now, there will be a significantly better software engineering idea … but certainly, there hasnt been anything thats come close since Eiffels original design in 1985. In most areas, other technologies are playing “catch-up” to Eiffel.
Besides, Eiffel constantly implements refinements and new capabilities with minimal impact on existing software. [[Void-safe programming in Eiffel|Void-safe programming]] is an excellent example of this. Besides, Eiffel constantly implements refinements and new capabilities with minimal impact on existing software. [[Void-safe programming in Eiffel|Void-safe programming]] is an excellent example of this.

View File

@@ -1,4 +1,4 @@
[[Property:modification_date|Fri, 22 Mar 2019 14:53:52 GMT]] [[Property:modification_date|Thu, 19 Sep 2019 23:24:40 GMT]]
[[Property:publication_date|Fri, 22 Mar 2019 14:53:52 GMT]] [[Property:publication_date|Fri, 22 Mar 2019 14:53:52 GMT]]
[[Property:title|Learning Eiffel]] [[Property:title|Learning Eiffel]]
[[Property:weight|3]] [[Property:weight|3]]
@@ -12,7 +12,7 @@ Your first stop in getting acquainted with Eiffel might be the collection of [ht
=Online documentation set= =Online documentation set=
The [http://docs.eiffel.com docs.eiffel.com] site contains the online documentation for the Eiffel method, tools, and language. Within the documentation set are tutorials to help you learn about the Eiffel programming language and tools. The [http://eiffel.org/documentation|eiffel.org/documentation] section contains the online documentation for the Eiffel method, tools, and language. Within the documentation set are tutorials to help you learn about the Eiffel programming language and tools.
==The Eiffel Tutorial== ==The Eiffel Tutorial==
@@ -52,6 +52,7 @@ The documentation site includes a summary of the [[Quick reference to the Eiffel
However, usually you will find that there are differences in the syntax supported by EiffelStudio's compiler and that defined in the current standard. The differences between the standard and the EiffelStudio implementation are summarized in the [[EiffelStudio release notes]] and in a [[Differences between standard ECMA-367 and Eiffel Software implementation|documentation page]] that is specific to that purpose. However, usually you will find that there are differences in the syntax supported by EiffelStudio's compiler and that defined in the current standard. The differences between the standard and the EiffelStudio implementation are summarized in the [[EiffelStudio release notes]] and in a [[Differences between standard ECMA-367 and Eiffel Software implementation|documentation page]] that is specific to that purpose.
Another [[Differences_between_ETL_2nd_printing_and__Eiffel_Software__implementation|a documentation page]] summarizes changes to the pre-ECMA definition of Eiffel as described in [[Eiffel-_The_Language|ETL-2 "Eiffel: The Language"]].

View File

@@ -0,0 +1,38 @@
[[Property:modification_date|Wed, 18 Sep 2019 13:17:05 GMT]]
[[Property:publication_date|Thu, 12 Sep 2019 15:07:05 GMT]]
[[Property:uuid|BF3D5A25-A6C0-4645-956A-82807C41F073]]
[[Property:weight|10]]
[[Property:title|EiffelStudio: A Guided Tour - Eiffel Software Technical Report]]
[[Property:link_title|EiffelStudio Guided Tour]]
==Eiffel Software Technical Report TR-EI-68/GT ==
First published 1993 as ''First Steps with EiffelBench'' (TR-EI-38/EB) and revised as a chapter of ''Eiffel: The Environment'' also available as [[#An_Object-Oriented_Environment|An Object-Oriented Environment]] (below).
Version 3.3.8, 1995.
Version 4.1, 1997
This version: July 2001. Corresponds to release 5.0 of the EiffelStudio environment.
Full reference at [[Manual_identification_and_copyright|Manual identification and copyright]]
==An Object-Oriented Environment ==
:<big>'''Bertrand Meyer'''</big>
:Prentice Hall, 1994
:ISBN 0-13-245-507-2
The principles of object technology change the way we envision, design and use software development environments.
This book explains what it means for an environment to be truly object-oriented, not just by having a modern user interface but by applying to its full extent the concept of data abstraction. It will provide precious material to anyone who is interested in finding out how an environment can support O-O development in its quest for software quality and productivity.
''Content highlights: ''
Introduces five design principles for object-oriented environments; presents a complete set of tools applying these principles, based on development object types rather than functional units; describes a novel approach to compilation: the Melting Ice Technology, which combines the fast development turnaround of interpreters with the safety of compiled approaches, and generates high-performance final code; discusses how to use C as a target language for efficiency and portable cross-development, without impairing the benefits of the O-O method; takes the reader through a detailed demonstration of the environment's object-oriented tools, showing their application to compiling, browsing and symbolic debugging; explains the principles and application of GUI (Graphical User Interface) Application Building, going from mere 'interface builders' to the interactive construction of entire applications - interface and semantics; and introduces the Context-Events-Command-State model of GUI application building and applies it to the interactive development of a complete mini-application.
==The Guided Tour==
{{Note|[[EiffelStudio_tutorials|The Guided Tour to EiffelStudio starts here]]}}

View File

@@ -0,0 +1,33 @@
[[Property:modification_date|Wed, 18 Sep 2019 13:10:45 GMT]]
[[Property:publication_date|Wed, 11 Sep 2019 01:44:42 GMT]]
[[Property:uuid|8A382DA4-C45F-4CBB-A2B6-44447C63EFB0]]
[[Property:weight|5]]
[[Property:title|Reusable Software: The Base Object-Oriented Component Libraries]]
[[Property:link_title|OO Component Libraries]]
:[[Image:/files/uploads/OOComponentLibrariesSmall.jpg|OO Component Libraries]]
:<big>'''Bertrand Meyer'''</big>
:Prentice Hall, 1994
:xx, 514 p.
:Includes bibliographical references and index
:ISBN-10: 013-245-499-8
:ISBN-13: 978-013-245-499-5
First reviews the principles of library construction and the object-oriented techniques that make it possible to build high-quality libraries - e.g., finding the right objects and classes, choosing the proper names, using inheritance properly, determining the ideal class size, etc.
Then provides detailed usage descriptions of hundreds of reusable components, offering thousands of directly usable operations. The components, written in Eiffel, cover such areas as lists, chains, queues, stacks, trees of various kinds, sorted structures, lexical analysis, parsing, and many other fundamental data structures and algorithms.
For both the users of reusable software libraries and for developers who are interested in building their own libraries of reusable software.
''Content:''
1. Introduction to the Base libraries -- 2. Building libraries: techniques -- 3. Principles of library design -- 4. Abstract container structures: the taxonomy -- 5. Mathematical properties -- 6. Linear structures: sequences, chains, lists, circular chains -- 7. Dispenser structures: stacks, queues, priority lists -- 8. Trees -- 9. Sets and hash tables -- 10. Iteration -- 11. Lexical analysis: the Lex library -- 12. Parsing: The Parse Library -- 13. The Kernel Library -- 14. Classes for abstract container structures -- 15. Classes for mathematical properties -- 16. Classes for linear structures -- 17. Dispenser classes -- 18. Tree classes -- 19. Set and hash table classes -- 20. Iteration classes -- 21. Lexical analysis classes -- 22. Parsing classes -- 23. Kernel library classes
{{Caution|The last half of the book is taken up by a reprint of the contract form of the libraries as per printing time.
The most current documentation is found here as
[[ref:libraries/base/reference/index|EiffelBase Class Reference]] }}

View File

@@ -1,3 +1,5 @@
[[Property:modification_date|Wed, 11 Sep 2019 02:10:22 GMT]]
[[Property:publication_date|Wed, 11 Sep 2019 02:10:22 GMT]]
[[Property:link_title|Touch of Class]] [[Property:link_title|Touch of Class]]
[[Property:title|Touch of Class: Learning to Program Well with Objects and Contracts]] [[Property:title|Touch of Class: Learning to Program Well with Objects and Contracts]]
[[Property:weight|-1]] [[Property:weight|-1]]
@@ -8,7 +10,7 @@
=='''''Touch of Class: Learning to Program Well with Objects and Contracts''''' by Bertrand Meyer== =='''''Touch of Class: Learning to Program Well with Objects and Contracts''''' by Bertrand Meyer==
Springer-Verlag, 2009 Springer-Verlag, 2009, 2nd corrected ed. 2013
876 + lxiv pp. 876 + lxiv pp.

View File

@@ -1,3 +1,5 @@
[[Property:modification_date|Tue, 10 Sep 2019 21:54:55 GMT]]
[[Property:publication_date|Tue, 10 Sep 2019 21:54:55 GMT]]
[[Property:title|ET: Instructions]] [[Property:title|ET: Instructions]]
[[Property:weight|-6]] [[Property:weight|-6]]
[[Property:uuid|628bf3db-728f-0b3c-bdbb-fe52deaae5b7]] [[Property:uuid|628bf3db-728f-0b3c-bdbb-fe52deaae5b7]]
@@ -104,11 +106,7 @@ Here's one example:
and the other: and the other:
<code> <code>
across across my_list as ic loop print (ic.item) end
my_list as ic
loop
print (ic.item)
end
</code> </code>
''Loop example 2.'' ''Loop example 2.''
@@ -117,14 +115,8 @@ At first observation, it may not appear that both of these examples are using th
Incidentally, there is no requirement that ''Loop example 1'' occupy multiple lines, and ''Loop example 2'' occupy only one line. ''Loop example 1'' could have been written like this: Incidentally, there is no requirement that ''Loop example 1'' occupy multiple lines, and ''Loop example 2'' occupy only one line. ''Loop example 1'' could have been written like this:
<code> <code>
from from my_list.start until my_list.off
my_list.start loop print (my_list.item) my_list.forth end
until
my_list.off
loop
print (my_list.item)
my_list.forth
end
</code> </code>
just as ''Loop example 2'' could have been written to take multiple lines. It comes down to a matter of balance among traditional style, conciseness, and readability. just as ''Loop example 2'' could have been written to take multiple lines. It comes down to a matter of balance among traditional style, conciseness, and readability.

View File

@@ -1,3 +1,5 @@
[[Property:modification_date|Tue, 10 Sep 2019 23:07:44 GMT]]
[[Property:publication_date|Tue, 10 Sep 2019 23:07:44 GMT]]
[[Property:title|ET: Other Mechanisms]] [[Property:title|ET: Other Mechanisms]]
[[Property:weight|-4]] [[Property:weight|-4]]
[[Property:uuid|c0a01664-194c-4e84-0517-8e7c1ca61dec]] [[Property:uuid|c0a01664-194c-4e84-0517-8e7c1ca61dec]]
@@ -14,7 +16,7 @@ Sometimes we want to provide in software text a self-denoting value of a particu
In this case we used a manifest constant, <code>1</code>, to provide an initial value for <code>my_index</code>. In particular, this is a manifest integer. In this case we used a manifest constant, <code>1</code>, to provide an initial value for <code>my_index</code>. In particular, this is a manifest integer.
Eiffel also supports [[Eiffel Programming Language Syntax#Manifest constants|manifest constants]] for real (and double) numbers (ex: <code>3.1415</code>), boolean values (ex: <code>True</code>, <code>False</code>), and characters (ex: <code>'A'</code>, with [[Eiffel programming language syntax#Special characters|special characters]] expressed using a percent sign as in <code>'%N'</code> for new line, <code>'%B'</code> for backspace, <code>'%"'</code> for double quote, and <code>'%U'</code> for null). Eiffel also supports [[Eiffel_programming_language_syntax#Manifest_constants|manifest constants]] for real (and double) numbers (ex: <code>3.1415</code>), boolean values (ex: <code>True</code>, <code>False</code>), and characters (ex: <code>'A'</code>, with [[Eiffel programming language syntax#Special characters|special characters]] expressed using a percent sign as in <code>'%N'</code> for new line, <code>'%B'</code> for backspace, <code>'%"'</code> for double quote, and <code>'%U'</code> for null).
Manifest constants are also available for strings, using double quotes as in: <code>"Hello world!"</code>. As with character constants, special characters are denoted using the <code>%</code> codes. Manifest constants are also available for strings, using double quotes as in: <code>"Hello world!"</code>. As with character constants, special characters are denoted using the <code>%</code> codes.

View File

@@ -1,3 +1,5 @@
[[Property:modification_date|Wed, 18 Sep 2019 08:06:58 GMT]]
[[Property:publication_date|Wed, 18 Sep 2019 08:06:58 GMT]]
[[Property:title|Manual identification and copyright]] [[Property:title|Manual identification and copyright]]
[[Property:weight|7]] [[Property:weight|7]]
[[Property:uuid|c581a81b-fc9b-99bd-e73a-f290f6051a45]] [[Property:uuid|c581a81b-fc9b-99bd-e73a-f290f6051a45]]
@@ -5,7 +7,7 @@ Title: ''EiffelStudio: A Guided Tour'', Eiffel Software Technical Report TR-EI-6
===Publication history=== ===Publication history===
First published 1993 as ''First Steps with EiffelBench'' (TR-EI-38/EB) and revised as a chapter of ''Eiffel: The Environment'' [http://www.eiffel.com/doc/ (TR-EI-39/IE), also available as] <span>An Object-Oriented Environment</span> (Prentice Hall, 1994, ISBN 0-13-245-507-2. First published 1993 as ''First Steps with EiffelBench'' (TR-EI-38/EB) and revised as a chapter of ''Eiffel: The Environment'' (TR-EI-39/IE), also available as <span>An Object-Oriented Environment</span> (Prentice Hall, 1994, ISBN 0-13-245-507-2.
Version 3.3.8, 1995. Version 3.3.8, 1995.
@@ -35,39 +37,5 @@ Any third-party products mentioned in this document are hereby acknowledged as t
===Special duplication permission for educational institutions=== ===Special duplication permission for educational institutions===
Degree-granting educational institutions using EiffelStudio teaching purposes as part of the <span> [http://www.eiffel.com/educators/resources.html Eiffel University Partnership Program] </span> may be permitted under certain conditions to copy specific parts of this book. Contact Eiffel Software for details. Degree-granting educational institutions using EiffelStudio teaching purposes as part of the <span> Eiffel University Partnership Program </span> may be permitted under certain conditions to copy specific parts of this book. Contact [https://www.eiffel.com Eiffel Software] for details.
{|
|-
| <center>'''About Eiffel Software ''' </center>
|-
|
Eiffel Software (Interactive Software Engineering) helps you produce software better, faster and cheaper.
Eiffel Software provides a wide range of products and services based on object technology, including EiffelStudio, a complete development environment for the full system lifecycle. Eiffel Software's training courses, available worldwide, cover key management and technical topics. Eiffel Software's consultants are available to address your project needs at all levels.
Eiffel Software's TOOLS (Technology of Object-Oriented Languages and Systems) conferences, [http://www.tools-conferences.com http://www.tools-conferences.com] , are the meeting point for anyone interested in the software technologies of the future.
Eiffel Software originated one of the earliest .NET products and offers a full range of .NET services and training at [http://www.dotnetexperts.com http://www.dotnetexperts.com] .
For more information <br/>
<br/>
Interactive Software Engineering Inc.<br/>
Eiffel Software Building, 360 Storke Road<br/>
Goleta, CA 93117 USA<br/>
Telephone 805-685-1006, Fax 805-685-6869 <br/>
<br/>
Internet and e-mail
Eiffel Software maintains a rich source of information at [http://www.eiffel.com http://www.eiffel.com] , with more than 1200 Web pages including online documentation, downloadable files, product descriptions, links to Eiffel Software partners, University Partnership program, mailing list archives, announcements, press coverage, Frequently Asked Questions, Support pages, and much more.
Visit [http://www.eiffel.com/general/contact_details.html http://www.eiffel.com/general/contact_details.html] to request information about products and services. To subscribe to the Eiffel Software user list, go to[http://groups.eiffel.com/join http://groups.eiffel.com/join] .
Support programs
Eiffel Software offers a variety of support options tailored to the diverse needs of its customers. See [http://support.eiffel.com http://support.eiffel.com] for details.
|}

View File

@@ -1,3 +1,5 @@
[[Property:modification_date|Wed, 11 Sep 2019 02:15:25 GMT]]
[[Property:publication_date|Wed, 11 Sep 2019 02:15:25 GMT]]
[[Property:title|Starting To Browse]] [[Property:title|Starting To Browse]]
[[Property:weight|-10]] [[Property:weight|-10]]
[[Property:uuid|cb6c2e52-d238-9b55-0b78-ab3af9568550]] [[Property:uuid|cb6c2e52-d238-9b55-0b78-ab3af9568550]]
@@ -64,7 +66,7 @@ The most extensive subcluster of the EiffelBase library is <code>structures</cod
{{note|If you initially don't see as many details as shown on this figure, you may get them by resizing the window, moving the vertical pane boundary, and/or scrolling.}} {{note|If you initially don't see as many details as shown on this figure, you may get them by resizing the window, moving the vertical pane boundary, and/or scrolling.}}
The EiffelBase Data Structure library and its subclusters are described in the book [http://www.eiffel.com/services/training/books.html Reusable Software]. Let's go to one of the most frequently used subclusters, <code>list</code>, containing implementations of list structures. Expand the subcluster <code>list</code>. This time, since list is a terminal cluster, it's not subclusters you'll see, but '''classes''', identified by small ellipses ([[Image:class-normal-icon]]): The EiffelBase Data Structure library and its subclusters are described in the book [[Reusable_Software-_The_Base_Object-Oriented_Component_Libraries|"Reusable Software: The Base Object-Oriented Component Libraries" ]] . Let's go to one of the most frequently used subclusters, <code>list</code>, containing implementations of list structures. Expand the subcluster <code>list</code>. This time, since list is a terminal cluster, it's not subclusters you'll see, but '''classes''', identified by small ellipses ([[Image:class-normal-icon]]):
[[Image:es gt groups tool 03]] [[Image:es gt groups tool 03]]

View File

@@ -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:title|Compiler History]]
[[Property:weight|-8]] [[Property:weight|-8]]
[[Property:uuid|359395e7-4933-bb74-4397-353c8b6955cd]] [[Property:uuid|359395e7-4933-bb74-4397-353c8b6955cd]]
==Compiler version history== ==Compiler version history==
{{Warning|This page as not been maintained}}
{{Note|Please check the -> [[EiffelStudio_release_notes|EiffelStudio Release Notes]]}}

View File

@@ -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:title|Differences between ETL 2nd printing and Eiffel Software implementation]]
[[Property:link_title|ETL 2nd printing vs implementation]] [[Property:link_title|ETL 2nd printing vs implementation]]
[[Property:weight|-9]] [[Property:weight|-9]]
@@ -7,68 +9,46 @@
"ETL 2nd printing" refers to the book "Eiffel: The Language" (2nd printing), published by Prentice Hall. "ETL 2nd printing" refers to the book "Eiffel: The Language" (2nd printing), published by Prentice Hall.
==Added classes== ==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]] }} * 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 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== ==Added keywords==
* <code>Precursor</code> * <eiffel>Precursor</eiffel>
* <code>reference</code>: new keyword to specify that a type is used as a reference type. * <eiffel>reference</eiffel> (now obsolete): a keyword to specify that a type is used as a reference type.
* <code> agent</code>: new keyword used by the agent mechanism. * <eiffel>agent</eiffel>: a 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: * <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
| 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.
** 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== ==Added semantics==
* [[ET: Genericity and Arrays|Generic creation]] * [[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: * 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:
|-
| Old method
| New method
|-
|
<code> <code>
local local
a: STRING a: STRING
do do
!! a.make (10) a.make (10)
f (a) f (a)
end end
</code> </code>
** 'New method:
|
<code> <code>
do do
f (create {STRING}.make (10)) f (create {STRING}.make (10))
end end
</code> </code>
|}
This is also very useful since it can improve the power of assertions. 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: Other Mechanisms|Tuples]]
* [[ET: Agents|Agents]] * [[ET: Agents|Agents]]
* Feature access: <br/> * Feature access: <br/>
@@ -83,13 +63,11 @@ end
The previous call is valid, if and only if: 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 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 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== ==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. Look at the page for [[C externals|C]] and [[C++ Externals|C++]] with the introduction of `struct` and C++ external features encapsulation.

View File

@@ -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:title|Differences between standard ECMA-367 and Eiffel Software implementation]]
[[Property:link_title|ECMA-367 vs implementation]] [[Property:link_title|ECMA-367 vs implementation]]
[[Property:weight|-10]] [[Property:weight|-10]]
@@ -116,10 +118,10 @@ for free operator names
| Yes | Yes
|- |-
| Bang-bang syntax | Bang-bang syntax
| <code>!! a</code><br/> | &#33;&#33; a<br/>
<code>!! a.make</code><br/> &#33;&#33; a.make<br/>
<code>!B! a</code><br/> &#33;B&#33; a<br/>
<code>!B! a.make</code> &#33;B&#33; a.make
| Yes | Yes
| No | No
| Yes, marked as obsolete | Yes, marked as obsolete
@@ -196,13 +198,13 @@ reattachment
| Yes | Yes
|- |-
| Assigner call | 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 | No
| Yes | Yes
| Yes | Yes
|- |-
| Bracket expression as call target | 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
| No | No
| Yes | Yes

View File

@@ -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:title|Supported C compilers]]
[[Property:weight|-14]] [[Property:weight|-14]]
[[Property:uuid|4d4a70fa-b6da-cecb-83e0-dcc18d6ed54a]] [[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) | Microsoft Visual Studio C++ 2015 (v14.0)
| `msc_vc140` | `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` | `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.

View File

@@ -1,3 +1,5 @@
[[Property:modification_date|Mon, 02 Sep 2019 08:02:24 GMT]]
[[Property:publication_date|Mon, 02 Sep 2019 08:02:24 GMT]]
[[Property:uuid|7CCF602E-0B79-49C2-93FE-39C90CBE4E35]] [[Property:uuid|7CCF602E-0B79-49C2-93FE-39C90CBE4E35]]
[[Property:link_title|Code Templates]] [[Property:link_title|Code Templates]]
[[Property:title|Code Templates]] [[Property:title|Code Templates]]
@@ -98,7 +100,7 @@ It is very easy to define a template. It is all done in Eiffel, of course. You s
To offer templates as part of code completion, EiffelStudio looks in two locations: To offer templates as part of code completion, EiffelStudio looks in two locations:
* Standard templates, found in: * Standard templates, found in:
** Linux: <code>$ISE_EIFFEL/studio/templates/code</code> ** Linux: <code>$ISE_EIFFEL/studio/templates/code</code>
** Eiffel: <code>%ISE_EIFFEL%/studio/templates/code</code> ** Windows: <code>%ISE_EIFFEL%/studio/templates/code</code>
* User-defined templates, which you can add at: * User-defined templates, which you can add at:
** Linux: <code> ~/.es/eiffel_user_files/16.11/templates/code</code> ** Linux: <code> ~/.es/eiffel_user_files/16.11/templates/code</code>
** Windows: <code>C:/Users/your_user_name/Documents/Eiffel User Files/16.11/templates/code</code> ** Windows: <code>C:/Users/your_user_name/Documents/Eiffel User Files/16.11/templates/code</code>

View File

@@ -1,3 +1,5 @@
[[Property:modification_date|Tue, 02 Jul 2019 11:08:53 GMT]]
[[Property:publication_date|Tue, 02 Jul 2019 10:53:22 GMT]]
[[Property:title|Windows]] [[Property:title|Windows]]
[[Property:weight|9]] [[Property:weight|9]]
[[Property:uuid|d177e0bc-63e6-63b3-7fdb-5e7136945e21]] [[Property:uuid|d177e0bc-63e6-63b3-7fdb-5e7136945e21]]
@@ -49,6 +51,29 @@ You may receive the following dialog when launching EiffelStudio:
This probably means that EiffelStudio was not properly installed using the '''setup.exe''' program. Uninstall EiffelStudio and rerun the installation procedure by making sure to launch '''setup.exe''' and enter your '''Username''' and '''CD Key'''. This probably means that EiffelStudio was not properly installed using the '''setup.exe''' program. Uninstall EiffelStudio and rerun the installation procedure by making sure to launch '''setup.exe''' and enter your '''Username''' and '''CD Key'''.
== Installing EiffelStudio from the .7z archive ==
Installing the GPL version using the 7z archive is an alternative, even if the recommended solution remains using the MSI installer.
The procedure is quite similar to Linux, see [[Linux#Setting_up_EiffelStudio]]:
* Extract the .7z archive in a folder
* set the `ISE_EIFFEL` variable to the location of the extracted Eiffel_X.Y folder
* set the `ISE_PLATFORM` variable to `win64` or `windows`
* set the `ISE_C_COMPILER` variable to `msc_vc140` , or `msc` if you use VisualStudio 2012 or before
* And add to your PATH variable the values:
** `%ISE_EIFFEL%\studio\spec\%ISE_PLATFORM%\bin`
** `%ISE_EIFFEL%\tools\spec\%ISE_PLATFORM%\bin`
** `%ISE_EIFFEL%\library\gobo\spec\%ISE_PLATFORM%\bin`
```text
set PATH=%ISE_EIFFEL%\studio\spec\%ISE_PLATFORM%\bin;%ISE_EIFFEL%\tools\spec\%ISE_PLATFORM%\bin;%ISE_EIFFEL%\library\gobo\spec\%ISE_PLATFORM%\bin;%PATH%
```
The environment variables can be set for your system, or for each DOS console, a simple way is to create a file "setup.bat", within the Eiffel_X.Y folder, with the following content:
```text
set ISE_EIFFEL=%~dp0
set ISE_PLATFORM=win64
set ISE_C_COMPILER=msc_vc140
set PATH=%ISE_EIFFEL%\studio\spec\%ISE_PLATFORM%\bin;%ISE_EIFFEL%\tools\spec\%ISE_PLATFORM%\bin;%ISE_EIFFEL%\library\gobo\spec\%ISE_PLATFORM%\bin;%PATH%
```
==.NET Support== ==.NET Support==
To enable .NET support in EiffelStudio, it is necessary to install the Microsoft .NET Framework prior to starting the installation of EiffelStudio. EiffelStudio currently supports all the versions of the .NET Framework up to 4.0. To enable .NET support in EiffelStudio, it is necessary to install the Microsoft .NET Framework prior to starting the installation of EiffelStudio. EiffelStudio currently supports all the versions of the .NET Framework up to 4.0.

View File

@@ -1,4 +1,4 @@
[[Property:modification_date|Sat, 19 Jan 2019 15:46:52 GMT]] [[Property:modification_date|Fri, 20 Dec 2019 04:46:48 GMT]]
[[Property:publication_date|Thu, 06 Sep 2018 15:10:13 GMT]] [[Property:publication_date|Thu, 06 Sep 2018 15:10:13 GMT]]
[[Property:title|Documentation]] [[Property:title|Documentation]]
[[Property:description|Central repository of information about Eiffel and the products and technologies of Eiffel Software]] [[Property:description|Central repository of information about Eiffel and the products and technologies of Eiffel Software]]
@@ -17,7 +17,7 @@ This is the Eiffel documentation site, with a wealth of resources on how to unle
** [[Setup and installation]]. ** [[Setup and installation]].
** [[EiffelStudio tutorials]] ** [[EiffelStudio tutorials]]
** [[Technical papers about EiffelStudio|Technical papers]] on specific concepts and tools ** [[Technical papers about EiffelStudio|Technical papers]] on specific concepts and tools
* [[Solutions]]. EiffelStudio comes with numerous libraries, packages, and tools. The Solutions book includes: * [/doc/solutions/Solutions_and_Libraries|Solutions]: EiffelStudio comes with numerous libraries, packages, and tools. The Solutions book includes:
** Libraries: data structures, graphics, concurrency (SCOOP), networking... ** Libraries: data structures, graphics, concurrency (SCOOP), networking...
** Packages ** Packages
** Tools ** Tools

View File

@@ -1,4 +1,7 @@
[[Property:title|IFELL]] [[Property:link_title|Free Eiffel Library License]]
[[Property:modification_date|Wed, 18 Sep 2019 08:13:12 GMT]]
[[Property:publication_date|Wed, 11 Sep 2019 01:54:10 GMT]]
[[Property:title|Eiffel Software Free Eiffel Library License (IFELL)]]
[[Property:weight|4]] [[Property:weight|4]]
[[Property:uuid|34079f13-741d-a937-e492-9ccfe235efeb]] [[Property:uuid|34079f13-741d-a937-e492-9ccfe235efeb]]
This license describes the terms applicable to the open-source EiffelBase libraries. For the EiffelStudio and other libraries license terms, please refer to the Eiffel Software end-user license. This license describes the terms applicable to the open-source EiffelBase libraries. For the EiffelStudio and other libraries license terms, please refer to the Eiffel Software end-user license.
@@ -11,7 +14,7 @@ We hope that others will be inspired by this example to release their own reusab
==Preamble== ==Preamble==
(This Preamble is not part of the license.) (This Preamble is not part of the license.)
EiffelBase is one of the principal contributions of Eiffel: a library of fundamental structures and algorithms covering the basics of computing, and resulting from a "Linnaean" effort at a general-purpose taxonomy of computing structures. We believe that EiffelBase is one of the most carefully designed and extensively used libraries in the object-oriented industry. The library and its design principles are described in detail in the book [http://www.eiffel.com/services/training/books.html ''Reusable Software: The Base Object-Oriented Component Libraries'' ] . EiffelBase is one of the principal contributions of Eiffel: a library of fundamental structures and algorithms covering the basics of computing, and resulting from a "Linnaean" effort at a general-purpose taxonomy of computing structures. We believe that EiffelBase is one of the most carefully designed and extensively used libraries in the object-oriented industry. The library and its design principles are described in detail in the book [[Reusable_Software-_The_Base_Object-Oriented_Component_Libraries|"Reusable Software: The Base Object-Oriented Component Libraries" ]] .
EiffelBase is at the center of Eiffel Software's Eiffel and has been among the major factors attracting users to the technology. In spite of this competitive advantage, Eiffel Software officially announced in June of 1998 that it would release the library to the public in source form, under the terms of the license below. There are two main reasons for this initiative: EiffelBase is at the center of Eiffel Software's Eiffel and has been among the major factors attracting users to the technology. In spite of this competitive advantage, Eiffel Software officially announced in June of 1998 that it would release the library to the public in source form, under the terms of the license below. There are two main reasons for this initiative:
* As the software industry seems poised to adopt the idea of reusable components, we feel that EiffelBase provides an ideal basis and are happy to contribute it to the community. * As the software industry seems poised to adopt the idea of reusable components, we feel that EiffelBase provides an ideal basis and are happy to contribute it to the community.
@@ -65,7 +68,7 @@ This is the official license text.
'''4.'''If you produce new classes based on the Library or extending the Library, you are encouraged, but not required, to make them available in the same way. '''4.'''If you produce new classes based on the Library or extending the Library, you are encouraged, but not required, to make them available in the same way.
'''5.''' If you use the Library (2.1) in source or object form for producing software that you distribute, you are encouraged, but not required, to include the following mention (or its translation into the language of the rest of the distribution, if other than English) in the documentation of your software, including textual documentation as well as online documentation such as "About..." entries: '''5.''' If you use the Library (2.1) in source or object form for producing software that you distribute, you are encouraged, but not required, to include the following mention (or its translation into the language of the rest of the distribution, if other than English) in the documentation of your software, including textual documentation as well as online documentation such as "About..." entries:
* ''This product includes EiffelBase software from Interactive Software Engineering, used according to the terms of the Eiffel Software Free Eiffel Library License (IFELL). ''See [http://eiffel.com/ http://eiffel.com] and, for the license terms, [http://eiffel.com/products/base/license.html http://eiffel.com/products/base/license.html] . * ''This product includes EiffelBase software from Interactive Software Engineering, used according to the terms of the Eiffel Software Free Eiffel Library License (IFELL). ''See [https://eiffel.com/ https://eiffel.com] and, for the license terms, [https://www.eiffel.com/eiffelstudio/licensing/ https://www.eiffel.com/eiffelstudio/licensing/] .
'''6.''' If you distribute the source code of part or all of the Library (2.2) you must: '''6.''' If you distribute the source code of part or all of the Library (2.2) you must:
@@ -73,7 +76,7 @@ This is the official license text.
* Retain, in the distributed version, the entire copyright notice of these classes. * Retain, in the distributed version, the entire copyright notice of these classes.
* If you need to make any modification to the classes, mark those modifications clearly in the class texts. * If you need to make any modification to the classes, mark those modifications clearly in the class texts.
* <span id="valid_eiffel"></span> Ensure that the text remains valid Eiffel. Note that this license does not authorize you to distribute versions of the Library restated in other programming, analysis or design languages, except if mechanically translated from the source form by an Eiffel compiler, in which case they fall under "object form". For any non-mechanical adaptation to other languages you must obtain authorization from Eiffel Software. "Valid Eiffel" includes the language described in the latest edition or printing of the book ''[[Eiffel: The Language]]'' (Prentice Hall), plus any changes or extensions that have been approved by the Nonprofit International Consortium for Eiffel (NICE) or have been accepted for discussion by the Language Committee of NICE, provided they are accepted by the reference implementation. * <span id="valid_eiffel"></span> Ensure that the text remains valid Eiffel. Note that this license does not authorize you to distribute versions of the Library restated in other programming, analysis or design languages, except if mechanically translated from the source form by an Eiffel compiler, in which case they fall under "object form". For any non-mechanical adaptation to other languages you must obtain authorization from Eiffel Software. "Valid Eiffel" includes the language described in the latest edition or printing of the book ''[[Eiffel: The Language]]'' (Prentice Hall), plus any changes or extensions that have been approved by the Nonprofit International Consortium for Eiffel (NICE) or have been accepted for discussion by the Language Committee of NICE, provided they are accepted by the reference implementation.
* <span id="obsolete_version"></span> If Eiffel Software releases a new version of the Library, you must, no later than six months after the release of that version, either: (A) update your distribution to the new version; (B) add the following notice to all files in your distribution:" ''This is an obsolete version of EiffelBase. The latest version is available from http://eiffel.com''"; or (C) cease distributing your version. * <span id="obsolete_version"></span> If Eiffel Software releases a new version of the Library, you must, no later than six months after the release of that version, either: (A) update your distribution to the new version; (B) add the following notice to all files in your distribution:" ''This is an obsolete version of EiffelBase. The latest version is available from https://eiffel.com''"; or (C) cease distributing your version.
You may not charge any fee for the distribution of the Library (source or binary), although you may charge for software that includes the Library in whole or in part as per the other provisions of this Agreement. You may not charge any fee for the distribution of the Library (source or binary), although you may charge for software that includes the Library in whole or in part as per the other provisions of this Agreement.

View File

@@ -1,4 +1,7 @@
[[Property:title|Solutions]] [[Property:modification_date|Sat, 05 Oct 2019 13:56:56 GMT]]
[[Property:publication_date|Sat, 05 Oct 2019 13:34:12 GMT]]
[[Property:link_title|Solutions and Libraries]]
[[Property:title|Solutions and Libraries]]
[[Property:description|Eiffel Solutions, Technologies, and Class Libraries]] [[Property:description|Eiffel Solutions, Technologies, and Class Libraries]]
[[Property:weight|3]] [[Property:weight|3]]
[[Property:uuid|0f0913fe-d71c-43d3-6c22-706c8ed5d4ad]] [[Property:uuid|0f0913fe-d71c-43d3-6c22-706c8ed5d4ad]]
@@ -7,6 +10,7 @@
In this book you will find information about the facilities provided by Eiffel for satisfying many software development needs. In this book you will find information about the facilities provided by Eiffel for satisfying many software development needs.
This includes: This includes:
* The documentation for the Eiffel IRON repository
* The documentation for the Eiffel class libraries * The documentation for the Eiffel class libraries
** Tutorials and/or user guides ** Tutorials and/or user guides
** Class references -- the library, cluster, and class views ** Class references -- the library, cluster, and class views

View File

@@ -1,460 +1,464 @@
[[Property:title|IRON: Eiffel package repository]] [[Property:modification_date|Sat, 05 Oct 2019 14:14:29 GMT]]
[[Property:link_title|IRON packages]] [[Property:publication_date|Sat, 05 Oct 2019 13:54:59 GMT]]
[[Property:weight|0]] [[Property:title|IRON: Eiffel package repository]]
[[Property:uuid|393EFF7D-49DF-472C-89CE-7E0970F1A96A]] [[Property:link_title|IRON Eiffel repository]]
{{ReviewRequested}} [[Property:weight|-20]]
[[Property:uuid|393EFF7D-49DF-472C-89CE-7E0970F1A96A]]
=Purpose= {{Info|This is a repost of the original documentation as provided at [https://iron.eiffel.com/repository/doc/] }}
IRON provides an easy-to-use facility for using and sharing packages of quality Eiffel components, automating many of the tasks involved. ::Visit the [https://iron.eiffel.com/repository/|IRON package repository]
Most often a package is a library or a set of libraries, but it could also other resources such as tools.
=Purpose=
{{definition|IRON|a package management solution based on repositories.}}
IRON provides an easy-to-use facility for using and sharing packages of quality Eiffel components, automating many of the tasks involved.
Most often a package is a library or a set of libraries, but it could also other resources such as tools.
=Package Repository vs Library Repository=
{{definition|IRON|a package management solution based on repositories.}}
Certainly the IRON repository is a repository of Eiffel libraries. However, sometimes libraries are used together, or cross reference one another, and thus are appropriate to be delivered together as a unit.
Such unit can also include other types of files, such as external .c files that may need to be compiled on the local platform to make .LIB or .OBJ files available to the linker (.a or .o on Unix and Linux systems), scripts or executable that need to be run as part of the installation process (e.g. to generate other files required by the library, install environment variables, generate source code from LEX files), or tool kits that are part of, or needed by, the library.
Since the IRON repository permits programmers to install software components in "units", and since sometimes those units can contain more than one library, as well as other types of files, a new term was required to convey this concept: package. =Package Repository vs Library Repository=
{{Definition|package|a downloadable unit of software from an IRON repository that contains one or more Eiffel libraries and their related files.}} Certainly the IRON repository is a repository of Eiffel libraries. However, sometimes libraries are used together, or cross reference one another, and thus are appropriate to be delivered together as a unit.
Such unit can also include other types of files, such as external .c files that may need to be compiled on the local platform to make .LIB or .OBJ files available to the linker (.a or .o on Unix and Linux systems), scripts or executable that need to be run as part of the installation process (e.g. to generate other files required by the library, install environment variables, generate source code from LEX files), or tool kits that are part of, or needed by, the library.
Since the IRON repository permits programmers to install software components in "units", and since sometimes those units can contain more than one library, as well as other types of files, a new term was required to convey this concept: package.
=Application to .ecf files=
: Empowering Teams of Developers {{Definition|package|a downloadable unit of software from an IRON repository that contains one or more Eiffel libraries and their related files.}}
To configure Eiffel projects, programmers uses "ECFs" (Eiffel Configuration Files -- Microsoft Visual Studio users can think of "solution files").
=Application to .ecf files=
One application of ECFs is to reference libraries installed in different locations. Without IRON, the usual solution is to use relative or absolute path, and generally using environment variables such as ISE_LIBRARY or EIFFEL_LIBRARY, and a few package specific variables such as GOBO, ... : Empowering Teams of Developers
Typical library references without IRON in ECF: To configure Eiffel projects, programmers uses "ECFs" (Eiffel Configuration Files -- Microsoft Visual Studio users can think of "solution files").
<code>
<library name="base" location="$ISE_LIBRARY\library\base\base.ecf"/> One application of ECFs is to reference libraries installed in different locations. Without IRON, the usual solution is to use relative or absolute path, and generally using environment variables such as ISE_LIBRARY or EIFFEL_LIBRARY, and a few package specific variables such as GOBO, ...
<library name="xml_parser" location="$EIFFEL_LIBRARY\library\text\parser\xml\parser\xml_parser.ecf"/>
<library name="dummy_foobar" location="$LIB_DUMMY\src\foo\bar.ecf"/> Typical library references without IRON in ECF:
</code> <code>
<library name="base" location="$ISE_LIBRARY\library\base\base.ecf"/>
<library name="xml_parser" location="$EIFFEL_LIBRARY\library\text\parser\xml\parser\xml_parser.ecf"/>
As projects grow and multiply, the number of these variables adds up quickly. A dozen or more such environment variables per system is (prior to IRON) not uncommon. Coordinating their use and evolution among a team of programmers can become a challenge. <library name="dummy_foobar" location="$LIB_DUMMY\src\foo\bar.ecf"/>
</code>
IRON has made it possible to simplify this scenario dramatically. For any commonly used library, it suffices to:
* Install the related package from an IRON repository.
* And for any project that uses the library, include an IRON uri in the related ECF. As projects grow and multiply, the number of these variables adds up quickly. A dozen or more such environment variables per system is (prior to IRON) not uncommon. Coordinating their use and evolution among a team of programmers can become a challenge.
** an IRON uri has the form: <code>iron:package-name:relative-path-to-file.ecf</code>
** as you can see, no more environment variable, and only a relative path from the root of the package. This simplifies a lot the referencing, and package/library management. No need to know where are located the installed files on the local machine. IRON has made it possible to simplify this scenario dramatically. For any commonly used library, it suffices to:
* Install the related package from an IRON repository.
That's all! In the above example, the location of the libraries, in the project, then become something like: * And for any project that uses the library, include an IRON uri in the related ECF.
<nowiki><library name="base" location="iron:base:base.ecf" /></nowiki> ** an IRON uri has the form: <code>iron:package-name:relative-path-to-file.ecf</code>
** as you can see, no more environment variable, and only a relative path from the root of the package. This simplifies a lot the referencing, and package/library management. No need to know where are located the installed files on the local machine.
<nowiki><library name="xml_parser" location="iron:xml:parser/xml_parser.ecf" /></nowiki>
That's all! In the above example, the location of the libraries, in the project, then become something like:
<nowiki><library name="foobar" location="iron:dummy:src/foo/bar.ecf" /></nowiki> <nowiki><library name="base" location="iron:base:base.ecf" /></nowiki>
There is no more need for a set of environment variables. <nowiki><library name="xml_parser" location="iron:xml:parser/xml_parser.ecf" /></nowiki>
IRON and EiffelStudio take care of the remaining details. And all developers on a project simply share the same ECF file with no further worry about where the libraries are. <nowiki><library name="foobar" location="iron:dummy:src/foo/bar.ecf" /></nowiki>
However, to get information about IRON location, use the command: <code> iron path ...</code> There is no more need for a set of environment variables.
:{| class="wikitable"
|- IRON and EiffelStudio take care of the remaining details. And all developers on a project simply share the same ECF file with no further worry about where the libraries are.
! Command
! Result However, to get information about IRON location, use the command: <code> iron path ...</code>
! Example :{| class="wikitable"
|- |-
| <code>iron path</code> ! Command
| Base directory of IRON (~ IRON_PATH variable) ! Result
| C:\Users\jfiat\Documents\Eiffel User Files\14.05\iron ! Example
|- |-
| <code>iron path base</code> | <code>iron path</code>
| location of installed package <code>base</code> | Base directory of IRON (~ IRON_PATH variable)
| C:\Users\jfiat\Documents\Eiffel User Files\14.05\iron\packages\base | C:\Users\jfiat\Documents\Eiffel User Files\14.05\iron
|- |-
| <code>iron path xml</code> | <code>iron path base</code>
| location of installed package <code>xml</code> | location of installed package <code>base</code>
| C:\Users\jfiat\Documents\Eiffel User Files\14.05\iron\packages\xml | C:\Users\jfiat\Documents\Eiffel User Files\14.05\iron\packages\base
|} |-
| <code>iron path xml</code>
Notes: | location of installed package <code>xml</code>
* It is possible to override the default location of IRON installation directory, by setting the environment variable <code>IRON_PATH</code> or <code>ISE_IRON_PATH</code>. | C:\Users\jfiat\Documents\Eiffel User Files\14.05\iron\packages\xml
* In the scope of the .ecf file, the IRON_PATH variable is always set: to default path or to the value of environment variable IRON_PATH. |}
* In addition to the IRON way to reference library, it is also possible to use the absolute URL in the repository, see advanced usage for more details.
<code> Notes:
https://iron.eiffel.com/14.05/com.eiffel/library/base/base.ecf * It is possible to override the default location of IRON installation directory, by setting the environment variable <code>IRON_PATH</code> or <code>ISE_IRON_PATH</code>.
https://iron.eiffel.com/14.05/com.eiffel/library/text/parser/xml/parser/xml_parser.ecf * In the scope of the .ecf file, the IRON_PATH variable is always set: to default path or to the value of environment variable IRON_PATH.
https://iron.eiffel.com/14.05/others/dummy/src/foo/bar.ecf * In addition to the IRON way to reference library, it is also possible to use the absolute URL in the repository, see advanced usage for more details.
</code> <code>
https://iron.eiffel.com/14.05/com.eiffel/library/base/base.ecf
But this implies putting the version in the url (i.e 14.05), or you could set ISE_LIBRARY to <code>https://iron.eiffel.com/14.05/com.eiffel</code> https://iron.eiffel.com/14.05/com.eiffel/library/text/parser/xml/parser/xml_parser.ecf
https://iron.eiffel.com/14.05/others/dummy/src/foo/bar.ecf
= IRON client tool = </code>
The '''iron''' client executable is a facility that permits Eiffel programmers to easily install, remove, update, list, examine, search and share Eiffel packages.
Additionally, it permits easy maintenance of a local list of IRON repositories. But this implies putting the version in the url (i.e 14.05), or you could set ISE_LIBRARY to <code>https://iron.eiffel.com/14.05/com.eiffel</code>
A default IRON server is provided and a default repository is added automatically by the iron executable, based on the version of EiffelStudio that installed the iron executable (<nowiki>example: https://iron.eiffel.com/14.05</nowiki> ). = IRON client tool =
The '''iron''' client executable is a facility that permits Eiffel programmers to easily install, remove, update, list, examine, search and share Eiffel packages.
The IRON facility consists of three parts: Additionally, it permits easy maintenance of a local list of IRON repositories.
* A default repository at <nowiki>https://iron.eiffel.com/14.05</nowiki> (provides the web API and web interface for the repositories that are stored there; you can add other IRON servers as they become available). A default IRON server is provided and a default repository is added automatically by the iron executable, based on the version of EiffelStudio that installed the iron executable (<nowiki>example: https://iron.eiffel.com/14.05</nowiki> ).
* The '''iron''' executable utility on the local machine (installed with EiffelStudio, the program that interacts with the repositories). The IRON facility consists of three parts:
* Within EiffelStudio and the Eiffel compiler, is the ability to read and use IRON references from the Eiffel Configuration File (.ecf). The '''Project settings''' tool, and '''Add Library' dialog also provides support for IRON packages. * A default repository at <nowiki>https://iron.eiffel.com/14.05</nowiki> (provides the web API and web interface for the repositories that are stored there; you can add other IRON servers as they become available).
=How to Use IRON= * The '''iron''' executable utility on the local machine (installed with EiffelStudio, the program that interacts with the repositories).
== Install wanted Eiffel packages ==
Using the EiffelStudio command prompt (installed with EiffelStudio), execute the IRON command to install the packages you want to use: * Within EiffelStudio and the Eiffel compiler, is the ability to read and use IRON references from the Eiffel Configuration File (.ecf). The '''Project settings''' tool, and '''Add Library' dialog also provides support for IRON packages.
iron install <package_name> =How to Use IRON=
== Install wanted Eiffel packages ==
Note that the compilation of an Eiffel project that depends on uninstalled Eiffel package(s) will suggest and propose to the user to install the missing packages (this is currently supported with '''ec''' in command line mode, and graphical mode. Using the EiffelStudio command prompt (installed with EiffelStudio), execute the IRON command to install the packages you want to use:
== Add reference to install package libraries == iron install <package_name>
Simply add the library with IRON uri <code>iron:package-name:relative-path-to-file.ecf</code>, as you would have previously for local libraries. This can be done directly by editing the .ecf file, or using the EiffelStudio '''Project Settings''' tool from Eiffel Studio:
Note that the compilation of an Eiffel project that depends on uninstalled Eiffel package(s) will suggest and propose to the user to install the missing packages (this is currently supported with '''ec''' in command line mode, and graphical mode.
Project Settings -> <target_name> -> Groups -> Libraries
== Add reference to install package libraries ==
right-click Libraries and add a library. This will popup the '''Add Library''' dialog, that expects a name and a location, simply select the available library from the grid. Simply add the library with IRON uri <code>iron:package-name:relative-path-to-file.ecf</code>, as you would have previously for local libraries. This can be done directly by editing the .ecf file, or using the EiffelStudio '''Project Settings''' tool from Eiffel Studio:
Note that you have an easy way to install, remove IRON packages from the '''Iron''' tab of the "Add Library" dialog.
Project Settings -> <target_name> -> Groups -> Libraries
* The default and recommended location for a IRON package library is the IRON uri:
iron:package-name:relative-path-to-file.ecf right-click Libraries and add a library. This will popup the '''Add Library''' dialog, that expects a name and a location, simply select the available library from the grid.
Note that you have an easy way to install, remove IRON packages from the '''Iron''' tab of the "Add Library" dialog.
* It is also possible to use the absolute URL in the IRON repository such as:
<nowiki>https://iron.eiffel.com/14.05/com.eiffel/library/base/base.ecf</nowiki> * The default and recommended location for a IRON package library is the IRON uri:
iron:package-name:relative-path-to-file.ecf
* And an other solution, would be to use the <code>IRON_PATH</code> environment variable to locate the install libraries, such as:
$IRON_PATH\packages\base\base.ecf * It is also possible to use the absolute URL in the IRON repository such as:
<nowiki>https://iron.eiffel.com/14.05/com.eiffel/library/base/base.ecf</nowiki>
This latter method, while it works, is not recommended simply because it defeats some of the advantages of using the IRON repository in the first place.
* And an other solution, would be to use the <code>IRON_PATH</code> environment variable to locate the install libraries, such as:
== External dependencies == $IRON_PATH\packages\base\base.ecf
If the package has some other way of linking it with your Eiffel projects, e.g. to an external '''.dll''' or '''.so''' , then instructions for this should be provided within the package.
This latter method, while it works, is not recommended simply because it defeats some of the advantages of using the IRON repository in the first place.
== Optional ==
If you do not define one of these environment variables, the location used is: == External dependencies ==
By default the base directory for IRON is under <code><Eiffel User Files>/<EiffelStudio_Version>/iron</code> , but it is possible to overwrite this value by setting the environment variable <code>IRON_PATH</code> (or <code>ISE_IRON_PATH</code>). Note that if the physical location does not exists, the local '''iron''' executable will create it. If the package has some other way of linking it with your Eiffel projects, e.g. to an external '''.dll''' or '''.so''' , then instructions for this should be provided within the package.
Setting IRON_PATH, can be a way to setup different development environments (with different registered repositories, ...) == Optional ==
If you do not define one of these environment variables, the location used is:
=How to Get Information About IRON Packages= By default the base directory for IRON is under <code><Eiffel User Files>/<EiffelStudio_Version>/iron</code> , but it is possible to overwrite this value by setting the environment variable <code>IRON_PATH</code> (or <code>ISE_IRON_PATH</code>). Note that if the physical location does not exists, the local '''iron''' executable will create it.
At the website provided by a particular IRON server, you can get information about available packages in a number of ways. You can start by simply visiting the server's base address: https://iron.eiffel.com/ .
Setting IRON_PATH, can be a way to setup different development environments (with different registered repositories, ...)
* This page lists the repository versions available.
* Select the version that matches the version of EiffelStudio you have installed. =How to Get Information About IRON Packages=
Example: clicking on version 14.05 takes you to https://iron.eiffel.com/repository/14.05/ where you can list existing packages, or add a new package if you have an account on the server. At the website provided by a particular IRON server, you can get information about available packages in a number of ways. You can start by simply visiting the server's base address: https://iron.eiffel.com/ .
If you click the "Package list" or "All packages" link, it takes you to a list of packages available under that version. * This page lists the repository versions available.
* Select the version that matches the version of EiffelStudio you have installed.
== Search/filter== Example: clicking on version 14.05 takes you to https://iron.eiffel.com/repository/14.05/ where you can list existing packages, or add a new package if you have an account on the server.
To filter this list, you can use the search window. You can specify search criteria in this format <code>:criterion:search_string</code>
If you click the "Package list" or "All packages" link, it takes you to a list of packages available under that version.
Criteria available:
== Search/filter==
:{| class="wikitable" To filter this list, you can use the search window. You can specify search criteria in this format <code>:criterion:search_string</code>
|-
! Criterion Criteria available:
! Meaning
|- :{| class="wikitable"
| name |-
| string is contained in package name (wildcards are supported) ! Criterion
|- ! Meaning
| title |-
| string is contained in title | name
|- | string is contained in package name (wildcards are supported)
| tag |-
| package contains search_string in its tags (i.e. keywords) | title
|- | string is contained in title
| downloads |-
| has at least N downloads, e.g. downloads:25 | tag
|} | package contains search_string in its tags (i.e. keywords)
If a criterion is omitted, '''name''' is used by default. |-
'''Operators available''': or, and, not (example: name:er and not name:parser) | downloads
| has at least N downloads, e.g. downloads:25
Finally, when you have found the package you want, click on its title, and the page displayed will contain detailed information about the package. |}
If a criterion is omitted, '''name''' is used by default.
== Associated paths == '''Operators available''': or, and, not (example: name:er and not name:parser)
Part of the information is a portion of the URI which you can use to define the path to the package.
For the '''base''' library (title: EiffelBase), these URIs look like this: Finally, when you have found the package you want, click on its title, and the page displayed will contain detailed information about the package.
<code>
/14.05/com.eiffel/library/base == Associated paths ==
/14.05/com.eiffel/library/data_structure/adt/base Part of the information is a portion of the URI which you can use to define the path to the package.
</code> For the '''base''' library (title: EiffelBase), these URIs look like this:
<code>
Given that the server's HTTP address is (in this example) https://iron.eiffel.com/, you can compose full paths from this, and use them in your Eiffel project. In this case, you can include the EiffelBase library in your project by specifying either: /14.05/com.eiffel/library/base
<code> /14.05/com.eiffel/library/data_structure/adt/base
https://iron.eiffel.com/14.05/com.eiffel/library/base/base.ecf </code>
or https://iron.eiffel.com/14.05/com.eiffel/library/data_structure/adt/base/base.ecf
</code> Given that the server's HTTP address is (in this example) https://iron.eiffel.com/, you can compose full paths from this, and use them in your Eiffel project. In this case, you can include the EiffelBase library in your project by specifying either:
<code>
Both will cause your project to compile with the same EiffelBase library provided by this IRON repository, provided you previously issued the following command on your system: https://iron.eiffel.com/14.05/com.eiffel/library/base/base.ecf
<code> or https://iron.eiffel.com/14.05/com.eiffel/library/data_structure/adt/base/base.ecf
> iron install base </code>
or
> iron install https://iron.eiffel.com/14.05/com.eiffel/library/base Both will cause your project to compile with the same EiffelBase library provided by this IRON repository, provided you previously issued the following command on your system:
</code> <code>
> iron install base
'''IMPORTANT''': those associated URIs may be deprecated soon with the use of IRON uri <code>iron:base:base.ecf</code>. or
> iron install https://iron.eiffel.com/14.05/com.eiffel/library/base
=Using IRON from the Command Line= </code>
The "iron" executable is used to perform various operations such as search, install, remove, update and share. This executable is installed with EiffelStudio in $ISE_EIFFEL/tools/spec/$ISE_PLATFORM/bin/.
'''IMPORTANT''': those associated URIs may be deprecated soon with the use of IRON uri <code>iron:base:base.ecf</code>.
==Quick Help from the Command Line==
*<code>iron help</code> =Using IRON from the Command Line=
:lists the actions that are available. The "iron" executable is used to perform various operations such as search, install, remove, update and share. This executable is installed with EiffelStudio in $ISE_EIFFEL/tools/spec/$ISE_PLATFORM/bin/.
*<code>iron <action> --help</code> ==Quick Help from the Command Line==
:displays detailed usage syntax for the action specified. Note that most of the actions have a -v (verbose) option that will display additional helpful information about the action performed, including (when relevant) the local path to the package. *<code>iron help</code>
:lists the actions that are available.
==Action Summary==
*<code>iron <action> --help</code>
:{| class="wikitable" :displays detailed usage syntax for the action specified. Note that most of the actions have a -v (verbose) option that will display additional helpful information about the action performed, including (when relevant) the local path to the package.
|-
! Action ==Action Summary==
! Meaning
|- :{| class="wikitable"
| update |-
| updates cached package information ! Action
|- ! Meaning
| list |-
| displays a list of available packages, and whether they are installed | update
|- | updates cached package information
| search |-
| searches for a specified packages | list
|- | displays a list of available packages, and whether they are installed
| info |-
| displays information about a specified packages | search
|- | searches for a specified packages
| install |-
| installs specified packages | info
|- | displays information about a specified packages
| remove |-
| removes specified packages | install
|- | installs specified packages
| repository |-
| manages repository list | remove
|- | removes specified packages
| share |-
| share and manage your packages (an account on the IRON server is required) | repository
|} | manages repository list
|-
| share
==Examples== | share and manage your packages (an account on the IRON server is required)
|}
===Update cached iron repository information===
<code> iron update
</code> ==Examples==
===Display information about package=== ===Update cached iron repository information===
:For instance for the '''api_wrapper''' package: <code> iron update
<code> iron info api_wrapper </code>
</code>
:If the package is installed, the installation path will also be displayed. ===Display information about package===
:For instance for the '''api_wrapper''' package:
===Search for a package by name, ID or URI=== <code> iron info api_wrapper
:(package IDs and URIs are displayed by the "info" action) (future releases will enable searching by other criteria as well, such as by tags [i.e. keywords]): </code>
<code> iron search base :If the package is installed, the installation path will also be displayed.
</code>
===Search for a package by name, ID or URI===
===List available packages=== :(package IDs and URIs are displayed by the "info" action) (future releases will enable searching by other criteria as well, such as by tags [i.e. keywords]):
<code> iron list <code> iron search base
</code> </code>
===List installed packages=== ===List available packages===
<code> iron list --installed <code> iron list
</code> </code>
===Install a package=== ===List installed packages===
<code> iron install base <code> iron list --installed
</code> </code>
(or <nowiki>iron install https://iron.eiffel.com/14.05/com.eiffel/library/base</nowiki>)
===Install a package===
:(This latter form is useful in resolving name conflicts when, for instance, you have multiple IRON repositories registered on your system, and two or more contain a packaged called "base".) <code> iron install base
</code>
===Uninstall a package=== (or <nowiki>iron install https://iron.eiffel.com/14.05/com.eiffel/library/base</nowiki>)
<code> iron remove base
</code> :(This latter form is useful in resolving name conflicts when, for instance, you have multiple IRON repositories registered on your system, and two or more contain a packaged called "base".)
===Install all available packages=== ===Uninstall a package===
<code> iron install --all <code> iron remove base
</code> </code>
===Uninstall all installed packages=== ===Install all available packages===
<code> iron remove --all <code> iron install --all
</code> </code>
=Advanced Usage= ===Uninstall all installed packages===
==Managing Multiple Repositories== <code> iron remove --all
</code>
It is possible to have more than one IRON repository server registered.
Examples: =Advanced Usage=
<code> ==Managing Multiple Repositories==
iron repository --list
iron repository --add https://iron.eiffel.com/14.05 It is possible to have more than one IRON repository server registered.
iron repository --add https://custom.example.com/14.05 Examples:
iron repository --add C:\eiffel\my_repository <code>
iron repository --remove https://custom.example.com/14.05 iron repository --list
</code> iron repository --add https://iron.eiffel.com/14.05
iron repository --add https://custom.example.com/14.05
===Multiple-Repository Name Conflict Resolution=== iron repository --add C:\eiffel\my_repository
iron repository --remove https://custom.example.com/14.05
If you have more than one IRON repository registered on your system, it is possible that the same package name may exist on more than one repository. If this is the case, and you attempt to perform operations using that name only, the repository that will be used will be the first repository in the list that contains a package with that name. If you need the package with that name from a different repository, then use the "id" "uri" form of the identifying the package you want. </code>
If the sequence of repositories is not to your liking, you can change it in three ways: ===Multiple-Repository Name Conflict Resolution===
:* use the iron executable to remove and add repositories to re-sequence them, or If you have more than one IRON repository registered on your system, it is possible that the same package name may exist on more than one repository. If this is the case, and you attempt to perform operations using that name only, the repository that will be used will be the first repository in the list that contains a package with that name. If you need the package with that name from a different repository, then use the "id" "uri" form of the identifying the package you want.
:* delete the repositories.conf file and use the iron executable to add them again in the sequence you want them.
:* edit the file repositories.conf with a plain text editor in the directory indicated by your IRON_PATH (or ISE_IRON_PATH) environment variable (or <code><Eiffel User Files>/<EiffelStudio_Version>/iron/</code> if one of these environment variables are not defined on your system). (Note that this latter method, while possible, is not recommended, since the syntax of that file can change with new releases.) If the sequence of repositories is not to your liking, you can change it in three ways:
==Building a package== :* use the iron executable to remove and add repositories to re-sequence them, or
An IRON package has to provide, at its root, a file <code>package.iron</code>. This file describes the package with name, description, and various other information. :* delete the repositories.conf file and use the iron executable to add them again in the sequence you want them.
See for instance, the package.iron for Eiffel Base package: :* edit the file repositories.conf with a plain text editor in the directory indicated by your IRON_PATH (or ISE_IRON_PATH) environment variable (or <code><Eiffel User Files>/<EiffelStudio_Version>/iron/</code> if one of these environment variables are not defined on your system). (Note that this latter method, while possible, is not recommended, since the syntax of that file can change with new releases.)
<code>
package base ==Building a package==
An IRON package has to provide, at its root, a file <code>package.iron</code>. This file describes the package with name, description, and various other information.
project See for instance, the package.iron for Eiffel Base package:
base_safe = "base-safe.ecf" <code>
base = "base.ecf" package base
base_testing = "testing/testing-safe.ecf"
base_testing = "testing/testing.ecf" project
base_safe = "base-safe.ecf"
note base = "base.ecf"
title: Eiffel Base base_testing = "testing/testing-safe.ecf"
description: "Eiffel Base: kernel library classes, data structure, Input and Output" base_testing = "testing/testing.ecf"
tags: base,kernel,structure,io note
license: Eiffel Forum License v2 title: Eiffel Base
copyright: 1984-2013 Eiffel Software and others description: "Eiffel Base: kernel library classes, data structure, Input and Output"
link[doc]: "Documentation" http://eiffelroom.com/
link[source]: "Subversion" https://svn.eiffel.com/eiffelstudio/trunk/Src/library/base tags: base,kernel,structure,io
link[license]: http://www.eiffel.com/licensing/forum.txt license: Eiffel Forum License v2
maps: /com.eiffel/library/data_structure/adt/base copyright: 1984-2013 Eiffel Software and others
link[doc]: "Documentation" http://eiffelroom.com/
end link[source]: "Subversion" https://svn.eiffel.com/eiffelstudio/trunk/Src/library/base
</code> link[license]: http://www.eiffel.com/licensing/forum.txt
maps: /com.eiffel/library/data_structure/adt/base
Note: The package iron file for the Eiffel Base package is available online at <code>https://svn.eiffel.com/eiffelstudio/trunk/Src/library/base/package.iron</code> .
end
Current status: </code>
* only the '''name of the package is required'''
* the section "project" list the various available .ecf projects Note: The package iron file for the Eiffel Base package is available online at <code>https://svn.eiffel.com/eiffelstudio/trunk/Src/library/base/package.iron</code> .
* the section "note" contains title, description, tags, ... informations. The formation is similar to Eiffel indexing note, and in addition it supports bracket in the name of note, such as in ''<nowiki>link[doc]</nowiki>''.
** The "link" declaration: <code>link[category]: "Optional Title" associated-url</code> Current status:
* The following notes have semantic that are processed by Iron: '''title, description, tags, link<nowiki>[..]</nowiki>, and maps''', for now mostly on the Iron server. * only the '''name of the package is required'''
* It is possible to use any note name. Currently they are simply stored and never displayed. In the future, Iron may support additional semantic for those notes. * the section "project" list the various available .ecf projects
* the section "note" contains title, description, tags, ... informations. The formation is similar to Eiffel indexing note, and in addition it supports bracket in the name of note, such as in ''<nowiki>link[doc]</nowiki>''.
A few packages may require '''post installation operations''', such as compiling C code, or others. ** The "link" declaration: <code>link[category]: "Optional Title" associated-url</code>
For that, use the section '''setup''', and in particular the '''compile_library''' information. * The following notes have semantic that are processed by Iron: '''title, description, tags, link<nowiki>[..]</nowiki>, and maps''', for now mostly on the Iron server.
During installation, '''iron''' will launch the <code>compile_library</code> tool delivered with EiffelStudio on the provided directory. * It is possible to use any note name. Currently they are simply stored and never displayed. In the future, Iron may support additional semantic for those notes.
Example at https://svn.eiffel.com/eiffelstudio/trunk/Src/library/cURL/package.iron : A few packages may require '''post installation operations''', such as compiling C code, or others.
<code> For that, use the section '''setup''', and in particular the '''compile_library''' information.
package cURL During installation, '''iron''' will launch the <code>compile_library</code> tool delivered with EiffelStudio on the provided directory.
setup Example at https://svn.eiffel.com/eiffelstudio/trunk/Src/library/cURL/package.iron :
compile_library = Clib <code>
... package cURL
</code>
setup
This <code>compile_library</code> tool relies on <code>finish_freezing -library</code> and thus process the <code>Makefile-win.SH or Makefile.SH</code>. compile_library = Clib
...
==Using your own IRON packages locally== </code>
There are various ways to use your own Eiffel package libraries:
* Using local location as it was currently done before 14.05 (i.e relative or absolute path, and eventually using an environment variable...). This <code>compile_library</code> tool relies on <code>finish_freezing -library</code> and thus process the <code>Makefile-win.SH or Makefile.SH</code>.
* Sharing the package on an IRON server, and then install it from that server:
** The default https://iron.eiffel.com/ is the recommended server ==Using your own IRON packages locally==
** But it is possible to host your own server easily. (server how-to documentation will be provided soon). There are various ways to use your own Eiffel package libraries:
* And there is another solution: local repository. * Using local location as it was currently done before 14.05 (i.e relative or absolute path, and eventually using an environment variable...).
* Sharing the package on an IRON server, and then install it from that server:
Local repositories rely heavily on the <code>package.iron</code> files. So if a folder is registered as iron repository, internally iron will search this folder recursively for package.iron files. ** The default https://iron.eiffel.com/ is the recommended server
** But it is possible to host your own server easily. (server how-to documentation will be provided soon).
Example on Windows: * And there is another solution: local repository.
<code>iron repository --add %ISE_LIBRARY%\library</code>
Local repositories rely heavily on the <code>package.iron</code> files. So if a folder is registered as iron repository, internally iron will search this folder recursively for package.iron files.
It should find and list all the official ISE IRON packages.
Now if you want to install the '''time''' package from it, just do Example on Windows:
<code lang="text"> <code>iron repository --add %ISE_LIBRARY%\library</code>
> iron install time
Searching [time] It should find and list all the official ISE IRON packages.
-> several packages for name [time]! Now if you want to install the '''time''' package from it, just do
1) time (https://iron.eiffel.com/14.05) "EiffelTime" <code lang="text">
2) time (file:///C:/EiffelDev/Src/library) > iron install time
> Select a package [1] (q=cancel): 2 Searching [time]
-> Install time (file:///C:/EiffelDev/Src/library) -> several packages for name [time]!
Installing [time (file:///C:/EiffelDev/Src/library)] -> successfully installed. 1) time (https://iron.eiffel.com/14.05) "EiffelTime"
</code> 2) time (file:///C:/EiffelDev/Src/library)
> Select a package [1] (q=cancel): 2
To make development easier, you may want to edit/update the repositories.conf file, in order to put that file://... local repository on the top. -> Install time (file:///C:/EiffelDev/Src/library)
<code> Installing [time (file:///C:/EiffelDev/Src/library)] -> successfully installed.
> iron path </code>
C:\Users\jfiat\Documents\Eiffel User Files\14.05\iron
and then edit "C:\Users\jfiat\Documents\Eiffel User Files\14.05\iron\repositories.conf" To make development easier, you may want to edit/update the repositories.conf file, in order to put that file://... local repository on the top.
</code> <code>
> iron path
*However, unless you are using the iron tool in batch mode ( <code>--batch</code> flag ), you will be asked to choose which package you want to install. C:\Users\jfiat\Documents\Eiffel User Files\14.05\iron
*You can also use the EiffelStudio "Add Library" dialog via the "Iron" tab, to install, uninstall the various packages. and then edit "C:\Users\jfiat\Documents\Eiffel User Files\14.05\iron\repositories.conf"
*And last solution, you can use the full url as: </code>
> iron install file:///C:/EiffelDev/Src/library/time
*However, unless you are using the iron tool in batch mode ( <code>--batch</code> flag ), you will be asked to choose which package you want to install.
Of course, do not forget that local repository should be used only for code in progress, otherwise you should share that library and use it as a simple user. One of the goal of IRON is to encourage people sharing their libraries with other Eiffel users. *You can also use the EiffelStudio "Add Library" dialog via the "Iron" tab, to install, uninstall the various packages.
*And last solution, you can use the full url as:
==Sharing Your Packages== > iron install file:///C:/EiffelDev/Src/library/time
To build and share your own packages on an IRON server, you will need a user account on that IRON server which will host your packages.
Please visit https://iron.eiffel.com/repository/account/?register to create a new account. Of course, do not forget that local repository should be used only for code in progress, otherwise you should share that library and use it as a simple user. One of the goal of IRON is to encourage people sharing their libraries with other Eiffel users.
As usual, to see the available options, use: ==Sharing Your Packages==
<code> iron share --help</code> To build and share your own packages on an IRON server, you will need a user account on that IRON server which will host your packages.
Please visit https://iron.eiffel.com/repository/account/?register to create a new account.
Example:
As usual, to see the available options, use:
To build the '''gps_nmea''' package from your library <code>c:\eiffel\library\gps_nmea\</code> : <code> iron share --help</code>
<code> Example:
iron share create --username <your_id> --password <your_password>
--repository https://iron.eiffel.com/14.05 To build the '''gps_nmea''' package from your library <code>c:\eiffel\library\gps_nmea\</code> :
--package "c:\eiffel\library\gps_nmea\package.iron" --package-name "gps_nmea"
</code> <code>
iron share create --username <your_id> --password <your_password>
This command will: --repository https://iron.eiffel.com/14.05
* create a new package named '''gps_nmea''' on iron repository '''https://iron.eiffel.com/14.05''', --package "c:\eiffel\library\gps_nmea\package.iron" --package-name "gps_nmea"
* using the local package '''c:\eiffel\library\gps_nmea''' (i.e: you need to provide the package.iron file) </code>
Note: This command will:
* the --package-name is for now required, even if the package.iron already provides such information. * create a new package named '''gps_nmea''' on iron repository '''https://iron.eiffel.com/14.05''',
* see the <code>iron share --help</code> for advanced usage (such as --index, --package-archive-source, ...). * using the local package '''c:\eiffel\library\gps_nmea''' (i.e: you need to provide the package.iron file)
After adding such a package to the library, it is recommended that you go to the website, double check that the package was created they way you wanted it to be, and you can edit its information. Note:
Then, using the iron executable, install the package on your system, and go through the steps of using it in an Eiffel project, and correct any problems discovered, to verify that end users will be able to productively use your package. * the --package-name is for now required, even if the package.iron already provides such information.
* see the <code>iron share --help</code> for advanced usage (such as --index, --package-archive-source, ...).
It is also '''''strongly''''' encouraged to include (or provide a link to) documentation that orients the user to its use, and answers basic questions such as: What is the package? What motivated you to create it? What problem(s) does it address? Under what circumstances can the package be productively used? Under what circumstances should it ''not'' be used (if applicable)? And some basic examples of its use. If the package is complex, it can be very helpful to include a well-commented application that demonstrates intended reuse of the package in software.
After adding such a package to the library, it is recommended that you go to the website, double check that the package was created they way you wanted it to be, and you can edit its information.
Important note: having clear documentation that enables end users to easily learn how to use your package is a VITAL link in the ability to reuse software components as is so aptly described in ''[[uuid:496983ef-b86e-772e-16b9-39b37ef80e37|Object&#8209;Oriented&nbsp;Software&nbsp;Construction,&nbsp;2nd&nbsp;Edition]]'', in the Modular Understand-ability criterion: Then, using the iron executable, install the package on your system, and go through the steps of using it in an Eiffel project, and correct any problems discovered, to verify that end users will be able to productively use your package.
:''''' "A method favors Modular Understand-ability if it helps produce software in which a human reader can understand each module without having to know the others, or, at worst, by having to examine only a few of the others." ''''' It is also '''''strongly''''' encouraged to include (or provide a link to) documentation that orients the user to its use, and answers basic questions such as: What is the package? What motivated you to create it? What problem(s) does it address? Under what circumstances can the package be productively used? Under what circumstances should it ''not'' be used (if applicable)? And some basic examples of its use. If the package is complex, it can be very helpful to include a well-commented application that demonstrates intended reuse of the package in software.
and the Self-Documentation Principle: Important note: having clear documentation that enables end users to easily learn how to use your package is a VITAL link in the ability to reuse software components as is so aptly described in ''[[uuid:496983ef-b86e-772e-16b9-39b37ef80e37|Object&#8209;Oriented&nbsp;Software&nbsp;Construction,&nbsp;2nd&nbsp;Edition]]'', in the Modular Understand-ability criterion:
:''''' "The designer of a module should strive to make all information about the module part of the module itself." ''''' :''''' "A method favors Modular Understand-ability if it helps produce software in which a human reader can understand each module without having to know the others, or, at worst, by having to examine only a few of the others." '''''
The point: reuse is only possible when end users can easily and quickly learn how to reuse software components available to them. and the Self-Documentation Principle:
=Origin of the Name IRON= :''''' "The designer of a module should strive to make all information about the module part of the module itself." '''''
As many readers will know, the name "Eiffel" was chosen to reflect the elegance and soundness of constructing large, complex software systems, with '''simple, individual components, each of which is a unit by itself and has its own existence, and can be tested for integrity as a separate unit, but its role in the larger scheme of things is to be used as a "building block"''' for constructing high-integrity software systems. The picture on the front of the book ''[[uuid:496983ef-b86e-772e-16b9-39b37ef80e37|Object&#8209;Oriented&nbsp;Software&nbsp;Construction,&nbsp;2nd&nbsp;Edition]]'' illustrates this. The point: reuse is only possible when end users can easily and quickly learn how to reuse software components available to them.
This of course is intentionally meant as a direct parallel to the famous structure built by the architect and civil engineer Alexandre Gustave Eiffel. This structure was constructed with '''simple, individual components, each of which is a unit by itself and has its own existence, and can be tested for integrity as a separate unit, but its role in the larger scheme of things is to be used as a "building block"''' for constructing a high-integrity structure: the Eiffel Tower. =Origin of the Name IRON=
As a parallel to this, "IRON", as a name, was chosen to reflect the fact that the individual building blocks were themselves made from iron. In the Eiffel world, constructing a large complex software system is done with libraries of high-quality reusable components. Thus, the "building blocks" are made from iron, and software systems are made from those building blocks. Hence, IRON provides the "raw material" from which complex Eiffel systems are developed. As many readers will know, the name "Eiffel" was chosen to reflect the elegance and soundness of constructing large, complex software systems, with '''simple, individual components, each of which is a unit by itself and has its own existence, and can be tested for integrity as a separate unit, but its role in the larger scheme of things is to be used as a "building block"''' for constructing high-integrity software systems. The picture on the front of the book ''[[uuid:496983ef-b86e-772e-16b9-39b37ef80e37|Object&#8209;Oriented&nbsp;Software&nbsp;Construction,&nbsp;2nd&nbsp;Edition]]'' illustrates this.
=Planned Enhancements= This of course is intentionally meant as a direct parallel to the famous structure built by the architect and civil engineer Alexandre Gustave Eiffel. This structure was constructed with '''simple, individual components, each of which is a unit by itself and has its own existence, and can be tested for integrity as a separate unit, but its role in the larger scheme of things is to be used as a "building block"''' for constructing a high-integrity structure: the Eiffel Tower.
This documentation describes the version of iron released with EiffelStudio 14.05.
More features are planned or are already under development: As a parallel to this, "IRON", as a name, was chosen to reflect the fact that the individual building blocks were themselves made from iron. In the Eiffel world, constructing a large complex software system is done with libraries of high-quality reusable components. Thus, the "building blocks" are made from iron, and software systems are made from those building blocks. Hence, IRON provides the "raw material" from which complex Eiffel systems are developed.
:* the ability to analyze the contents of the package, to extract information related to its .ECF file(s)
:* a way of ensuring that the package compiles under the specified version of EiffelStudio =Planned Enhancements=
:* support for test suite This documentation describes the version of iron released with EiffelStudio 14.05.
:* detection and actions related to package dependencies More features are planned or are already under development:
:* package version :* the ability to analyze the contents of the package, to extract information related to its .ECF file(s)
:* ability to upgrade of packages already installed :* a way of ensuring that the package compiles under the specified version of EiffelStudio
:* extended post-installation operations :* support for test suite
:* more features that users may request or suggest. :* detection and actions related to package dependencies
:* package version
:* ability to upgrade of packages already installed
:* extended post-installation operations
:* more features that users may request or suggest.