But currently move *does* handle dynamic arrays differently than other 
procedures.
It handles it exactly the same as any other function/procedure that takes a 
untyped/formal "var" parameter. Formal var parameters always take on the 
address of whatever you pass.

That's not true! There is a lot of ambigouity with dynamic arrays. Although an underlying pointer 
is used internally you use it as if it was the array this pointer is pointing to in your code. If 
you first have a static array "MyArray" then convert it to a dynamic array you don't have 
to change your code (except if you use fillchar and/or move). Why that? What exactly does 
"MyArray" mean? You can't tell because it is context dependent. That's not in the spirit 
of Pascal.

The confusion comes from the fact that a dynamic array, just like 
ansi/wide/unicodestrings and a Delphi-style classes/interfaces, is an implicit 
pointer to the actual data. Hence, if you pass a variable of such type to a 
formal var parameter, you are passing a pointer to this implicit pointer as the 
parameter value (rather than a pointer to the actual data).

True. As I said: There is no common logic what the identifier "MyArray" means 
if it is a dynamic array (but there is for static arrays).

fillchar() and move() are equivalent to direct assembly level programming as 
far as the abstraction level is concerned because they ignore all type info. 
The fact that they ignore all type info is a mess.

It's true that it ignores all *type* info. Still there was no ambigouity about 
the starting address of a variable you give as parameter until dynamic arrays 
were introduced (including AnsiStrings).
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to