On Feb 19, 8:22 am, Wolf Behrenhoff
<NoSpamPleaseButThisIsVal...@[EMAIL PROTECTED]
> wrote:
> 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.
I am running your test on a linux virtual console using nr:longint.
Still running after over 125,000 recursions. Don't know ?? 175,000 ...
snorrr :-)


|