La sicurezza del tipo di un linguaggio di programmazione implementa il suo meccanismo di binding o viceversa?

3

Sono molto confuso riguardo al concetto di linguaggio di programmazione strongmente tipizzato (tipo di sicurezza di tipo AKA). Basato su più definizioni di fonte di Wikipedia Posso concludere da come ho capito che Type safety riguarda davvero ciò che può e non può essere fatto con un linguaggio come previsto dalla lingua stessa (correggimi se ho torto) ..

Questo mi ha fatto ricordare di aver visto un articolo che parlava di rilegatura. Mi ha confuso se esiste una relazione tra static / dynamic type safey assertion e binding statico / dinamico dei campi .

Ad esempio una variabile Integer int two = 1; è staticamente legata al suo valore, cercando di assegnare un valore stringa "1" a un intero una variabile risulterà in un errore di tempo di compilazione come int one ="1"; . Considero questo un approccio di sicurezza di tipo implementato dal binding statico. Ho sbagliato a pensare in questo modo? Per favore, illumina la mia comprensione di questo concetto.

    
posta Nexima360 14.03.2016 - 12:36
fonte

2 risposte

2

No. Il tipo di sistema e il binding sono concetti distinti.

Il sistema di tipi come dice il nome su chi e come vengono controllati i tipi stessi. L'associazione ha a che fare con il collegamento tra i dati o codice / operazione e i nomi (di procedura, variabile). Relativo al binding è anche il termine di spedizione, che ha a che fare con come / quando si decide quale operazione viene eseguita. Succede che l'associazione sia confusa con la spedizione.

Prendiamo come esempio Java:

Tipo sistema è:

  • statico: devi specificare i tipi quando li dichiari in modo che il compilatore controlli
  • strong: il compilatore verifica i tipi di operazioni e non consente se non corrisponde

Il binding può essere di entrambi i tipi:

  • statico: in funzioni statiche che utilizzano campi statici
  • dinamico: quando si usa Reflection o quando si ha una spedizione dinamica (vedi sotto)

La spedizione può essere di entrambi i tipi:

  • precoce: quando si utilizzano i metodi statici di chiamata
  • dynamic: quando si chiamano metodi virtuali, consentendo il polimorfismo

Prendendo C come esempio:

Digita sistema:

  • statico: devi definire i tipi quando li usi
  • debole: puoi aggiungere un int al char, ad esempio

Rilegatura:

  • statico: il compilatore fa tutto

Invio:

  • statico: come sopra, è deciso al momento della compilazione quali funzioni sono chiamate
risposta data 14.03.2016 - 14:09
fonte
0

Penso che si tratti più di dichiarare il tipo contro la risoluzione del tipo di runtime. E, naturalmente, essere in grado di modificare i tipi di variabili associate dopo l'inizializzazione. Ad esempio, le variabili locali implicite di c # non modificano la sua funzionalità di controllo tipizzato statico. Ma se usi dinamico è completamente diverso. Il compilatore non può avvisarti quando usi la parola chiave dinamica.

Per riassumere, è la dichiarazione esplicita dei tipi e dell'analisi statica del compilatore.

Puoi esaminare Typescript se vuoi che il controllo del tipo statico venga implementato in una lingua di controllo non di tipo: JavaScript.

    
risposta data 14.03.2016 - 15:03
fonte

Leggi altre domande sui tag