Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Klatsch und Tratsch (https://www.delphipraxis.net/34-klatsch-und-tratsch/)
-   -   AnsiString und String (https://www.delphipraxis.net/172296-ansistring-und-string.html)

ATS3788 23. Dez 2012 17:45

AnsiString und String
 
Hallo
Frohe Weihnachten

Gerade ärger ich mich mal wieder mit
Zitat:

AnsiString und String
Warum hat man seinerzeit nicht einfach String
als AnsiString, Unicode gelassen und nur WideString
erweitert.

Was ist eure Meinung dazu

Uwe Raabe 23. Dez 2012 18:23

AW: AnsiString und String
 
Abgesehen davon, daß jede Diskussion darüber sowieso zu nichts führt, komme ich mit der aktuellen Lösung sehr gut klar. Die Migration nach Unicode ging nämlich ohne nennenswerten Aufwand quasi von allein.

jaenicke 23. Dez 2012 18:30

AW: AnsiString und String
 
Zitat:

Zitat von ATS3788 (Beitrag 1196566)
Warum hat man seinerzeit nicht einfach String
als AnsiString, Unicode gelassen und nur WideString
erweitert.

String ist nun einmal ein Metadatentyp. Wer einen konkreten Typ braucht, der muss eben den auch nehmen.

Dass Integer unter 64-Bit jetzt nicht 64 Bit hat, ist sowieso erstens inkonsequent und führt zweitens an vielen Stellen zu Problemen bei der Migration, wenn man sich genau an diese Regel gehalten hat. :evil:
Aber naja, das Kind ist ja nun in den Brunnen gefallen, da muss man eben an allen Ecken und Enden jetzt nachbessern, die eigentlich korrekt waren...

Bernhard Geyer 23. Dez 2012 20:47

AW: AnsiString und String
 
Zitat:

Zitat von ATS3788 (Beitrag 1196566)
Warum hat man seinerzeit nicht einfach String
als AnsiString, Unicode gelassen und nur WideString
erweitert.

Weil Emba bei einer solchen Lösung einige Mannjahre mehr in die Entwicklung von D2009 hätte stecken müssen.
So konnte man die Definition auf String = UnicodeString Änderung und musste "nur" noch den Compilerwarnungen nachgehen.
Wenn String = Ansistring gebliben wäre hätte man alle VCL-Komponenten mehr oder minder Zeilenweise anpassen müssen bzw dopppelte Klasen (TEdit und TUnicodeEdit) aufbauen müssen.

Uwe Raabe 23. Dez 2012 21:03

AW: AnsiString und String
 
Zitat:

Zitat von Bernhard Geyer (Beitrag 1196572)
Weil Emba bei einer solchen Lösung einige Mannjahre mehr in die Entwicklung von D2009 hätte stecken müssen.

Selbiges gilt für uns alle.

MeierZwoo 24. Dez 2012 10:28

AW: AnsiString und String
 
Was mich bei Strings nervt bzw. genervt hat, ist, daß die Compiler-Direktive $H bzw. $LONGSTRINGS trotz anderseitem Versprechen der Referenz

[Zitat D2009] "Sie können den Typ ShortString aktivieren, indem Sie die Direktive {$H-} verwenden." [Zitat-Ende]

keine Wirkung hat. Egal wie man schaltet, sizeof(string) ist immer = 4, also Pointer und kein versprochener kurzer String ist und kann Längen > 255.

Es wird da vergessen zu erwähnen, daß es auch eine Compiler-Option "Standardmäßig lange Strings" gibt, die default auf TRUE steht.

Aber man lernt es ja schnell, wenn man nach der Übernahme alter Quellcodes auf die Schnauze gefallen ist.

:)

Uwe Raabe 24. Dez 2012 10:47

AW: AnsiString und String
 
Zitat:

Zitat von MeierZwoo (Beitrag 1196618)
Was mich bei Strings nervt bzw. genervt hat, ist, daß die Compiler-Direktive $H bzw. $LONGSTRINGS trotz anderseitem Versprechen der Referenz

Aus der Delphi-Referenz:

Zitat:

Hinweis: Die Direktive LONGSTRINGS ist veraltet und wird vom Compiler ignoriert. Aktuelle Delphi-Compiler verwenden einen langen String-Typ, der auf Unicode-Zeichen (UnicodeString) basiert. Es wird die Verwendung des Standard-String-Typs (UnicodeString) empfohlen. Verwenden Sie für den älteren String-Typ explizit die Typen ShortString oder string[<Anzahl>].

ATS3788 24. Dez 2012 11:09

AW: AnsiString und String
 
Oh Ha OK

Und ich dachte es umgekehrt.
Nun verstehe ich warum das so portiert wurde.

Frohe Weihnachten

MeierZwoo 24. Dez 2012 11:49

AW: AnsiString und String
 
Zitat:

Hinweis: Die Direktive LONGSTRINGS ist veraltet und wird vom Compiler ignoriert. Aktuelle Delphi-Compiler verwenden einen langen String-Typ, der auf Unicode-Zeichen (UnicodeString) basiert. Es wird die Verwendung des Standard-String-Typs (UnicodeString) empfohlen. Verwenden Sie für den älteren String-Typ explizit die Typen ShortString oder string[<Anzahl>].
Steht so leider nicht in meiner Hilfe hier. Außerdem steht hier auch, daß der lange String defaultmäßig AnsiString sei - was auch nicht stimmt, weil UnicdeString benutzt wird. Evtl. sollte ich mal updaten.

Es wird aber darauf hingewiesen:
[Zitat]"Außerdem können kurze String-Typen als string[255] oder ShortString deklariert werden. Diese Typen sind eindeutig und von der Direktive $H unabhängig."[Zitat-Ende] was ich dann aus eigener Erfahrung bei alten Quellcodes eh schon gemacht habe.

Da muß man halt durch, wenn man von Borland Pascal 7(8) direkt auf Delphi 2009 umsteigt.

Uwe Raabe 24. Dez 2012 12:45

AW: AnsiString und String
 
Zitat:

Zitat von MeierZwoo (Beitrag 1196629)
Steht so leider nicht in meiner Hilfe hier. Außerdem steht hier auch, daß der lange String defaultmäßig AnsiString sei - was auch nicht stimmt, weil UnicdeString benutzt wird. Evtl. sollte ich mal updaten.

Ich beziehe mich auf das docwiki - hier http://docwiki.embarcadero.com/RADSt...rings_(Delphi)

Da hat man eigentlich immer den aktuellen Stand.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:26 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