From 4e06893808a4f0268ab17bc8515e2c5005047c50 Mon Sep 17 00:00:00 2001 From: jfiat Date: Sat, 28 Dec 2019 20:03:38 +0000 Subject: [PATCH] merged from 19.05 git-svn-id: https://svn.eiffel.com/eiffel-org/trunk@2228 abb3cda0-5349-4a8f-a601-0c33ac3a8c38 --- .../Expressions/Conditional-expression.wiki | 6 +- ...l-programming-language-reserved-words.wiki | 33 +- .../eiffel-programming-language-syntax.wiki | 20 +- ...myths-and-misconceptions-about-eiffel.wiki | 6 +- .../eiffel/Overview/learning-eiffel.wiki | 5 +- ...ur_-_Eiffel_Software_Technical_Report.wiki | 38 + .../Reusable-Software.wiki | 33 + ...ng-program-well-objects-and-contracts.wiki | 4 +- .../eiffel-tutorial-et/et-instructions.wiki | 18 +- .../et-other-mechanisms.wiki | 4 +- .../manual-identification-and-copyright.wiki | 40 +- .../Tutorials/starting-browse.wiki | 4 +- .../compiler/compiler-history/index.wiki | 4 + ...ng-and-eiffel-software-implementation.wiki | 70 +- ...67-and-eiffel-software-implementation.wiki | 14 +- .../compiler/supported-c-compilers.wiki | 19 +- .../eiffelstudio-editor/Code-Templates.wiki | 4 +- .../windows.wiki | 25 + documentation/trunk/index.wiki | 4 +- .../basic-computing/eiffelbase/ifell.wiki | 11 +- documentation/trunk/solutions/index.wiki | 6 +- .../iron-eiffel-package-repository.wiki | 924 +++++++++--------- 22 files changed, 696 insertions(+), 596 deletions(-) create mode 100644 documentation/trunk/eiffel/Technical_papers/books-about-eiffel-method-and-language/EiffelStudio-_A_Guided_Tour_-_Eiffel_Software_Technical_Report.wiki create mode 100644 documentation/trunk/eiffel/Technical_papers/books-about-eiffel-method-and-language/Reusable-Software.wiki diff --git a/documentation/trunk/eiffel/Language_reference/quick-reference-eiffel-programming-language/Expressions/Conditional-expression.wiki b/documentation/trunk/eiffel/Language_reference/quick-reference-eiffel-programming-language/Expressions/Conditional-expression.wiki index a096da5e..e80bb55a 100644 --- a/documentation/trunk/eiffel/Language_reference/quick-reference-eiffel-programming-language/Expressions/Conditional-expression.wiki +++ b/documentation/trunk/eiffel/Language_reference/quick-reference-eiffel-programming-language/Expressions/Conditional-expression.wiki @@ -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:weight|0]] [[Property:title|Conditional expression]] [[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: if time < noon then @@ -17,7 +19,7 @@ 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. if time < noon then diff --git a/documentation/trunk/eiffel/Language_reference/quick-reference-eiffel-programming-language/eiffel-programming-language-reserved-words.wiki b/documentation/trunk/eiffel/Language_reference/quick-reference-eiffel-programming-language/eiffel-programming-language-reserved-words.wiki index 44d0df03..db3328cf 100644 --- a/documentation/trunk/eiffel/Language_reference/quick-reference-eiffel-programming-language/eiffel-programming-language-reserved-words.wiki +++ b/documentation/trunk/eiffel/Language_reference/quick-reference-eiffel-programming-language/eiffel-programming-language-reserved-words.wiki @@ -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:link_title|Reserved words]] [[Property:weight|1]] @@ -152,12 +154,16 @@ Introduces a sequence of instructions as a routine body, as shown in the [[ET: H ===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#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 or else, the semi-strict disjunction operator. :[[Eiffel programming language syntax#Operators|Syntax.]] @@ -169,10 +175,14 @@ Used after the reserved word [[#require|require]] as a precondition ===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.]] +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=== @@ -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#Conditionals|Conditional 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#Debug instructions|Debug instructions]] @@ -258,9 +269,13 @@ Used with a formal generic parameter to indicate that conformance of generic der ===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=== @@ -277,7 +292,7 @@ Used in an [[ET: Inheritance|inherit]] clause. ===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.]] @@ -437,12 +452,16 @@ Reserved for future use. ===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#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 and then, the semi-strict conjunction operator. :[[Eiffel programming language syntax#Operators|Syntax.]] @@ -494,7 +513,7 @@ A predefined entity name representing a [[ET: The Dynamic Structure: Execution M ===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.]] diff --git a/documentation/trunk/eiffel/Language_reference/quick-reference-eiffel-programming-language/eiffel-programming-language-syntax.wiki b/documentation/trunk/eiffel/Language_reference/quick-reference-eiffel-programming-language/eiffel-programming-language-syntax.wiki index 6a79dea6..010192e2 100644 --- a/documentation/trunk/eiffel/Language_reference/quick-reference-eiffel-programming-language/eiffel-programming-language-syntax.wiki +++ b/documentation/trunk/eiffel/Language_reference/quick-reference-eiffel-programming-language/eiffel-programming-language-syntax.wiki @@ -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:title|Eiffel programming language 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. +===New line=== + +A specimen of New_line is a New Line. ==Eiffel BNF-E Syntax== @@ -334,12 +337,14 @@ Assertion ::= {Assertion_clause ";" ...}* Assertion_clause ::= [Tag_mark] Unlabeled_assertion_clause -Unlabeled_assertion_clause ::= [[#Expressions|Boolean_expression]] | [[#Comments|Comment]] +Unlabeled_assertion_clause ::= [[#Expressions|Boolean_expression]] | [[#Comments|Comment]] | `class` Tag_mark ::= Tag ":" 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 ::= old [[#Expressions|Expression]] @@ -702,16 +707,11 @@ Verbatim_string_closer ::= Close_bracket [[[#Simple strings|Sim Open_bracket ::= "[" | "{" -Close_bracket ::= "]" | "}"Verbatim_string ::= Verbatim_string_opener Line_sequence Verbatim_string_closer +Close_bracket ::= "]" | "}" -Verbatim_string_opener ::= ' " ' [[[#Simple strings|Simple_string]]] Open_bracket - -Verbatim_string_closer ::= Close_bracket [[[#Simple strings|Simple_string]]] ' " ' - -Open_bracket ::= "[" | "{" - -Close_bracket ::= "]" | "}" +Line_sequence ::= {[[#Simple strings|Simple_string]] [[#New line|New_line]] ...}+ +{{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 ::= external External_language [External_name] diff --git a/documentation/trunk/eiffel/Overview/common-myths-and-misconceptions-about-eiffel.wiki b/documentation/trunk/eiffel/Overview/common-myths-and-misconceptions-about-eiffel.wiki index cc114aed..e5f5c062 100644 --- a/documentation/trunk/eiffel/Overview/common-myths-and-misconceptions-about-eiffel.wiki +++ b/documentation/trunk/eiffel/Overview/common-myths-and-misconceptions-about-eiffel.wiki @@ -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:link_title|]] [[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 Eiffel’s market share ''is'' considerably smaller than that of Visual Basic. -Despite that, it’s 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, it’s 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. @@ -65,7 +67,7 @@ And of course, it’s 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. -It’s possible that twenty-five years from now, there will be a significantly better software engineering idea … but certainly there hasn’t been anything that’s come close since Eiffel’s original design in 1985. In most areas, other technologies are playing “catch-up” to Eiffel. +It’s possible that twenty-five years from now, there will be a significantly better software engineering idea … but certainly, there hasn’t been anything that’s come close since Eiffel’s 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. diff --git a/documentation/trunk/eiffel/Overview/learning-eiffel.wiki b/documentation/trunk/eiffel/Overview/learning-eiffel.wiki index 470d4792..bea25cb0 100644 --- a/documentation/trunk/eiffel/Overview/learning-eiffel.wiki +++ b/documentation/trunk/eiffel/Overview/learning-eiffel.wiki @@ -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:title|Learning Eiffel]] [[Property:weight|3]] @@ -12,7 +12,7 @@ Your first stop in getting acquainted with Eiffel might be the collection of [ht =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== @@ -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. +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"]]. diff --git a/documentation/trunk/eiffel/Technical_papers/books-about-eiffel-method-and-language/EiffelStudio-_A_Guided_Tour_-_Eiffel_Software_Technical_Report.wiki b/documentation/trunk/eiffel/Technical_papers/books-about-eiffel-method-and-language/EiffelStudio-_A_Guided_Tour_-_Eiffel_Software_Technical_Report.wiki new file mode 100644 index 00000000..06a7f2c6 --- /dev/null +++ b/documentation/trunk/eiffel/Technical_papers/books-about-eiffel-method-and-language/EiffelStudio-_A_Guided_Tour_-_Eiffel_Software_Technical_Report.wiki @@ -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 == + +:'''Bertrand Meyer''' + +: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]]}} diff --git a/documentation/trunk/eiffel/Technical_papers/books-about-eiffel-method-and-language/Reusable-Software.wiki b/documentation/trunk/eiffel/Technical_papers/books-about-eiffel-method-and-language/Reusable-Software.wiki new file mode 100644 index 00000000..0dbb7ad0 --- /dev/null +++ b/documentation/trunk/eiffel/Technical_papers/books-about-eiffel-method-and-language/Reusable-Software.wiki @@ -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]] + +:'''Bertrand Meyer''' + +: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]] }} + diff --git a/documentation/trunk/eiffel/Technical_papers/books-about-eiffel-method-and-language/touch-class-learning-program-well-objects-and-contracts.wiki b/documentation/trunk/eiffel/Technical_papers/books-about-eiffel-method-and-language/touch-class-learning-program-well-objects-and-contracts.wiki index b5299fa1..5ecaafe3 100644 --- a/documentation/trunk/eiffel/Technical_papers/books-about-eiffel-method-and-language/touch-class-learning-program-well-objects-and-contracts.wiki +++ b/documentation/trunk/eiffel/Technical_papers/books-about-eiffel-method-and-language/touch-class-learning-program-well-objects-and-contracts.wiki @@ -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:title|Touch of Class: Learning to Program Well with Objects and Contracts]] [[Property:weight|-1]] @@ -8,7 +10,7 @@ =='''''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. diff --git a/documentation/trunk/eiffel/Tutorials/eiffel-tutorial-et/et-instructions.wiki b/documentation/trunk/eiffel/Tutorials/eiffel-tutorial-et/et-instructions.wiki index a9c79262..65b4a617 100644 --- a/documentation/trunk/eiffel/Tutorials/eiffel-tutorial-et/et-instructions.wiki +++ b/documentation/trunk/eiffel/Tutorials/eiffel-tutorial-et/et-instructions.wiki @@ -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:weight|-6]] [[Property:uuid|628bf3db-728f-0b3c-bdbb-fe52deaae5b7]] @@ -104,11 +106,7 @@ Here's one example: and the other: - across - my_list as ic - loop - print (ic.item) - end + across my_list as ic loop print (ic.item) end ''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: - from - my_list.start - until - my_list.off - loop - print (my_list.item) - my_list.forth - end + from my_list.start until my_list.off + loop print (my_list.item) my_list.forth end 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. diff --git a/documentation/trunk/eiffel/Tutorials/eiffel-tutorial-et/et-other-mechanisms.wiki b/documentation/trunk/eiffel/Tutorials/eiffel-tutorial-et/et-other-mechanisms.wiki index 6149707e..3ccc0d6c 100644 --- a/documentation/trunk/eiffel/Tutorials/eiffel-tutorial-et/et-other-mechanisms.wiki +++ b/documentation/trunk/eiffel/Tutorials/eiffel-tutorial-et/et-other-mechanisms.wiki @@ -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:weight|-4]] [[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, 1, to provide an initial value for my_index. In particular, this is a manifest integer. -Eiffel also supports [[Eiffel Programming Language Syntax#Manifest constants|manifest constants]] for real (and double) numbers (ex: 3.1415), boolean values (ex: True, False), and characters (ex: 'A', with [[Eiffel programming language syntax#Special characters|special characters]] expressed using a percent sign as in '%N' for new line, '%B' for backspace, '%"' for double quote, and '%U' for null). +Eiffel also supports [[Eiffel_programming_language_syntax#Manifest_constants|manifest constants]] for real (and double) numbers (ex: 3.1415), boolean values (ex: True, False), and characters (ex: 'A', with [[Eiffel programming language syntax#Special characters|special characters]] expressed using a percent sign as in '%N' for new line, '%B' for backspace, '%"' for double quote, and '%U' for null). Manifest constants are also available for strings, using double quotes as in: "Hello world!". As with character constants, special characters are denoted using the % codes. diff --git a/documentation/trunk/eiffelstudio/Tutorials/manual-identification-and-copyright.wiki b/documentation/trunk/eiffelstudio/Tutorials/manual-identification-and-copyright.wiki index 2e3ac457..8746fab5 100644 --- a/documentation/trunk/eiffelstudio/Tutorials/manual-identification-and-copyright.wiki +++ b/documentation/trunk/eiffelstudio/Tutorials/manual-identification-and-copyright.wiki @@ -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:weight|7]] [[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=== -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] An Object-Oriented Environment (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 An Object-Oriented Environment (Prentice Hall, 1994, ISBN 0-13-245-507-2. 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=== -Degree-granting educational institutions using EiffelStudio teaching purposes as part of the [http://www.eiffel.com/educators/resources.html Eiffel University Partnership Program] may be permitted under certain conditions to copy specific parts of this book. Contact Eiffel Software for details. -{| -|- -|
'''About Eiffel Software '''
-|- -| -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
-
-Interactive Software Engineering Inc.
-Eiffel Software Building, 360 Storke Road
-Goleta, CA 93117 USA
-Telephone 805-685-1006, Fax 805-685-6869
-
-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. - -|} - - - +Degree-granting educational institutions using EiffelStudio teaching purposes as part of the Eiffel University Partnership Program may be permitted under certain conditions to copy specific parts of this book. Contact [https://www.eiffel.com Eiffel Software] for details. diff --git a/documentation/trunk/eiffelstudio/Tutorials/starting-browse.wiki b/documentation/trunk/eiffelstudio/Tutorials/starting-browse.wiki index f0088c4f..9de37bb7 100644 --- a/documentation/trunk/eiffelstudio/Tutorials/starting-browse.wiki +++ b/documentation/trunk/eiffelstudio/Tutorials/starting-browse.wiki @@ -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:weight|-10]] [[Property:uuid|cb6c2e52-d238-9b55-0b78-ab3af9568550]] @@ -64,7 +66,7 @@ The most extensive subcluster of the EiffelBase library is structureslist, containing implementations of list structures. Expand the subcluster list. 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, list, containing implementations of list structures. Expand the subcluster list. 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]] diff --git a/documentation/trunk/eiffelstudio/eiffelstudio-reference/compiler/compiler-history/index.wiki b/documentation/trunk/eiffelstudio/eiffelstudio-reference/compiler/compiler-history/index.wiki index c4b84ff1..0b99ee4e 100644 --- a/documentation/trunk/eiffelstudio/eiffelstudio-reference/compiler/compiler-history/index.wiki +++ b/documentation/trunk/eiffelstudio/eiffelstudio-reference/compiler/compiler-history/index.wiki @@ -1,7 +1,11 @@ +[[Property:modification_date|Tue, 12 Nov 2019 13:31:36 GMT]] +[[Property:publication_date|Tue, 12 Nov 2019 13:20:00 GMT]] [[Property:title|Compiler History]] [[Property:weight|-8]] [[Property:uuid|359395e7-4933-bb74-4397-353c8b6955cd]] ==Compiler version history== +{{Warning|This page as not been maintained}} +{{Note|Please check the -> [[EiffelStudio_release_notes|EiffelStudio Release Notes]]}} \ No newline at end of file diff --git a/documentation/trunk/eiffelstudio/eiffelstudio-reference/compiler/differences-between-etl-2nd-printing-and-eiffel-software-implementation.wiki b/documentation/trunk/eiffelstudio/eiffelstudio-reference/compiler/differences-between-etl-2nd-printing-and-eiffel-software-implementation.wiki index 244c600e..34cc37f3 100644 --- a/documentation/trunk/eiffelstudio/eiffelstudio-reference/compiler/differences-between-etl-2nd-printing-and-eiffel-software-implementation.wiki +++ b/documentation/trunk/eiffelstudio/eiffelstudio-reference/compiler/differences-between-etl-2nd-printing-and-eiffel-software-implementation.wiki @@ -1,3 +1,5 @@ +[[Property:modification_date|Mon, 29 Jul 2019 05:54:09 GMT]] +[[Property:publication_date|Tue, 09 Jul 2019 08:25:22 GMT]] [[Property:title|Differences between ETL 2nd printing and Eiffel Software implementation]] [[Property:link_title|ETL 2nd printing vs implementation]] [[Property:weight|-9]] @@ -7,68 +9,46 @@ "ETL 2nd printing" refers to the book "Eiffel: The Language" (2nd printing), published by Prentice Hall. ==Added classes== -* New basic classes have been added: INTEGER_8, INTEGER_16, INTEGER_64 and WIDE_CHARACTER.{{seealso|[[Differences between standard ECMA-367 and Eiffel Software implementation|Differences between standard ECMA-367 and Eiffel Software implementation]] }} - -==Added classes== -* New basic classes have been added: INTEGER_8, INTEGER_16, INTEGER_64 and WIDE_CHARACTER. INTEGER is now specified as having a 32 bits representation -* New TUPLE, ROUTINE, PROCEDURE and FUNCTION classes required by the agent mechanism. +* New basic classes have been added: INTEGER_8, INTEGER_16, INTEGER_64, CHARACTER_32. INTEGER, CHARACTER, REAL, DOUBLE are aliases to INTEGER_32, CHARACTER_8, REAL_32, REAL_64. {{seealso|[[Differences between standard ECMA-367 and Eiffel Software implementation|Differences between standard ECMA-367 and Eiffel Software implementation]]}} +* New TUPLE, ROUTINE, PROCEDURE, FUNCTION, PREDICATE classes required by the agent mechanism. ==Added keywords== -* Precursor -* reference: new keyword to specify that a type is used as a reference type. -* agent: new keyword used by the agent mechanism. -* create: Instead of using the famous exclamation mark to create an instance of a class, you can use the keyword create. 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 -| create a -|- -| !! a.make -| create a.make -|- -| !B! a -| create {B} a -|- -| !B! a.make -| create {B} a.make -|} -* note: replacement for the keyword indexing. -* attribute: new keyword to declare attribute body. -* attached: new keyword to specify attached types and object tests. -* detachable: new keyword to specify detachable types. +* Precursor +* reference (now obsolete): a keyword to specify that a type is used as a reference type. +* agent: a keyword used by the agent mechanism. +* create: Instead of using the famous exclamation mark to create an instance of a class, you can use the keyword create. Below you will find a correspondence table between the old and the new syntaxes. The old syntax is still valid, but at some points Eiffel Software will remove it from its implementation: +** Old syntax `!! a` => new syntax `create a` +** Old syntax `!! a.make` => new syntax `create a.make` +** Old syntax `!B! a` => new syntax `create {B} a` +** Old syntax `!B! a.make` => new syntax `create {B} a.make` + +* note: replacement for the keyword indexing. +* attribute: a keyword to declare attribute body. +* attached: a keyword to specify attached types and object tests. +* detachable: a keyword to specify detachable types. ==Added semantics== * [[ET: Genericity and Arrays|Generic creation]] * Expression creation: you can now create an object within an expression. For example, you want to create an object and pass it as an argument to a function. Whereas you had to create a local variable, create the object and pass it to the function, you now simply need to pass to the function the creation expression. Here is a small example: -{| -|- -| Old method -| New method -|- -| +** Old method: local a: STRING do - !! a.make (10) + ‼ a.make (10) f (a) end - -| +** 'New method: do f (create {STRING}.make (10)) end -|} This is also very useful since it can improve the power of assertions. -* Mutually recursive constraints: one can now write class A [H, G->H] or class B [H -> C, G -> ARRAY [H]]. As a result, the declaration A [D, E] is valid only if E is a descendant of D. Similarly, the declaration B [E, ARRAY [D]] is not valid, if E is a descendant of D. +* Mutually recursive constraints: one can now write class `A [H, G->H]` or class `B [H -> C, G -> ARRAY [H]]`. As a result, the declaration `A [D, E]` is valid only if `E` is a descendant of `D`. Similarly, the declaration `B [E, ARRAY [D]]` is not valid, if `E` is a descendant of `D`. * [[ET: Other Mechanisms|Tuples]] * [[ET: Agents|Agents]] * Feature access:
@@ -83,13 +63,11 @@ end The previous call is valid, if and only if: ** value is a feature representing a constant of a basic type (INTEGER, DOUBLE or CHARACTER) ** value is a C/C++/DLL external feature -** value is an IL static external feature +** value is an IL static external feature +==Obsolete constructs== +* Explicit values should be used to specify constant attributes instead of keyword `unique`. ==Added external support== Look at the page for [[C externals|C]] and [[C++ Externals|C++]] with the introduction of `struct` and C++ external features encapsulation. - - - - diff --git a/documentation/trunk/eiffelstudio/eiffelstudio-reference/compiler/differences-between-standard-ecma-367-and-eiffel-software-implementation.wiki b/documentation/trunk/eiffelstudio/eiffelstudio-reference/compiler/differences-between-standard-ecma-367-and-eiffel-software-implementation.wiki index 5928c143..0a72d748 100644 --- a/documentation/trunk/eiffelstudio/eiffelstudio-reference/compiler/differences-between-standard-ecma-367-and-eiffel-software-implementation.wiki +++ b/documentation/trunk/eiffelstudio/eiffelstudio-reference/compiler/differences-between-standard-ecma-367-and-eiffel-software-implementation.wiki @@ -1,3 +1,5 @@ +[[Property:modification_date|Tue, 09 Jul 2019 09:52:07 GMT]] +[[Property:publication_date|Tue, 09 Jul 2019 09:46:53 GMT]] [[Property:title|Differences between standard ECMA-367 and Eiffel Software implementation]] [[Property:link_title|ECMA-367 vs implementation]] [[Property:weight|-10]] @@ -116,10 +118,10 @@ for free operator names | Yes |- | Bang-bang syntax -| !! a
-!! a.make
-!B! a
-!B! a.make +| !! a
+!! a.make
+!B! a
+!B! a.make | Yes | No | Yes, marked as obsolete @@ -196,13 +198,13 @@ reattachment | Yes |- | Assigner call -| x [i] := x [i] + 1 +| x [i] := x [i] + 1 | No | Yes | Yes |- | Bracket expression as call target -| x [i].update +| x [i].update | No | No | Yes diff --git a/documentation/trunk/eiffelstudio/eiffelstudio-reference/compiler/supported-c-compilers.wiki b/documentation/trunk/eiffelstudio/eiffelstudio-reference/compiler/supported-c-compilers.wiki index 43552ada..f745e39e 100644 --- a/documentation/trunk/eiffelstudio/eiffelstudio-reference/compiler/supported-c-compilers.wiki +++ b/documentation/trunk/eiffelstudio/eiffelstudio-reference/compiler/supported-c-compilers.wiki @@ -1,3 +1,5 @@ +[[Property:modification_date|Mon, 11 Nov 2019 19:13:26 GMT]] +[[Property:publication_date|Mon, 11 Nov 2019 19:13:26 GMT]] [[Property:title|Supported C compilers]] [[Property:weight|-14]] [[Property:uuid|4d4a70fa-b6da-cecb-83e0-dcc18d6ed54a]] @@ -52,7 +54,22 @@ Alternatively, you can set the environment variable ISE_C_COMP | Microsoft Visual Studio C++ 2015 (v14.0) | `msc_vc140` |- -| Microsoft Visual Studio C++ 2017 (v15.0) +| Microsoft Visual Studio C++ 2017 (v14.1) +| `msc_vc140` +|- +| Microsoft Visual Studio C++ 2019 (v14.2) | `msc_vc140` |- |} + +===Availability of free compilers=== + +'' Microsoft '' + +Download the free [https://visualstudio.microsoft.com/vs/community/|Visual Studio Community Edition] + +If required download [https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads|Microsoft Visual C++ Redistributable for Visual Studio 2015, 2017 and 2019]. + +'' MinGW '' + +Copy included with the Eiffel Software distribution. diff --git a/documentation/trunk/eiffelstudio/eiffelstudio-reference/eiffelstudio-editor/Code-Templates.wiki b/documentation/trunk/eiffelstudio/eiffelstudio-reference/eiffelstudio-editor/Code-Templates.wiki index 5b68617d..3afda6c7 100644 --- a/documentation/trunk/eiffelstudio/eiffelstudio-reference/eiffelstudio-editor/Code-Templates.wiki +++ b/documentation/trunk/eiffelstudio/eiffelstudio-reference/eiffelstudio-editor/Code-Templates.wiki @@ -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:link_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: * Standard templates, found in: ** Linux: $ISE_EIFFEL/studio/templates/code -** Eiffel: %ISE_EIFFEL%/studio/templates/code +** Windows: %ISE_EIFFEL%/studio/templates/code * User-defined templates, which you can add at: ** Linux: ~/.es/eiffel_user_files/16.11/templates/code ** Windows: C:/Users/your_user_name/Documents/Eiffel User Files/16.11/templates/code diff --git a/documentation/trunk/eiffelstudio/getting_started/setup-and-installation/software-installation-eiffelstudio/windows.wiki b/documentation/trunk/eiffelstudio/getting_started/setup-and-installation/software-installation-eiffelstudio/windows.wiki index de987469..dffe9e45 100644 --- a/documentation/trunk/eiffelstudio/getting_started/setup-and-installation/software-installation-eiffelstudio/windows.wiki +++ b/documentation/trunk/eiffelstudio/getting_started/setup-and-installation/software-installation-eiffelstudio/windows.wiki @@ -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:weight|9]] [[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'''. +== 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== 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. diff --git a/documentation/trunk/index.wiki b/documentation/trunk/index.wiki index 696a02c8..0e4ed91b 100644 --- a/documentation/trunk/index.wiki +++ b/documentation/trunk/index.wiki @@ -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:title|Documentation]] [[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]]. ** [[EiffelStudio tutorials]] ** [[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... ** Packages ** Tools diff --git a/documentation/trunk/solutions/basic-computing/eiffelbase/ifell.wiki b/documentation/trunk/solutions/basic-computing/eiffelbase/ifell.wiki index 03a8a584..300b73e4 100644 --- a/documentation/trunk/solutions/basic-computing/eiffelbase/ifell.wiki +++ b/documentation/trunk/solutions/basic-computing/eiffelbase/ifell.wiki @@ -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: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. @@ -11,7 +14,7 @@ We hope that others will be inspired by this example to release their own reusab ==Preamble== (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: * 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. '''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: @@ -73,7 +76,7 @@ This is the official license text. * 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. * 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. -* 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. +* 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. diff --git a/documentation/trunk/solutions/index.wiki b/documentation/trunk/solutions/index.wiki index 58d85ba2..c73ad30c 100644 --- a/documentation/trunk/solutions/index.wiki +++ b/documentation/trunk/solutions/index.wiki @@ -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:weight|3]] [[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. This includes: +* The documentation for the Eiffel IRON repository * The documentation for the Eiffel class libraries ** Tutorials and/or user guides ** Class references -- the library, cluster, and class views diff --git a/documentation/trunk/solutions/iron-eiffel-package-repository.wiki b/documentation/trunk/solutions/iron-eiffel-package-repository.wiki index c704d47e..4f8dcdbb 100644 --- a/documentation/trunk/solutions/iron-eiffel-package-repository.wiki +++ b/documentation/trunk/solutions/iron-eiffel-package-repository.wiki @@ -1,460 +1,464 @@ -[[Property:title|IRON: Eiffel package repository]] -[[Property:link_title|IRON packages]] -[[Property:weight|0]] -[[Property:uuid|393EFF7D-49DF-472C-89CE-7E0970F1A96A]] -{{ReviewRequested}} - -=Purpose= - -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. - -{{definition|IRON|a package management solution based on repositories.}} - - -=Package Repository vs Library Repository= - -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. - -{{Definition|package|a downloadable unit of software from an IRON repository that contains one or more Eiffel libraries and their related files.}} - - -=Application to .ecf files= -: Empowering Teams of Developers - -To configure Eiffel projects, programmers uses "ECFs" (Eiffel Configuration Files -- Microsoft Visual Studio users can think of "solution 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, ... - -Typical library references without IRON in 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. - -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. -** an IRON uri has the form: iron:package-name:relative-path-to-file.ecf -** 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. - -That's all! In the above example, the location of the libraries, in the project, then become something like: - - - - - - -There is no more need for a set of environment variables. - -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. - -However, to get information about IRON location, use the command: iron path ... -:{| class="wikitable" -|- -! Command -! Result -! Example -|- -| iron path -| Base directory of IRON (~ IRON_PATH variable) -| C:\Users\jfiat\Documents\Eiffel User Files\14.05\iron -|- -| iron path base -| location of installed package base -| C:\Users\jfiat\Documents\Eiffel User Files\14.05\iron\packages\base -|- -| iron path xml -| location of installed package xml -| C:\Users\jfiat\Documents\Eiffel User Files\14.05\iron\packages\xml -|} - -Notes: -* It is possible to override the default location of IRON installation directory, by setting the environment variable IRON_PATH or ISE_IRON_PATH. -* 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. - -https://iron.eiffel.com/14.05/com.eiffel/library/base/base.ecf -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 - - -But this implies putting the version in the url (i.e 14.05), or you could set ISE_LIBRARY to https://iron.eiffel.com/14.05/com.eiffel - -= 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. -Additionally, it permits easy maintenance of a local list of IRON repositories. - -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 (example: https://iron.eiffel.com/14.05 ). - -The IRON facility consists of three parts: - -* A default repository at https://iron.eiffel.com/14.05 (provides the web API and web interface for the repositories that are stored there; you can add other IRON servers as they become available). - -* The '''iron''' executable utility on the local machine (installed with EiffelStudio, the program that interacts with the repositories). - -* 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. - -=How to Use IRON= -== Install wanted Eiffel packages == -Using the EiffelStudio command prompt (installed with EiffelStudio), execute the IRON command to install the packages you want to use: - - iron install - -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. - -== Add reference to install package libraries == -Simply add the library with IRON uri iron:package-name:relative-path-to-file.ecf, 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: - - Project Settings -> -> Groups -> 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. -Note that you have an easy way to install, remove IRON packages from the '''Iron''' tab of the "Add Library" dialog. - -* The default and recommended location for a IRON package library is the IRON uri: - iron:package-name:relative-path-to-file.ecf - -* It is also possible to use the absolute URL in the IRON repository such as: - https://iron.eiffel.com/14.05/com.eiffel/library/base/base.ecf - -* And an other solution, would be to use the IRON_PATH environment variable to locate the install libraries, such as: - $IRON_PATH\packages\base\base.ecf - -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. - -== External dependencies == -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. - -== Optional == -If you do not define one of these environment variables, the location used is: -By default the base directory for IRON is under //iron , but it is possible to overwrite this value by setting the environment variable IRON_PATH (or ISE_IRON_PATH). Note that if the physical location does not exists, the local '''iron''' executable will create it. - -Setting IRON_PATH, can be a way to setup different development environments (with different registered repositories, ...) - -=How to Get Information About IRON Packages= -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/ . - -* This page lists the repository versions available. -* Select the version that matches the version of EiffelStudio you have installed. -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. - -If you click the "Package list" or "All packages" link, it takes you to a list of packages available under that version. - -== Search/filter== -To filter this list, you can use the search window. You can specify search criteria in this format :criterion:search_string - -Criteria available: - -:{| class="wikitable" -|- -! Criterion -! Meaning -|- -| name -| string is contained in package name (wildcards are supported) -|- -| title -| string is contained in title -|- -| tag -| package contains search_string in its tags (i.e. keywords) -|- -| downloads -| has at least N downloads, e.g. downloads:25 -|} -If a criterion is omitted, '''name''' is used by default. -'''Operators available''': or, and, not (example: name:er and not name:parser) - -Finally, when you have found the package you want, click on its title, and the page displayed will contain detailed information about the package. - -== Associated paths == -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: - -/14.05/com.eiffel/library/base -/14.05/com.eiffel/library/data_structure/adt/base - - -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: - -https://iron.eiffel.com/14.05/com.eiffel/library/base/base.ecf -or https://iron.eiffel.com/14.05/com.eiffel/library/data_structure/adt/base/base.ecf - - -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: - -> iron install base -or -> iron install https://iron.eiffel.com/14.05/com.eiffel/library/base - - -'''IMPORTANT''': those associated URIs may be deprecated soon with the use of IRON uri iron:base:base.ecf. - -=Using IRON from the Command Line= -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/. - -==Quick Help from the Command Line== -*iron help -:lists the actions that are available. - -*iron --help -: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 Summary== - -:{| class="wikitable" -|- -! Action -! Meaning -|- -| update -| updates cached package information -|- -| list -| displays a list of available packages, and whether they are installed -|- -| search -| searches for a specified packages -|- -| info -| displays information about a specified packages -|- -| install -| installs specified packages -|- -| remove -| removes specified packages -|- -| repository -| manages repository list -|- -| share -| share and manage your packages (an account on the IRON server is required) -|} - - -==Examples== - -===Update cached iron repository information=== - iron update - - -===Display information about package=== -:For instance for the '''api_wrapper''' package: - iron info api_wrapper - -:If the package is installed, the installation path will also be displayed. - -===Search for a package by name, ID or URI=== -:(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]): - iron search base - - -===List available packages=== - iron list - - -===List installed packages=== - iron list --installed - - -===Install a package=== - iron install base - -(or iron install https://iron.eiffel.com/14.05/com.eiffel/library/base) - -:(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".) - -===Uninstall a package=== - iron remove base - - -===Install all available packages=== - iron install --all - - -===Uninstall all installed packages=== - iron remove --all - - -=Advanced Usage= -==Managing Multiple Repositories== - -It is possible to have more than one IRON repository server registered. -Examples: - -iron repository --list -iron repository --add https://iron.eiffel.com/14.05 -iron repository --add https://custom.example.com/14.05 -iron repository --add C:\eiffel\my_repository -iron repository --remove https://custom.example.com/14.05 - - -===Multiple-Repository Name Conflict Resolution=== - -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. - -If the sequence of repositories is not to your liking, you can change it in three ways: - -:* use the iron executable to remove and add repositories to re-sequence them, or -:* 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 //iron/ 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.) - -==Building a package== -An IRON package has to provide, at its root, a file package.iron. This file describes the package with name, description, and various other information. -See for instance, the package.iron for Eiffel Base package: - -package base - -project - base_safe = "base-safe.ecf" - base = "base.ecf" - base_testing = "testing/testing-safe.ecf" - base_testing = "testing/testing.ecf" - -note - title: Eiffel Base - description: "Eiffel Base: kernel library classes, data structure, Input and Output" - - tags: base,kernel,structure,io - license: Eiffel Forum License v2 - copyright: 1984-2013 Eiffel Software and others - link[doc]: "Documentation" http://eiffelroom.com/ - link[source]: "Subversion" https://svn.eiffel.com/eiffelstudio/trunk/Src/library/base - link[license]: http://www.eiffel.com/licensing/forum.txt - maps: /com.eiffel/library/data_structure/adt/base - -end - - -Note: The package iron file for the Eiffel Base package is available online at https://svn.eiffel.com/eiffelstudio/trunk/Src/library/base/package.iron . - -Current status: -* only the '''name of the package is required''' -* 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 ''link[doc]''. -** The "link" declaration: link[category]: "Optional Title" associated-url -* The following notes have semantic that are processed by Iron: '''title, description, tags, link[..], and maps''', for now mostly on the Iron server. -* 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. - -A few packages may require '''post installation operations''', such as compiling C code, or others. -For that, use the section '''setup''', and in particular the '''compile_library''' information. -During installation, '''iron''' will launch the compile_library tool delivered with EiffelStudio on the provided directory. - -Example at https://svn.eiffel.com/eiffelstudio/trunk/Src/library/cURL/package.iron : - -package cURL - -setup - compile_library = Clib -... - - -This compile_library tool relies on finish_freezing -library and thus process the Makefile-win.SH or Makefile.SH. - -==Using your own IRON packages locally== -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...). -* Sharing the package on an IRON server, and then install it from that server: -** 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). -* And there is another solution: local repository. - -Local repositories rely heavily on the package.iron files. So if a folder is registered as iron repository, internally iron will search this folder recursively for package.iron files. - -Example on Windows: -iron repository --add %ISE_LIBRARY%\library - -It should find and list all the official ISE IRON packages. -Now if you want to install the '''time''' package from it, just do - -> iron install time -Searching [time] --> several packages for name [time]! - 1) time (https://iron.eiffel.com/14.05) "EiffelTime" - 2) time (file:///C:/EiffelDev/Src/library) - > Select a package [1] (q=cancel): 2 --> Install time (file:///C:/EiffelDev/Src/library) -Installing [time (file:///C:/EiffelDev/Src/library)] -> successfully installed. - - -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. - -> iron path -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" - - -*However, unless you are using the iron tool in batch mode ( --batch flag ), you will be asked to choose which package you want to install. -*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: - > iron install file:///C:/EiffelDev/Src/library/time - -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. - -==Sharing Your Packages== -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. - -As usual, to see the available options, use: - iron share --help - -Example: - -To build the '''gps_nmea''' package from your library c:\eiffel\library\gps_nmea\ : - - -iron share create --username --password - --repository https://iron.eiffel.com/14.05 - --package "c:\eiffel\library\gps_nmea\package.iron" --package-name "gps_nmea" - - -This command will: -* create a new package named '''gps_nmea''' on iron repository '''https://iron.eiffel.com/14.05''', -* using the local package '''c:\eiffel\library\gps_nmea''' (i.e: you need to provide the package.iron file) - -Note: -* the --package-name is for now required, even if the package.iron already provides such information. -* see the iron share --help for advanced usage (such as --index, --package-archive-source, ...). - -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. -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. - -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. - -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‑Oriented Software Construction, 2nd Edition]]'', in the Modular Understand-ability criterion: - -:''''' "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." ''''' - -and the Self-Documentation Principle: - -:''''' "The designer of a module should strive to make all information about the module part of the module itself." ''''' - -The point: reuse is only possible when end users can easily and quickly learn how to reuse software components available to them. - -=Origin of the Name IRON= - -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‑Oriented Software Construction, 2nd Edition]]'' illustrates this. - -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. - -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. - -=Planned Enhancements= -This documentation describes the version of iron released with EiffelStudio 14.05. -More features are planned or are already under development: -:* 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 -:* support for test suite -:* 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. - +[[Property:modification_date|Sat, 05 Oct 2019 14:14:29 GMT]] +[[Property:publication_date|Sat, 05 Oct 2019 13:54:59 GMT]] +[[Property:title|IRON: Eiffel package repository]] +[[Property:link_title|IRON Eiffel repository]] +[[Property:weight|-20]] +[[Property:uuid|393EFF7D-49DF-472C-89CE-7E0970F1A96A]] +{{Info|This is a repost of the original documentation as provided at [https://iron.eiffel.com/repository/doc/] }} + +::Visit the [https://iron.eiffel.com/repository/|IRON package repository] + +=Purpose= + +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. + +{{definition|IRON|a package management solution based on repositories.}} + + +=Package Repository vs Library Repository= + +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. + +{{Definition|package|a downloadable unit of software from an IRON repository that contains one or more Eiffel libraries and their related files.}} + + +=Application to .ecf files= +: Empowering Teams of Developers + +To configure Eiffel projects, programmers uses "ECFs" (Eiffel Configuration Files -- Microsoft Visual Studio users can think of "solution 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, ... + +Typical library references without IRON in 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. + +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. +** an IRON uri has the form: iron:package-name:relative-path-to-file.ecf +** 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. + +That's all! In the above example, the location of the libraries, in the project, then become something like: + + + + + + +There is no more need for a set of environment variables. + +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. + +However, to get information about IRON location, use the command: iron path ... +:{| class="wikitable" +|- +! Command +! Result +! Example +|- +| iron path +| Base directory of IRON (~ IRON_PATH variable) +| C:\Users\jfiat\Documents\Eiffel User Files\14.05\iron +|- +| iron path base +| location of installed package base +| C:\Users\jfiat\Documents\Eiffel User Files\14.05\iron\packages\base +|- +| iron path xml +| location of installed package xml +| C:\Users\jfiat\Documents\Eiffel User Files\14.05\iron\packages\xml +|} + +Notes: +* It is possible to override the default location of IRON installation directory, by setting the environment variable IRON_PATH or ISE_IRON_PATH. +* 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. + +https://iron.eiffel.com/14.05/com.eiffel/library/base/base.ecf +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 + + +But this implies putting the version in the url (i.e 14.05), or you could set ISE_LIBRARY to https://iron.eiffel.com/14.05/com.eiffel + += 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. +Additionally, it permits easy maintenance of a local list of IRON repositories. + +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 (example: https://iron.eiffel.com/14.05 ). + +The IRON facility consists of three parts: + +* A default repository at https://iron.eiffel.com/14.05 (provides the web API and web interface for the repositories that are stored there; you can add other IRON servers as they become available). + +* The '''iron''' executable utility on the local machine (installed with EiffelStudio, the program that interacts with the repositories). + +* 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. + +=How to Use IRON= +== Install wanted Eiffel packages == +Using the EiffelStudio command prompt (installed with EiffelStudio), execute the IRON command to install the packages you want to use: + + iron install + +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. + +== Add reference to install package libraries == +Simply add the library with IRON uri iron:package-name:relative-path-to-file.ecf, 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: + + Project Settings -> -> Groups -> 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. +Note that you have an easy way to install, remove IRON packages from the '''Iron''' tab of the "Add Library" dialog. + +* The default and recommended location for a IRON package library is the IRON uri: + iron:package-name:relative-path-to-file.ecf + +* It is also possible to use the absolute URL in the IRON repository such as: + https://iron.eiffel.com/14.05/com.eiffel/library/base/base.ecf + +* And an other solution, would be to use the IRON_PATH environment variable to locate the install libraries, such as: + $IRON_PATH\packages\base\base.ecf + +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. + +== External dependencies == +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. + +== Optional == +If you do not define one of these environment variables, the location used is: +By default the base directory for IRON is under //iron , but it is possible to overwrite this value by setting the environment variable IRON_PATH (or ISE_IRON_PATH). Note that if the physical location does not exists, the local '''iron''' executable will create it. + +Setting IRON_PATH, can be a way to setup different development environments (with different registered repositories, ...) + +=How to Get Information About IRON Packages= +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/ . + +* This page lists the repository versions available. +* Select the version that matches the version of EiffelStudio you have installed. +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. + +If you click the "Package list" or "All packages" link, it takes you to a list of packages available under that version. + +== Search/filter== +To filter this list, you can use the search window. You can specify search criteria in this format :criterion:search_string + +Criteria available: + +:{| class="wikitable" +|- +! Criterion +! Meaning +|- +| name +| string is contained in package name (wildcards are supported) +|- +| title +| string is contained in title +|- +| tag +| package contains search_string in its tags (i.e. keywords) +|- +| downloads +| has at least N downloads, e.g. downloads:25 +|} +If a criterion is omitted, '''name''' is used by default. +'''Operators available''': or, and, not (example: name:er and not name:parser) + +Finally, when you have found the package you want, click on its title, and the page displayed will contain detailed information about the package. + +== Associated paths == +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: + +/14.05/com.eiffel/library/base +/14.05/com.eiffel/library/data_structure/adt/base + + +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: + +https://iron.eiffel.com/14.05/com.eiffel/library/base/base.ecf +or https://iron.eiffel.com/14.05/com.eiffel/library/data_structure/adt/base/base.ecf + + +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: + +> iron install base +or +> iron install https://iron.eiffel.com/14.05/com.eiffel/library/base + + +'''IMPORTANT''': those associated URIs may be deprecated soon with the use of IRON uri iron:base:base.ecf. + +=Using IRON from the Command Line= +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/. + +==Quick Help from the Command Line== +*iron help +:lists the actions that are available. + +*iron --help +: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 Summary== + +:{| class="wikitable" +|- +! Action +! Meaning +|- +| update +| updates cached package information +|- +| list +| displays a list of available packages, and whether they are installed +|- +| search +| searches for a specified packages +|- +| info +| displays information about a specified packages +|- +| install +| installs specified packages +|- +| remove +| removes specified packages +|- +| repository +| manages repository list +|- +| share +| share and manage your packages (an account on the IRON server is required) +|} + + +==Examples== + +===Update cached iron repository information=== + iron update + + +===Display information about package=== +:For instance for the '''api_wrapper''' package: + iron info api_wrapper + +:If the package is installed, the installation path will also be displayed. + +===Search for a package by name, ID or URI=== +:(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]): + iron search base + + +===List available packages=== + iron list + + +===List installed packages=== + iron list --installed + + +===Install a package=== + iron install base + +(or iron install https://iron.eiffel.com/14.05/com.eiffel/library/base) + +:(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".) + +===Uninstall a package=== + iron remove base + + +===Install all available packages=== + iron install --all + + +===Uninstall all installed packages=== + iron remove --all + + +=Advanced Usage= +==Managing Multiple Repositories== + +It is possible to have more than one IRON repository server registered. +Examples: + +iron repository --list +iron repository --add https://iron.eiffel.com/14.05 +iron repository --add https://custom.example.com/14.05 +iron repository --add C:\eiffel\my_repository +iron repository --remove https://custom.example.com/14.05 + + +===Multiple-Repository Name Conflict Resolution=== + +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. + +If the sequence of repositories is not to your liking, you can change it in three ways: + +:* use the iron executable to remove and add repositories to re-sequence them, or +:* 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 //iron/ 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.) + +==Building a package== +An IRON package has to provide, at its root, a file package.iron. This file describes the package with name, description, and various other information. +See for instance, the package.iron for Eiffel Base package: + +package base + +project + base_safe = "base-safe.ecf" + base = "base.ecf" + base_testing = "testing/testing-safe.ecf" + base_testing = "testing/testing.ecf" + +note + title: Eiffel Base + description: "Eiffel Base: kernel library classes, data structure, Input and Output" + + tags: base,kernel,structure,io + license: Eiffel Forum License v2 + copyright: 1984-2013 Eiffel Software and others + link[doc]: "Documentation" http://eiffelroom.com/ + link[source]: "Subversion" https://svn.eiffel.com/eiffelstudio/trunk/Src/library/base + link[license]: http://www.eiffel.com/licensing/forum.txt + maps: /com.eiffel/library/data_structure/adt/base + +end + + +Note: The package iron file for the Eiffel Base package is available online at https://svn.eiffel.com/eiffelstudio/trunk/Src/library/base/package.iron . + +Current status: +* only the '''name of the package is required''' +* 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 ''link[doc]''. +** The "link" declaration: link[category]: "Optional Title" associated-url +* The following notes have semantic that are processed by Iron: '''title, description, tags, link[..], and maps''', for now mostly on the Iron server. +* 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. + +A few packages may require '''post installation operations''', such as compiling C code, or others. +For that, use the section '''setup''', and in particular the '''compile_library''' information. +During installation, '''iron''' will launch the compile_library tool delivered with EiffelStudio on the provided directory. + +Example at https://svn.eiffel.com/eiffelstudio/trunk/Src/library/cURL/package.iron : + +package cURL + +setup + compile_library = Clib +... + + +This compile_library tool relies on finish_freezing -library and thus process the Makefile-win.SH or Makefile.SH. + +==Using your own IRON packages locally== +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...). +* Sharing the package on an IRON server, and then install it from that server: +** 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). +* And there is another solution: local repository. + +Local repositories rely heavily on the package.iron files. So if a folder is registered as iron repository, internally iron will search this folder recursively for package.iron files. + +Example on Windows: +iron repository --add %ISE_LIBRARY%\library + +It should find and list all the official ISE IRON packages. +Now if you want to install the '''time''' package from it, just do + +> iron install time +Searching [time] +-> several packages for name [time]! + 1) time (https://iron.eiffel.com/14.05) "EiffelTime" + 2) time (file:///C:/EiffelDev/Src/library) + > Select a package [1] (q=cancel): 2 +-> Install time (file:///C:/EiffelDev/Src/library) +Installing [time (file:///C:/EiffelDev/Src/library)] -> successfully installed. + + +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. + +> iron path +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" + + +*However, unless you are using the iron tool in batch mode ( --batch flag ), you will be asked to choose which package you want to install. +*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: + > iron install file:///C:/EiffelDev/Src/library/time + +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. + +==Sharing Your Packages== +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. + +As usual, to see the available options, use: + iron share --help + +Example: + +To build the '''gps_nmea''' package from your library c:\eiffel\library\gps_nmea\ : + + +iron share create --username --password + --repository https://iron.eiffel.com/14.05 + --package "c:\eiffel\library\gps_nmea\package.iron" --package-name "gps_nmea" + + +This command will: +* create a new package named '''gps_nmea''' on iron repository '''https://iron.eiffel.com/14.05''', +* using the local package '''c:\eiffel\library\gps_nmea''' (i.e: you need to provide the package.iron file) + +Note: +* the --package-name is for now required, even if the package.iron already provides such information. +* see the iron share --help for advanced usage (such as --index, --package-archive-source, ...). + +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. +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. + +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. + +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‑Oriented Software Construction, 2nd Edition]]'', in the Modular Understand-ability criterion: + +:''''' "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." ''''' + +and the Self-Documentation Principle: + +:''''' "The designer of a module should strive to make all information about the module part of the module itself." ''''' + +The point: reuse is only possible when end users can easily and quickly learn how to reuse software components available to them. + +=Origin of the Name IRON= + +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‑Oriented Software Construction, 2nd Edition]]'' illustrates this. + +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. + +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. + +=Planned Enhancements= +This documentation describes the version of iron released with EiffelStudio 14.05. +More features are planned or are already under development: +:* 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 +:* support for test suite +:* 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. +