From de6e7aad63c862f0e1922805122a7da0d4bef9a2 Mon Sep 17 00:00:00 2001 From: eifops Date: Thu, 6 Feb 2025 17:17:32 +0000 Subject: [PATCH] Updated trunk git-svn-id: https://svn.eiffel.com/eiffel-org/trunk@2484 abb3cda0-5349-4a8f-a601-0c33ac3a8c38 --- .../Eiffel-Code-Comments.wiki | 7 +- .../index.wiki | 6 +- .../eiffel-two-minute-fact-sheet.wiki | 6 +- .../et-dynamic-structure-execution-model.wiki | 6 +- .../_images/preference-all-shortcuts.png | Bin 0 -> 104868 bytes .../eiffelstudio/_images/tool-preferences.png | Bin 0 -> 12361 bytes .../EiffelStudio--All-shortcuts.wiki | 4 +- .../Release-notes-for-EiffelStudio-23.09.wiki | 31 ++++++ .../Release-notes-for-EiffelStudio-24.05.wiki | 42 +++++++ .../eiffelstudio-linux.wiki | 6 +- .../eiffelstudio-mac-os-x.wiki | 49 +++++++- .../windows.wiki | 5 +- .../eiffelbase-tables.wiki | 10 +- .../eiffelstore-samples/esql-sample.wiki | 4 +- .../eiffelstore-samples/inserter-sample.wiki | 4 +- .../eiffelstore-samples/selector-sample.wiki | 13 +-- .../building-net-application.wiki | 9 +- .../eiffel-codedom-provider-manager.wiki | 0 .../esplitter.wiki | 0 .../index.wiki | 0 .../name-mapper.wiki | 0 ...ut-code-document-object-model-codedom.wiki | 0 .../common-scenarios.wiki | 0 .../configuration.wiki | 0 .../eiffel-implementation.wiki | 0 .../eiffel-codedom-provider/index.wiki | 0 .../eiffel-codedom-provider/installation.wiki | 0 .../eiffel-codedom-provider/limitations.wiki | 0 .../eiffel-codedom-provider/logging.wiki | 0 .../required-permissions.wiki | 0 .../supported-constructs.wiki | 0 .../eiffel-aspnet-documentation/index.wiki | 5 + .../codedom-getting-started.wiki | 0 .../eiffel-aspnet-installation.wiki | 0 .../writing-aspnet-pages-eiffel/index.wiki | 0 .../names-mappings.wiki | 0 .../using-eiffel-write-aspnet-pages.wiki | 0 .../constructors-and-creation-procedures.wiki | 0 .../eiffel-class-and-feature-names.wiki | 4 +- .../conventions/eiffel-net-terminology.wiki | 0 .../conventions/eiffel-reserved-words.wiki | 0 .../conventions/index.wiki | 0 ...imilar-types-occurring-both-libraries.wiki | 0 .../conventions/type-organization.wiki | 0 .../Eiffel-for-.NETCore-execution.wiki | 105 ++++++++++++++++++ .../Workaround-Eiffel-.NET-limitations.wiki | 80 +++++++++++++ .../eiffel-net-integration/index.wiki | 96 ++++++++++++++++ .../eiffel-net/adding-class-features.wiki | 0 .../design-contract-and-assertions.wiki | 0 .../eiffel-net/eiffel-classes.wiki | 0 .../eiffel-net/eiffel-net-compliance.wiki | 0 .../eiffel-net/event-programming-agents.wiki | 0 .../eiffel-net/exception-mechanism.wiki | 0 .../eiffel-net/genericity.wiki | 0 .../eiffel-net-language/eiffel-net/index.wiki | 0 .../eiffel-net/inheritance.wiki | 0 ...mbly-type-and-feature-name-conversion.wiki | 0 .../using-referenced-assemblies.wiki | 0 .../eiffel-net-language/index.wiki | 4 +- .../eiffel-net-language/known-issues.wiki | 0 .../trunk/solutions/dotnet/index.wiki | 10 ++ .../dotnet/net-installation-instructions.wiki | 14 +++ .../ado-net-samples/adonet-sample.wiki | 0 .../samples/ado-net-samples/index.wiki | 0 .../console-samples/calculator-console.wiki | 0 .../samples/console-samples/index.wiki | 0 .../trunk/solutions/dotnet/samples/index.wiki | 14 +++ .../samples/threads-samples/index.wiki | 0 .../samples/threads-samples/pools.wiki | 0 .../samples/threads-samples/timers.wiki | 0 .../winform-samples/calculator-winform.wiki | 0 .../winform-samples/date-time-picker.wiki | 0 .../winform-samples/gdi-plus-text.wiki | 0 .../samples/winform-samples/index.wiki | 5 + .../samples/winform-samples/mdi/index.wiki | 0 .../winform-samples/mdi/mdi-details.wiki | 0 .../samples/winform-samples/menus/index.wiki | 0 .../winform-samples/menus/menu-details.wiki | 0 .../samples/winform-samples/message-box.wiki | 0 .../winform-samples/progress-bar-sample.wiki | 0 .../winform-samples/simple-data-binding.wiki | 0 .../simple-hello-world-form-sample.wiki | 0 .../samples/winform-samples/tree-view.wiki | 0 ...ng-eiffelvision-2-systems-void-safety.wiki | 6 +- .../eiffel-net-integration.wiki | 76 ------------- .../microsoft-windows/net/index.wiki | 8 -- .../net/net-installation-instructions.wiki | 5 - .../microsoft-windows/net/samples/index.wiki | 7 -- .../web-technology/EiffelWeb-framework.wiki | 4 +- 89 files changed, 516 insertions(+), 129 deletions(-) create mode 100644 documentation/trunk/eiffelstudio/_images/preference-all-shortcuts.png create mode 100644 documentation/trunk/eiffelstudio/_images/tool-preferences.png create mode 100644 documentation/trunk/eiffelstudio/eiffelstudio-reference/eiffelstudio-release-notes/Release-notes-for-EiffelStudio-23.09.wiki create mode 100644 documentation/trunk/eiffelstudio/eiffelstudio-reference/eiffelstudio-release-notes/Release-notes-for-EiffelStudio-24.05.wiki rename documentation/trunk/solutions/{platform-specifics/microsoft-windows/net => dotnet}/building-net-application.wiki (59%) rename documentation/trunk/solutions/{platform-specifics/microsoft-windows/net => dotnet}/eiffel-aspnet-documentation/eiffel-aspnet-tools-and-administration/eiffel-codedom-provider-manager.wiki (100%) rename documentation/trunk/solutions/{platform-specifics/microsoft-windows/net => dotnet}/eiffel-aspnet-documentation/eiffel-aspnet-tools-and-administration/esplitter.wiki (100%) rename documentation/trunk/solutions/{platform-specifics/microsoft-windows/net => dotnet}/eiffel-aspnet-documentation/eiffel-aspnet-tools-and-administration/index.wiki (100%) rename documentation/trunk/solutions/{platform-specifics/microsoft-windows/net => dotnet}/eiffel-aspnet-documentation/eiffel-aspnet-tools-and-administration/name-mapper.wiki (100%) rename documentation/trunk/solutions/{platform-specifics/microsoft-windows/net => dotnet}/eiffel-aspnet-documentation/eiffel-codedom-provider/about-code-document-object-model-codedom.wiki (100%) rename documentation/trunk/solutions/{platform-specifics/microsoft-windows/net => dotnet}/eiffel-aspnet-documentation/eiffel-codedom-provider/common-scenarios.wiki (100%) rename documentation/trunk/solutions/{platform-specifics/microsoft-windows/net => dotnet}/eiffel-aspnet-documentation/eiffel-codedom-provider/configuration.wiki (100%) rename documentation/trunk/solutions/{platform-specifics/microsoft-windows/net => dotnet}/eiffel-aspnet-documentation/eiffel-codedom-provider/eiffel-implementation.wiki (100%) rename documentation/trunk/solutions/{platform-specifics/microsoft-windows/net => dotnet}/eiffel-aspnet-documentation/eiffel-codedom-provider/index.wiki (100%) rename documentation/trunk/solutions/{platform-specifics/microsoft-windows/net => dotnet}/eiffel-aspnet-documentation/eiffel-codedom-provider/installation.wiki (100%) rename documentation/trunk/solutions/{platform-specifics/microsoft-windows/net => dotnet}/eiffel-aspnet-documentation/eiffel-codedom-provider/limitations.wiki (100%) rename documentation/trunk/solutions/{platform-specifics/microsoft-windows/net => dotnet}/eiffel-aspnet-documentation/eiffel-codedom-provider/logging.wiki (100%) rename documentation/trunk/solutions/{platform-specifics/microsoft-windows/net => dotnet}/eiffel-aspnet-documentation/eiffel-codedom-provider/required-permissions.wiki (100%) rename documentation/trunk/solutions/{platform-specifics/microsoft-windows/net => dotnet}/eiffel-aspnet-documentation/eiffel-codedom-provider/supported-constructs.wiki (100%) rename documentation/trunk/solutions/{platform-specifics/microsoft-windows/net => dotnet}/eiffel-aspnet-documentation/index.wiki (85%) rename documentation/trunk/solutions/{platform-specifics/microsoft-windows/net => dotnet}/eiffel-aspnet-documentation/writing-aspnet-pages-eiffel/codedom-getting-started.wiki (100%) rename documentation/trunk/solutions/{platform-specifics/microsoft-windows/net => dotnet}/eiffel-aspnet-documentation/writing-aspnet-pages-eiffel/eiffel-aspnet-installation.wiki (100%) rename documentation/trunk/solutions/{platform-specifics/microsoft-windows/net => dotnet}/eiffel-aspnet-documentation/writing-aspnet-pages-eiffel/index.wiki (100%) rename documentation/trunk/solutions/{platform-specifics/microsoft-windows/net => dotnet}/eiffel-aspnet-documentation/writing-aspnet-pages-eiffel/names-mappings.wiki (100%) rename documentation/trunk/solutions/{platform-specifics/microsoft-windows/net => dotnet}/eiffel-aspnet-documentation/writing-aspnet-pages-eiffel/using-eiffel-write-aspnet-pages.wiki (100%) rename documentation/trunk/solutions/{platform-specifics/microsoft-windows/net => dotnet}/eiffel-net-language/conventions/constructors-and-creation-procedures.wiki (100%) rename documentation/trunk/solutions/{platform-specifics/microsoft-windows/net => dotnet}/eiffel-net-language/conventions/eiffel-class-and-feature-names.wiki (98%) rename documentation/trunk/solutions/{platform-specifics/microsoft-windows/net => dotnet}/eiffel-net-language/conventions/eiffel-net-terminology.wiki (100%) rename documentation/trunk/solutions/{platform-specifics/microsoft-windows/net => dotnet}/eiffel-net-language/conventions/eiffel-reserved-words.wiki (100%) rename documentation/trunk/solutions/{platform-specifics/microsoft-windows/net => dotnet}/eiffel-net-language/conventions/index.wiki (100%) rename documentation/trunk/solutions/{platform-specifics/microsoft-windows/net => dotnet}/eiffel-net-language/conventions/similar-types-occurring-both-libraries.wiki (100%) rename documentation/trunk/solutions/{platform-specifics/microsoft-windows/net => dotnet}/eiffel-net-language/conventions/type-organization.wiki (100%) create mode 100644 documentation/trunk/solutions/dotnet/eiffel-net-language/eiffel-net-integration/Eiffel-for-.NETCore-execution.wiki create mode 100644 documentation/trunk/solutions/dotnet/eiffel-net-language/eiffel-net-integration/Workaround-Eiffel-.NET-limitations.wiki create mode 100644 documentation/trunk/solutions/dotnet/eiffel-net-language/eiffel-net-integration/index.wiki rename documentation/trunk/solutions/{platform-specifics/microsoft-windows/net => dotnet}/eiffel-net-language/eiffel-net/adding-class-features.wiki (100%) rename documentation/trunk/solutions/{platform-specifics/microsoft-windows/net => dotnet}/eiffel-net-language/eiffel-net/design-contract-and-assertions.wiki (100%) rename documentation/trunk/solutions/{platform-specifics/microsoft-windows/net => dotnet}/eiffel-net-language/eiffel-net/eiffel-classes.wiki (100%) rename documentation/trunk/solutions/{platform-specifics/microsoft-windows/net => dotnet}/eiffel-net-language/eiffel-net/eiffel-net-compliance.wiki (100%) rename documentation/trunk/solutions/{platform-specifics/microsoft-windows/net => dotnet}/eiffel-net-language/eiffel-net/event-programming-agents.wiki (100%) rename documentation/trunk/solutions/{platform-specifics/microsoft-windows/net => dotnet}/eiffel-net-language/eiffel-net/exception-mechanism.wiki (100%) rename documentation/trunk/solutions/{platform-specifics/microsoft-windows/net => dotnet}/eiffel-net-language/eiffel-net/genericity.wiki (100%) rename documentation/trunk/solutions/{platform-specifics/microsoft-windows/net => dotnet}/eiffel-net-language/eiffel-net/index.wiki (100%) rename documentation/trunk/solutions/{platform-specifics/microsoft-windows/net => dotnet}/eiffel-net-language/eiffel-net/inheritance.wiki (100%) rename documentation/trunk/solutions/{platform-specifics/microsoft-windows/net => dotnet}/eiffel-net-language/eiffel-net/referenced-assembly-type-and-feature-name-conversion.wiki (100%) rename documentation/trunk/solutions/{platform-specifics/microsoft-windows/net => dotnet}/eiffel-net-language/eiffel-net/using-referenced-assemblies.wiki (100%) rename documentation/trunk/solutions/{platform-specifics/microsoft-windows/net => dotnet}/eiffel-net-language/index.wiki (88%) rename documentation/trunk/solutions/{platform-specifics/microsoft-windows/net => dotnet}/eiffel-net-language/known-issues.wiki (100%) create mode 100644 documentation/trunk/solutions/dotnet/index.wiki create mode 100644 documentation/trunk/solutions/dotnet/net-installation-instructions.wiki rename documentation/trunk/solutions/{platform-specifics/microsoft-windows/net => dotnet}/samples/ado-net-samples/adonet-sample.wiki (100%) rename documentation/trunk/solutions/{platform-specifics/microsoft-windows/net => dotnet}/samples/ado-net-samples/index.wiki (100%) rename documentation/trunk/solutions/{platform-specifics/microsoft-windows/net => dotnet}/samples/console-samples/calculator-console.wiki (100%) rename documentation/trunk/solutions/{platform-specifics/microsoft-windows/net => dotnet}/samples/console-samples/index.wiki (100%) create mode 100644 documentation/trunk/solutions/dotnet/samples/index.wiki rename documentation/trunk/solutions/{platform-specifics/microsoft-windows/net => dotnet}/samples/threads-samples/index.wiki (100%) rename documentation/trunk/solutions/{platform-specifics/microsoft-windows/net => dotnet}/samples/threads-samples/pools.wiki (100%) rename documentation/trunk/solutions/{platform-specifics/microsoft-windows/net => dotnet}/samples/threads-samples/timers.wiki (100%) rename documentation/trunk/solutions/{platform-specifics/microsoft-windows/net => dotnet}/samples/winform-samples/calculator-winform.wiki (100%) rename documentation/trunk/solutions/{platform-specifics/microsoft-windows/net => dotnet}/samples/winform-samples/date-time-picker.wiki (100%) rename documentation/trunk/solutions/{platform-specifics/microsoft-windows/net => dotnet}/samples/winform-samples/gdi-plus-text.wiki (100%) rename documentation/trunk/solutions/{platform-specifics/microsoft-windows/net => dotnet}/samples/winform-samples/index.wiki (55%) rename documentation/trunk/solutions/{platform-specifics/microsoft-windows/net => dotnet}/samples/winform-samples/mdi/index.wiki (100%) rename documentation/trunk/solutions/{platform-specifics/microsoft-windows/net => dotnet}/samples/winform-samples/mdi/mdi-details.wiki (100%) rename documentation/trunk/solutions/{platform-specifics/microsoft-windows/net => dotnet}/samples/winform-samples/menus/index.wiki (100%) rename documentation/trunk/solutions/{platform-specifics/microsoft-windows/net => dotnet}/samples/winform-samples/menus/menu-details.wiki (100%) rename documentation/trunk/solutions/{platform-specifics/microsoft-windows/net => dotnet}/samples/winform-samples/message-box.wiki (100%) rename documentation/trunk/solutions/{platform-specifics/microsoft-windows/net => dotnet}/samples/winform-samples/progress-bar-sample.wiki (100%) rename documentation/trunk/solutions/{platform-specifics/microsoft-windows/net => dotnet}/samples/winform-samples/simple-data-binding.wiki (100%) rename documentation/trunk/solutions/{platform-specifics/microsoft-windows/net => dotnet}/samples/winform-samples/simple-hello-world-form-sample.wiki (100%) rename documentation/trunk/solutions/{platform-specifics/microsoft-windows/net => dotnet}/samples/winform-samples/tree-view.wiki (100%) delete mode 100644 documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-net-language/eiffel-net-integration.wiki delete mode 100644 documentation/trunk/solutions/platform-specifics/microsoft-windows/net/index.wiki delete mode 100644 documentation/trunk/solutions/platform-specifics/microsoft-windows/net/net-installation-instructions.wiki delete mode 100644 documentation/trunk/solutions/platform-specifics/microsoft-windows/net/samples/index.wiki diff --git a/documentation/trunk/eiffel/Coding_Standards/Eiffel-Code-Comments.wiki b/documentation/trunk/eiffel/Coding_Standards/Eiffel-Code-Comments.wiki index d90031c0..51abab48 100644 --- a/documentation/trunk/eiffel/Coding_Standards/Eiffel-Code-Comments.wiki +++ b/documentation/trunk/eiffel/Coding_Standards/Eiffel-Code-Comments.wiki @@ -1,4 +1,4 @@ -[[Property:modification_date|Mon, 13 Dec 2021 12:42:51 GMT]] +[[Property:modification_date|Thu, 27 Jun 2024 10:45:27 GMT]] [[Property:publication_date|Thu, 03 Jan 2019 18:00:43 GMT]] [[Property:uuid|146E241E-C367-4F16-9CCE-6F11E5F7860A]] [[Property:weight|1]] @@ -145,11 +145,12 @@ f (a_arg: INTEGER): BOOLEAN This will have exactly the same effect as using -- when f is made effective/redefined from a single parent. However, when making effective/redefining from multiple parents, then comments will come from the parent class declaration in BASE. -Again, because precursor comments do not affect compilation, they are not checked at compile time. Specifying an incorrect class will yield a warning message in [[EiffelStudio]]'s code browsing tools, to the effect: +Again, because precursor comments do not affect compilation, they are not checked at compile time. Specifying an incorrect class will yield a warning message in [/doc/eiffelstudio/EiffelStudio EiffelStudio]'s code browsing tools, to the effect: -- Unable to retrieve the comments from redefinition of {CLASS_NAME}. === Library Documentation Generation === -Precursor comments are supported in all code browsing/documentation facilities, whether it be the integrated [[Contract Viewer]], the [[Feature Relation Tool]] or the Eiffel documentation generation facilities. Using -- will ensure the comments are brought up from a parent declaration. +Precursor comments are supported in all code browsing/documentation facilities, whether it be the integrated [/doc/eiffelstudio/Contract_Editor_tool Contract Viewer +], the [https://www.eiffel.org/doc/eiffelstudio/Feature_views Feature Relation Tool] or the Eiffel documentation generation facilities. Using -- will ensure the comments are brought up from a parent declaration. diff --git a/documentation/trunk/eiffel/Language_reference/quick-reference-eiffel-programming-language/index.wiki b/documentation/trunk/eiffel/Language_reference/quick-reference-eiffel-programming-language/index.wiki index c8dc25c1..d600ba5d 100644 --- a/documentation/trunk/eiffel/Language_reference/quick-reference-eiffel-programming-language/index.wiki +++ b/documentation/trunk/eiffel/Language_reference/quick-reference-eiffel-programming-language/index.wiki @@ -1,8 +1,10 @@ +[[Property:modification_date|Fri, 08 Mar 2024 09:39:26 GMT]] +[[Property:publication_date|Fri, 08 Mar 2024 09:36:54 GMT]] [[Property:title|Quick reference to the Eiffel programming language]] [[Property:link_title|Quick Reference]] [[Property:weight|4]] [[Property:uuid|4f61365d-59f6-a394-678b-144bad8ec12f]] -The Quick Reference to the Eiffel programming language provides an informal guide to the syntax and reserved words of the language. The Eiffel programming language is described in detail in the '''ISO/ECMA''' standard document, available [http://www.ecma-international.org/publications/standards/Ecma-367.htm online]. +The Quick Reference to the Eiffel programming language provides an informal guide to the syntax and reserved words of the language. The Eiffel programming language is described in detail in the '''ISO/ECMA''' standard document, available [https://ecma-international.org/publications-and-standards/standards/ecma-367/ online]. Sometimes there are differences between the language as defined by the standard and that which is implemented by Eiffel Software. These differences are documented in the online documentation. @@ -10,6 +12,8 @@ So, the final authority on Eiffel as implemented by Eiffel Software is the conte This reference is based on the June 2006 ISO/ECMA standard document. +See also the community contributed guide at [https://eiffel-guide.com/] + diff --git a/documentation/trunk/eiffel/Overview/eiffel-two-minute-fact-sheet.wiki b/documentation/trunk/eiffel/Overview/eiffel-two-minute-fact-sheet.wiki index ecd37799..00930848 100644 --- a/documentation/trunk/eiffel/Overview/eiffel-two-minute-fact-sheet.wiki +++ b/documentation/trunk/eiffel/Overview/eiffel-two-minute-fact-sheet.wiki @@ -1,3 +1,5 @@ +[[Property:modification_date|Fri, 15 Mar 2024 12:43:00 GMT]] +[[Property:publication_date|Fri, 15 Mar 2024 12:42:08 GMT]] [[Property:title|Two-Minute fact sheet]] [[Property:weight|0]] [[Property:uuid|f672bfb8-ddea-beb1-eaa6-e374a6a6bc92]] @@ -14,7 +16,7 @@ Software produced with Eiffel is typically: ===Systems developed using Eiffel can be made portable across major industry platforms.=== -*Windows NT/2000/XP/Vista including CLS compliance on Microsoft .NET +*Windows 11, 10, Windows NT/2000/XP/Vista including CLS compliance on Microsoft .NET *Major Unix versions *Macintosh OS X *Linux @@ -50,7 +52,7 @@ Eiffel consists of: ***Includes multiple and repeated inheritance ***Safe and fully controllable **Genericity (generic classes), including constrained genericity -**Platform independent concurrency ([[Concurrent programming with SCOOP|SCOOP]]) +**Platform independent concurrency ([[Concurrent programming with SCOOP|SCOOP]]) , except for .NET, where SCOOP is not yet supported *Widely recognized as simultaneously the simplest and most complete implementation of object-oriented concepts *Is clean, elegant, readable, easy to learn diff --git a/documentation/trunk/eiffel/Tutorials/eiffel-tutorial-et/et-dynamic-structure-execution-model.wiki b/documentation/trunk/eiffel/Tutorials/eiffel-tutorial-et/et-dynamic-structure-execution-model.wiki index ce22eafe..6aa243ab 100644 --- a/documentation/trunk/eiffel/Tutorials/eiffel-tutorial-et/et-dynamic-structure-execution-model.wiki +++ b/documentation/trunk/eiffel/Tutorials/eiffel-tutorial-et/et-dynamic-structure-execution-model.wiki @@ -1,4 +1,4 @@ -[[Property:modification_date|Mon, 23 Jan 2023 09:14:48 GMT]] +[[Property:modification_date|Tue, 13 Aug 2024 09:46:34 GMT]] [[Property:publication_date|Mon, 23 Jan 2023 09:14:48 GMT]] [[Property:title|ET: The Dynamic Structure: Execution Model]] [[Property:weight|-10]] @@ -298,7 +298,7 @@ This would be awkward. Infix and prefix notations solve the problem, reconciling end -Such a feature has all the properties and prerogatives of both normal "identifier-dot" notation and infix notation. This allowing invoking plus using either notation: i.plus (j) or i + j . A feature such as plus allowing infix notation must be a function, and take exactly one argument. +Such a feature has all the properties and prerogatives of both normal "identifier-dot" notation and infix notation. This allowes invoking plus using either notation: i.plus (j) or i + j . A feature such as plus allowing infix notation must be a function, and take exactly one argument. Prefix notation is allowed as well. A function can be declared as opposite alias "-" , with no argument, permitting calls of the form -3 rather than (3).opposite . @@ -671,7 +671,7 @@ These attribute specializations are presented in the [[Void-safe programming in Another special type of attribute supported by Eiffel Software's compiler is the '''transient attribute'''. When an instance of a class to which a transient attribute belongs is saved to persistent storage, the field for the transient attribute is not included. So, transient attributes are transient in the sense that they are part of the object at runtime, but not when the object is stored on disk. -This type of attribute has benefits when using the persistence mechanisms provided with EiffelStudio, like [http://eiffel.com/developers/learning_maps/Training/Maps/PersistenceCanPayOff/Serialization.html SED]. Because transient attributes are not stored, they need not be accounted for upon retrieval. So, objects stored before changes to a class that only affect transient attributes will still be retrievable using the new class definition (whereas, if non-transient attributes were changed, a mismatch would occur during retrieval). +This type of attribute has benefits when using the persistence mechanisms provided with EiffelStudio, like [[Persistence, storage, and retrieval#With_the_SED_persistence_format|SED]]. Because transient attributes are not stored, they need not be accounted for upon retrieval. So, objects stored before changes to a class that only affect transient attributes will still be retrievable using the new class definition (whereas, if non-transient attributes were changed, a mismatch would occur during retrieval). An attribute is marked as transient by including a note option in its declaration: diff --git a/documentation/trunk/eiffelstudio/_images/preference-all-shortcuts.png b/documentation/trunk/eiffelstudio/_images/preference-all-shortcuts.png new file mode 100644 index 0000000000000000000000000000000000000000..09ec21f5238b7e6d6dc8fbde6c2a811b97454faa GIT binary patch literal 104868 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 A(EtDd literal 0 HcmV?d00001 diff --git a/documentation/trunk/eiffelstudio/_images/tool-preferences.png b/documentation/trunk/eiffelstudio/_images/tool-preferences.png new file mode 100644 index 0000000000000000000000000000000000000000..06b518b64ed6600769cd2b5537e3827205f38a64 GIT binary patch literal 12361 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 G|NjMG8tWzi literal 0 HcmV?d00001 diff --git a/documentation/trunk/eiffelstudio/eiffelstudio-reference/eiffelstudio-general-interface-description/EiffelStudio--All-shortcuts.wiki b/documentation/trunk/eiffelstudio/eiffelstudio-reference/eiffelstudio-general-interface-description/EiffelStudio--All-shortcuts.wiki index 8031a44a..4add4d38 100644 --- a/documentation/trunk/eiffelstudio/eiffelstudio-reference/eiffelstudio-general-interface-description/EiffelStudio--All-shortcuts.wiki +++ b/documentation/trunk/eiffelstudio/eiffelstudio-reference/eiffelstudio-general-interface-description/EiffelStudio--All-shortcuts.wiki @@ -14,9 +14,9 @@ This page will show you how to find all the keyboard shortcuts available in the From the main menu select "Tools" -> "Preferences..." -
[[Image:/files/uploads/tool-preferences.png]]
+
[[Image:tool-preferences]]
Now in the preference windows filter by "SHORTCUT", and you will see all the keyword shortcuts available. -
[[Image:/files/uploads/preference-all-shortcuts.png | 800px]]
\ No newline at end of file +
[[Image:preference-all-shortcuts | 800px]]
diff --git a/documentation/trunk/eiffelstudio/eiffelstudio-reference/eiffelstudio-release-notes/Release-notes-for-EiffelStudio-23.09.wiki b/documentation/trunk/eiffelstudio/eiffelstudio-reference/eiffelstudio-release-notes/Release-notes-for-EiffelStudio-23.09.wiki new file mode 100644 index 00000000..bf4bc27c --- /dev/null +++ b/documentation/trunk/eiffelstudio/eiffelstudio-reference/eiffelstudio-release-notes/Release-notes-for-EiffelStudio-23.09.wiki @@ -0,0 +1,31 @@ +[[Property:modification_date|Fri, 06 Oct 2023 15:12:07 GMT]] +[[Property:publication_date|Tue, 26 Sep 2023 14:40:08 GMT]] +[[Property:uuid|7D788D2D-73A3-4C2E-8E58-E7A5FB60A618]] +[[Property:title|Release notes for EiffelStudio 23.09]] +[[Property:link_title|23.09]] +[[Property:weight|-9]] + +==Compiler== +* The major improvement with this version of EiffelStudio is the new compilation support for the '''.NETCore (net6.0, net7.0, ...)''' to '''Windows and unices (Linux, ...)'''. And only on Windows, the support for the .NET framework (v4.0). There are a few limitations that should be addressed in the next releases. Please check the documentation for details [https://www.eiffel.org/doc/version/23.09/uuid/fe8a6a7d-4590-0db2-d59a-307082b18ecc Eiffel for .NET]. + +* EiffelStudio for .NET makes it possible to develop applications that will deploy and run unchanged on a broad range of platforms, from desktops to Web-based applications on one side, and mobile platforms on the other. + +==Graphical environment== +* The execution output panel (debugger) has additional information such as the modified environment variables, and the timestamp for launched/stopped/quit events. +* Added "Toggle comment" to comment/uncomment the current line/selection using the standard Ctrl+/ shortcut. +* Improved the impact of the Zoom factor on EiffelStudio tools. +* Added a few preferences on the editor and on the tools that make it possible to customize EiffelStudio to have almost a dark mode. + +===Libraries=== +* Fixed issues related to the usage of IMMUTABLE strings in EiffelBase. +* Fixed issues on LINEAR_SUBSET, TRAVERSABLE_SUBSET and SUBSET_STRATEGY_GENERIC in EiffelBase. +* Made EiffelBase classes immune to default string/character size. +* Gobo Libraries were updated to latest version. + +===Warnings=== +* SCOOP is currently not supported by Eiffel .NET +* For non Windows users, the Eiffel compiler is expecting the "dotnet" executable to be located inside "/usr/lib/dotnet" (a simple workaround is the create a symbolic link). +* For Macos users on M1/M2 (arm) architecture, please read the specific [[Release notes for EiffelStudio 22.12 - macosx|notes about macosx]] +---- + +See [https://dev.eiffel.com/EiffelStudio_23.09_Releases change log] for more details. diff --git a/documentation/trunk/eiffelstudio/eiffelstudio-reference/eiffelstudio-release-notes/Release-notes-for-EiffelStudio-24.05.wiki b/documentation/trunk/eiffelstudio/eiffelstudio-reference/eiffelstudio-release-notes/Release-notes-for-EiffelStudio-24.05.wiki new file mode 100644 index 00000000..42c4cb69 --- /dev/null +++ b/documentation/trunk/eiffelstudio/eiffelstudio-reference/eiffelstudio-release-notes/Release-notes-for-EiffelStudio-24.05.wiki @@ -0,0 +1,42 @@ +[[Property:modification_date|Fri, 14 Jun 2024 15:56:11 GMT]] +[[Property:publication_date|Mon, 03 Jun 2024 09:41:04 GMT]] +[[Property:uuid|65E6D99C-616E-4335-9667-EF7FD82DA920]] +[[Property:title|Release notes for EiffelStudio 24.05]] +[[Property:link_title|24.05]] +[[Property:weight|-10]] + +==Compiler== +===Major Improvements=== + +* '''Enhanced .NETCore Compilation Support''': This version significantly enhances compilation support for .NETCore (versions net6.0, net7.0, and net8.0) +** '''Partial Support for .NET Generic Methods''': Improved handling and compatibility with .NET generic methods. +** '''PDB File Generation''': Enables debugging from external tools with generated Program Database (PDB) files. +** '''Eiffel .NETCore Debugging''': Integrated debugging facilities for Eiffel .NETCore directly within EiffelStudio (currently available only on Windows). + +===Known Limitations=== +* Some .Net limitations exist in the current release that will be addressed in future updates. For detailed information, please refer to the [https://www.eiffel.org/doc/version/23.09/uuid/fe8a6a7d-4590-0db2-d59a-307082b18ecc Eiffel for .NET documentation]. + +==Graphical environment== +===New Features=== +* '''Composer Command Enhancements''': Eiffel 24.05 introduces new composer commands to streamline common editing operations: +** '''Create Setter for an Attribute''': Easily generate setter methods for attributes. +** '''Add New Creation Procedures''': Simplified process to add new creation procedures. +** '''Remove Selected Feature''': Quickly remove selected features from your project. +** ''Note: the shortcuts `Ctrl+Shift+E, Ctrl+S` means, press `Ctrl+Shift+E` then `Ctrl+S` (i.e 2 step shortcut)'' +* [Ctrl]+[Up] and [Ctrl]+[Down] to scroll up or down the editor by one line. +** Additional commands will be available in future releases. + +===New Authentication Method +* '''Web Browser "Sign-in" Challenge''': Introduces a new authentication method using the "Sign-in" challenge via a web browser. + +===Libraries=== +* Ensured EiffelBase, WEL, Vision2 libraries are supported by Eiffel .NETCore compilation. +* Various bug fixes, and minor improvements. + +===Warnings=== +* SCOOP is currently not supported by Eiffel .NET +* For Macos users on M1/M2 (arm) architecture, please read the specific [[Release notes for EiffelStudio 22.12 - macosx|notes about macosx]] +---- + +See [https://dev.eiffel.com/EiffelStudio_24.05_Releases change log] for more details. +=== \ No newline at end of file diff --git a/documentation/trunk/eiffelstudio/getting_started/setup-and-installation/software-installation-eiffelstudio/eiffelstudio-linux.wiki b/documentation/trunk/eiffelstudio/getting_started/setup-and-installation/software-installation-eiffelstudio/eiffelstudio-linux.wiki index 576aed1e..22548285 100644 --- a/documentation/trunk/eiffelstudio/getting_started/setup-and-installation/software-installation-eiffelstudio/eiffelstudio-linux.wiki +++ b/documentation/trunk/eiffelstudio/getting_started/setup-and-installation/software-installation-eiffelstudio/eiffelstudio-linux.wiki @@ -1,4 +1,4 @@ -[[Property:modification_date|Sat, 11 Dec 2021 19:23:25 GMT]] +[[Property:modification_date|Fri, 08 Mar 2024 09:28:01 GMT]] [[Property:publication_date|Sat, 11 Dec 2021 19:23:25 GMT]] [[Property:title|Linux]] [[Property:weight|4]] @@ -130,6 +130,10 @@ This probably means that the '''register''' program was not launched or did not Once this is done, you can jump to the next section, [[#Using EiffelStudio|Using EiffelStudio]] . + +See the following video demonstrating how to activate EiffelStudio: +* [https://www.youtube.com/watch?v=kjS3PQfe_Ig Activating EiffelStudio] + ==Using EiffelStudio== ===Starting EiffelStudio=== diff --git a/documentation/trunk/eiffelstudio/getting_started/setup-and-installation/software-installation-eiffelstudio/eiffelstudio-mac-os-x.wiki b/documentation/trunk/eiffelstudio/getting_started/setup-and-installation/software-installation-eiffelstudio/eiffelstudio-mac-os-x.wiki index 785be270..a345b36a 100644 --- a/documentation/trunk/eiffelstudio/getting_started/setup-and-installation/software-installation-eiffelstudio/eiffelstudio-mac-os-x.wiki +++ b/documentation/trunk/eiffelstudio/getting_started/setup-and-installation/software-installation-eiffelstudio/eiffelstudio-mac-os-x.wiki @@ -1,4 +1,4 @@ -[[Property:modification_date|Fri, 27 Jan 2023 19:53:59 GMT]] +[[Property:modification_date|Mon, 24 Jun 2024 17:30:34 GMT]] [[Property:publication_date|Sat, 11 Dec 2021 21:57:25 GMT]] [[Property:title|Mac OS X]] [[Property:weight|5]] @@ -37,7 +37,16 @@ MacPorts is a tool that allows you to use many Unix applications on the Mac. Before we can proceed with the installation of EiffelStudio, we need to install the required dependencies of EiffeStudio. First, install [http://guide.macports.org/#installing MacPorts]. -Now simply type (from a bash [http://guides.macrumors.com/Terminal terminal]): + +==Installing EiffeStudio using MacPorts== +Since we already install MacPorts, now simply type (from a bash [http://guides.macrumors.com/Terminal terminal]): +
+sudo port install eiffelstudio
+
+ + +==Installing EiffelStudio manually== +An alternative option is to install each dependency by hand using macPorts.
 sudo port install pkgconfig
 sudo port install bzip2
@@ -93,4 +102,40 @@ Alternatively, you can also start EiffelStudio from the command line by entering
 
 If you are a new user to EiffelStudio, we recommend that you follow [[Introducing EiffelStudio|the EiffelStudio guided tour]].
 
+ 
+==Registering the Enterprise Edition==
+
+This step assumes you have followed the instructions in the [[#Setting up EiffelStudio|Setting up EiffelStudio]]  section. Perform the following commands to start the registration process:
+cd $ISE_EIFFEL
+./register
+
+A dialog asking for your '''Username''' and '''CD Key''' should appear as it does below:
+
+
[[Image:56--unix-setup|Setup dialog]]
+ +Enter the information located inside the box that contains your copy of the EiffelStudio Enterprise Edition. Once the information is correct, the '''Register''' button will be enabled. Click '''Register''' to actually register EiffelStudio. + +The first time you launch EiffelStudio, you will be asked for an activation key through the following dialog: + +
[[Image:56--unix-registration|Registration dialog]]
+ +By clicking on the [http://activate.eiffel.com http://activate.eiffel.com] URL, a new web browser will appear with the requested fields automatically filled in with the appropriate information. Simply click '''Activate''' and a new page with an activation code will appear. Copy and paste the activation code in the first field and the '''Activate''' button should be enabled to let you activate your copy. + +You can activate your copy up to three times. Once you have reached this threshold and need to reinstall your copy, contact Eiffel Software to request one more activation. + +If no web browser appears, it is most likely because firefox is not installed on your machine or is not in your path. Instead you should manually launch a new web browser, go to the page [http://activate.eiffel.com http://activate.eiffel.com] , and enter the information manually. Then follow the above instructions as if the browser had been properly launched. + +You may receive the following dialog when launching EiffelStudio: + +
[[Image:56--unix-registration-error|Registration incomplete]]
+ +This probably means that the '''register''' program was not launched or did not succeed in storing data to the following file $'''ISE_EIFFEL'''/install/limand/.ec_license. To solve this, rerun the '''register''' program with a user account that has permissions to write at $'''ISE_EIFFEL'''/install/limand and enter your '''Username''' and '''CD Key'''. + +Once this is done, you can jump to the next section, [[#Using EiffelStudio|Using EiffelStudio]] . + + +See the following video demonstrating how to activate EiffelStudio: +* [https://www.youtube.com/watch?v=kjS3PQfe_Ig Activating EiffelStudio] + + 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 dffe9e45..86c8ab0a 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,4 +1,4 @@ -[[Property:modification_date|Tue, 02 Jul 2019 11:08:53 GMT]] +[[Property:modification_date|Fri, 08 Mar 2024 09:26:49 GMT]] [[Property:publication_date|Tue, 02 Jul 2019 10:53:22 GMT]] [[Property:title|Windows]] [[Property:weight|9]] @@ -51,6 +51,9 @@ 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'''. +See the following video demonstrating how to activate EiffelStudio: +* [https://www.youtube.com/watch?v=TMktPk_9Hok Activating EiffelStudio on Windows] + == 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]]: diff --git a/documentation/trunk/solutions/basic-computing/eiffelbase/eiffelbase-tutorial/eiffelbase-data-structures-overview/eiffelbase-tables.wiki b/documentation/trunk/solutions/basic-computing/eiffelbase/eiffelbase-tutorial/eiffelbase-data-structures-overview/eiffelbase-tables.wiki index 56ce576d..52d82d89 100644 --- a/documentation/trunk/solutions/basic-computing/eiffelbase/eiffelbase-tutorial/eiffelbase-data-structures-overview/eiffelbase-tables.wiki +++ b/documentation/trunk/solutions/basic-computing/eiffelbase/eiffelbase-tutorial/eiffelbase-data-structures-overview/eiffelbase-tables.wiki @@ -1,3 +1,5 @@ +[[Property:modification_date|Mon, 27 May 2024 08:42:15 GMT]] +[[Property:publication_date|Mon, 27 May 2024 08:42:15 GMT]] [[Property:title|EiffelBase, Tables]] [[Property:weight|5]] [[Property:uuid|194a63a2-e440-18dc-c9d5-6959dbe169fb]] @@ -8,7 +10,9 @@ The idea behind hash tables is to try to emulate the data structure that provide a.put (x, i) x := a.item (i) - x := a @ i + + a [i] := x + x := a [i] The first causes the value of a at index i to be x; the second (and the third, which is simply a syntactical variant) access the value at index i and assign it to x. With the usual computer architectures, these operations are very fast: because arrays items are stored contiguously in memory, a computer will need just one addition (base address plus index) and one memory access to perform a put or item.
Not only are the operation times small; they are constant (or more precisely bounded by a constant). This is a great advantage over structures such as lists or trees which you must traverse at least in part to retrieve an item, so that access and modification times grow with the number of items. With an array, disregarding the influence of other factors such as memory paging, the time for a put or item is for all practical purposes the same whether the array has five items or five hundred thousand. These properties make arrays excellent data structures for keeping objects. Unfortunately, they are only applicable if the objects satisfy three requirements: @@ -55,6 +59,10 @@ The value of n indicates how many items the hash table is expec It is useful, however, to use a reasonable upon creation: not too large to avoid wasting space, but not too small to avoid frequent applications of resizing, an expensive operation. +==Specific case of STRING_TABLE== +Hash tables, used to store items identified by string keys that are compared with or without case sensitivity. + + diff --git a/documentation/trunk/solutions/database-access/eiffelstore/eiffelstore-samples/esql-sample.wiki b/documentation/trunk/solutions/database-access/eiffelstore/eiffelstore-samples/esql-sample.wiki index d15d1a1d..e668014d 100644 --- a/documentation/trunk/solutions/database-access/eiffelstore/eiffelstore-samples/esql-sample.wiki +++ b/documentation/trunk/solutions/database-access/eiffelstore/eiffelstore-samples/esql-sample.wiki @@ -1,3 +1,5 @@ +[[Property:modification_date|Thu, 04 Jan 2024 11:07:42 GMT]] +[[Property:publication_date|Thu, 04 Jan 2024 11:07:42 GMT]] [[Property:title|Esql Sample]] [[Property:weight|0]] [[Property:uuid|04d03117-fdb2-8b73-677f-9b1a0c333dc4]] @@ -36,7 +38,7 @@ Name: smith@HANDSON Password: mypass -{{note|You must specify the Oracle User Name and Net Service Name with the syntax ''@ ''where '''' stands for the User Name and '''' stands for the Net Service Name. }} +{{note|You must specify the Oracle User Name and Net Service Name with the syntax `@` where `` stands for the User Name and `` stands for the Net Service Name. }} Then you can enter standard SQL queries to interact with your database, for instance: diff --git a/documentation/trunk/solutions/database-access/eiffelstore/eiffelstore-samples/inserter-sample.wiki b/documentation/trunk/solutions/database-access/eiffelstore/eiffelstore-samples/inserter-sample.wiki index ffc2a3a1..1ce011db 100644 --- a/documentation/trunk/solutions/database-access/eiffelstore/eiffelstore-samples/inserter-sample.wiki +++ b/documentation/trunk/solutions/database-access/eiffelstore/eiffelstore-samples/inserter-sample.wiki @@ -1,3 +1,5 @@ +[[Property:modification_date|Thu, 04 Jan 2024 11:08:28 GMT]] +[[Property:publication_date|Thu, 04 Jan 2024 11:08:28 GMT]] [[Property:title|Inserter Sample]] [[Property:weight|2]] [[Property:uuid|fa0b8601-ca7a-b1cc-384d-f366be33ac40]] @@ -42,7 +44,7 @@ Name: smith@HANDSON Password: mypass -{{note|You must specify the Oracle User Name and Net Service Name with the syntax ''@ ''where '''' stands for the User Name and '''' stands for the Net Service Name. }} +{{note|You must specify the Oracle User Name and Net Service Name with the syntax `@` where `` stands for the User Name and `` stands for the Net Service Name. }} Then you can insert a book in the database, for instance: diff --git a/documentation/trunk/solutions/database-access/eiffelstore/eiffelstore-samples/selector-sample.wiki b/documentation/trunk/solutions/database-access/eiffelstore/eiffelstore-samples/selector-sample.wiki index 98127599..fd139bf1 100644 --- a/documentation/trunk/solutions/database-access/eiffelstore/eiffelstore-samples/selector-sample.wiki +++ b/documentation/trunk/solutions/database-access/eiffelstore/eiffelstore-samples/selector-sample.wiki @@ -1,3 +1,5 @@ +[[Property:modification_date|Thu, 04 Jan 2024 11:06:50 GMT]] +[[Property:publication_date|Thu, 04 Jan 2024 11:06:50 GMT]] [[Property:title|Selector Sample]] [[Property:weight|1]] [[Property:uuid|3d608710-5537-04e4-fa89-a608ee6864cd]] @@ -42,7 +44,7 @@ Name: smith@HANDSON Password: mypass -{{note|You must specify the Oracle User Name and Net Service Name with the syntax ''@ ''where '''' stands for the User Name and '''' stands for the Net Service Name. }} +{{note|You must specify the Oracle User Name and Net Service Name with the syntax `@` where `` stands for the User Name and `` stands for the Net Service Name. }} Then you can select rows from this table with author's name, for instance: @@ -68,9 +70,9 @@ First publication:07/01/1992 12:00:00.0 AM Author? ('exit' to terminate): - + -{{note|Enter ''exit'' to quit the application. }} +{{note|Enter `exit` to quit the application. }} ==Under the Hood== @@ -82,8 +84,3 @@ The whole sample code is contained in the root class: * SELECTOR for Oracle. * SELECTOR_ODBC for ODBC. - - - - - diff --git a/documentation/trunk/solutions/platform-specifics/microsoft-windows/net/building-net-application.wiki b/documentation/trunk/solutions/dotnet/building-net-application.wiki similarity index 59% rename from documentation/trunk/solutions/platform-specifics/microsoft-windows/net/building-net-application.wiki rename to documentation/trunk/solutions/dotnet/building-net-application.wiki index 88a90a65..0fe74cd7 100644 --- a/documentation/trunk/solutions/platform-specifics/microsoft-windows/net/building-net-application.wiki +++ b/documentation/trunk/solutions/dotnet/building-net-application.wiki @@ -1,11 +1,16 @@ +[[Property:modification_date|Mon, 02 Oct 2023 14:00:06 GMT]] +[[Property:publication_date|Tue, 26 Sep 2023 19:18:02 GMT]] [[Property:title|Building a .NET application]] [[Property:weight|1]] [[Property:uuid|a44736cf-41df-1679-9c6d-7b56f31d5f9a]] -Eiffel for .NET has some specific functionality meant to leverage necessary aspects of the .NET Framework. +Eiffel for .NET has some specific functionality meant to leverage necessary aspects of the .NET solution. For that reason, the [[EiffelStudio: Project settings window|project settings]] for Eiffel for .NET introduces new options. These options include: + * Specifying whether the generated assembly should be an EXE or a DLL. -* Choosing between generating verifiable or non verifiable IL code. Non verifiable IL code executes faster but requires high trust settings. +* Specifying the .NET runtime (v4.0, net6.0, net7.0, ...) + +* (For .NET Framework only: choosing between generating verifiable or non verifiable IL code. Non verifiable IL code executes faster but requires high trust settings.) The Eiffel for .NET compiler generates a single assembly whose name is the name of the system as given in the [[System Options|system options of the project settings]] . diff --git a/documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-aspnet-documentation/eiffel-aspnet-tools-and-administration/eiffel-codedom-provider-manager.wiki b/documentation/trunk/solutions/dotnet/eiffel-aspnet-documentation/eiffel-aspnet-tools-and-administration/eiffel-codedom-provider-manager.wiki similarity index 100% rename from documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-aspnet-documentation/eiffel-aspnet-tools-and-administration/eiffel-codedom-provider-manager.wiki rename to documentation/trunk/solutions/dotnet/eiffel-aspnet-documentation/eiffel-aspnet-tools-and-administration/eiffel-codedom-provider-manager.wiki diff --git a/documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-aspnet-documentation/eiffel-aspnet-tools-and-administration/esplitter.wiki b/documentation/trunk/solutions/dotnet/eiffel-aspnet-documentation/eiffel-aspnet-tools-and-administration/esplitter.wiki similarity index 100% rename from documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-aspnet-documentation/eiffel-aspnet-tools-and-administration/esplitter.wiki rename to documentation/trunk/solutions/dotnet/eiffel-aspnet-documentation/eiffel-aspnet-tools-and-administration/esplitter.wiki diff --git a/documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-aspnet-documentation/eiffel-aspnet-tools-and-administration/index.wiki b/documentation/trunk/solutions/dotnet/eiffel-aspnet-documentation/eiffel-aspnet-tools-and-administration/index.wiki similarity index 100% rename from documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-aspnet-documentation/eiffel-aspnet-tools-and-administration/index.wiki rename to documentation/trunk/solutions/dotnet/eiffel-aspnet-documentation/eiffel-aspnet-tools-and-administration/index.wiki diff --git a/documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-aspnet-documentation/eiffel-aspnet-tools-and-administration/name-mapper.wiki b/documentation/trunk/solutions/dotnet/eiffel-aspnet-documentation/eiffel-aspnet-tools-and-administration/name-mapper.wiki similarity index 100% rename from documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-aspnet-documentation/eiffel-aspnet-tools-and-administration/name-mapper.wiki rename to documentation/trunk/solutions/dotnet/eiffel-aspnet-documentation/eiffel-aspnet-tools-and-administration/name-mapper.wiki diff --git a/documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-aspnet-documentation/eiffel-codedom-provider/about-code-document-object-model-codedom.wiki b/documentation/trunk/solutions/dotnet/eiffel-aspnet-documentation/eiffel-codedom-provider/about-code-document-object-model-codedom.wiki similarity index 100% rename from documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-aspnet-documentation/eiffel-codedom-provider/about-code-document-object-model-codedom.wiki rename to documentation/trunk/solutions/dotnet/eiffel-aspnet-documentation/eiffel-codedom-provider/about-code-document-object-model-codedom.wiki diff --git a/documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-aspnet-documentation/eiffel-codedom-provider/common-scenarios.wiki b/documentation/trunk/solutions/dotnet/eiffel-aspnet-documentation/eiffel-codedom-provider/common-scenarios.wiki similarity index 100% rename from documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-aspnet-documentation/eiffel-codedom-provider/common-scenarios.wiki rename to documentation/trunk/solutions/dotnet/eiffel-aspnet-documentation/eiffel-codedom-provider/common-scenarios.wiki diff --git a/documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-aspnet-documentation/eiffel-codedom-provider/configuration.wiki b/documentation/trunk/solutions/dotnet/eiffel-aspnet-documentation/eiffel-codedom-provider/configuration.wiki similarity index 100% rename from documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-aspnet-documentation/eiffel-codedom-provider/configuration.wiki rename to documentation/trunk/solutions/dotnet/eiffel-aspnet-documentation/eiffel-codedom-provider/configuration.wiki diff --git a/documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-aspnet-documentation/eiffel-codedom-provider/eiffel-implementation.wiki b/documentation/trunk/solutions/dotnet/eiffel-aspnet-documentation/eiffel-codedom-provider/eiffel-implementation.wiki similarity index 100% rename from documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-aspnet-documentation/eiffel-codedom-provider/eiffel-implementation.wiki rename to documentation/trunk/solutions/dotnet/eiffel-aspnet-documentation/eiffel-codedom-provider/eiffel-implementation.wiki diff --git a/documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-aspnet-documentation/eiffel-codedom-provider/index.wiki b/documentation/trunk/solutions/dotnet/eiffel-aspnet-documentation/eiffel-codedom-provider/index.wiki similarity index 100% rename from documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-aspnet-documentation/eiffel-codedom-provider/index.wiki rename to documentation/trunk/solutions/dotnet/eiffel-aspnet-documentation/eiffel-codedom-provider/index.wiki diff --git a/documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-aspnet-documentation/eiffel-codedom-provider/installation.wiki b/documentation/trunk/solutions/dotnet/eiffel-aspnet-documentation/eiffel-codedom-provider/installation.wiki similarity index 100% rename from documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-aspnet-documentation/eiffel-codedom-provider/installation.wiki rename to documentation/trunk/solutions/dotnet/eiffel-aspnet-documentation/eiffel-codedom-provider/installation.wiki diff --git a/documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-aspnet-documentation/eiffel-codedom-provider/limitations.wiki b/documentation/trunk/solutions/dotnet/eiffel-aspnet-documentation/eiffel-codedom-provider/limitations.wiki similarity index 100% rename from documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-aspnet-documentation/eiffel-codedom-provider/limitations.wiki rename to documentation/trunk/solutions/dotnet/eiffel-aspnet-documentation/eiffel-codedom-provider/limitations.wiki diff --git a/documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-aspnet-documentation/eiffel-codedom-provider/logging.wiki b/documentation/trunk/solutions/dotnet/eiffel-aspnet-documentation/eiffel-codedom-provider/logging.wiki similarity index 100% rename from documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-aspnet-documentation/eiffel-codedom-provider/logging.wiki rename to documentation/trunk/solutions/dotnet/eiffel-aspnet-documentation/eiffel-codedom-provider/logging.wiki diff --git a/documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-aspnet-documentation/eiffel-codedom-provider/required-permissions.wiki b/documentation/trunk/solutions/dotnet/eiffel-aspnet-documentation/eiffel-codedom-provider/required-permissions.wiki similarity index 100% rename from documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-aspnet-documentation/eiffel-codedom-provider/required-permissions.wiki rename to documentation/trunk/solutions/dotnet/eiffel-aspnet-documentation/eiffel-codedom-provider/required-permissions.wiki diff --git a/documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-aspnet-documentation/eiffel-codedom-provider/supported-constructs.wiki b/documentation/trunk/solutions/dotnet/eiffel-aspnet-documentation/eiffel-codedom-provider/supported-constructs.wiki similarity index 100% rename from documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-aspnet-documentation/eiffel-codedom-provider/supported-constructs.wiki rename to documentation/trunk/solutions/dotnet/eiffel-aspnet-documentation/eiffel-codedom-provider/supported-constructs.wiki diff --git a/documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-aspnet-documentation/index.wiki b/documentation/trunk/solutions/dotnet/eiffel-aspnet-documentation/index.wiki similarity index 85% rename from documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-aspnet-documentation/index.wiki rename to documentation/trunk/solutions/dotnet/eiffel-aspnet-documentation/index.wiki index 5327087a..9f81d3cb 100644 --- a/documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-aspnet-documentation/index.wiki +++ b/documentation/trunk/solutions/dotnet/eiffel-aspnet-documentation/index.wiki @@ -1,6 +1,11 @@ +[[Property:modification_date|Fri, 29 Sep 2023 11:57:59 GMT]] +[[Property:publication_date|Fri, 29 Sep 2023 11:57:59 GMT]] [[Property:title|Eiffel for ASP.NET Documentation]] [[Property:weight|6]] [[Property:uuid|158e298e-e4b3-3246-651c-557f2f630957]] + +{{Caution|This section concerns only Eiffel .NET Framework, and not .NETCore}} + CodeDom is a Microsoft .NET technology which allows representing source code programatically so that it may be rendered in different languages. The Eiffel CodeDom Provider is installed through Eiffel for ASP.NET which is available for download for free on the Eiffel Software web site ( [http://www.eiffel.com http://www.eiffel.com] ).
The following documents cover different aspects of the Eiffel CodeDom Provider: * [[Writing ASP.NET pages in Eiffel|Writing ASP.NET pages in Eiffel]] covers topics related to writing Eiffel pages in ASP.NET. diff --git a/documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-aspnet-documentation/writing-aspnet-pages-eiffel/codedom-getting-started.wiki b/documentation/trunk/solutions/dotnet/eiffel-aspnet-documentation/writing-aspnet-pages-eiffel/codedom-getting-started.wiki similarity index 100% rename from documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-aspnet-documentation/writing-aspnet-pages-eiffel/codedom-getting-started.wiki rename to documentation/trunk/solutions/dotnet/eiffel-aspnet-documentation/writing-aspnet-pages-eiffel/codedom-getting-started.wiki diff --git a/documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-aspnet-documentation/writing-aspnet-pages-eiffel/eiffel-aspnet-installation.wiki b/documentation/trunk/solutions/dotnet/eiffel-aspnet-documentation/writing-aspnet-pages-eiffel/eiffel-aspnet-installation.wiki similarity index 100% rename from documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-aspnet-documentation/writing-aspnet-pages-eiffel/eiffel-aspnet-installation.wiki rename to documentation/trunk/solutions/dotnet/eiffel-aspnet-documentation/writing-aspnet-pages-eiffel/eiffel-aspnet-installation.wiki diff --git a/documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-aspnet-documentation/writing-aspnet-pages-eiffel/index.wiki b/documentation/trunk/solutions/dotnet/eiffel-aspnet-documentation/writing-aspnet-pages-eiffel/index.wiki similarity index 100% rename from documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-aspnet-documentation/writing-aspnet-pages-eiffel/index.wiki rename to documentation/trunk/solutions/dotnet/eiffel-aspnet-documentation/writing-aspnet-pages-eiffel/index.wiki diff --git a/documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-aspnet-documentation/writing-aspnet-pages-eiffel/names-mappings.wiki b/documentation/trunk/solutions/dotnet/eiffel-aspnet-documentation/writing-aspnet-pages-eiffel/names-mappings.wiki similarity index 100% rename from documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-aspnet-documentation/writing-aspnet-pages-eiffel/names-mappings.wiki rename to documentation/trunk/solutions/dotnet/eiffel-aspnet-documentation/writing-aspnet-pages-eiffel/names-mappings.wiki diff --git a/documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-aspnet-documentation/writing-aspnet-pages-eiffel/using-eiffel-write-aspnet-pages.wiki b/documentation/trunk/solutions/dotnet/eiffel-aspnet-documentation/writing-aspnet-pages-eiffel/using-eiffel-write-aspnet-pages.wiki similarity index 100% rename from documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-aspnet-documentation/writing-aspnet-pages-eiffel/using-eiffel-write-aspnet-pages.wiki rename to documentation/trunk/solutions/dotnet/eiffel-aspnet-documentation/writing-aspnet-pages-eiffel/using-eiffel-write-aspnet-pages.wiki diff --git a/documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-net-language/conventions/constructors-and-creation-procedures.wiki b/documentation/trunk/solutions/dotnet/eiffel-net-language/conventions/constructors-and-creation-procedures.wiki similarity index 100% rename from documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-net-language/conventions/constructors-and-creation-procedures.wiki rename to documentation/trunk/solutions/dotnet/eiffel-net-language/conventions/constructors-and-creation-procedures.wiki diff --git a/documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-net-language/conventions/eiffel-class-and-feature-names.wiki b/documentation/trunk/solutions/dotnet/eiffel-net-language/conventions/eiffel-class-and-feature-names.wiki similarity index 98% rename from documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-net-language/conventions/eiffel-class-and-feature-names.wiki rename to documentation/trunk/solutions/dotnet/eiffel-net-language/conventions/eiffel-class-and-feature-names.wiki index 11ad8675..75e90eb8 100644 --- a/documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-net-language/conventions/eiffel-class-and-feature-names.wiki +++ b/documentation/trunk/solutions/dotnet/eiffel-net-language/conventions/eiffel-class-and-feature-names.wiki @@ -1,3 +1,5 @@ +[[Property:modification_date|Mon, 25 Sep 2023 09:37:39 GMT]] +[[Property:publication_date|Mon, 25 Sep 2023 09:37:39 GMT]] [[Property:title|Eiffel Class and Feature Names]] [[Property:weight|2]] [[Property:uuid|16e4a231-7aae-4b37-52fd-67876cc222ad]] @@ -194,7 +196,7 @@ In order to use .NET types that include static members, a special syntax has bee my_window.set_text (my_window_title) . . - feature {WINFORMS_APPLICATION}.run_form (my_window) + {WINFORMS_APPLICATION}.run_form (my_window) end diff --git a/documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-net-language/conventions/eiffel-net-terminology.wiki b/documentation/trunk/solutions/dotnet/eiffel-net-language/conventions/eiffel-net-terminology.wiki similarity index 100% rename from documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-net-language/conventions/eiffel-net-terminology.wiki rename to documentation/trunk/solutions/dotnet/eiffel-net-language/conventions/eiffel-net-terminology.wiki diff --git a/documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-net-language/conventions/eiffel-reserved-words.wiki b/documentation/trunk/solutions/dotnet/eiffel-net-language/conventions/eiffel-reserved-words.wiki similarity index 100% rename from documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-net-language/conventions/eiffel-reserved-words.wiki rename to documentation/trunk/solutions/dotnet/eiffel-net-language/conventions/eiffel-reserved-words.wiki diff --git a/documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-net-language/conventions/index.wiki b/documentation/trunk/solutions/dotnet/eiffel-net-language/conventions/index.wiki similarity index 100% rename from documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-net-language/conventions/index.wiki rename to documentation/trunk/solutions/dotnet/eiffel-net-language/conventions/index.wiki diff --git a/documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-net-language/conventions/similar-types-occurring-both-libraries.wiki b/documentation/trunk/solutions/dotnet/eiffel-net-language/conventions/similar-types-occurring-both-libraries.wiki similarity index 100% rename from documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-net-language/conventions/similar-types-occurring-both-libraries.wiki rename to documentation/trunk/solutions/dotnet/eiffel-net-language/conventions/similar-types-occurring-both-libraries.wiki diff --git a/documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-net-language/conventions/type-organization.wiki b/documentation/trunk/solutions/dotnet/eiffel-net-language/conventions/type-organization.wiki similarity index 100% rename from documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-net-language/conventions/type-organization.wiki rename to documentation/trunk/solutions/dotnet/eiffel-net-language/conventions/type-organization.wiki diff --git a/documentation/trunk/solutions/dotnet/eiffel-net-language/eiffel-net-integration/Eiffel-for-.NETCore-execution.wiki b/documentation/trunk/solutions/dotnet/eiffel-net-language/eiffel-net-integration/Eiffel-for-.NETCore-execution.wiki new file mode 100644 index 00000000..302a8c20 --- /dev/null +++ b/documentation/trunk/solutions/dotnet/eiffel-net-language/eiffel-net-integration/Eiffel-for-.NETCore-execution.wiki @@ -0,0 +1,105 @@ +[[Property:modification_date|Mon, 02 Oct 2023 12:50:47 GMT]] +[[Property:publication_date|Mon, 02 Oct 2023 10:00:56 GMT]] +[[Property:uuid|1838ECEC-F411-46C7-926B-204ED0ACD0C6]] +[[Property:weight|20]] +[[Property:title|Eiffel .NETCore execution]] +[[Property:link_title|NETCore execution]] + + +This document provide a quick overview on how to execute Eiffel.NetCore applications. It covers various aspects including the wrapper project, execution, publishing, debugging in VisualStudio, and known limitations + +At the moment, the EiffelStudio '''debugger has no support''' Eiffel .NET Core. +It is, however, possible to execute most of the Eiffel .NET Core application from the IDE using the `Run` command. The execution will be outside EiffelStudio. + +The generated executable can not be executed by itself and requires to be launched using the `dotnet` tool from the command line. +{{note|Use the command: `dotnet ` or `dotnet run `.}} + +== Wrapper project == +To help the user, the EiffelStudio compiler also generates a C# wrapper project (located in W_code or F_code directories). See the `wrapper_*.cs` and `wrapper_*.csproj` files. +This simple C# '''wrapper''' project is simply a way to include and instantiate the Eiffel .NETCore code. + +This "wrapper" project is useful for: +* [[#Executing]] using profile +* [[#Publishing|publishing]] the executable +* [[#Debugging_in_VisualStudio|debugging]] using VisualStudio. +* Working with any specific tool that requires a C# project + +See the next sections for more information. + +For an application named "app_netcore": +* the C# code is quite simple: + +... +public class wrap_app_netcore +{ + public static void Main() + { + MAIN.Main(); + } +} + +Note: the `MAIN.Main()` is the main entry point of the Eiffel .NETCore application. + +* the `wrap_app_netcore.csproj` file looks like: + + + + exe + net6.0 + enable + disable + true + true + + None + + + + + app_netcore.exe + + + Eiffelsoftware.Runtime.dll + + + + + +==Execution== +It is possible that an application requires additional setting (for example web APIs application), in this case the `dotnet run` tool can use a specific '''profile''' using the syntax `--launch-profile `. + +Read more about the `dotnet` tool, and especially the `run` command at [https://learn.microsoft.com/fr-fr/dotnet/core/tools/dotnet-run] . + +==Publishing== +The '''wrapper''' project is helpful to '''publish''' the executable to the current or other platforms, and have an executable that does not require the `dotnet` command. +It is also possible to include all dependencies (i.e: self contained) to ease deployment on machine without any dotnet runtime installed. + +{{note| use the `dotnet publish` tool on the generated wrapper project. See the documentation about `dotnet publish` at [https://learn.microsoft.com/en-us/dotnet/core/tools/dotnet-publish] .}} + +==Debugging in VisualStudio== +Even if EiffelStudio does not provide any support for debugging Eiffel .NETCore directly from the IDE. + +It is possible to use, for instance, '''VisualStudio''' to debug the generated Eiffel .NETcore application thanks to the wrapper C# project. + +A solution is to use the C# wrapper project generated by the Eiffel compiler (in W_code or F_code directory) within VisualStudio. +* Open the C# `.csproj` file with VisualStudio (it includes the associated Eiffel output dll or exe) +* Configure the Debugging profile +* Launch the execution with VisualStudio, and debug. + +==Limitations== +In the current version, the EiffelStudio compiler will always generate a Microsoft.NET.Sdk C# wrapper project. But this is not always the expected type SDKs. + +For instance when using ASP.NETCore, it is expected to use `Microsoft.NET.Sdk.Web`. + +In such case, the generated `.csproj` file needs to be manually modified to set the expected SDK, and also the various package dependencies. + +For instance: +* replace the first line of the `.csproj` file by +* and in the `` section, list the package references such as + +This allows the application to be run and, if necessary, debugged using VisualStudio. + +{{info|To learn more, check the Eiffel .NETCore examples at [[Eiffel .NET samples]].}} + + + diff --git a/documentation/trunk/solutions/dotnet/eiffel-net-language/eiffel-net-integration/Workaround-Eiffel-.NET-limitations.wiki b/documentation/trunk/solutions/dotnet/eiffel-net-language/eiffel-net-integration/Workaround-Eiffel-.NET-limitations.wiki new file mode 100644 index 00000000..c9736207 --- /dev/null +++ b/documentation/trunk/solutions/dotnet/eiffel-net-language/eiffel-net-integration/Workaround-Eiffel-.NET-limitations.wiki @@ -0,0 +1,80 @@ +[[Property:modification_date|Mon, 02 Oct 2023 13:38:24 GMT]] +[[Property:publication_date|Mon, 02 Oct 2023 10:22:20 GMT]] +[[Property:uuid|AF5801CA-928B-4870-BCC4-53DCAB23AF96]] +[[Property:weight|10]] +[[Property:title|Workaround Eiffel .NET limitations]] +[[Property:link_title|Workarounds]] + +There are a [[Eiffel for .NET Integration|few limitations]] in the integration between Eiffel .NET and .NET solution. +However, it is sometime possible to find workaround, a common technique is to use a C# facade project, and use it from the Eiffel .NET project. + +See in the following section, a way to use a facade C# project to workaround the current limitation on ".NET generic" compilation (i.e the fact the Eiffel compiler does not support yet the .NET generics). + +This technique can be adapted to bypass other limitations or annoyances. + +==Using generic .NET classes through a facade== +Currently, Eiffel does not support consuming generics from C# classes. This tutorial demonstrates a workaround for this limitation by creating a Facade for a `List` in C# + +===Creating a facade for the List type=== +A Facade simplifies access to complex components. In this case, we will create a Facade to manage a list of strings. The Facade will encapsulate the list's functionality and expose a more straightforward interface. Here's how you can do it: + + +using System.Collections; +namespace ListOfString; + +/// +/// Facade for a List that encapsulates the list's functionality and exposes a few methods +/// +public class ListOfString +{ + // Private list of strings + private List _list; + + // Constructor that initialize the list + public ListOfString() + { + _list = new List(); + } + + // Add an item to the list + public void Add(string item) + { + _list.Add(item); + } + + // Check if the list contains a specific item + public bool Contains(string item) + { + return _list.Contains(item); + } + + // Remove a specific item from the list + public void Remove(string item) + { + _list.Remove(item); + } + + public IList GetList() + { + return _list.ToList(); + } +} + + +===Creating a C# library=== +To consume the Facade in Eiffel, we need to create a C# library. I recommend following the tutorial on creating a class library with C# and .NET on Microsoft’s official site. You can access it [https://learn.microsoft.com/en-us/dotnet/core/tutorials/library-with-visual-studio?pivots=dotnet-7-0 here]. This tutorial guides you through the process of creating a class library using C# and .NET. + +===Consuming the C# library from Eiffel=== +Finally, we need to consume the C# library from Eiffel. + +Open the Eiffel configuration file (.ecf) of your project and add the following entry + + + + +===Conclusion=== +By creating a Facade for a `List` in C#, we can effectively consume C# generic features in Eiffel. +Obviously, this approach can be extended to other generic types as well. + + + diff --git a/documentation/trunk/solutions/dotnet/eiffel-net-language/eiffel-net-integration/index.wiki b/documentation/trunk/solutions/dotnet/eiffel-net-language/eiffel-net-integration/index.wiki new file mode 100644 index 00000000..9cf89766 --- /dev/null +++ b/documentation/trunk/solutions/dotnet/eiffel-net-language/eiffel-net-integration/index.wiki @@ -0,0 +1,96 @@ +[[Property:modification_date|Mon, 23 Oct 2023 15:36:40 GMT]] +[[Property:publication_date|Wed, 27 Sep 2023 19:33:07 GMT]] +[[Property:title|Eiffel for .NET Integration]] +[[Property:weight|3]] +[[Property:uuid|fe8a6a7d-4590-0db2-d59a-307082b18ecc]] +==Differences between Eiffel and Eiffel for .NET== + +===Limitation of Eiffel for .NET in version 23.09=== + +Most of the Eiffel mechanisms are supported in 23.09. + +Eiffel for .NET supports: +* Multiple Inheritance +* Design By Contract +* Exception handling +* Genericity +* Covariance +* Compilation of any existing Eiffel libraries as long as it does not include C externals that call into the Eiffel Software C runtime +* the [[Concurrent_programming_with_SCOOP|SCOOP]] capability is not support by the Eiffel.NET compiler + +However, there are a few limitations that are described later in this documentation. + +===Added to Eiffel and Eiffel for .NET=== + +The following syntax can be used to declare .NET custom attributes on Eiffel entities (features and classes): + + empty: BOOLEAN + note + description: "Is Current empty?" + metadata: create {OBSOLETE_ATTRIBUTE}.make ("Use `is_empty' instead") end + obsolete + "Use is_empty instead" + do + Result := is_empty + end + + +The previous example shows the declaration of the obsolete feature empty . The custom attribute defined by OBSOLETE_ATTRIBUTE is used to ensure that any consumer of the resulting assembly will see the feature as being obsolete. The custom attribute is defined in the note clause metadata. The definition consists of a creation expression that creates the custom attribute with the right parameters. + +Using the metadata tag is the most general way of applying a custom attribute. There are however some variations that are explained below: +*metadata: most general way, it applies a custom attribute to both the class and interface generated by the Eiffel compiler. +*class_metadata: applies only to the class generated by the Eiffel compiler (mostly for advanced users). +*interface_metadata: applies only to the interface generated by the Eiffel compiler (mostly for advanced users). +*property_metadata: applies a custom attribute to the associated property generated by the Eiffel compiler for a query. +*assembly_metadata: applies a custom attribute for the current assembly. It only works when present in the Eiffel system root class note clause. + +==Differences between Eiffel for .NET and .NET== + +===Covariance=== +The CLR (Common Language Runtime) does not support [[ET: Inheritance#Covariance and anchored declarations|covariance]] due to a different view of type safety (the issue is known known as a polymorphic [[ET: Inheritance#Catcalls|catcall]] in Eiffel). Catcalls are possible (although very rare) in Eiffel but not in .NET. + +Eiffel for .NET implements a safe variant of covariance that will always perform a check on the types to avoid a catcall. So when a catcall is going to be performed a `Invalid Cast Exception` will be raised by the CLR instead of an unexpected behavior as is the default behavior in classic Eiffel (i.e., the behavior without catcall detection explicitly enabled). + +Another advantage of Eiffel for .NET's implementation of covariance is that it can be easily understood by CLS-compliant consumer tools. These tools will actually benefit from the Eiffel for .NET covariance. + +===Handling Eiffel and .NET genericity=== +As noted above, Eiffel for .NET fully supports the powerful genericity mechanism of the Eiffel language. The interface with .NET's own genericity mechanism is, however, not complete in version 23.09. Specifically: + +* Generic classes in Eiffel will not yield generic classes in .NET. Instead, each generic derivation of a given Eiffel class will yield a different .NET class. So if we have a generic Eiffel class LIST [G], the type LIST [ANY] will yield a .NET class LIST_ANY, and the type LIST [INTEGER] will yield a class LIST_Int32 . + +* If you want to use a generic .NET class (for example in C#), you have to use special techniques as described next. + +{{Recommended|Read the [[Workaround Eiffel .NET limitations]] page to learn how to workaround such limitation. }} + +===Enum types=== +Eiffel for .NET supports .NET enum types implicitly. From the point of view of Eiffel, they are just considered as expanded classes. The only difference is in the code generation. Eiffel for .NET cannot declare new enum types yet. + +===ByRef=== + +Eiffel does not have the notion of `byref` argument passing. At the moment, Eiffel for .NET cannot call nor can it redefine a feature that has a byref argument. + +=== Type with "init" only setters=== +Eiffel currently does not support the special `init` property that is only initialized in a block of code as part of the object initialization. More details can be found in the [https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-9.0/init C# 9.0 proposal] + +Note: {{inline-info|this section is mostly for .NETCore 6.0 and above}}. + +'''Workaround''': + +A potential workaround is to create a C# library that uses a Factory pattern to build the required instance. + +===Execution and publishing === +Currently the EiffelStudio debugger supports only the Eiffel .NET Framework application (i.e .Net framework v4.0). + +For .NETCore (net6.0, net7.0, ...) it is not yet available within the EiffelStudio IDE. + +{{recommended|Learn more how to publish, execute, debug, ... the Eiffel .NETCore application, with the [[Eiffel .NETCore execution]] page.}} + +== Environment variables for .NETCore == +The Eiffel compiler sets a few environment variables available in the ECF files and allows to write ECF file without hardcoded version numbers. + +* '''ISE_DOTNET_FRAMEWORK''': location of the default .NET runtime directory (parent of System.dll, System.Runtime.dll, ...) +* '''ISE_DOTNET_PLATFORM''': for a .NET project it contains either "framework", or "netcore" to distinguish between .NET Framework (v4.0) and .NETCore solutions (net6.0, neet7.0, ...) +* '''ISE_DOTNET_PACKS''': location to the .NETCore "packs" directory (parent of .NETCore '''reference'' runtimes) +* '''ISE_DOTNET_PACKS''': location to the .NETCore "shared" directory (parent of .NETCore implementation runtimes) +* '''ISE_DOTNET_TFM''': .NETCore TFM (Target Framework Moniker) , for instance "net6", "net7", ... +* '''ISE_DOTNET_VERSION''': .NETCore runtime precise version number (for instance 7.0.11) diff --git a/documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-net-language/eiffel-net/adding-class-features.wiki b/documentation/trunk/solutions/dotnet/eiffel-net-language/eiffel-net/adding-class-features.wiki similarity index 100% rename from documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-net-language/eiffel-net/adding-class-features.wiki rename to documentation/trunk/solutions/dotnet/eiffel-net-language/eiffel-net/adding-class-features.wiki diff --git a/documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-net-language/eiffel-net/design-contract-and-assertions.wiki b/documentation/trunk/solutions/dotnet/eiffel-net-language/eiffel-net/design-contract-and-assertions.wiki similarity index 100% rename from documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-net-language/eiffel-net/design-contract-and-assertions.wiki rename to documentation/trunk/solutions/dotnet/eiffel-net-language/eiffel-net/design-contract-and-assertions.wiki diff --git a/documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-net-language/eiffel-net/eiffel-classes.wiki b/documentation/trunk/solutions/dotnet/eiffel-net-language/eiffel-net/eiffel-classes.wiki similarity index 100% rename from documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-net-language/eiffel-net/eiffel-classes.wiki rename to documentation/trunk/solutions/dotnet/eiffel-net-language/eiffel-net/eiffel-classes.wiki diff --git a/documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-net-language/eiffel-net/eiffel-net-compliance.wiki b/documentation/trunk/solutions/dotnet/eiffel-net-language/eiffel-net/eiffel-net-compliance.wiki similarity index 100% rename from documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-net-language/eiffel-net/eiffel-net-compliance.wiki rename to documentation/trunk/solutions/dotnet/eiffel-net-language/eiffel-net/eiffel-net-compliance.wiki diff --git a/documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-net-language/eiffel-net/event-programming-agents.wiki b/documentation/trunk/solutions/dotnet/eiffel-net-language/eiffel-net/event-programming-agents.wiki similarity index 100% rename from documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-net-language/eiffel-net/event-programming-agents.wiki rename to documentation/trunk/solutions/dotnet/eiffel-net-language/eiffel-net/event-programming-agents.wiki diff --git a/documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-net-language/eiffel-net/exception-mechanism.wiki b/documentation/trunk/solutions/dotnet/eiffel-net-language/eiffel-net/exception-mechanism.wiki similarity index 100% rename from documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-net-language/eiffel-net/exception-mechanism.wiki rename to documentation/trunk/solutions/dotnet/eiffel-net-language/eiffel-net/exception-mechanism.wiki diff --git a/documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-net-language/eiffel-net/genericity.wiki b/documentation/trunk/solutions/dotnet/eiffel-net-language/eiffel-net/genericity.wiki similarity index 100% rename from documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-net-language/eiffel-net/genericity.wiki rename to documentation/trunk/solutions/dotnet/eiffel-net-language/eiffel-net/genericity.wiki diff --git a/documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-net-language/eiffel-net/index.wiki b/documentation/trunk/solutions/dotnet/eiffel-net-language/eiffel-net/index.wiki similarity index 100% rename from documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-net-language/eiffel-net/index.wiki rename to documentation/trunk/solutions/dotnet/eiffel-net-language/eiffel-net/index.wiki diff --git a/documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-net-language/eiffel-net/inheritance.wiki b/documentation/trunk/solutions/dotnet/eiffel-net-language/eiffel-net/inheritance.wiki similarity index 100% rename from documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-net-language/eiffel-net/inheritance.wiki rename to documentation/trunk/solutions/dotnet/eiffel-net-language/eiffel-net/inheritance.wiki diff --git a/documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-net-language/eiffel-net/referenced-assembly-type-and-feature-name-conversion.wiki b/documentation/trunk/solutions/dotnet/eiffel-net-language/eiffel-net/referenced-assembly-type-and-feature-name-conversion.wiki similarity index 100% rename from documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-net-language/eiffel-net/referenced-assembly-type-and-feature-name-conversion.wiki rename to documentation/trunk/solutions/dotnet/eiffel-net-language/eiffel-net/referenced-assembly-type-and-feature-name-conversion.wiki diff --git a/documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-net-language/eiffel-net/using-referenced-assemblies.wiki b/documentation/trunk/solutions/dotnet/eiffel-net-language/eiffel-net/using-referenced-assemblies.wiki similarity index 100% rename from documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-net-language/eiffel-net/using-referenced-assemblies.wiki rename to documentation/trunk/solutions/dotnet/eiffel-net-language/eiffel-net/using-referenced-assemblies.wiki diff --git a/documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-net-language/index.wiki b/documentation/trunk/solutions/dotnet/eiffel-net-language/index.wiki similarity index 88% rename from documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-net-language/index.wiki rename to documentation/trunk/solutions/dotnet/eiffel-net-language/index.wiki index a2b50cb5..75e0feea 100644 --- a/documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-net-language/index.wiki +++ b/documentation/trunk/solutions/dotnet/eiffel-net-language/index.wiki @@ -1,3 +1,5 @@ +[[Property:modification_date|Mon, 02 Oct 2023 14:01:34 GMT]] +[[Property:publication_date|Mon, 02 Oct 2023 14:01:34 GMT]] [[Property:title|The Eiffel for .NET language]] [[Property:weight|2]] [[Property:uuid|ba6cd8d3-683c-4167-bdef-a0274c392f34]] @@ -5,7 +7,7 @@ This section focuses on defining Eiffel for .NET. The key requirement for Eiffel Because not all Eiffel functionalities are present in .NET, the task of the Eiffel compiler is made more complicated since it has to emulate those mechanisms instead of reusing what .NET provides. For example the common language runtime of .NET does not support: * [[uuid:b8c10baa-4f50-adfe-a6f8-9cb56a8f1917#Multiple inheritance|multiple inheritance]] -* [[uuid:b8c10baa-4f50-adfe-a6f8-9cb56a8f1917#Genericity|genericity]] +* [[uuid:b8c10baa-4f50-adfe-a6f8-9cb56a8f1917#Genericity|genericity]] (only first versions of .NET) * [[uuid:b8c10baa-4f50-adfe-a6f8-9cb56a8f1917#Covariance|covariance]] * agents diff --git a/documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-net-language/known-issues.wiki b/documentation/trunk/solutions/dotnet/eiffel-net-language/known-issues.wiki similarity index 100% rename from documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-net-language/known-issues.wiki rename to documentation/trunk/solutions/dotnet/eiffel-net-language/known-issues.wiki diff --git a/documentation/trunk/solutions/dotnet/index.wiki b/documentation/trunk/solutions/dotnet/index.wiki new file mode 100644 index 00000000..345a3da0 --- /dev/null +++ b/documentation/trunk/solutions/dotnet/index.wiki @@ -0,0 +1,10 @@ +[[Property:modification_date|Mon, 02 Oct 2023 13:58:08 GMT]] +[[Property:publication_date|Fri, 29 Sep 2023 12:07:01 GMT]] +[[Property:title|.NET]] +[[Property:weight|-15]] +[[Property:uuid|55eda2f0-0c60-f08c-b141-913e31a49c2f]] + +Eiffel supports compilation of .NETCore (net6.0, net7.0, ...) and .NET Framework (v4.0). + + + diff --git a/documentation/trunk/solutions/dotnet/net-installation-instructions.wiki b/documentation/trunk/solutions/dotnet/net-installation-instructions.wiki new file mode 100644 index 00000000..e7b8fc26 --- /dev/null +++ b/documentation/trunk/solutions/dotnet/net-installation-instructions.wiki @@ -0,0 +1,14 @@ +[[Property:modification_date|Tue, 26 Sep 2023 19:12:15 GMT]] +[[Property:publication_date|Tue, 26 Sep 2023 19:11:02 GMT]] +[[Property:title|.NET Installation instructions]] +[[Property:weight|0]] +[[Property:uuid|64f7e3b1-f6ee-5cc4-1006-2fc4dfdaeae7]] +EiffelStudio supports '''.NETCore''' and only on Windows the '''.NET Framework''' (v4.0) . +Before being able to compile an Eiffel .NET project, you need to install .NETCore or the .NET Framework. + +* '''.NETCore''': see [https://learn.microsoft.com/en-us/dotnet/core/install/] (net6.0 or net7.0 are recommended) + +* '''.NET Framework (Windows only)''': see [https://learn.microsoft.com/en-us/dotnet/framework/install/] (you need to install either the .NET Framework, the .NET Framework SDK or Visual Studio .NET). + +If you do not have any of those installed, any Eiffel .NET compilation will report an error because no .NET features support are installed. + diff --git a/documentation/trunk/solutions/platform-specifics/microsoft-windows/net/samples/ado-net-samples/adonet-sample.wiki b/documentation/trunk/solutions/dotnet/samples/ado-net-samples/adonet-sample.wiki similarity index 100% rename from documentation/trunk/solutions/platform-specifics/microsoft-windows/net/samples/ado-net-samples/adonet-sample.wiki rename to documentation/trunk/solutions/dotnet/samples/ado-net-samples/adonet-sample.wiki diff --git a/documentation/trunk/solutions/platform-specifics/microsoft-windows/net/samples/ado-net-samples/index.wiki b/documentation/trunk/solutions/dotnet/samples/ado-net-samples/index.wiki similarity index 100% rename from documentation/trunk/solutions/platform-specifics/microsoft-windows/net/samples/ado-net-samples/index.wiki rename to documentation/trunk/solutions/dotnet/samples/ado-net-samples/index.wiki diff --git a/documentation/trunk/solutions/platform-specifics/microsoft-windows/net/samples/console-samples/calculator-console.wiki b/documentation/trunk/solutions/dotnet/samples/console-samples/calculator-console.wiki similarity index 100% rename from documentation/trunk/solutions/platform-specifics/microsoft-windows/net/samples/console-samples/calculator-console.wiki rename to documentation/trunk/solutions/dotnet/samples/console-samples/calculator-console.wiki diff --git a/documentation/trunk/solutions/platform-specifics/microsoft-windows/net/samples/console-samples/index.wiki b/documentation/trunk/solutions/dotnet/samples/console-samples/index.wiki similarity index 100% rename from documentation/trunk/solutions/platform-specifics/microsoft-windows/net/samples/console-samples/index.wiki rename to documentation/trunk/solutions/dotnet/samples/console-samples/index.wiki diff --git a/documentation/trunk/solutions/dotnet/samples/index.wiki b/documentation/trunk/solutions/dotnet/samples/index.wiki new file mode 100644 index 00000000..afd47726 --- /dev/null +++ b/documentation/trunk/solutions/dotnet/samples/index.wiki @@ -0,0 +1,14 @@ +[[Property:modification_date|Mon, 02 Oct 2023 10:53:11 GMT]] +[[Property:publication_date|Fri, 29 Sep 2023 12:02:25 GMT]] +[[Property:title|Eiffel .NET samples]] +[[Property:weight|3]] +[[Property:uuid|c1dbfdb5-c4d0-f674-d818-00d56c431c6e]] +In this chapter you will find a series of examples that will permit to you to understand the bases of programming with Dotnet. + +However, you should be familiar with Object-Oriented programming model. Almost all other examples can also be built for .NET if the dotnet target is choosen instead of classic. + +{{Caution|Those examples were initially built for Eiffel .NET framework and may not work with .NETCore (net6.0, net7.0, ...) }} + +{{Recommended|Visit the GitHub organization [https://github.com/EiffelNETCore] for more '''.NETCore examples''' (Machine Learning, ASP.NETCore, ...) using EiffelStudio .NET. }} + + diff --git a/documentation/trunk/solutions/platform-specifics/microsoft-windows/net/samples/threads-samples/index.wiki b/documentation/trunk/solutions/dotnet/samples/threads-samples/index.wiki similarity index 100% rename from documentation/trunk/solutions/platform-specifics/microsoft-windows/net/samples/threads-samples/index.wiki rename to documentation/trunk/solutions/dotnet/samples/threads-samples/index.wiki diff --git a/documentation/trunk/solutions/platform-specifics/microsoft-windows/net/samples/threads-samples/pools.wiki b/documentation/trunk/solutions/dotnet/samples/threads-samples/pools.wiki similarity index 100% rename from documentation/trunk/solutions/platform-specifics/microsoft-windows/net/samples/threads-samples/pools.wiki rename to documentation/trunk/solutions/dotnet/samples/threads-samples/pools.wiki diff --git a/documentation/trunk/solutions/platform-specifics/microsoft-windows/net/samples/threads-samples/timers.wiki b/documentation/trunk/solutions/dotnet/samples/threads-samples/timers.wiki similarity index 100% rename from documentation/trunk/solutions/platform-specifics/microsoft-windows/net/samples/threads-samples/timers.wiki rename to documentation/trunk/solutions/dotnet/samples/threads-samples/timers.wiki diff --git a/documentation/trunk/solutions/platform-specifics/microsoft-windows/net/samples/winform-samples/calculator-winform.wiki b/documentation/trunk/solutions/dotnet/samples/winform-samples/calculator-winform.wiki similarity index 100% rename from documentation/trunk/solutions/platform-specifics/microsoft-windows/net/samples/winform-samples/calculator-winform.wiki rename to documentation/trunk/solutions/dotnet/samples/winform-samples/calculator-winform.wiki diff --git a/documentation/trunk/solutions/platform-specifics/microsoft-windows/net/samples/winform-samples/date-time-picker.wiki b/documentation/trunk/solutions/dotnet/samples/winform-samples/date-time-picker.wiki similarity index 100% rename from documentation/trunk/solutions/platform-specifics/microsoft-windows/net/samples/winform-samples/date-time-picker.wiki rename to documentation/trunk/solutions/dotnet/samples/winform-samples/date-time-picker.wiki diff --git a/documentation/trunk/solutions/platform-specifics/microsoft-windows/net/samples/winform-samples/gdi-plus-text.wiki b/documentation/trunk/solutions/dotnet/samples/winform-samples/gdi-plus-text.wiki similarity index 100% rename from documentation/trunk/solutions/platform-specifics/microsoft-windows/net/samples/winform-samples/gdi-plus-text.wiki rename to documentation/trunk/solutions/dotnet/samples/winform-samples/gdi-plus-text.wiki diff --git a/documentation/trunk/solutions/platform-specifics/microsoft-windows/net/samples/winform-samples/index.wiki b/documentation/trunk/solutions/dotnet/samples/winform-samples/index.wiki similarity index 55% rename from documentation/trunk/solutions/platform-specifics/microsoft-windows/net/samples/winform-samples/index.wiki rename to documentation/trunk/solutions/dotnet/samples/winform-samples/index.wiki index 61482c4b..4e3e0d07 100644 --- a/documentation/trunk/solutions/platform-specifics/microsoft-windows/net/samples/winform-samples/index.wiki +++ b/documentation/trunk/solutions/dotnet/samples/winform-samples/index.wiki @@ -1,5 +1,10 @@ +[[Property:modification_date|Mon, 02 Oct 2023 10:37:38 GMT]] +[[Property:publication_date|Mon, 02 Oct 2023 10:37:38 GMT]] [[Property:title|Winform Samples]] [[Property:weight|3]] [[Property:uuid|24cbeb3c-ba2b-1fea-ccec-89600bbf3256]] + +{{Caution|Those WinForm samples targets Eiffel .NET framework and are probably not compiling with .NETCore (net6.0, net7.0, ...) }} + The following examples are classified generally from the easiest to the most complex. So, some notions are introduced in the few first examples and will not be explained again in the more complex examples! diff --git a/documentation/trunk/solutions/platform-specifics/microsoft-windows/net/samples/winform-samples/mdi/index.wiki b/documentation/trunk/solutions/dotnet/samples/winform-samples/mdi/index.wiki similarity index 100% rename from documentation/trunk/solutions/platform-specifics/microsoft-windows/net/samples/winform-samples/mdi/index.wiki rename to documentation/trunk/solutions/dotnet/samples/winform-samples/mdi/index.wiki diff --git a/documentation/trunk/solutions/platform-specifics/microsoft-windows/net/samples/winform-samples/mdi/mdi-details.wiki b/documentation/trunk/solutions/dotnet/samples/winform-samples/mdi/mdi-details.wiki similarity index 100% rename from documentation/trunk/solutions/platform-specifics/microsoft-windows/net/samples/winform-samples/mdi/mdi-details.wiki rename to documentation/trunk/solutions/dotnet/samples/winform-samples/mdi/mdi-details.wiki diff --git a/documentation/trunk/solutions/platform-specifics/microsoft-windows/net/samples/winform-samples/menus/index.wiki b/documentation/trunk/solutions/dotnet/samples/winform-samples/menus/index.wiki similarity index 100% rename from documentation/trunk/solutions/platform-specifics/microsoft-windows/net/samples/winform-samples/menus/index.wiki rename to documentation/trunk/solutions/dotnet/samples/winform-samples/menus/index.wiki diff --git a/documentation/trunk/solutions/platform-specifics/microsoft-windows/net/samples/winform-samples/menus/menu-details.wiki b/documentation/trunk/solutions/dotnet/samples/winform-samples/menus/menu-details.wiki similarity index 100% rename from documentation/trunk/solutions/platform-specifics/microsoft-windows/net/samples/winform-samples/menus/menu-details.wiki rename to documentation/trunk/solutions/dotnet/samples/winform-samples/menus/menu-details.wiki diff --git a/documentation/trunk/solutions/platform-specifics/microsoft-windows/net/samples/winform-samples/message-box.wiki b/documentation/trunk/solutions/dotnet/samples/winform-samples/message-box.wiki similarity index 100% rename from documentation/trunk/solutions/platform-specifics/microsoft-windows/net/samples/winform-samples/message-box.wiki rename to documentation/trunk/solutions/dotnet/samples/winform-samples/message-box.wiki diff --git a/documentation/trunk/solutions/platform-specifics/microsoft-windows/net/samples/winform-samples/progress-bar-sample.wiki b/documentation/trunk/solutions/dotnet/samples/winform-samples/progress-bar-sample.wiki similarity index 100% rename from documentation/trunk/solutions/platform-specifics/microsoft-windows/net/samples/winform-samples/progress-bar-sample.wiki rename to documentation/trunk/solutions/dotnet/samples/winform-samples/progress-bar-sample.wiki diff --git a/documentation/trunk/solutions/platform-specifics/microsoft-windows/net/samples/winform-samples/simple-data-binding.wiki b/documentation/trunk/solutions/dotnet/samples/winform-samples/simple-data-binding.wiki similarity index 100% rename from documentation/trunk/solutions/platform-specifics/microsoft-windows/net/samples/winform-samples/simple-data-binding.wiki rename to documentation/trunk/solutions/dotnet/samples/winform-samples/simple-data-binding.wiki diff --git a/documentation/trunk/solutions/platform-specifics/microsoft-windows/net/samples/winform-samples/simple-hello-world-form-sample.wiki b/documentation/trunk/solutions/dotnet/samples/winform-samples/simple-hello-world-form-sample.wiki similarity index 100% rename from documentation/trunk/solutions/platform-specifics/microsoft-windows/net/samples/winform-samples/simple-hello-world-form-sample.wiki rename to documentation/trunk/solutions/dotnet/samples/winform-samples/simple-hello-world-form-sample.wiki diff --git a/documentation/trunk/solutions/platform-specifics/microsoft-windows/net/samples/winform-samples/tree-view.wiki b/documentation/trunk/solutions/dotnet/samples/winform-samples/tree-view.wiki similarity index 100% rename from documentation/trunk/solutions/platform-specifics/microsoft-windows/net/samples/winform-samples/tree-view.wiki rename to documentation/trunk/solutions/dotnet/samples/winform-samples/tree-view.wiki diff --git a/documentation/trunk/solutions/gui-building/eiffelvision-2/Vison2_howto/converting-eiffelvision-2-systems-void-safety.wiki b/documentation/trunk/solutions/gui-building/eiffelvision-2/Vison2_howto/converting-eiffelvision-2-systems-void-safety.wiki index 9f7586a6..8905699c 100644 --- a/documentation/trunk/solutions/gui-building/eiffelvision-2/Vison2_howto/converting-eiffelvision-2-systems-void-safety.wiki +++ b/documentation/trunk/solutions/gui-building/eiffelvision-2/Vison2_howto/converting-eiffelvision-2-systems-void-safety.wiki @@ -1,9 +1,11 @@ +[[Property:modification_date|Thu, 27 Jun 2024 10:51:45 GMT]] +[[Property:publication_date|Thu, 27 Jun 2024 10:51:45 GMT]] [[Property:title|Converting EiffelVision 2 Systems to Void-Safety]] [[Property:weight|1]] [[Property:uuid|96e01318-700b-da6e-42d1-14fee219daf5]] ==Introduction== -In order to convert systems that employ EiffelVision 2 (Vision2) to [[Void-safe Programming in Eiffel|void-safety]], some adjustments may be needed depending on its usage. This page describes the various usage scenarios of Vision2 that will need to be converted in order to adhere to void-safety. +In order to convert systems that employ EiffelVision 2 (Vision2) to [[Void-safe programming in Eiffel|void-safety]], some adjustments may be needed depending on its usage. This page describes the various usage scenarios of Vision2 that will need to be converted in order to adhere to void-safety. ==Inheritance Purely from an Interface Class== @@ -82,5 +84,5 @@ The following steps are needed during the conversion: * Remove `make', rename `initialize' to `make', and make sure that any calls to Precursor do not override any settings set in `initialize'. The ordering may need to be changed in order to make the code void-safe. See EV_POPUP_WINDOW_IMP.make (Windows implementation) where the setting of `user_can_resize' is performed after the Precursor call so that is doesn't get overriden. -{{SeeAlso|[[Void-Safe Programming in Eiffel]]}} +{{SeeAlso|[[Void-safe programming in Eiffel]]}} diff --git a/documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-net-language/eiffel-net-integration.wiki b/documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-net-language/eiffel-net-integration.wiki deleted file mode 100644 index 71c963ef..00000000 --- a/documentation/trunk/solutions/platform-specifics/microsoft-windows/net/eiffel-net-language/eiffel-net-integration.wiki +++ /dev/null @@ -1,76 +0,0 @@ -[[Property:title|Eiffel for .NET Integration]] -[[Property:weight|3]] -[[Property:uuid|fe8a6a7d-4590-0db2-d59a-307082b18ecc]] -==Differences between Eiffel and Eiffel for .NET== - -===Limitation of Eiffel for .NET in version 5. 5=== - -Most of the Eiffel mechanisms are supported in 5. 5. All missing features listed below are planned for addition in future releases: -* No creation of Eiffel expanded class support -* Partial implementation of generic conformance (same as what was supported up to and including the 4.2 release of the Eiffel development environment). - -Eiffel for .NET supports: -* Multiple Inheritance -* Design By Contract -* Exception handling -* Genericity -* Covariance -* Compilation of any existing Eiffel libraries as long as it does not include C externals that call into the Eiffel Software C runtime - -===Added to Eiffel and Eiffel for .NET=== - -The following syntax can be used to declare .NET custom attributes on Eiffel entities (features and classes): - - empty: BOOLEAN - note - description: "Is Current empty?" - metadata: create {OBSOLETE_ATTRIBUTE}.make_obsoleteattribute_1 ("Use `is_empty' instead") end - obsolete - "Use is_empty instead" - do - Result := is_empty - end - - -The previous example shows the declaration of the obsolete feature empty . The custom attribute defined by OBSOLETE_ATTRIBUTE is used to ensure that any consumer of the resulting assembly will see the feature as being obsolete. The custom attribute is defined in the note clause metadata. The definition consists of a creation expression that creates the custom attribute with the right parameters. - -Using the metadata tag is the most general way of applying a custom attribute. There are however some variations that are explained below: -*metada: most general way, it applies a custom attribute to both the class and interface generated by the Eiffel compiler. -*class_metadata: applies only to the class generated by the Eiffel compiler (mostly for advanced users). -*interface_metadata: applies only to the interface generated by the Eiffel compiler (mostly for advanced users). -*property_metadata: applies a custom attribute to the associated property generated by the Eiffel compiler for a query. -*assembly_metadata: applies a custom attribute for the current assembly. It only works when present in the Eiffel system root class note clause. - -==Differences between Eiffel for .NET and .NET== - -===Covariance=== - -The CLR (Common Language Runtime) does not support [[ET: Inheritance#Covariance and anchored declarations|covariance]] due to a type safety issue that full covariance implies (known as a polymorphic [[ET: Inheritance#Catcalls|catcall]] in Eiffel). Although very rare, catcalls are not suitable to .NET where safety is one of the primary goals. - -Eiffel for .NET implements a safe variant of covariance that will always perform a check on the types to avoid a catcall. So when a catcall is going to be performed a `Invalid Cast Exception` will be raised by the CLR instead of an unexpected behavior as is the default behavior in classic Eiffel (i.e., the behavior without catcall detection explicitly enabled). - -Another advantage of Eiffel for .NET's implementation of covariance is that it can be easily understood by CLS compliant consumer tools. These tools will actually benefit from the Eiffel for .NET covariance. - -===Genericity=== - -The CLR does not support generics at all, so that the following Eiffel for .NET classes: -* LIST [ANY] -* LIST [INTEGER] - -will actually be generated as: -* LIST_ANY -* LIST_Int32 - -Meaning that if one wants to reuse an Eiffel generic class from another language than Eiffel for .NET, one has to use either LIST_ANY or LIST_Int32. - -===Enum types=== - -Eiffel for .NET supports .NET enum types implicitly. From the point of view of Eiffel, they are just considered as expanded classes. The only difference is in the code generation. Eiffel for .NET cannot declare new enum types yet. - -===ByRef=== - -Eiffel does not have the notion of `byref` argument passing. At the moment, Eiffel for .NET cannot call nor can it redefine a feature that has a byref argument. - - - - diff --git a/documentation/trunk/solutions/platform-specifics/microsoft-windows/net/index.wiki b/documentation/trunk/solutions/platform-specifics/microsoft-windows/net/index.wiki deleted file mode 100644 index 5409ccbf..00000000 --- a/documentation/trunk/solutions/platform-specifics/microsoft-windows/net/index.wiki +++ /dev/null @@ -1,8 +0,0 @@ -[[Property:title|.NET]] -[[Property:weight|-15]] -[[Property:uuid|55eda2f0-0c60-f08c-b141-913e31a49c2f]] -==.NET== - -Eiffel support for Microsoft .NET. - - diff --git a/documentation/trunk/solutions/platform-specifics/microsoft-windows/net/net-installation-instructions.wiki b/documentation/trunk/solutions/platform-specifics/microsoft-windows/net/net-installation-instructions.wiki deleted file mode 100644 index 81cb8df4..00000000 --- a/documentation/trunk/solutions/platform-specifics/microsoft-windows/net/net-installation-instructions.wiki +++ /dev/null @@ -1,5 +0,0 @@ -[[Property:title|.NET Installation instructions]] -[[Property:weight|0]] -[[Property:uuid|64f7e3b1-f6ee-5cc4-1006-2fc4dfdaeae7]] -Before installing the .NET components for Eiffel for .NET you need to install either the .NET Framework, the .NET Framework SDK or Visual Studio .NET. If you do not have any of those installed, the installation program will prompt you with a warning because no .NET features support will be installed. - diff --git a/documentation/trunk/solutions/platform-specifics/microsoft-windows/net/samples/index.wiki b/documentation/trunk/solutions/platform-specifics/microsoft-windows/net/samples/index.wiki deleted file mode 100644 index cd4d94da..00000000 --- a/documentation/trunk/solutions/platform-specifics/microsoft-windows/net/samples/index.wiki +++ /dev/null @@ -1,7 +0,0 @@ -[[Property:title|Samples]] -[[Property:weight|3]] -[[Property:uuid|c1dbfdb5-c4d0-f674-d818-00d56c431c6e]] -In this chapter you will find a series of examples that will permit to you to understand the bases of programming with Dotnet. - -However, you should be familiar with Object-Oriented programming model. Almost all other examples can also be built for .NET if the dotnet target is choosen instead of classic. - diff --git a/documentation/trunk/solutions/web-technology/EiffelWeb-framework.wiki b/documentation/trunk/solutions/web-technology/EiffelWeb-framework.wiki index f54a307e..107305bf 100644 --- a/documentation/trunk/solutions/web-technology/EiffelWeb-framework.wiki +++ b/documentation/trunk/solutions/web-technology/EiffelWeb-framework.wiki @@ -1,3 +1,5 @@ +[[Property:modification_date|Wed, 20 Mar 2024 17:14:32 GMT]] +[[Property:publication_date|Wed, 20 Mar 2024 15:13:54 GMT]] [[Property:uuid|5D7CBC54-D97A-4400-9335-9C8FB3CBE004]] [[Property:weight|0]] [[Property:title|EiffelWeb framework]] @@ -8,7 +10,7 @@ The EiffelWeb Framework provides a common framework to build easily web server application in Eiffel (portable on various connectors and platforms). * Project on github: [https://github.com/EiffelWebFramework/EWF] -* Associated website [http://www.eiffelweb.org/] +* Associated website [https://eiffelweb.projects.eiffel.org/] * Latest documentation [https://github.com/EiffelWebFramework/EWF/blob/master/docs/workbook/workbook.md] * Gitter.im room [https://gitter.im/EiffelWebFramework/EWF] * Forum [https://groups.google.com/forum/#!forum/eiffel-web-framework]