UFT8 a[3] := b[3]

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Benutzeravatar
theo
Beiträge: 10952
Registriert: Mo 11. Sep 2006, 19:01

Re: UFT8 a[3] := b[3]

Beitrag von theo »

mse hat geschrieben: Nur mit Lazarus und dem "utf-8 in AnsiStrings, kein -Fcutf8, kein BOM, kein {$codepage utf8}"-System; mit MSEgui und anderen FPC Werkzeugen funktioniert es wunderbar. ;-)
Ich habe keine Probleme mit Lazarus und UTF-8. WideStrings benutze ich in meinem eigenen Code nicht mehr.
Keine Ahnung was ihr immer habt... :wink:

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: UFT8 a[3] := b[3]

Beitrag von mse »

theo hat geschrieben: Keine Ahnung was ihr immer habt... :wink:
Das Bedürfnis nach möglichst produktiven Entwicklungswerkzeugen? ;-)

Benutzeravatar
theo
Beiträge: 10952
Registriert: Mo 11. Sep 2006, 19:01

Re: UFT8 a[3] := b[3]

Beitrag von theo »

mse hat geschrieben: Das Bedürfnis nach möglichst produktiven Entwicklungswerkzeugen? ;-)
Ja. Und? Ich sehe nicht, dass Lazarus da ein Problem hat.

Hier wird doch wesentlich mehr (v.a. von mschnell) über Theorie gefaselt, als dass nennenswerte konkrete Probleme berichtet würden.
Auch lrlr mit diesem Thread hier, war ja nach eigenen Angaben "farbenblind oder besoffen" :lol: , und hat kein echtes Problem.
Immer her mit den realen (nicht theoretischen) UTF-8 Problemen! Ich bin daran durchaus interessiert.

lrlr
Beiträge: 127
Registriert: Di 3. Nov 2009, 09:48

Re: UFT8 a[3] := b[3]

Beitrag von lrlr »

> lrlr hat geschrieben:also der debugger zeigt bei a[0] das an, was eigentlich a[1] sein sollte


>Pascal String Indizes sind 1-basiert.

sags dem debugger ;-)

strg-F7 -> a[0] zeigt das falsch an..
(obwohl das ja eigentlich ganicht funktionieren dürft...)

creed steiger
Beiträge: 958
Registriert: Mo 11. Sep 2006, 22:56

Re: UFT8 a[3] := b[3]

Beitrag von creed steiger »

theo hat geschrieben: Immer her mit den realen (nicht theoretischen) UTF-8 Problemen! Ich bin daran durchaus interessiert.
Naja wenn getcurrentdir c:\b?ro liefert statt c:\büro ist das nicht so prickelnd.
Vielleicht mach ich ja irgendwas verkehrt,mit XP arbeite ich nur sporadisch.
Wenn ich allerdings unter XP entwickle und dann noch irgendwelche Umwandlungen machen muss
mach ich mir schon meine Gedanken.

Benutzeravatar
theo
Beiträge: 10952
Registriert: Mo 11. Sep 2006, 19:01

Re: UFT8 a[3] := b[3]

Beitrag von theo »

creed steiger hat geschrieben: Naja wenn getcurrentdir c:\b?ro liefert statt c:\büro ist das nicht so prickelnd.
Vielleicht mach ich ja irgendwas verkehrt,mit XP arbeite ich nur sporadisch.
Wenn ich allerdings unter XP entwickle und dann noch irgendwelche Umwandlungen machen muss
mach ich mir schon meine Gedanken.
http://wiki.lazarus.freepascal.org/LCL_ ... _filenames" onclick="window.open(this.href);return false;

creed steiger
Beiträge: 958
Registriert: Mo 11. Sep 2006, 22:56

Re: UFT8 a[3] := b[3]

Beitrag von creed steiger »

theo hat geschrieben: http://wiki.lazarus.freepascal.org/LCL_ ... _filenames" onclick="window.open(this.href);return false;
Ein bissl ist das aber trotzdem von hinten durch die Brust ins Auge,oder?
(Ja mir ist klar das die Unicodeumstellung nicht in einem Aufwisch zu erledigen ist,aber etwas motzen wird man wohl dürfen ;) )

Benutzeravatar
theo
Beiträge: 10952
Registriert: Mo 11. Sep 2006, 19:01

Re: UFT8 a[3] := b[3]

Beitrag von theo »

creed steiger hat geschrieben:
theo hat geschrieben: http://wiki.lazarus.freepascal.org/LCL_ ... _filenames" onclick="window.open(this.href);return false;
Ein bissl ist das aber trotzdem von hinten durch die Brust ins Auge,oder?
(Ja mir ist klar das die Unicodeumstellung nicht in einem Aufwisch zu erledigen ist,aber etwas motzen wird man wohl dürfen ;) )
Naja, natürlich wäre es besser, wenn das in der FPC RTL geregelt würde. Soviel ich weiss, ist die D2009 Kompatibilität in Arbeit.
Aber das ist was wir heute haben, und es funktioniert. Also: Nicht meckern, coden! ;-)

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: UFT8 a[3] := b[3]

