Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Eure Meinung: Syntaxerweiterung Set-Typen auf mehr als 255 Elemente (https://www.delphipraxis.net/197260-eure-meinung-syntaxerweiterung-set-typen-auf-mehr-als-255-elemente.html)

Uwe Raabe 25. Jul 2018 08:55

AW: Eure Meinung: Syntaxerweiterung Set-Typen auf mehr als 255 Elemente
 
Zitat:

Zitat von Codehunter (Beitrag 1408601)
Das deckt sich auch mit der Bechreibung hier:

https://de.wikibooks.org/wiki/Progra...z%C3%A4hlungen (insbesondere der letzte Absatz ganz unten)

Nein, das tut es nicht. Der angesprochene Absatz beschreibt nur das Verhalten der von mir bereits angesprochenen Mindestgröße für Enum, mit der festgelegt wird, welcher Speicherbereich für ein Enum verwendet wird. Bei der Standardeinstellung Byte tritt genau das in dem Absatz beschriebene Verhalten auf. Konkretes Beispiel: TMyEnum hat 300 Elemente und belegt somit mindestens 2 Byte. Daher lassen sich einer Variablen vom Typ TMyEnum auch Ordinalwerte bis 65535 zuweisen, obwohl der Typ diese eigentlich nicht mehr unterstützt.

gammatester 25. Jul 2018 08:57

AW: Eure Meinung: Syntaxerweiterung Set-Typen auf mehr als 255 Elemente
 
Zitat:

Zitat von Schokohase (Beitrag 1408606)
@Codehunter

So irgendwelche Quellen sind ja teilweise hilfreich, aber warum nicht mal einen Blick in die Doku des Herstellers werfen?

http://docwiki.embarcadero.com/RADSt...-Typen_(Delphi)

Zitat:

Enthält der Aufzählungstyp mehr als 256 Werte oder wurde er im Status {$Z2} deklariert, wird er als vorzeichenloses Wort gespeichert.

Also bei mit gibt's nur
Code:
Diese Seite enthält momentan noch keinen Text und du bist auch nicht dazu berechtigt, diese Seite zu erstellen. Du kannst ihren Titel auf anderen Seiten suchen oder die zugehörigen Logbücher betrachten.

Neutral General 25. Jul 2018 08:58

AW: Eure Meinung: Syntaxerweiterung Set-Typen auf mehr als 255 Elemente
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Codehunter (Beitrag 1408601)
EDIT: Fast übersehen!
Zitat:

Zitat von Uwe Raabe (Beitrag 1408593)
Dagegen spricht auch die Compiler-Option Mindestgröße für Enum, in der man Byte, Word oder Double Word auswählen kann.

Das ist des Rätsels Lösung! Das steht per Default auf Byte und schon hat man den Effekt wie beschrieben. Stellt man höher, passt es. Das ist so ein Fall von Kopf knallt auf Tischplatte... Uwe du solltest Bücher schreiben! :-)

Die Sache ist die... Es funktioniert auch mit Mindestgröße = 1 Byte (siehe Anhang)

Uwe Raabe 25. Jul 2018 09:01

AW: Eure Meinung: Syntaxerweiterung Set-Typen auf mehr als 255 Elemente
 
Zitat:

Zitat von gammatester (Beitrag 1408609)
Also bei mit gibt's nur
Code:
Diese Seite enthält momentan noch keinen Text und du bist auch nicht dazu berechtigt, diese Seite zu erstellen. Du kannst ihren Titel auf anderen Seiten suchen oder die zugehörigen Logbücher betrachten.


Links mit schließender Klammer werden in diesem System nicht korrekt wiedergegeben. Häng halt noch eine Klammer dran, dann passt es.

Codehunter 25. Jul 2018 09:09

AW: Eure Meinung: Syntaxerweiterung Set-Typen auf mehr als 255 Elemente
 
Zitat:

Zitat von Schokohase (Beitrag 1408606)
So irgendwelche Quellen sind ja teilweise hilfreich, aber warum nicht mal einen Blick in die Doku des Herstellers werfen?

http://docwiki.embarcadero.com/RADSt...-Typen_(Delphi)

Der war gut!
Zitat:

