Quali sono e come funzionano i (dati) tipi?

0
  1. Che cos'è una "variabile" / tipo di dati?
  2. In che modo un compilatore / interprete gestisce i tipi?

La mia specifica preoccupazione riguarda i diversi tipi nelle lingue di livello inferiore e superiore. Ad esempio in Python, dato che list è davvero flessibile. Puoi semplicemente definirlo e inserirli in runtime come vuoi.

  • int s
  • float s
  • str Ings
  • set s
  • anche altri list s

Sostanzialmente oggetti di qualsiasi tipo (se non sbaglio)

Quindi immagino list di essere una classe scritta in C con un sacco di cose lì dentro, allocazione dinamica della memoria e così via, per gestire tutto questo.

  • È giusto?
  • .. e questo significa tutte quelle e. g. I tipi Python sono classi C?
  • Quindi quali sono i tipi in C?
  • Sono "classi"?
  • .. o in qualche modo correlato al codice assemblatore?

PS: non sto cercando alcuni suggerimenti e risposte illustrativi precisi piuttosto che una spiegazione esaustiva e ampia. E: Queste domande non sono correlate a "Non ci sono variabili in Python, ma identificatori".

    
posta 27.01.2014 - 07:59
fonte

2 risposte

2

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.

    
risposta data 27.01.2014 - 09:30
fonte
1

Hai praticamente ragione. I tipi Python sono solo wrapper attorno ai tipi C (tecnicamente, non ci sono classi in C). Questi wrapper implementano comportamenti definiti in modo specifico per Python. Nel caso delle liste, le Domande frequenti su Python mostrano che sono implementate in C come una matrice di puntatori e ridimensionati quando necessario (come l'inserimento o l'eliminazione di oggetti), con un po 'di ottimizzazione aggiunta.

Questo è il tipo di cose che i programmatori che lavorano in C hanno dovuto fare da sé per molto tempo. Python si occupa di tutto questo per te in background, quindi non devi preoccuparti di questo.

Per quanto i tipi Python siano classi C, o What are C types? , puoi considerare i tipi C come blocchi di costruzione su cui Python è costruito. Nello stesso modo in cui una tabella hash è costruita sugli elenchi, ma con funzionalità aggiunte per fornire un servizio specifico (inserimento / ricerca veloce), i tipi / classi Python sono costruiti su tipi C, con funzionalità aggiuntive.

    
risposta data 28.01.2014 - 21:57
fonte

Leggi altre domande sui tag