Funktion Concat

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Mathias
Beiträge: 4906
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunc)
CPU-Target: 64Bit
Wohnort: Schweiz

Funktion Concat

Beitrag von Mathias »

Ich bin Zufällig auf die Funktion Concat gestossen.
https://www.freepascal.org/docs-html/rt ... oncat.html

Hat die Funktion irgendwelche Vorteile gegenüber dem + ?
Hat das einen historischen Hintergrund.

Die Beschreibung hat noch einen kleinen Fehler, da steht, das bei 255 Zeichen abgeschnitten wird, ist aber bei einem Ansistring nicht der Fall.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 4184
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Niederösterreich
Kontaktdaten:

Re: Funktion Concat

Beitrag von af0815 »

steht im Text
The same operation can be performed with the + operation.
Hat mit dem Operator overloading zu tun. concat kenne ich noch von TP her, Lege es unter historisch ab, bzw. auf Plattformen, wo es kein operatoroveloading gibt, fall es das überhaupt noch gibt.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Winni
Beiträge: 271
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.06, fpc 3.04
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: Funktion Concat

Beitrag von Winni »

Hallo!

Concat ist Pascal und stammt von N. Wirth, ist also Original.

Die Verkettung von 2 Strings mit dem + Zeichen ist übelstes Basic .
Es wurde in Turbo Pascal eingeführt und wird nun 40 Jahre mitgeschleppt.

Winni

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

Re: Funktion Concat

Beitrag von theo »

Winni hat geschrieben:
Mi 29. Jul 2020, 17:41
Die Verkettung von 2 Strings mit dem + Zeichen ist übelstes Basic .
Es wurde in Turbo Pascal eingeführt und wird nun 40 Jahre mitgeschleppt.
Und wo ist das Problem?

Mathias
Beiträge: 4906
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunc)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Funktion Concat

Beitrag von Mathias »

Wen ich mich nicht täusche, geht das + unterdessen auch bei dynamischen Arrays.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot

Winni
Beiträge: 271
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.06, fpc 3.04
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: Funktion Concat

Beitrag von Winni »

Hi!

Das ist eine Verhunzung und Überfrachtung der Sprache.
Wo das endet, sieht man bei Ada. Grusel.

Man gewöhnt sich an allem - auch an dem Dativ!

Winni

Winni
Beiträge: 271
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.06, fpc 3.04
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: Funktion Concat

Beitrag von Winni »

Mathias hat geschrieben:
Mi 29. Jul 2020, 18:27
Wen ich mich nicht täusche, geht das + unterdessen auch bei dynamischen Arrays.
Ja. Seit fpc 3.2

Winni

Benutzeravatar
photor
Beiträge: 198
Registriert: Mo 24. Jan 2011, 21:38
OS, Lazarus, FPC: Arch Linux (L 2.0.10 FPC 3.2.0)
CPU-Target: 64Bit

Re: Funktion Concat

Beitrag von photor »

Winni hat geschrieben:
Mi 29. Jul 2020, 17:41
Hallo!

Concat ist Pascal und stammt von N. Wirth, ist also Original.

Die Verkettung von 2 Strings mit dem + Zeichen ist übelstes Basic .
Es wurde in Turbo Pascal eingeführt und wird nun 40 Jahre mitgeschleppt.
Generiert das eine oder andere besseren Code? Oder ist es nur für die Schön- bzw. Reinheit des Sourcecodes wichtig (und damit Geschmackssache --> kein Streit)?

Ich gebe ja zu, dass ich üblicherweise auch "+" schreibe (aus Bequemlichkeit und weil es sich in meinen Augen besser liest), Ich habe aber letztens (in einem Python-Forum oder Tutorial) gelesen, dass die beiden Schreibweisen in Python möglich sind aber tatsächlich unterschiedlich schnellen Code produzieren (die "+"-Schreibweise führt wohl tatsächlich immer zu einem Umkopieren des Ursprungsstrings im Speicher; String.Concat("Blah") wohl nicht). Ich hab's bisher noch nicht getestet.