Zitat von Embarcadero-Website
Mindestgröße für Enum-Typen (Delphi

Diese Seite enthält momentan noch keinen Text und du bist auch nicht dazu berechtigt, diese Seite zu erstellen. Du kannst ihren Titel auf anderen Seiten suchen oder die zugehörigen Logbücher betrachten.

Davon ab hast du natürlich Recht, es geht mir um Enums (und davon nachrangig dann auch wieder um Sets wie TMySet = set of TMyEnum). In meinem Sprachgebrauch hat sich Set=Enum und SetOf=set of Enum eingebürgert. Daher die irreführende Überschrift.

EDIT: So richtig erklärlich ist dieses Verhalten mit dem (ich nenne es mal so) "Loop-Überlauf" oder "Ringpuffer" bei benannten Aufzählungen aber nicht. Dass es nicht nur mir allein so geht belegt ja der von mir verlinkte Beitrag. Zugegeben der Fall kommt sehr selten vor dass man so viele benannte Zähler braucht, vielleicht wurde das deshalb noch nicht thematisiert?

Schokohase 25. Jul 2018 09:36

AW: Eure Meinung: Syntaxerweiterung Set-Typen auf mehr als 255 Elemente
 
Ich habe den Link korrigiert

Hier aber nochmal Mindestgröße für Enum-Typen (Delphi)

gammatester 25. Jul 2018 09:53

AW: Eure Meinung: Syntaxerweiterung Set-Typen auf mehr als 255 Elemente
 
Zitat:

Zitat von Codehunter (Beitrag 1408614)
So richtig erklärlich ist dieses Verhalten mit dem (ich nenne es mal so) "Loop-Überlauf" oder "Ringpuffer" bei benannten Aufzählungen aber nicht. Dass es nicht nur mir allein so geht belegt ja der von mir verlinkte Beitrag.

Lies mal die letzten beiden Sätze des Beitrags:
Code:
Ist die letzte Position 256 oder höher, können Werte bis 65535 angegeben werden usw. Auch negative Werte sind möglich, wenn entsprechende benannte Positionen definiert werden.

himitsu 25. Jul 2018 10:08

AW: Eure Meinung: Syntaxerweiterung Set-Typen auf mehr als 255 Elemente
 
Ursprünglich bassiert der ENUM auf einem Set von Assemblerbefehlen, welche allerdings "sehr" suboptimal (lahmarschig) von praktisch allen CPU-Entwicklern umgesetzt sind.
Und diese Befehle kennen nunmal ausschließlich eine Byte-Adressierung.
https://en.wikipedia.org/wiki/Bit_Test

ABER SET ist nicht gleich SET.
Genauso, wie bei den Arrays, gibt es da Unterschiede wo etwas definiert ist.
Delphi-Quellcode:
array of xyz
als Methodenparameter sind ein Sonderfall, welcher ganz anders behandelt wird.

Delphi-Quellcode:
if x in [...] then
wird als CASE vom Compiler implementiert,
aber wenn
Delphi-Quellcode:
[...]
aus einer Variable kommt, dann mit den erwähnten Assembler-Befehlen.
Konstanten sind hierbei sehr oft typisiert, womit es eigentlich "schreibgeschützte Variablen" sind, welche dann nicht inplace als CASE behandelt werden können.



Und ja, wenn man das Ganze "manuell" als Bitmasken auf einem statischen IntegerArray mit SHL SHR AND OR XOR umsetzen würde, dann gingen auch viel mehr Bits.

Uwe Raabe 25. Jul 2018 10:20

AW: Eure Meinung: Syntaxerweiterung Set-Typen auf mehr als 255 Elemente
 
Zitat:

Zitat von himitsu (Beitrag 1408625)
dann gingen auch viel mehr Bits.

Für mehr Bits gibt es ja die Klasse TBits.

Redeemer 25. Jul 2018 10:21

AW: Eure Meinung: Syntaxerweiterung Set-Typen auf mehr als 255 Elemente
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1408593)
Die 256-Elemente-Begrenzung gibt es allerdings bei Sets.

Finde ich nervig und das sollte mal verbessert werden. Da zählen nämlich auch Lücken im Enum mit. Folgender Code kompiliert somit nicht:
Delphi-Quellcode:
TMeinEnum = (meHallo = 0, meWelt = 256);
TMeinSet = set of TMeinEnum;


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:36 Uhr.
Seite 2 von 4     12 34      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz