AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Integer und Cardinal bei 32 Bit eingefroren? NativeInt?
Thema durchsuchen
Ansicht
Themen-Optionen

Integer und Cardinal bei 32 Bit eingefroren? NativeInt?

Ein Thema von Panthrax · begonnen am 5. Apr 2010 · letzter Beitrag vom 5. Apr 2010
Antwort Antwort
Seite 1 von 3  1 23      
Panthrax

Registriert seit: 18. Feb 2005
286 Beiträge
 
Delphi 2010 Enterprise
 
#1

Integer und Cardinal bei 32 Bit eingefroren? NativeInt?

  Alt 5. Apr 2010, 12:57
In älteren Quelltexten finde ich regelmäßig Zeigerarithmetik:
Delphi-Quellcode:
var
  Ptr: Pointer;
begin
  Inc(Integer(Ptr));
end;
Da für den Typ Pointer die Zeigerarithmetik nicht definiert ist, hat man sich in der Vergangenheit oft mit dem Typ Integer beholfen. Das funktioniert aber nur wenn SizeOf(Integer) = SizeOf(Pointer). Um darauf nicht angewiesen zu sein, stelle ich bei mir um, und verwende den Typ PByte, für den die Zeigerarithmetik definiert ist:Inc(PByte(Ptr)); Schaut man mal in die RTL oder VCL, wird dort mit den Typen Pointer und Integer freigiebig umgegangen. Vom Hörensagen her, wird der Typ Integer (und Cardinal?) 32 Bit lang bleiben (z.B. hier angesprochen). Das widerspricht in meinen Augen der Hilfe zu "einfachen Typen":
Zitat:
Es gibt zwei generische Integer-Typen: Integer und Cardinal. Diese Typen sollten, wenn möglich, immer verwendet werden, da sie die optimale Ausführungsgeschwindigkeit für die zugrunde liegende CPU und das Betriebssystem gewährleisten.
Wird auch Cardinal bei 32 Bit eingefroren?
Weiß vielleicht jemand, wo man etwas gegen diesen Blödsinn tun kann, Integer bei 32 Bit einzufrieren?

Ich denke an 32- oder 64-Bit-Programme vom selben Quelltext. Was nutzt ein 64-Bit-Kompiler, wenn die Datentypen nicht mitwachsen? Soll dann etwa überall auf NativeInt umgestellt werden!? Ich habe eigentlich noch genug von der Zwangsumstellung der Standardimplementierung von String und Char als Unicode. Wenigstens würde im Falle von Integer das hier gehen: Wenn die anderen nicht wollen, dass Integer mitwächst, ich will:
Delphi-Quellcode:
type
  Integer = type NativeInt;
"Es gibt keine schlimmere Lüge als die Wahrheit, die von denen, die sie hören, missverstanden wird."
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Integer und Cardinal bei 32 Bit eingefroren? NativeInt?

  Alt 5. Apr 2010, 13:01
Das Problem ist, daß es in C (und auch von Microsoft in dessen Win-API-Headern) so gelöst wurde, daß INT aka Integer unter 64 Bit nicht angepaßt wurde und nun hat wohl Emba vor dieses genauso zu übernehmen.

Wobei ich der Meinung bin, daß man doch nicht unbedingt jeden "Scheiß" mitmachen muß.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Panthrax

Registriert seit: 18. Feb 2005
286 Beiträge
 
Delphi 2010 Enterprise
 
#3

Re: Integer und Cardinal bei 32 Bit eingefroren? NativeInt?

  Alt 5. Apr 2010, 13:06
Zitat von himitsu:
Das Problem ist, daß es in C (...)
Wobei ich der Meinung bin, daß man doch nicht unbedingt jeden "Scheiß" mitmachen muß.
Wirklich. Was geht mich C an!? Wenn die schon das Problem erzeugen, wie lösen die es denn!?
"Es gibt keine schlimmere Lüge als die Wahrheit, die von denen, die sie hören, missverstanden wird."
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Integer und Cardinal bei 32 Bit eingefroren? NativeInt?

  Alt 5. Apr 2010, 13:26
Zitat von Panthrax:
Wirklich. Was geht mich C an!?
Ganz deiner Meinung.

Zitat von Panthrax:
wie lösen die es denn!?
Da gibt es wohl einen "speziellen" Integertypen, welcher so groß wie ein Pointer ist.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.481 Beiträge
 
Delphi 10.1 Berlin Professional
 
#5

Re: Integer und Cardinal bei 32 Bit eingefroren? NativeInt?

  Alt 5. Apr 2010, 13:32
Zitat von Panthrax:
Was geht mich C an!?
Es ist nicht nur in C so. Auch Java und C# machen das so.

Zitat:
Wenn die schon das Problem erzeugen, wie lösen die es denn!?
Wer? Microsoft oder Embarcadero? Und welches Problem?

Zitat:
Wird auch Cardinal bei 32 Bit eingefroren?
Voraussichtlich ja.

Zitat:
Weiß vielleicht jemand, wo man etwas gegen diesen Blödsinn tun kann, Integer bei 32 Bit einzufrieren?
15+x Jahre in die Vergangenheit reisen und den Windows-Programmierern sagen, dass sie statt INT und LONG lieber INT32 und INT32 benutzen sollen.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Integer und Cardinal bei 32 Bit eingefroren? NativeInt?

  Alt 5. Apr 2010, 13:44
Zitat von jbg:
15+x Jahre in die Vergangenheit reisen und den Windows-Programmierern sagen, dass sie statt INT und LONG lieber INT32 und INT32 benutzen sollen.
Ja und, wenn sie nun ihre Programme auf 64-Bit portieren wollen, dann können sie das jetzt immernoch ändern.
Warum soll man dann die Definition von Typen nun ändern, nur weil Manche nicht hören können?
Integer = hieß nunmal "CPU-Registerbreite" (welche der Compiler unterstützt) und nicht "32 Bit".


