![]() |
0-Based Strings ab XE4
Abgezweigt vom Thema
![]() Zitat:
WEnn dann wird man bei den Strings umstellen und das wars. Aber nicht den Quellcode entsprechend mit IFDEF's verseuchen. Da es einenige Versionen mit 1 und 0-Basierten Zugriff geben wird ist die notwendigkeit auch gar nicht gegeben. Zitat:
Zitat:
Ich denke mit den neuen Methoden und dem 0basierten String vermeitet man in Zukunft Quellcodeportierungsprobleme. |
AW: 0-Based Strings ab XE4
Ja, Du hast Recht. Ein IFDEF zerhackter Code ist echt nicht schön. Neue Standard-Typen auch nicht.
Unter dem Strich muss aber eine Lösung her, die meine langjährig erarbeitete Codebasis nicht mit Version XE"n" in einen unbenutzbaren Zustand versetzt. Die Zeit, die für das Umschreiben der Quellcodes draufgeht holt kein tolles neues Delphi Feature wieder raus. Kann sich noch jemand daran erinnern, wie ewig lange es damals beider Unicode Umstellung gedauert hat, bis alle Projekte, Komponenten und auch Delphi selbst wieder konsistent waren? |
AW: 0-Based Strings ab XE4
Ein Wizard müsste von Emba her der einen bei der Umstellung hilft.
Oder GExperts/CnPack nehmen sich der Sache an. Unicode würde ich nicht als vergleich her nehmen. Hier hat man einen großen Mehrwert (jedenfalls würde uns ohne ein wichtiges Merkmal fehlen und großkunden uns nicht mehr nehmen). |
AW: 0-Based Strings ab XE4
0-Basierte Strings gibt's z.Z. nur für iOS.
Im Win-Compiler bleibt es erst mal so. Wird aber früher oder später wohl angepasst werden. Das heist: z.Z. müssen "nur" Unit's angepasst werden die du für IOS benötigst. Wenn du diese für Win und IOS benötigst muss du entweder den Compilerswitch verwenden oder eine Logik einbauen. Gilt übrigens nur für den Index-Basierten Zugriff. Copy, Insert etc. bleiben wohl 1-Basiert. |
AW: 0-Based Strings ab XE4
Das klingt irgendwie total nach halbfertig und nicht bis zum Ende durchdacht...
|
AW: 0-Based Strings ab XE4
Zitat:
Siehe auch ![]() |
AW: 0-Based Strings ab XE4
Ich finde die Diskussion ja recht interessant und es sind ja sicherlich auch ein paar Argumente zusammen gekommen. Ich habe zwar nur mehrere kleinere Projekte und ein Projekt was so ca. 10000 Zeilen umfasst, aber sind wir doch mal ehrlich, wie viele Stellen hat ein normales Programm (Keine Verschlüsselungsprogramm, Serialgenerator oder ähnliches), wo es einen String zerlegen muss ?
Da die 0-Based Strings in XE4 nur für den Bereich gilt, wo der LLVM-Compiler zum Einsatz kommt. Das heißt, für die reinen VCL-Programme ändert sich hier gar nichts bei XE4. Ich bin der Meinung, dass man hier warten sollte, bis es für die VCL auch soweit ist. Vielleicht baut ja Emba noch irgendwas ein, was die Diskussion in Luft auflöst und wenn Emba nichts macht, dann haben wir doch alle soviel Know-How, dass wir uns gerade einen Parser bauen können, der unsere Units durchgeht. |
AW: 0-Based Strings ab XE4
Zitat:
Zitat:
So ist das ganze auch unabhängig von der Compilereinstellung immer nullbasiert und zukunftssicher. Zitat:
|
AW: 0-Based Strings ab XE4
Zitat:
Egal. Manuell darf so eine Umstellung allerdings nicht mehr erfolgen. Die Zeit bezahl einem kein Mensch ... Zitat:
Zitat:
Dann Wenn dann irgendwann die klasischen Stringfunktionen sie Pos und Copy auf zerobased Strings umgebaut werden, dann wird wegwerfen und neuschreiben einfacher! |
AW: 0-Based Strings ab XE4
Zitat:
|
AW: 0-Based Strings ab XE4
Zitat:
Intern kann man es die Pos-Methode umschreiben auf function Pos(const SubString, S: String): Integer; begin result := S.IndexOf(SubString) + 1; end; |
AW: 0-Based Strings ab XE4
Da XE4 nun raus ist, können wir ja selbst reinschauen wie es konkret darin aussieht:
![]() |
AW: 0-Based Strings ab XE4
Zitat:
|
AW: 0-Based Strings ab XE4
Zitat:
Damit dürften die Aufschreie etwas kleiner werden (die zuvor wegen 500 € Mobile Pack entstanden sind) :-) |
AW: 0-Based Strings ab XE4
Welchen Unterschied macht es denn, ob der String mit 0 oder mit 1 anfängt? Ich meine, ich persönlich fände es zwar schöner, wenn Strings wie Arrays mit 0 anfangen würden, da es einheitlicher und mathematisch gesehen schöner ist, aber eigentlich ist es doch eine Frage der Konvention...
|
AW: 0-Based Strings ab XE4
Naja, den Unterschied macht, dass es bisher in der Delphi Language anders war. Und die direkte Indexierung oft u.a. aus Performancegründen eingesetzt wurde.
|
AW: 0-Based Strings ab XE4
Zitat:
Ansonsten, wenn man da schon anfängt, könnte man gleich eine Delphi Language 2.0 rausbringen und mal ganz generell bei den Altlasten aufräumen... was ich mir einerseits manchmal wünschen würde, aber wenn ich ehrlich bin, glaube ich, dass das der Untergang von Delphi wäre, da es eben heutzutage hauptsächlich von der Wartung von alten Projekten lebt... |
AW: 0-Based Strings ab XE4
Na ja, wenn man jetzt erst die Programmierung erfinden würde ich vorschlagen, in Listen, Arrays und Strings m.E. immer und überall bei 1 anfangen zu zählen.
Dann könnte man auch das Count - 1 einsparen. Aber ich werde nicht den Versuch unternehmen, das ernsthaft durchsetzen zu wollen. :stupid: Generell 0-basiert ist dann m.E. die zweitbeste Lösung (weil eindeutig und nicht missverständlich, gerade für Neueinsteiger). |
AW: 0-Based Strings ab XE4
Zitat:
Zitat:
|
AW: 0-Based Strings ab XE4
Um die Realität abzubilden (z.B. in einem Geschäftsprozess in 10 Äpfel jeweils 2 Maden zu implementieren) würde man immer bei 1 anfangen zu zählen.
Bei 0 ist m.E. unlogisch (auch wenn man das von Anfang an lernt und sich das jetzt nicht mehr ändern lässt). Mich hat das schon immer gestört. Aber wir sollten das hier nicht überdiskutieren (bringt ja eh nix ;-)). |
AW: 0-Based Strings ab XE4
Zitat:
|
AW: 0-Based Strings ab XE4
Zitat:
Die Abwärtskompatibilität von vorhandenem Code war immer ein riesen Plus für Delphi. Ich hatte einige Delphi 3 Programme, die ich mit wenigen kleinen Anpassungen problemlos in XE2 weiter bearbeite konnte. Theoretisch sollten viele TP Programme mit 1-2 Anpassungen in der Projektdatei auch noch unter XE3 funktionieren. Dieser "Investitionsschutz", in Bezug auf investierte Arbeitszeit, war für mich ausschlaggebend, als ich mit Delphi 7 irgendwann angefangen habe kommerziell zu programmieren. Ich kann nicht verstehen, dass man nun damit beginnt, absolut grundlegende Sprachfeatures einzureißen und genau diesen Vorteil wegzuwerfen. |
AW: 0-Based Strings ab XE4
Zitat:
|
AW: 0-Based Strings ab XE4
Zitat:
Vermutlich wird mittlerweile ein Großteil der C#/.NET-Entwickler nicht mal wissen das man Arrays/Liste auch mit einer einfachen Schleife statt einem for each-Konstrukt durchlaufen kann :-) |
AW: 0-Based Strings ab XE4
Zitat:
d.h. wenn ich jetzt die StringHelper bei String verwende, muss ich 1 draufaddieren? Und mir alle Quellcodestellen markieren um dann bei der Umstellung die 1 wieder weg zu machen? Oder per IFDEF? |
AW: 0-Based Strings ab XE4
Addieren und abziehen musst Du nur, wenn Du die alten und die neuen Funktionen mischst. Möchtest Du über einen kompletten String laufen, kannst Du die for...in - Schleife nutzen. Oder Du lässt Dir Dir low() und high() die jeweils korrekten Grenzen eines Strings liefern.
Wenn Du häufig auf die erste, dritte oder zwölfte Stelle eines Strings zugreifen müsst. Kannst Du Dir auch Konstanten definieren, die Dir den korrekten Index liefern: FIRST = low(s) oder THIRD = low(s)+2. Auch damit entbindest Du Dich von der Pflicht, manuell die Eins zu addieren. |
AW: 0-Based Strings ab XE4
Zitat:
Zitat:
Der Wechsel des String-Paradigmas von 1- auf 0-basiert ist ein dermaßen harter Einschnitt, das man den konsequent gehen muss. Ohne Wenn und Aber. Die alten Programme sind dann eben nicht mehr mit XE3/XE4 kompilierbar. Oder man geht das Risiko ein und ändert den Code. Da die meisten eh nichts von automatisierten Tests halten (reiner Erfahrungswert, kein Vorwurf), wird das eine schöne Achterbahnfahrt ohne Sicherheitsgurt. Ich habe z.B. eine sehr große Anwendung unter D6. Die werde ich nicht portieren. Der Kunde zahlt es nicht und es wäre Selbstmord. Also habe ich bis ich in Rente gehe eine VM mit D6 am Laufen. |
AW: 0-Based Strings ab XE4
Was bedeutet diese Änderung für Entwickler von Komponenten und Bibliotheken für Delphi (und wie in meinem Fall auch Free Pascal), die Versionen ab 2009 oder älter untersützen wollen - nach Möglichkeit aus einer einzigen Codebasis?
Sind IFDEFs eine Lösung oder sieht es düsterer aus? :gruebel: |
AW: 0-Based Strings ab XE4
Zitat:
|
AW: 0-Based Strings ab XE4
Zitat:
|
AW: 0-Based Strings ab XE4
Zitat:
|
AW: 0-Based Strings ab XE4
Na das mit der Konstante ist gar nicht mal schlecht
Delphi-Quellcode:
const FIRSTINDEX = 1;
if Pos('xy',string)>=FIRSTINDEX then ... |
AW: 0-Based Strings ab XE4
Ja, aber eben in diesem Fall nicht pauschal auf "1" setzen, sondern die Dynamik nutzen:
Delphi-Quellcode:
Der "Witz" dabei, dass die Funktion "Low()" hier keine konkrete Variable, sondern den String-Typ als solchen bekommt.
procedure TForm1.Button1Click(Sender: TObject);
const thirdChar = Low(string) + 2; var s : string; begin s:= 'Hallo'; ShowMessage( s[thirdChar] ); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:31 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