Richard Engebretson schrieb:
> I have looked hard at AnsiStrings (not the source). They try to bridge
> the turbo with delphi pascal. But I am avoiding the delphi mode. The
> delphi mode hides pointers and has other secrets that confuse me.
The AnsiString type is also a hidden pointer :-)
I think it is a good idea to hide pointers if possible. Anyway, I agree
that the hidden pointer in the "class" type might confuse someone wo was
using "object" before.
> My basic point is pascal has some very nice string types. Pascal is
> NOT like C and that is good.
Agree. I don't like C's null-terminated strings.
> My only disagreement is AFAIK the string is not copied to the stack in
> the first a) case, as one would expect. But is passed by reference.
> However, this is very unclear to me.
Hm... I did a simple test (see below). The program will produce a stack
overflow. If you change the maximum length of the string, the number of
recursions will change! This number would be constant if just a pointer
was copied to the stack.
I didn't look at fpc - but Turbo Pascal does the following when foo is
called:
- it pushes the number to the stack
- it pushes the address of the string (so, you're right, it is passed by
reference; also in case a). BUT the foo procedure itself then does a
"sub sp, sizeof(str)" and copies the string. But that is just an
internal detail, I don't know if FPC does it the same way.
Wolf
Test program:
type
str=string[100]; (* change the number *)
procedure foo(nr: integer; s:str);
begin
writeln(nr);
foo(nr+1, s);
end;
var
s:str;
begin
foo(0,s);
end.


|