[fpc-devel] Wrong docs: not initialized global variables

Nikolai Zhubr n-a-zhubr at yandex.ru
Thu Apr 5 10:58:13 CEST 2018


Hi,

05.04.2018 10:12, Ondrej Pokorny пишет:
[...]
> 1.) Global variables are initialized. (Why is simple global variables
> initialization needed for internal bookkeeping of the compiler?)

IIRC this was historically introduced by Borland (ages ago) because it 
was very cheap and easy to ask an OS of their choice to zero-out .data 
segment upon executable module loading, effectively getting 
initialization for free, and at that time (ages ago!) speed was what 
they cared most about.

> 2.) Class fields are initialized. (Why is simple class fields
> initialization needed for internal bookkeeping of the compiler?)

Here again, it was relatively cheap and easy to fillchar/memset object's 
body internally before use. Not competely free, but pretty efficient 
still. So essentially same reason, I'd say.

> 3.) Everything else is not initialized.

Apparently this was not so cheap and not so easy for Borland (at least 
at that time). So apparently they chose to ignore.


 From my personal perspective, this indeed is implementation detail, 
however wildely abused (me included), and it is a rather unfortunate 
situation. E.g. I'd be in a huge disaster if implicitely initialized 
strings suddenly start to be '<uninitialized string>' instead of empty. 
So ideally, something clever should be done about it at some point. 
Maybe indeed declaring it as a guaranteed behaviour or something. I kind 
of doubt there is a realistic chance of changing it anyway, due to 
compatability reasons...


Thank you.

Regards,
Nikolai



More information about the fpc-devel mailing list