Perché Swift necessita di tabelle dei testimoni?

8

Sto cercando di leggere i dettagli di implementazione di Swift, e una cosa che non riesco a definire sono le sue "tabelle dei testimoni". Sembra che siano un puntatore Vtable separato utilizzato per le strutture.

Ma perché dovresti averne bisogno? Le strutture vengono copiate in base al valore, quindi sai già in fase di compilazione di che tipo sono. Quindi non dovresti semplicemente hard-code quale metodo chiamare ed essere fatto con esso? Perché eseguire la distribuzione virtuale su questi metodi?

    
posta uliwitness 25.09.2016 - 13:13
fonte

1 risposta

9

Le strutture possono implementare interfacce, chiamate protocolli in Swift. È possibile avere un parametro, una variabile o un campo / membro che è un protocollo e, poiché più strutture diverse, per non parlare delle classi, possono implementare lo stesso protocollo, una volta passata (o assegnata) una struttura a un parametro di protocollo (o variabile o campo), le specifiche di cui struct potrebbe essere stato "lost" (re: compile time) e la tabella di test del protocollo entra in gioco (re: runtime).

Puoi trovare ulteriori informazioni su disposizione della memoria Swift .

Simile succede in C #, che mi è più familiare. Una struct passata o assegnata a una variabile di interfaccia o campo / membro è in box e la rappresentazione in scatola della struct corrisponde a quella delle rappresentazioni di classe, il che significa che esiste un vtable per le strutture boxed.

Mi aspetto che sia C # che Swift facciano chiamate dirette quando l'oggetto è noto al momento della compilazione come struct, e per usare il vtable vatch quando in fase di compilazione, l'elemento è noto solo come interfaccia.

    
risposta data 25.09.2016 - 18:01
fonte

Leggi altre domande sui tag