Beitrag von mse »

theo hat geschrieben: Ich sehe nicht, dass Lazarus da ein Problem hat.
Ehem, dies ist doch eine etwas sehr einseitige Sicht der Dinge. :-)
Vor allem, wenn man daran denkt, dass es Alternativen zum gewählten Lazarus String-System gegeben hätte und immer noch gibt. Am Anfang mehr Arbeit für die Lazarus Entwickler, dafür mehr Komfort für die Lazarus Anwender und letztendlich auch wieder weniger Arbeit für die Lazarus Entwickler.

lrlr
Beiträge: 127
Registriert: Di 3. Nov 2009, 09:48

Re: UFT8 a[3] := b[3]

Beitrag von lrlr »

>FindFirstUTF8

komisch, ich verwend das "normale" FindFirst und das scheint "problemlos" zu funktionieren (liefert auch UTF8?)
oder ist das "zufall" weil das system (win7 ntfs platte) eben auf uft8 läuft ?!?!?)

warum gibt es überhaupt FindFirstUFT8, wenn in lazarus UTF8 standard ist, sollten doch die standardfunktionen UTF8 liefern (und es müsste ein FindFirstSys oder FindFirstAnsi geben) ????

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: UFT8 a[3] := b[3]

Beitrag von mschnell »

>> theoretische vs praktische Probleme

Die Unterscheidung zwischen "theoretischen Problemen" (gemeint sind wohl Fehler, die sich mit einem bisschen Wissen und Geschick umgehen lassen) und "praktischen Problemen" (gemeint sind wohl Fehler, die sich gar nicht oder nur mit erheblichem Aufwand umgehen lassen und damit die Produktivität auch desjenigen, der die Probleme schon kennt, erheblich einschränken), ist für ein inhouse-Produkt sinnvoll, nicht aber für ein von vielen Usern unterschiedlichen Typs benutzten Tools.

Jede praktisches Problem beruht auf einem theoretischen Problem.

Jedes theoretische Problem wird sich irgendwann, bei irgendeinem User, unter irgendwelchen Umständen in einem praktischen Problem manifestieren.

Man braucht nur zu versuchen, ein von 20 Leuten erstelltes eine-Million-Zeilen Programm mit einem Nachfolger-Programmiersystem an's Laufen zu bringen, das eine Menge solcher "theoretischen Probleme" aufweist. (Genau das versuchen meine Kollegen gerade beim Umstieg auf das Unicode-fähige Delphi: Furcht, Angst und Schrecken!)

Und wenn beim aktuellen Lazarus eine einfache, klare und Zulässige Anweisung wie "MYWIDESTRING := '1ä2ö'; " zu einem völlig sinnlosen Ergebnis führt, ist das m.E. nach ein echtes Problem (wenn auch nach obiger Definition ein theoretisches, weil es sich ja theoretisch vermeiden lässt indem man keine Widestrings benutzt). Dasselbe gilt für alle weiteren bisher angeführten Unicode-Beispiel-Probleme.

Leider ist (sprach-spezifischer) ANSI-Code und Unicode (gleich welcher internen Codierung) in keiner nativen Weise kompatibel.

ANSI ist eine 8-Bit-Zeichen-Codierung. Unicode ist eine 32-Bit Zeichen-Codierung.

Ein String ist aus Sicht des Anwenders eine Folge von Zeichen

Ein ANSI-String ist demzufolge eine Folge von (8-Bit) ANSI Zeichen.

Ein Unicode-String ist demzufolge eine Folge von (32-Bit) Unicode-Zeichen. Egal wie die interne Codierung technisch gelöst wird.

Das kann nicht ohne Kompatibilitätsprobleme abgehen. (Ganz zu schweigen von "Surrogate Pairs" und ähnlichem <s.o.>.)

Eine Zuweisung "MYANSICHAR := MYUNICODECHAR; " führt zwingend zu Informationsverlust (wenn der betreffende Unicode-Character in der aktuell eingestellten ANSI-Variante nicht existiert). Für Strings gilt natürlich dasselbe entsprechend.

Der Versuch der aktuellen Lazarus-Version, ANSIStrings uns spezielle Unicode-Strings (UTF-8 codierte) einfach als identisch zu definieren ist demzufolge zum Scheitern verurteilt, auch wenn in 90% der betroffenen Programmzeilen (z.B. a := b + c;) problemlos derselbe Prozessorcode für die Operation verwendet werden kann, wenn alle beteiligten Operatoren in derselben Art (entweder ANSI oder UTF-8) codiert sind.

