comp.lang.ada
 help / color / mirror / Atom feed
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

  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