From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: Question on bounded / unbounded strings
Date: Sat, 24 Sep 2016 09:52:39 +0200
Date: 2016-09-24T09:52:39+02:00 [thread overview]
Message-ID: <ns5bce$bn$1@gioia.aioe.org> (raw)
In-Reply-To: da9acaf0-b980-428b-85de-c7197d98ddb1@googlegroups.com
On 2016-09-24 01:58, John Smith wrote:
> On Thursday, September 22, 2016 at 3:25:18 AM UTC-4, Dmitry A. Kazakov wrote:
>> On 22/09/2016 04:10, John Smith wrote:
>>
>>> I've found the ease with which you can append or manipulate unbounded
>>> strings to be very convenient.
>>
>> 1. There is no need to append to a string in no less than 90% of cases.
>
> The percentage in this case depends on what application you are
> developing. Sometimes you will need to do this more often, sometimes
> less often.
Yes, this "sometimes" is 10% of all "sometimes", or less.
> If anything, a fixed string is less convenient since you need to
> walk on eggshells and cannot simply assign a new value to the existing string.
Which I never have to. If you assign strings reconsider the algorithm,
there is certainly something wrong with it. Strings may be rearranged,
never assigned.
> When I said bound, I meant the length ;-)
That is called fixed string in Ada, I never said they were unusable.
> If you need to separate a large string into a bunch smaller ones
> that do not have a pre-determined size, using a fixed string does not make
> any sense.
I *never* need that. It was discussed already.
> When you do need to build a string, it is far easier to have one
> unbounded string that is added on to and then written out.
No, it is easier with fixed strings.
> Having a
> fixed string means that I woul need something along the lines of a
> recursive solution, since I can't extent the size of the string after
> it's been instantiated.
The output length for formatted output is always known. Normally the
parts of a composite string are statically known, that precludes
iteration or recursion. In other cases, like building a directory path
from some structure, I first calculate the length and then declare the
result string.
>> The idea of using Unbounded_String as an accumulator, e.g. for some
>> messages log, is just awful. It won't work and at the end you will need
>> to have a special data structure (text buffer) for this (with plain
>> strings as building blocks).
>
> Why won't it work?
Because it is a very inefficient data structure for this purpose.
Unbounded_String aren't meant to be efficient for expansion
specifically. They give an overall balanced performance for *all* string
operations. Therefore the implementation will likely use a single buffer
reallocated in some chunks, if you are lucky, or each time, when you are
not, and then copied as a whole. Data structures designed specifically
for accumulation never reallocate anything and certainly never copy the
contents from the beginning. They don't have other string operations
efficient or don't have them at all, which is exactly the point. If you
need accumulator use stream, file, text buffer. You need not strings for
that.
> I've built HTML files and small reports using an unbouded string and
> it worked fine.
The keyword is "small". Unbounded_Strings signify careless design and
careless algorithm choices.
--
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de
next prev parent reply other threads:[~2016-09-24 7:52 UTC|newest]
Thread overview: 45+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-09-13 8:46 Question on bounded / unbounded strings Arie van Wingerden
2016-09-13 9:04 ` Dmitry A. Kazakov
2016-09-22 2:10 ` John Smith
2016-09-22 7:24 ` Dmitry A. Kazakov
2016-09-22 9:01 ` J-P. Rosen
2016-09-22 9:53 ` Dmitry A. Kazakov
2016-09-22 10:58 ` G.B.
2016-09-22 12:05 ` Dmitry A. Kazakov
2016-09-22 14:14 ` G.B.
2016-09-22 17:18 ` Dmitry A. Kazakov
2016-09-22 11:08 ` J-P. Rosen
2016-09-22 12:05 ` Dmitry A. Kazakov
2016-09-22 13:18 ` Maciej Sobczak
2016-09-22 13:52 ` Dmitry A. Kazakov
2016-09-22 14:51 ` Maciej Sobczak
2016-09-22 17:13 ` Dmitry A. Kazakov
2016-09-23 5:50 ` Maciej Sobczak
2016-09-23 6:36 ` Simon Wright
2016-09-23 7:48 ` Dmitry A. Kazakov
2016-09-28 20:55 ` Randy Brukardt
2016-09-23 23:58 ` John Smith
2016-09-24 7:52 ` Dmitry A. Kazakov [this message]
2016-09-24 16:25 ` John Smith
2016-09-24 17:44 ` Dmitry A. Kazakov
2016-09-24 18:33 ` John Smith
2016-09-24 18:37 ` John Smith
2016-09-24 18:59 ` John Smith
2016-09-25 8:50 ` Dmitry A. Kazakov
2016-09-25 23:35 ` brbarkstrom
2016-09-26 7:28 ` Dmitry A. Kazakov
2016-09-26 12:39 ` brbarkstrom
2016-09-28 21:09 ` Randy Brukardt
2016-09-30 7:59 ` Björn Lundin
2016-09-13 9:35 ` gautier_niouzes
2016-09-13 10:41 ` Alejandro R. Mosteo
2016-09-13 17:41 ` Jeffrey R. Carter
2016-09-13 17:59 ` Björn Lundin
2016-09-14 11:23 ` Arie van Wingerden
2016-09-14 12:26 ` Arie van Wingerden
2016-09-14 12:28 ` Arie van Wingerden
2016-09-14 12:57 ` Arie van Wingerden
2016-09-14 19:39 ` Jeffrey R. Carter
2016-09-17 16:35 ` Arie van Wingerden
2016-09-16 14:43 ` Olivier Henley
2016-09-17 16:35 ` Arie van Wingerden
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox