On Tue, 20 Dec 2011 07:41:50 +0100, Skybuck Flying <skybuck2...@hotmail.com> wrote:

(Delphi limitation, but probably applies to free pascal as well):

You have a very interesting definition of "limitation", but well...

Take following examples:

Tvalue = smallint;

or
Tvalue = word

or

Tvalue = 0..5000;

^ All of these examples are quite bad in the following way:

They become very static, which makes it pretty much impossible to change
their range at runtime.

I can't see any reason why you would even want to change a range during
runtime. After all, there usually was a pretty good reason why you applied
a range the first time, otherwise you would have used Integer directly.

My recommendation for the Delphi language is to do away with these static
types and instead change them to dynamic types, just like arrays where
expanded with dynamic types.

As if the only purpose of range types is to index dynamic arrays.

Ofcourse it's nice and perhaps even required to keep these static types for
backward compatibility but it would also be nice if these types can be
expanded with a dynamic type, so it can be safely used with dynamic arrays
which can be any size/range.

In that case you just need one type: InfiniteInteger (or maybe call it
UnconstrainedInteger), where it's bit size changes during runtime up to
the point where the computer memory is exhausted. So, instead of getting
Range-Check errors, you get memory allocation failures trying to allocate
an integer requiring 2**128 bits. :->

var
  MinValue : integer;
  MaxValue : integer;

Tvalue = MinValue...MaxValue;

then this type could also be used as follows:

var
  DynamicArrayOfValues : array[Tvalue] of integer;

Umm, and what shall happen, if I change MinValue somewhere inbetween? The
array size and/or index range shall magically change with it?

And why would that be better than a (more) simple

var
   Dynamic : array[MinValue .. MaxValue] of Integer;

type
   TValue = Low (Dynamic) .. High (Dynamic);

The array and the type you're indexing it with are tied to each other either
way, so there's no point in changing only one of it. Or, to express it
differently: As long as you don't know the size of the array you also don't
know the range of the index type - and vice versa.

Well, considering that the latter is (to some extent) already available in the
current compiler, your proposal is IMO quite useless.

Or - may I speak freely, sir? ... Then, I think, it's bullshit.


Vinzent.
_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-devel

Reply via email to