[fpc-pascal] private type and type compatibility
Sven Barth
pascaldragon at googlemail.com
Thu Oct 31 15:32:52 CET 2013
Am 31.10.2013 14:42, schrieb Frederic Da Vitoria:
> 2013/10/31 Sven Barth <pascaldragon at googlemail.com
> <mailto:pascaldragon at googlemail.com>>
>
> Am 31.10.2013 12:38, schrieb Frederic Da Vitoria:
>> 2013/10/31 Sven Barth <pascaldragon at googlemail.com
>> <mailto:pascaldragon at googlemail.com>>
>>
>> Am 31.10.2013 02:45, schrieb Xiangrong Fang:
>>> 2013/10/30 Jonas Maebe <jonas.maebe at elis.ugent.be
>>> <mailto:jonas.maebe at elis.ugent.be>>
>>>
>>>
>>> This is not equivalent. A private type declaration in a
>>> class adds a new identifier that is visible inside that
>>> class. You then use it, still in that class, to declare
>>> the return type of a function. Next, in a scope where
>>> that type identifier is no longer visible, you call the
>>> function.
>>>
>>> My example is a complete match to that scenario as far
>>> as identifier visibility is concerned (you use a type in
>>> a scope where it is visible to declare a function return
>>> type, and then call the function in a scope where it is
>>> not visible). In your example, the type is not visible
>>> in the place where the function is declared but only
>>> where it is defined
>>> .
>>>
>>>
>>> This is logically WRONG. Because to the machine, any
>>> function return value can be seen as an array of bytes, for
>>> example, a pointer is array[0..3] of Byte on a 32-bit
>>> machine. The purpose of type system is to explain what
>>> these bytes stands for. So, if a type is out-of-scope, how
>>> do you interpret the data?
>>>
>>> The current "delphi compatible" implementation IS using the
>>> type information to compile the program, i.e. although it is
>>> not visible, it is indeed used by the compile, which, in my
>>> opinion, violates visibility rules.
>>>
>>> Standing on your view point, if a type is no longer visible,
>>> but a variable (function return value) of that type is in
>>> current scope, and understood by the program, this means,
>>> this value itself carries type information! Is is kind of
>>> meta data available in Pascal? If so, I think RTTI should
>>> work for ANY kind of primitive data types.
>>>
>> For unit interfaces there is indeed the point that if unit A
>> uses unit B then the program which uses unit A will be able
>> to access types used by unit A. E.g.:
>>
...
>
>> It's this way at least since Turbo Pascal (though without
>> classes then ;) ).
>>
>>
>> Yes, I agree this is the TP/Delphi way, and as such should be
>> kept at least in DELPHI mode. But is this really good? Doesn't
>> this contradict the Pascal philosophy? Borland did a few
>> questionable things (look at how you used the semicolons in you
>> examples above ;-) ), and it took some decisions when
>> implementing units. But how is this handled in Modula?
> Undoing this even for only non-TP/Delphi modes would mean
> adjusting very much code out there. So no, this is how Object
> Pascal works.
>
>
> Ah, you mean that this is too much intricately mixed with the compiler
> code and it would be much too much work to change? OK, this I
> understand :-)
>
It's not about being mixed with the compiler code it's about too many
legacy code relying on this behavior, because it's a given since TP times.
Regartds,
Sven
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-pascal/attachments/20131031/6117210b/attachment.html>
More information about the fpc-pascal
mailing list