AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language plattformabhängigen Integertypen LongInt und LongWord
Thema durchsuchen
Ansicht
Themen-Optionen

plattformabhängigen Integertypen LongInt und LongWord

Ein Thema von himitsu · begonnen am 8. Jan 2018 · letzter Beitrag vom 9. Jan 2018
Antwort Antwort
Der schöne Günther

Registriert seit: 6. Mär 2013
6.213 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

AW: plattformabhängigen Integertypen LongInt und LongWord

  Alt 8. Jan 2018, 18:12
Und ich dachte Entwickler könnten nur im unendlichen Tabs gegen Leerzeichen-Krieg so emotional werden.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.573 Beiträge
 
Delphi 12 Athens
 
#2

AW: plattformabhängigen Integertypen LongInt und LongWord

  Alt 8. Jan 2018, 18:28
Konsequent und logisch, aus Sicht der jeweiligen Plattformen vielleicht, aber aus Sicht eines Codes für Multiplatform ist es das IMHO nicht.
Und vorallem auch nicht aus Sicht der "uns" bekannten Muster von Typen. (wegen der Wiederverwendbarkeit alter Codes / uns = Windows+Pascal)

Gut, dass Integer und Cardinal nun nicht mehr systemabhängig sind, das kann man verkraften, wenn man einfach still und heimlich vergisst wie es zu Zeiten von 8 und 16 Bit mal war.
(dabei war Delphi im Jahre 2006 noch sooooooooooooo stolz auf seine berühmte Abwärtskompatibilität)

Aber es war nunmal früher so, dass LONG = 32 und LONG LONG = 64, also LongInt immer 32 und nicht plötzlich 64, auch auf 64 Bit-Systemen (außer im Windows 64).
Was hätte dagegen gesprochen den LongInt 32 zu lassen und wegen MacOS stattdessen z.B. ein OptimalInt zu erfinden?



Genauso gibt es keinen plausiblen Grund, warum obj.Free unter ARC nicht Free macht, sondern einfach "fahrlässig" komplett ignoriert wird (garnichts macht).
Hier gab es aus den anderen Systemen ein Äquivalent, also hätte man DisposeOf auch als Alias für Free hinzufügen können, weil es dort das Selbe wie ohne ARC das Free macht, um leichter C#-Code nach Delphi portieren zu können,
und stattdessen ein FreeLater (oder so), als Äquivalent zum obj:=nil der bekannten GarbageCollector-Systeme.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 8. Jan 2018 um 18:36 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.213 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: plattformabhängigen Integertypen LongInt und LongWord

  Alt 8. Jan 2018, 18:45
Die Memory-Management-Geschichte ist eine Katastrophe, das sehe ich auch so.

Aber das Problem mit den Typbezeichnungen verstehe ich ehrlich gesagt immer noch nicht. Angenommen man erstellt Code in Zeiten als Delphi rein "Windows only" war. Der gleiche Code tut doch auch heute, egal ob Windows 32 oder 64-Bit immer noch das absolut richtige, oder?

Das man auf anderen Plattformen gleiche/ähnliche Namen für teilweise andere Datentypen erfunden hat kann man doch Delphi nicht anlasten, oder?


PS: Wenn ich z.B. etwas plattformspezifisches mit der WinApi mache nehme ich auch immer die entsprechenden Typen (wie DWORD oder ULONG) statt den "High-Level-Typen" (wie Cardinal) die grade jetzt in meiner aktuellen Konfiguration drauf passen würden. Ist das nun richtig oder falsch?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.573 Beiträge
 
Delphi 12 Athens
 
#4

AW: plattformabhängigen Integertypen LongInt und LongWord

  Alt 8. Jan 2018, 19:00
Der gleiche Code tut doch auch heute, egal ob Windows 32 oder 64-Bit immer noch das absolut richtige, oder?
Nein?

Wenn die Funktion auf 32 Bit ausgelegt war und man deswegen auch absichtlich LongInt anstatt Integer verwendet hatte, aber der Typ jetzt plötzlich 64 Bit ist, dann funktionieren Überläufe und Bitschieberreien nicht mehr richtig.
In Nicht-Windows-64-Bit sind diese Typen aber nun in ihrer Funktion vertauscht.
Unter 16&32 Bit waren sie andersrum, bei 32 Bit und im Windows waren sie gleich und unter 64 Bit nun sorum (außer Windows).
> 16 und 32 Bit : Integer = platformabhängig und LongInt = 32 Bit
> 32 und 64 Bit : Integer = 32 Bit und LongInt = platformabhängig (außer Win64)

Aus einen CRC32 wird ja auch nicht gleich ein CRC64, nur weil man den mit 64 Bit kompilert.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 8. Jan 2018 um 19:10 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#5

AW: plattformabhängigen Integertypen LongInt und LongWord

  Alt 8. Jan 2018, 19:37
Ich denke nicht, dass sich unter Windows für dich etwas ändert. Diese skalierenden Integertypen sind nicht so ungewöhnlich, wenn man schonmal mit C/C++ gearbeitet hat. Da garantieren die Standardtypen (short, long, long long, etc) auch jeweils nur MINDESTENS die Größe von (16, 32, 64-Bit).

Unter Windows sehen die Typen mit EXAKTER Größe allerdings trotzdem immer wie folgt aus:
Code:
typedef signed char       int8_t;
typedef short             int16_t;
typedef int               int32_t;
typedef long long         int64_t;
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:13 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz