Re: Delphi 2009/2010 ohne Unicode?
- From: Hans-Peter Diettrich <DrDiettrich1@xxxxxxx>
- Date: Fri, 23 Oct 2009 01:08:59 +0200
Hubert Seidel schrieb:
Meine Kurzfassung:
EVA = Eingabe/Verarbeitung/Ausgabe
Wenn Eingabe und Ausgabe ANSI ist,
dann möchte ich in Bauch nicht mit Unicode
arbeiten da zum einen die Eingangskonvertierung
und die Ausgangskonvertierung überflüssig ist,
zum anderen die Verarbeitung im "Bauch"
toppelt so viele Bytes transferieren muss.
Das sehe ich genauso.
Ich gehe mal davon aus, das die 256 darstellbaren
Zeichen in UTF-16 keine Surrogate-Pairs benötigen.
Allgemein: Zeichen aus der Unicode BMP.
Einmal nach UTF-16 konvertiert kann der UnicodeString ohne
weitere Konvertierung der Windows API übergeben werden und
in der GUI angezeigt werden, wenn das kein Vorteil ist?
Wenn ich jedoch bei Ansi bleiben kann, und weiterhin
zur Stringmanipulation Ansi-Funktionen zur Verfügung habe,
dann habe ich halb so viel Speicherdurchsatz.
In Cobol wird zwischen Usage=Display und Usage=Computational unterschieden. Vielleicht sollte man das in Delphi genauso sehen, bei der Festlegung des jeweils passenden Stringtyps.
Und nur weil ein W-API-Aufruf präzise mit allen
möglichen Zeichen umgehen kann, geht es nicht besser,
wenn eh nur die 256 möglichen aus ANSI 1252 enthalten sind.
Bei ASCII war ToUpper und ToLower eine reine Funktion, die ein Bit im Zeichen entsprechend gesetzt hat.
Bei Ansi (SBCS) ist für jede Codepage eine eigene Tabelle notwendig, mindestens für den non-ASCII Teil. Bei MBCS mehrere Tabellen, mit entsprechend mehrstufigem Lookup.
Bei Unicode (UTF-32) wird nur eine Tabelle benötigt, die aber durch die vielen Löcher ebenfalls baumartig mit mehrstufigem Lookup aufgebaut sein dürfte.
Bei UTF-16 für UCS4 werden solche Funktionen und die übergebenen Parameter noch aufwendiger, da auch bei einzelnen Zeichen immer mit Strings (Surrogat-Paare aus mehreren WideChars) zu rechnen ist.
Damit dürfte klar sein, daß eine Beschränkung auf einen bestimmten Zeichensatz deutliche Optimierungsmöglichkeiten bietet. Dann kommt es drauf an, ob diese Optimierungsmöglichkeiten in der RTL wahrgenommen werden, z.B. in Abhängigkeit vom String-Typ oder -Encoding.
Ein Anwendungsprogrammierer muß bei der Verwendung von Unicode schon genau angeben (und sicherstellen), warum z.B. seine indizierten Zugriffe auf String-Elemente überhaupt zulässig sind. Bei Ansi war das einfach, da eine Codepage entweder SBCS oder MBCS ist. Bei Unicode kann man sich zwar entsprechend auf die BMP beschränken, es gibt dann aber keine Sperren, welche die Einhaltung dieser Annahme sicherstellen.
Es bedeutet unterm Strich _weniger_ Konvertierungen!
Wenn ich ein Ansi-String mit einer Ansi-Funktion
aufrufe könnte, warum sollte konvertieren wollen?
Was die Benennung der Delphi-Funktionen betrifft, da hat sich CodeGear dazu entschlossen, die alten Namen aus Kompatibilitätsgründen beizubehalten, aber die Ansi Parameter durch Unicode zu ersetzen. Wenn man das weiß, kann man bei Ansi-Texten um diese Funktionen einen weiten Bogen machen. Benutzerfreundlicher wäre jedenfalls eine eigene (überladene) Implementierung für AnsiString Parameter.
Wenn du einen AnsiString in einer Ansi-Anwendung anzeigst
oder nur einmal AnsiUpperCase aufrufst hat Windows den String
schon intern hin und her konvertiert!
Ich hab's selber nicht nachgeprüft, aber wenn ein WinAPI ToUpperA nach ToUpperW delegiert, dann ist das eine herbe Bremse. (s.o.)
DoDi
.
- Follow-Ups:
- Re: Delphi 2009/2010 ohne Unicode?
- From: Hubert Seidel
- Re: Delphi 2009/2010 ohne Unicode?
- References:
- Delphi 2009/2010 ohne Unicode?
- From: Jens Lenge
- Re: Delphi 2009/2010 ohne Unicode?
- From: Arno Garrels
- Re: Delphi 2009/2010 ohne Unicode?
- From: Hubert Seidel
- Re: Delphi 2009/2010 ohne Unicode?
- From: Arno Garrels
- Re: Delphi 2009/2010 ohne Unicode?
- From: Hubert Seidel
- Re: Delphi 2009/2010 ohne Unicode?
- From: Arno Garrels
- Re: Delphi 2009/2010 ohne Unicode?
- From: Hubert Seidel
- Delphi 2009/2010 ohne Unicode?
- Prev by Date: Re: Delphi 2009/2010 ohne Unicode?
- Next by Date: Re: Delphi 2009/2010 ohne Unicode?
- Previous by thread: Re: Delphi 2009/2010 ohne Unicode?
- Next by thread: Re: Delphi 2009/2010 ohne Unicode?
- Index(es):
Relevant Pages
|