mirror of
https://github.com/EiffelSoftware/eiffel-org.git
synced 2025-12-08 07:42:33 +01:00
Updated to upcoming 23.09
git-svn-id: https://svn.eiffel.com/eiffel-org/trunk@2393 abb3cda0-5349-4a8f-a601-0c33ac3a8c38
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
[[Property:modification_date|Mon, 02 Sep 2019 08:02:24 GMT]]
|
||||
[[Property:modification_date|Fri, 14 Apr 2023 08:22:51 GMT]]
|
||||
[[Property:publication_date|Mon, 02 Sep 2019 08:02:24 GMT]]
|
||||
[[Property:uuid|7CCF602E-0B79-49C2-93FE-39C90CBE4E35]]
|
||||
[[Property:link_title|Code Templates]]
|
||||
@@ -106,6 +106,7 @@ To offer templates as part of code completion, EiffelStudio looks in two locatio
|
||||
** Windows: <code>C:/Users/your_user_name/Documents/Eiffel User Files/16.11/templates/code</code>
|
||||
|
||||
If you define templates for your own specific use, store them in the second location.
|
||||
The template file should be an Eiffel file (with `e` file extension).
|
||||
|
||||
== Defining a targeted template ==
|
||||
Here is how we defined the template used in the above targeted example:
|
||||
@@ -147,11 +148,34 @@ This class defines two targeted templates: ''maximum'' for the maximum of an ent
|
||||
To specify the target type, here arrays, just use it as the actual generic parameters of TEMPLATE (which is a generic class). Here indeed, the the definition starts as
|
||||
|
||||
<code>
|
||||
class ARRAY_TEMPLATE [T -> COMPARABLE] inherit
|
||||
|
||||
TEMPLATE [ARRAY [T]]
|
||||
class ARRAY_TEMPLATE [T -> COMPARABLE]
|
||||
|
||||
inherit
|
||||
TEMPLATE [ARRAY [T]]
|
||||
</code>
|
||||
|
||||
Another example, without generic parameters:
|
||||
|
||||
<code>
|
||||
class STRING_UTF_8_TEMPLATE [T -> READABLE_STRING_GENERAL]
|
||||
|
||||
inherit
|
||||
TEMPLATE [T]
|
||||
|
||||
feature -- Templates
|
||||
|
||||
to_utf_8: STRING_8
|
||||
-- STRING_8 string from `target'.
|
||||
note
|
||||
title: "To UTF-8 STRING"
|
||||
tags: "Unicode, String, STRING"
|
||||
do{UTF_CONVERTER}.utf_32_string_to_utf_8_string_8 (target)end
|
||||
|
||||
end
|
||||
</code>
|
||||
(note: in that example, there is no space after the `do` and before the `end`, so the template is applied without adding extra unwanted spaces)
|
||||
|
||||
== Integration within EiffelStudio ==
|
||||
|
||||
The correspondence between what you write in the template definition and what appears in EiffelStudio, as shown in previous sections, is straightforward:
|
||||
|
||||
@@ -162,7 +186,6 @@ The correspondence between what you write in the template definition and what ap
|
||||
|
||||
== Defining a targetless template ==
|
||||
|
||||
|
||||
For a targetless template, just just use TEMPLATE without a generic parameter:
|
||||
|
||||
<code>
|
||||
|
||||
@@ -0,0 +1,59 @@
|
||||
[[Property:modification_date|Mon, 09 Jan 2023 13:42:55 GMT]]
|
||||
[[Property:publication_date|Wed, 04 Jan 2023 11:34:24 GMT]]
|
||||
[[Property:uuid|9545048C-03AF-4F8C-BE54-0DD7B7C31CF2]]
|
||||
[[Property:weight|0]]
|
||||
[[Property:title|Release notes for EiffelStudio 22.12 - macosx]]
|
||||
[[Property:link_title|22.12 - macosx]]
|
||||
|
||||
= Known GUI issues =
|
||||
Vision2 UI apps have bad issue on macosx M1/M2 (arm architecture) with XQuartz.
|
||||
|
||||
== Use the latest XQuartz version ===
|
||||
Be sure to use the latest XQuartz, as it gets improvement from time to time (currently version 2.8.4), and hopefully remaining EiffelStudio UI annoyance will disappear with future versions.
|
||||
|
||||
== Do not disable X11 rendering ===
|
||||
In other words, be sure to use the following default XQuartz setting:
|
||||
|
||||
```
|
||||
defaults write org.xquartz.X11 enable_render_extension 1
|
||||
```
|
||||
|
||||
Otherwise, if `enable_render_extension = 0`, text fields (and similar) will not work properly for EiffelStudio and any Vision2 application (and could even crash the application), in addition it degrades GUI application performance.
|
||||
|
||||
== Black background annoyance ==
|
||||
|
||||
When using default setting (`enable_render_extension = 1`), EiffelStudio has '''back blackground''' for a few widgets (menu, label, ...), especially when EiffelStudio has the focus, which makes it hard to use.
|
||||
|
||||
EiffelStudio is not the only macosx application having this bad issue with XQuartz (matlab, git gui, ...), and so far no workaround works well with EiffelStudio.
|
||||
|
||||
Let us hope that XQuartz fixes this issue in a future version update.
|
||||
|
||||
Note: there is no such issue when using the interface via a remote application such as NoMachine.
|
||||
|
||||
===A dirty but acceptable workaround: CSS ===
|
||||
|
||||
Using `~/.config/gtk-3.0/gtk.css` to use colors that would make EiffelStudio reading in "normal" mode, and in "black background annoyance" mode.
|
||||
|
||||
For that, put the following text inside `~/.config/gtk-3.0/gtk.css`
|
||||
|
||||
```css
|
||||
.background { background-color: #cccccc; color: white }
|
||||
widget, box, text, label { background-color: #cccccc; color: white }
|
||||
.titlebar { background-color: #ff0000 }
|
||||
window, menuitem { background-color: #cccccc; color: white }
|
||||
menuitem:hover { background-color: white; color: #cccccc }
|
||||
```
|
||||
|
||||
= C code consideration =
|
||||
On macosx, ```clang``` is the default C compiler.
|
||||
A few clang compiler optimizations were causing issues for Eiffel project, and the ARM architecture is less human friendly as x86.
|
||||
|
||||
As a consequence, the Eiffel generated C code was modified to avoid compilation optimization to be applied wrongly.
|
||||
|
||||
It was also the opportunity to improve part of the C code (mostly in the Eiffel runtime), to avoid ambiguous case between various C compilers (MS cl, GCC, CLANG, ...).
|
||||
|
||||
== As a quick summary:==
|
||||
|
||||
- if you write C code with Eiffel (i.e external C feature), be aware that clang may move local variable to registers as an optimization, so the C code compares the result of 2 C functions that may call the Eiffel GC (i.e manipulating Eiffel object), it is safer to store the result of the C functions in local C variables, and then compare the local variables.
|
||||
|
||||
- When using C function pointer (declared with a typedef with `...` as last argument), the caller code should always use adapted ```function cast``` that declares all arguments, otherwise clang may consider the C function signature uses ```va_args``` (but this is not always the case), and the argument values will not be pushed to the stack as expected.
|
||||
@@ -0,0 +1,26 @@
|
||||
[[Property:modification_date|Wed, 04 Jan 2023 11:33:21 GMT]]
|
||||
[[Property:publication_date|Thu, 22 Dec 2022 13:40:15 GMT]]
|
||||
[[Property:uuid|EA73C2B4-1A89-4A2A-A53F-2E5617B140BA]]
|
||||
[[Property:title|Release notes for EiffelStudio 22.12]]
|
||||
[[Property:link_title|22.12]]
|
||||
[[Property:weight|-8]]
|
||||
|
||||
==Graphical environment==
|
||||
* Added code completion support for once classes
|
||||
* Improved the '''Add Library''' implementation by allowing to add "redirection" ecf files, and fixed the '''Add Cluster''' functionalities in recursive cluster.
|
||||
* Fixed an harmless exception when first inserting Unicode symbol using the "Insert Symbol" dialog on Windows.
|
||||
|
||||
==Compiler==
|
||||
* New platforms: macosx-armv6 (M1, M2 support) and linux-arm64.
|
||||
* Reviewed and updated generated C code to fix potential execution issues due to "clang" C compiler optimizations (especially on ARM architecture).
|
||||
* Fixed the compilation of once class without any creation procedures.
|
||||
|
||||
==Tools==
|
||||
* It is now possible to use the "emdc.exe" .Net md consumer, as an alternative to the COM md consumer from EiffelStudio, as a first step toward supporting .Net on non Windows platform.
|
||||
|
||||
== Warning ==
|
||||
For Macos users on M1/M2 (arm) architecture, please read the specific note [[Release notes for EiffelStudio 22.12 - macosx]]
|
||||
|
||||
----
|
||||
|
||||
See [https://dev.eiffel.com/EiffelStudio_22.12_Releases change log] for more details.
|
||||
Reference in New Issue
Block a user