Why people dislike global variables so much while I find them so convenient?

Patrick Schluter Patrick.Schluter at bbox.fr
Tue Jan 25 17:10:40 UTC 2022


On Tuesday, 25 January 2022 at 15:47:12 UTC, Ali Çehreli wrote:
> On 1/25/22 01:53, rempas wrote:
>
> > people dislike global variables
>
> The situation is much better in D because I suspect what you 
> call global is D's module-scope and thread-local.
>
> (Note: I don't want to argue whether thread-local by default 
> was a good decision or not but I certainly take full advantage 
> of the ease of thread-local variables in D.)
>
> So, module-scope variables are just fine: std.parallelism uses 
> a default ThreadPool object, std.stdio functions use stdout, in 
> this case a truly global object, etc.
>
> > When I have a variable that I must pass down to 5-6
> > functions, I find it much easier to make it global rather
> than having it
> > been passed in all the functions that need it.
>
> I've used that method once, which I mentioned at this point 
> during a presentation:
>
>   https://youtu.be/dRORNQIB2wA?t=2946
>
> Both you and I realize that a module is an object and in our 
> case there is a single object of it. That works.
>
> When you need more than one object (more than one context), 
> then you move all those variables to a user-defined type and 
> they become proper member variables.
>
> > global variables can mess me up
>
> Otherwise, as everybody else told, global variables can be very 
> dangerous:
>
>
> https://www.safetyresearch.net/toyota-unintended-acceleration-and-the-big-bowl-of-spaghetti-code/
>
Toyota, lol. I also had once to interact with software coming 
from them. It was surpzising to say it politely. It was a order 
system for suppliers of parts. The orders were tickets the 
suppliers had to scrape from a website. The very uncommon feature 
of the site was that it checked credentials (username/password) 
for the connection but didn't check if the client managed to read 
the ticket or not. Any read attempt of the tickets url would 
delete it on the server. The problem was that there was no 
"developer" server, only the real production server and I had to 
write the client software without losing orders as these were 
real orders of parts the supplier. It was impossible to negotiate 
with T. that there system was stupid. I managed to only lose 4 
orders which amounted to several thousands of euros.



More information about the Digitalmars-d mailing list