Ciao,
Photor

Winni
Beiträge: 271
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.06, fpc 3.04
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: Funktion Concat

Beitrag von Winni »

Hallo!

Ich hab noch nicht in die system unit geguckt.

Aber ich habe eben einen Test gemacht:

2 Strings zu 80 ASCII per random erzeugt

a) 100 Mio s3 := s1+s2:
b) 100 Mio s3 := concat (s1,s2);

Mehrmals wiederholt. Mit leichten Abweichungen:
a) 845 ms
b) 825 ms

Mach 2.4% Differenz. Vergiss es.

Winni

Mathias
Beiträge: 4906
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunc)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Funktion Concat

Beitrag von Mathias »

Das + ist auf jedenfall lesbarer.
Bei Concat musste ich erst googeln.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot

Socke
Lazarusforum e. V.
Beiträge: 2748
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Funktion Concat

Beitrag von Socke »

photor hat geschrieben:
Mi 29. Jul 2020, 21:22
Generiert das eine oder andere besseren Code? Oder ist es nur für die Schön- bzw. Reinheit des Sourcecodes wichtig (und damit Geschmackssache --> kein Streit)?
Der FPC erzeugt für beide Varianten den selben Code. Je nach Anzahl und Typ der Strings, gibt es verschiedene Funktionen in der Datei "<fpcsrc>/rtl/inc/astrings.inc", z.B. fpc_AnsiStr_Concat für zwei Ansistrings und fpc_ansistr_concat_multi für mehr als zwei Ansistrings. Der +-Operator ist also wie beim Operator-Overloading nur eine andere Schreibweise für einen Funktionsaufruf.
Für Unicodestrings gibt's das gleich in "<fpcsrc>/rtl/inc/ustrings.inc"
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Winni
Beiträge: 271
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.06, fpc 3.04
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: Funktion Concat

Beitrag von Winni »

Mathias hat geschrieben:
Mi 29. Jul 2020, 22:26
Das + ist auf jedenfall lesbarer.
Bei Concat musste ich erst googeln.

Hi!

Concat ist die Ur-Syntax im ersten Pascal von Niklas Wirth 1976.
+ ist die Basic Erweiterung von Anders Hejlsberg in Turbo Pascal 1983.

Winni

PascalDragon
Beiträge: 27
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: Funktion Concat

Beitrag von PascalDragon »

Mathias hat geschrieben:
Mi 29. Jul 2020, 18:27
Wen ich mich nicht täusche, geht das + unterdessen auch bei dynamischen Arrays.
Nur wenn der Modeswitch ArrayOperators gesetzt ist (Standard in Mode Delphi), da hierdurch eventuelle Operatorüberladungen für + abgeschalten werden (gab da ein paar fette Beschwerden, als ich das damals auf der FPC-Devel Mailing Liste vorgestellt hatte). Concat funktioniert jedoch immer.

Ansonsten: der (eingebaute) + Operator und Concat führen intern zum gleichen Code.
FPC Compiler Entwickler

Mathias
Beiträge: 4906
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunc)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Funktion Concat

Beitrag von Mathias »

Habe es gerade probiert, Concat geht auch mit einer Array, obwohl hier nichts davon steht: https://www.freepascal.org/docs-html/rt ... oncat.html

Code: Alles auswählen

{$modeswitch arrayoperators}
Funktioniert auch, macht einem das Coden einfacher. :wink:
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot

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

Re: Funktion Concat

Beitrag von theo »

Winni hat geschrieben:
Mi 29. Jul 2020, 18:37
Das ist eine Verhunzung und Überfrachtung der Sprache.
Wo das endet, sieht man bei Ada. Grusel.
Naja, ich finde du übertreibst da ziemlich.
Das gibt es doch in den meisten moderneren Sprachen auch, von Java bis Python.
Concat erinnert doch eher an strcat() von C.
Ich möchte dieses Feature jedenfalls nicht missen.

Antworten