Visualizzazione dei risultati da 1 a 10 su 22

Visualizzazione discussione

  1. #14
    L'uso di variabili globali è deprecato ingegneristicamente, in tutti i linguaggi nei quali esistono delle alternative (controesempio: quasi nessun assembler supporta variabili "locali" o con scope segregato) e in particolare nei linguaggi procedurali. Nei linguaggi OOPL puri l'uso di globals è idealmente inibito a livello sintattico, a meno di non ricorrere ad implementazioni di aspects o altre esotiche peculiarità, mentre la natura ambigua di C++ è confermata ulteriormente dal fatto che eredita tali variabili sic et simpliciter dal C.

    Questo perché, principalmente, l'uso di variabili globali viola il principio di information hiding di Parnas (vedi anche qui, oppure qui) e la sua specializzazione già citata dal nostro ottimo oregon nel thread sopra referenziato, ovvero il principio dell'accoppiamento debole.
    Inoltre si creano dei potenziali pitfall nel momento in cui non vi sono meccanismi di controllo su quale routine o funzione possa alterare il valore di tali variabili e in quale momento, creando problemi di sincronizzazione e potenziali conflitti.

    Naturalmente, lontano dal solito mainstream, prevalgono le situazioni nelle quali non vi è alternativa all'uso di globals, anche perché tale approccio rimane prestazionalmente vincente in una maggioranza di casi rispetto al classico uso dello stack frame per il passaggio di parametri.

    A proposito del thread già citato, alcune affermazioni lì riportate non sono corrette: ad esempio, le variabili globali possono essere inizializzate o meno, e fin dagli albori dall'informatica applicata (anzi, a maggior ragione quando lo spazio sui dischi era un asset preziosissimo!) i compilatori fanno in modo da separare le une dalle altre, impiegando esattamente zero bytes per ogni variabile non inizializzata e minimizzando così l'occupazione di spazio dell'immagine dell'eseguibile sul supporto di massa. Per contro, è ovvio che anche le costanti (in particolare quelle usate a runtime per inizializzare dinamicamente variabili automatiche) occupano spazio nell'immagine dell'eseguibile, sicché l'intera argomentazione in merito risulta speciosa e poco consistente, dipendendo in modo molto stringente da fattori puramente statistici e soprattutto sostanzialmente indipendenti dal tipo di visibilità assegnato ad una variabile.

    Le reali ragioni per cui nei manuali di stile e di engineering l'uso di variabili globali è deprecato, in un contesto mainstream, sono quelle riportate poco sopra: violazione del criterio di Parnas e sue specializzazioni, e diminuzione del controllo sugli accessi alla variabile, quindi scarsa affidabilità dei "contratti" relativi.
    Ultima modifica di M.A.W. 1968; 27-11-2014 a 14:49 Motivo: Aggiunto un link
    • Un plauso a Grisha Perelman, raro esempio di genuino anticonformismo umano e scientifico.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.