L'inserimento di tipi / funzioni nello spazio dei nomi semplifica il lavoro di analisi del compilatore?

1

Mantenere i nomi all'interno di namespace renderà il compilatore meno stressante!?

Ad esempio:

// test.cpp
#include</*iostream,vector,string,map*/>
class vec { /* ... */ };

Prendi 2 scenari di main() :

// scenario-1
using namespace std;  // comment this line for scenario-2
int main ()
{
  vec obj;
}

Per lo scenario 1 in cui using namespace std; , diversi nomi di tipi da namespace std entreranno in ambito globale. Quindi il compilatore dovrà controllare contro vec se qualcuno di questi si scontrerà con esso. Se lo fa, genera un errore.

Nello scenario 2 in cui non è presente using namespace , il compilatore deve semplicemente controllare vec con std , perché questo è l'unico simbolo nell'ambito globale.

Mi interessa saperlo, non dovrebbe rendere il compilatore un po 'più veloce?

    
posta iammilind 19.10.2012 - 12:26
fonte

1 risposta

3

Dipende da come è progettato il compilatore.

Può rendere tutti i simboli rappresentati con i loro nomi completi completi in un albero di ricerca binaria, con un altro insieme di "scope visibilità" e una tabella di copertura che dice cosa è visibile da dove (quindi l'intera struttura del nome è appiattita ) o può in qualche modo gestire le strutture dei nomi o far fronte al proprio blocco di codice e agli ambiti.

Puoi facilmente capire che le prestazioni del compilatore differiscono molto se lo sviluppatore del compilatore ha fatto una scelta ortogonale rispetto all'utente del compilatore.

Tuttavia lo scopo del codice (a parte l'ovvio di fare ciò che è necessario fare) deve essere leggibile e mantenibile, non facilmente compilabile. Se hai intenzione di ottimizzare la compilazione, ti stai concentrando sul lato sbagliato dello sviluppo del software, rischiando di trovarti tra 5 anni con un codice che si compila velocemente, ma non puoi più toccarlo poiché sei più in grado di comprenderlo.

    
risposta data 22.10.2012 - 08:46
fonte

Leggi altre domande sui tag