I tipi di dati sono un modo per trasmettere informazioni su un oggetto o una variabile in un programma per computer. Le informazioni fornite dai tipi di dati sono
- Quanto spazio di archiviazione occupa un oggetto di questo tipo
- Quali elementi secondari, se esistono, ha questo oggetto e con quali nomi possono accedere a questi sottoelementi
- Quali operazioni possono essere eseguite su un oggetto di questo tipo
Ci sono due modi in cui i tipi possono essere gestiti da un compilatore / interprete, staticamente e dinamicamente. Il modo in cui ciascun tipo viene gestito dipende dalla definizione del linguaggio di programmazione e dall'implementazione del compilatore / interprete.
Con tipi statici, il compilatore (questi tipi sono usati principalmente in linguaggi compilati) sa in ogni punto del programma quali sono esattamente le operazioni valide per una determinata variabile / oggetto e, se invochi un'operazione, quali istruzioni generare o quale funzione esatta da invocare. L'ambiente di runtime non necessita di alcun accesso alle informazioni sul tipo.
Con tipi dinamici, il compilatore / interprete può sapere approssimativamente quali operazioni sono valide per una determinata variabile / oggetto, ma potrebbe non conoscere tutti i dettagli. Ad esempio, il compilatore sa che la variabile X è di tipo A o una sottoclasse di A, ma potrebbe non sapere esattamente quale sottoclasse. In questo caso, alcune informazioni sul tipo devono essere accessibili dall'ambiente runtime per richiamare la funzione corretta della sottoclasse corretta.
In C, tutti i tipi sono statici. Tutte le informazioni sul tipo sono gestite dal compilatore e non vi sono informazioni di tipo memorizzate negli eseguibili.
In Python, tutti i tipi sono definiti come classi e in linea di principio sono dinamici ed è probabile che le informazioni sul tipo vengano archiviate insieme ai dati effettivi. Questo tipo di informazioni consente di determinare (in un secondo momento) quale tipo esatto di dati è stato memorizzato in list
.
Un esempio di linguaggio che usa sia tipi statici che dinamici sarebbe C ++. Lì, la maggior parte dei tipi viene gestita staticamente, ad eccezione delle classi che contengono membri virtuali. Questi sono gestiti in modo dinamico.