Statically typed language: a language that does not allow you to change the type of a variable at run-time.
Questa non è la definizione di tipizzazione statica. La tipizzazione statica significa che il controllo del tipo (e l'inferenza del tipo) avviene prima del runtime. L'opposto è la digitazione dinamica, in cui il controllo dei tipi avviene in fase di runtime.
È perfettamente possibile progettare un linguaggio tipizzato staticamente in cui entrambi gli identificatori possono cambiare tipi o tipi possono cambiare.
Type safety: type safety means that you are not allowed to mix incompatible data types.
For example, you cannot assign a float
to an int
, and you cannot assign an int
to a function pointer, and you cannot add a user-defined object to an int
(unless you use operator overloading), etc.
Non esiste una definizione universalmente accettata di sicurezza del tipo. Il tuo è molto sensato.
Back to my question, let's say that there is an interpreted statically typed language,
Non esiste una lingua interpretata tipicamente, semplicemente perché non esiste una lingua interpretata, un periodo. Interpretazione e compilazione sono tratti del, bene, interprete o compilatore (duh!), Cioè l'implementazione , non la lingua. Ogni lingua può essere implementata con un interprete e ogni lingua può essere implementata con un compilatore. In effetti, molte lingue hanno entrambe le interpretazioni interpretate e compilate. Ad esempio, Haskell ha diverse implementazioni compilate (Ghc, Jhc, Yhc, Lhv) e un'implementazione interpretata (Hugs). ECMAScript ha implementazioni compilate pure (V8) e implementazioni ibride in modalità mista (ad esempio SpiderMonkey AOT-compila ECMAScript a SpiderMonkey bytecode, quindi entrambi compila e interpreta questo bytecode)
Dire che una lingua è un "linguaggio interpretato" non è solo sbagliato , è persino più che sbagliato , è semplicemente non sensoriale. L'idea del "linguaggio" e l'idea di "interpretazione" vivono su due diversi livelli di astrazione. Se l'inglese fosse una lingua tipizzata, il "linguaggio interpretato" sarebbe un errore di tipo.
in such a language I can write code that assigns a float
to an int
, but when this code is executed, a (run-time) type error will occur.
Sei incoerente con te stesso qui.
Dici "staticamente digitato" significa "non permette di cambiare il tipo di una variabile", il che significa che puoi non scrivere tale codice. Ma ora dici che puoi scrivere tale codice in un linguaggio tipizzato staticamente.
Ma se puoi scrivere tale codice, quindi con la tua definizione, è non tipizzato staticamente. E se è tipizzato in modo statico, quindi in base alla propria definizione, non è possibile scrivere tale codice.
Quindi non sorprende che tu abbia una contraddizione, perché ti stai contraddittando.
Is such a language considered to be type safe, or are type safe languages can only be statically typed and compiled, and so type errors must be caught at the compilation stage?
Indipendentemente dal fatto che il tipo di lingue sicure possa essere solo tipizzato staticamente o meno dipende solo da come si definisce "sicuro per tipo". Un'altra definizione comune di "tipo sicuro" è che non è possibile sovvertire il sistema di tipi. Ruby è digitato in modo dinamico, ma di solito è descritto come sicuro. D'altra parte, C è tipizzato staticamente ma nessuno lo descriverà come sicuro.
Per quanto riguarda la possibilità di compilare un linguaggio sicuro per tipo, ho già spiegato sopra che la compilazione è un dettaglio di implementazione, non è una proprietà del linguaggio stesso.