Wenn die Typen einfach eigenständig und inkompatibel deklariert wären und, wenn notwendig, entweder eine implizite Konvertierung erfolgen würde, oder eine Fehlermeldung erzeugt würde, hätten wir das Problem nicht. (Das ist vermutlich ein FPC-"Problem" und von Lazarus nicht korrigierbar.) Eine Portierung eines Programmes würde zu massenweise Fehlermeldungen führen, aber nicht zu einem Programm, das stillschweigend Unsinn produziert.

Um die Portierung existierender Programme auf ein Unicode-System zu erleichtern, führt Delphi Strings mit dynamischer expliziter Codierung ein. (FPC und damit Lazarus werden dem folgen müssen <dass wir D2009 Strings in FPC demnächst haben werden, wurden hier schon erwähnt>.)

Ob das der Stein der Weisen ist, wird in den Delphi Foren lebhaft diskutiert. Wir werden es hier demnächst erleben.

Die aktuelle Lazarus/FPC-Version ist jedenfalls nicht dafür geeignet, größere bestehende Programme zu übersetzen. Man müsste sich jede einzelne Zeile anschauen, ob da nicht ein "Problem" angetriggert wird. Deshalb hoffe ich auf eine zukünftige. :)

-Michael

Benutzeravatar
theo
Beiträge: 10952
Registriert: Mo 11. Sep 2006, 19:01

Re: UFT8 a[3] := b[3]

Beitrag von theo »

lrlr hat geschrieben:>FindFirstUTF8
komisch, ich verwend das "normale" FindFirst und das scheint "problemlos" zu funktionieren (liefert auch UTF8?)
oder ist das "zufall" weil das system (win7 ntfs platte) eben auf uft8 läuft ?!?!?)
Ja. Falls dein System mit UTF-8 läuft (wie auch die meisten Linuxe), dann benötigt man keine Konvertierung. (Zufall würde ich es nicht nennen)
lrlr hat geschrieben: warum gibt es überhaupt FindFirstUFT8, wenn in lazarus UTF8 standard ist, sollten doch die standardfunktionen UTF8 liefern (und es müsste ein FindFirstSys oder FindFirstAnsi geben) ????
Das hat damit zu tun, dass für Lazarus und FPC verschiedene Teams am Werke sind, die nicht immer "synchron schwimmen" ;-)
Deshalb ist FindFirstUTF8 auch in der LCL, und FindFirst in der RTL definiert.

lrlr
Beiträge: 127
Registriert: Di 3. Nov 2009, 09:48

Re: UFT8 a[3] := b[3]

Beitrag von lrlr »

>(Zufall würde ich es nicht nennen)

kein zufall, aber ein fehler (meinerseits), weil wenn ich es auf anderen platformen laufen lassen würde (win95??) es plötzlich nicht mehr funktioniert...

(zum portieren von delphi->lazarus ist das eine (milde ausgedrückt) Katastrophe.. )

wobei mir FindFirst eh nicht gefällt, da gehört eigentlich ein objektorientierter "wrapper" her...

Benutzeravatar
theo
Beiträge: 10952
Registriert: Mo 11. Sep 2006, 19:01

Re: UFT8 a[3] := b[3]

Beitrag von theo »

mschnell hat geschrieben:>> theoretische vs praktische Probleme
Mit "praktische Probleme" meinte ich Probleme, welche sich während der Programmierung tatsächlich ergeben, und die man im Forum lösen kann.
Mit "theoretische Probleme" meinte ich Probleme, die sich einer ausdenkt und gebetsmühlenartig während Monaten thematisiert, ohne einen brauchbaren Vorschlag zur Verbesserung (im FPC Code) abzugeben. Also Diskussionen die nichts bringen und wahrscheinlich mit der Einführung der D2009 Kompatibilität sowieso obsolet werden.

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: UFT8 a[3] := b[3]

Beitrag von mschnell »

theo hat geschrieben:...ohne einen brauchbaren Vorschlag zur Verbesserung (im FPC Code) abzugeben.
der Free-Pascal Compiler ist zwar - soweit ich weiß - tatsächlich zum grössten Teil selber im FPC-Code geschrieben, ich bin da aber bei weitem nicht genug eingestiegen um da Verbesserungen vorzuschlagen. Und Vorschläge wie man durch Modifikation des User-Codes die Probleme umgehen kann, sind bei der Portierung eines großen Programmsystems (wie das meine Kollegen momentan machen) nur von begrenztem Nutzen. Ich kann sie jedenfalls mit Sicherheit nicht davon überzeugen, auf das aktuelle Lazarus umzusteigen :(. Das würde ich aber gerne, um es zu ermöglichen ihr System auf Linux laufen zu lassen.

Sollen sie also erst mal auf das aktuelle Delphi umsteigen und hoffen wir dass eine spätere Lazarus-Version dann dazu einigermaßen kompatibel ist und die Probleme dann vielleicht wirklich obsolet sind .

-Michael

Antworten