Come si relaziona una tabella dei simboli a uno spazio dei nomi?

6

Il tutorial ufficiale usa il termine tabella dei simboli in alcuni punti in cui prevedo il termine namespace .

1. Definire funzioni

The execution of a function introduces a new symbol table used for the local variables of the function. More precisely, all variable assignments in a function store the value in the local symbol table; whereas variable references first look in the local symbol table, then in the local symbol tables of enclosing functions, then in the global symbol table, and finally in the table of built-in names.

2. Altro sui moduli

Each module has its own private symbol table, which is used as the global symbol table by all functions defined in the module. Thus, the author of a module can use global variables in the module without worrying about accidental clashes with a user’s global variables.

Ho trovato blog di Eli Bendersky dove cita il modulo symble :

Symbol tables are generated by the compiler from AST just before bytecode is generated. The symbol table is responsible for calculating the scope of every identifier in the code.

Quindi sembra che una tabella dei simboli preceda uno spazio dei nomi. Un'altra citazione, dalla prima fonte, mi porta a credere che esistano allo stesso tempo.

The actual parameters (arguments) to a function call are introduced in the local symbol table of the called function when it is called; thus, arguments are passed using call by value (where the value is always an object reference, not the value of the object).1

Una tabella dei simboli è coinvolta nella creazione di uno spazio dei nomi? Una tabella dei simboli "contiene" uno spazio dei nomi o semplicemente informazioni contenute in uno spazio dei nomi? In breve, in che modo una tabella dei simboli si riferisce a uno spazio dei nomi?

    
posta Honest Abe 25.02.2013 - 03:42
fonte

2 risposte

4

Una tabella dei simboli è un dettaglio di implementazione. I namespace sono implementati usando le tabelle dei simboli, ma le tabelle dei simboli sono usate per più di semplici spazi dei nomi. Ad esempio, le funzioni hanno una propria tabella dei simboli per le variabili locali, ma tali variabili non esistono in nessuno spazio dei nomi (ovvero, è impossibile accedere in qualche modo alle variabili locali di una funzione utilizzando un nome completo).

    
risposta data 25.02.2013 - 03:54
fonte
0

La tabella dei simboli indica la stessa cosa di qualsiasi compilatore, ovvero una struttura dati contenente identificatori di un codice sorgente.
Moduli, classi e funzioni costituiscono blocchi di codice con la propria tabella dei simboli, in Python.

Il termine namespace è usato al posto di tabella dei simboli in Python doc di classe SymbolTable , un'istanza di cui dà accesso alla tabella dei simboli di un blocco di codice creato dall'interprete specifico che stai utilizzando.

Quindi, namespace e table symbol , in Python, si riferiscono alla stessa cosa. Il primo è la tabella dei simboli come esposta allo sviluppatore, e il secondo è la tabella dei simboli stessa.
Vedi il parallelo tra quelle due citazioni prese dal documento Python:

"The local namespace for a function is created when the function is called"

"The execution of a function introduces a new symbol table used for the local variables of the function"

    
risposta data 25.02.2013 - 07:38
fonte

Leggi altre domande sui tag