On 04/05/2010 20:11, "Vinzent Höfler" wrote:
I fear you've simply no clue about the usage,
internals and purpose of dyn. arrays so I stop this discussion.
As you always do once someone does not share your point of view, even after you 
tried so hard to convince him. :P Well, never mind.

Still, dynamic arrays are a bitch, because they only *pretend* to be arrays up to a 
certain point. Comparing this data type with classes, or even file type (thus, records) 
is pointless, because those types do not have a counterpart like the dynamic array has in 
the form of the "static" array.

A class is a class - is a pointer^Wreference type. Always. Ever. In every 
context. In contrast, an array is an array is - yes, either an array or a 
pointer. Maybe.

Is it really that hard to admit to the fact, that the design of dynamic arrays 
makes promises which the abstraction can't keep, rather than neglecting this 
fact each and every time this discussion comes up?

Yes, of course, a dynamic array is a precise data type you should know how to 
handle. This would be the end of discussion if it were the only array-like data 
type. Unfortunately, the point of reference is the old style static array which 
the dynamic counter-part tries to resemble - and fails to do so.

The dynamic array simply fails the principle of least surprise. No more, no 
less.

Then the problem is the name, even so it has a different name "dynamic array" versus "static array".

They have many difference. And I never heard any one complaining about the other differences:

Size:
  Fixed for static
  Variable for dynamyc

Initialization
  None for static (declare it, and access it)
  SetLength for dynamic (access, it before (via []) and get an error)

So why is it a problem, that one is a pointer, and the other not? Because it is easier, or more often overlooked.

Then maybe that's a fault of the documentation, not of the data-type?
To me the data-type itself has no surprises at all. But it did need proper learning of what it is supposed to be.


You say "array is an array " and I ask where is that broken?

An array is a collection of data elements, which can be accessed via an index (kill me, if I used the wrong words in this sentence, I am sure you can pick them and turn them against me, but I am equaly sure, you can (willingness assumed) detuct what I tried to express.)

I have never found anything that says, that an array (not a static-array, just an array), always and under any circumstances must ensure that the identifier of the whole array is equal to the first data-element in the array? I don't even think there is a guarantee that all the data elements are found at consecutive addresses in memory. (which is also required in order to use move)

It may be (or maybe not) that such promises are made for "static array"; but should that mean they must be made for every other type of array, for any future type of array too?



Yes, of course, a dynamic array is a precise data type you should know how to 
handle. This would be the end of discussion if it were the only array-like data 
type. Unfortunately, the point of reference is the old style static array which 
the dynamic counter-part tries to resemble - and fails to do so.
So all similar data types have to stick to the same principles?

1) then what between an
- instance of a class
- object (as in "type foo=object .... end")

2) Why bother having 2 data types at all.
If they must be so equal, then they either both *must* use SetLength, or none of them must.

procedure Foo;
var a: Array of integer
begin
  a[1] := 7;
end;

why does that crash? It doesn't crash with a static array?, and they are both array-like types. According to your words, I would expect the above to work... And now wait, before some one says that's silly. Why can they not auto-expand, auto-shrink? If I access an element, then setlength is called automatically....


Martin


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

Reply via email to