Sicurezza di tipo - Puntatori GO vs C

3

C è un linguaggio tipizzato statico che non è sicuro dal punto di vista del testo, perché i puntatori ( void *y ) ti permettono di fare praticamente tutto quello che vuoi, anche di cose che potrebbero mandare in crash il tuo programma.

GO è anche un linguaggio tipizzato static

Nonostante GO abbia dei puntatori ( var y *int ), è ancora considerato un linguaggio sicuro per il tipo.

Domanda:

Considerando i puntatori GO,

Perché GO language è chiamato tipo sicuro lingua?

    
posta overexchange 29.01.2017 - 00:55
fonte

2 risposte

9

Ci sono alcune differenze tra Go e C che rendono il primo almeno più sicuro:

  1. Se non usi il pacchetto non sicuro , non esegui il crash di un programma Go (in la sensazione che non farà qualcosa che fa sì che il SO lo uccida). Potresti causare il panico, ma questo non è la stessa cosa di un arresto anomalo (ed è recuperabile).

  2. Go non ha aritmetica del puntatore ( source ) - sebbene abbia un riferimento null di ordinamento chiamato nil .

  3. L'equivalente di void* di Go, interface{} , è lanciato in maniera più sicura utilizzando tipo di asserzioni , che non si limiterà a bloccare e consentire test più sicuri dei tipi, o digitare switch.

Fondamentalmente Go e le lingue con mix simili di tipi dichiarati e tipi di runtime (C # e Java) sono di tipo sicuro perché integrano un sistema di tipi non corretti con un sistema di tipo runtime che trasforma errori di tipo che avrebbero causato arresti anomali nelle eccezioni del runtime. C ha un sistema di tipo non valido e nessun sistema di runtime che impedirebbe un comportamento non sicuro. Alcune lingue, come ATS , sono simili alle protezioni di runtime ma sono sicure per i tipi perché i loro sistemi di tipi rendono le operazioni illegali indicibili . Fondamentalmente: tipo sicuro significa che la lingua non ti permetterà di fare qualcosa di illegale. A volte il runtime ti ferma (come nei linguaggi dinamici come Python). A volte il sistema tipo ti ferma. Per Go è una combinazione di entrambi.

    
risposta data 29.01.2017 - 02:19
fonte
4

La mancanza di sicurezza del tipo non deriva dai puntatori - proviene da void puntatori e dalla capacità di eseguire cast casuali tra i tipi di puntatore. Non c'è nulla di non sicuro riguardo al "puntatore all'intero": la mancanza di sicurezza del tipo in C è dovuta al fatto che non c'è alcuna garanzia che un int* sia effettivamente che punta ad una memoria che contiene un intero.

    
risposta data 29.01.2017 - 02:13
fonte

Leggi altre domande sui tag