Ist doch praktisch genauso wie der Scheiß, den Codegear mit Delphi 2009 verbrockt hat.

AnsiUpperCase ist standardmäßig Unicode, obwohl es Ansi heißt.
Und das nur weil man den Umstieg vereinfachen will, aber beim Neuprogrammieren ist es ein totaler Schwachsinn.
Genauso wie die interne Codepageprüfung bei den Strings (seit D2009)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Panthrax

Registriert seit: 18. Feb 2005
286 Beiträge
 
Delphi 2010 Enterprise
 
#7

Re: Integer und Cardinal bei 32 Bit eingefroren? NativeInt?

  Alt 5. Apr 2010, 14:43
Zitat von jbg:
Zitat von Panthrax:
Was geht mich C an!?
Es ist nicht nur in C so. Auch Java und C# machen das so.
Und wenn alle anderen aus dem Fenster springen...

Zitat von jbg:
Zitat:
Wenn die schon das Problem erzeugen, wie lösen die es denn!?
Wer? Microsoft oder Embarcadero? Und welches Problem?
Das ist "ein Problem", welches eigentlich keins sein sollte. Ich sehe diese Wolken am Horizont:

Der vorhandene Quelltext mit Zeigerarithmethik muss geändert werden, wenn Pointer mitwächst, Integer aber nicht: Inc(Integer(Ptr));. Besonders hier sehe ich viel Spaß, denn der Kompiler sagt erstmal nichts dazu, und wenn die oberen 32 Bit des Zeigers unterschlagen werden, kommt es vielleicht nicht einmal immer zum Fehler. Wer nicht weiß, wonach er sucht, wird hier echt viel Zeit lassen, da es auch aus Gewohnheit so leicht zu übersehen ist.

Wenn dann einmal ein 64-Bit-Kompiler verfügbar wird, erzeugt dieser doch nur Mogelpackungen, wenn das Programm keine 64-Bit-Datentypen verwendet, obwohl es das könnte. Was soll werden, wenn es einmal 128-Bit-Prozessoren gibt? -- Nur mal so gesponnen.

Zu guter letzt, welches Vertrauen kann man noch entgegenbringen, wenn man sich nicht einmal auf solch fundamentale Aussagen verlassen kann!?

Java und C# sind sicherlich nicht der beste Vergleich, wenn es um Zeiger geht. Aber wie machen es denn C, Java und C#, wenn es darum geht aus einem Quelltext eine 32- und eine 64-Bit-Anwendung zu erstellen? Wie stellt man sich das vor, wenn sich die Registerbreite ändert: gleicher Quelltext anderes System?

Zitat von jbg:
Zitat:
Weiß vielleicht jemand, wo man etwas gegen diesen Blödsinn tun kann, Integer bei 32 Bit einzufrieren?
15+x Jahre in die Vergangenheit reisen und den Windows-Programmierern sagen, dass sie statt INT und LONG lieber INT32 und INT32 benutzen sollen.
Ich habe es befürchtet... Trotzdem, was soll das!? Jetzt muss die Delphigemeinde ausbaden, was C-Idioten verplant haben!? Sollen die doch ihre Datentypen ändern! -- Was geht mich C an!?
"Es gibt keine schlimmere Lüge als die Wahrheit, die von denen, die sie hören, missverstanden wird."
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Integer und Cardinal bei 32 Bit eingefroren? NativeInt?

  Alt 5. Apr 2010, 15:27
Mich wunder das einigen einen Pointer jemals auf Integer gecastet haben. Ein Pointer konnte doch noch nie negative Werte annehmen weswegen ich immer auf Cardinal gecastet habe (und das aufgrund des Hinweises der Hilfe das Cardinal, Integer etc. mitwachsen werden).
Ich finde es ebenfalls Schwachsinn das man die Größen jetzt einfrieren will nur weil einige die sich nicht an die Gegebenheiten gehalten haben jetzt Probleme bekommen.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Integer und Cardinal bei 32 Bit eingefroren? NativeInt?

  Alt 5. Apr 2010, 15:36
Wenn Integer eingefroren wird, dann wird es wohl auch der Cardinal, da es ja die selben "Typengrößen" sind, nur mit dem Unterschied des Vorzeichens.

Also wirst du auch mit Cardinal Probleme bekommen.

PS: Rate mal, warum es standardmäßig bei den Speichermanagern eine 2 GB-Grenze gibt und man sein Programm erst auf die 4 GB (3,x GB) freischalten muß?
Weil Viele "Integer(P) < 0" als Fehlerkennzeichnung oder "Integer(P) <= 0" für leere/ungültige Zeiger verwendet haben.



Wenn nur Integer, aber nicht Cardinal eingefroren würde, dann wäre das meines Erachtens nach noch viel Schlimmer.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#10

Re: Integer und Cardinal bei 32 Bit eingefroren? NativeInt?

  Alt 5. Apr 2010, 15:43
Ich wollte nicht ausdrücken das es mich nicht stört sofern cardinal bleibt sondern ich wollte 2 Botschaften in einem Post unterbringen. Zum einen das ich immer Cardinal verwendet habe und nie auf die Idee gekommen wäre Integer zu verwenden um einen Pointer zu casten. Und zum anderen die Informationen das da wohl etwas schief läuft wenn man Integer, cardinal etc. einfriert (also alles wovon es vorher hieß das es nicht eingefroren wird).
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 14:06 Uhr.
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