Il modo in cui lo guardo è, se puoi lavorare in modo naturale all'interno di un linguaggio tipizzato staticamente, quindi la tipizzazione statica è la strada da percorrere. In generale, lo scopo di un sistema di tipi è di impedire all'utente di eseguire operazioni con semantica indefinita, come (string) "hello" + (bool) true
. Avere il livello extra di sicurezza che ti impedisce di eseguire queste operazioni può essere un buon modo per prevenire i bug nel tuo codice, anche senza test di unità estesi. Cioè, la sicurezza del tipo fornisce un altro livello di sicurezza nella correttezza semantica del tuo codice.
Ma i sistemi di tipo sono molto difficili da ottenere. Non credo che sia un sistema di tipo perfetto in natura al momento della stesura di questo articolo. (Per "sistema di tipo perfetto", intendo un sistema di tipo rigoroso, che non richiede annotazioni di codice verbose, che non genera errori di tipo falso-positivi e il cui errore di tipo è facile da capire per il programmatore.) Inoltre, può essere difficile capire i sistemi di tipo veramente buoni che esistono. Quando stavo imparando Haskell, non posso dirvi il numero di errori di tipo oscuro che ho avuto durante il tentativo di scrivere quello che sembrava (a me) come il codice corretto. Di solito il codice non era effettivamente corretto (che è un punto a favore del sistema di tipi), ma ci sono voluti un lotto di lavoro per capire i messaggi di errore del compilatore, in modo da poter correggere il problemi sottostanti. Nei linguaggi OO, potresti eventualmente trovarti a pensare "questo argomento dovrebbe essere controvariante con il tipo di input, non covariante!", O (più probabilmente) tornare alle tipografie per scappare dai limiti del sistema di tipi. I sistemi di tipo possono diventare molto più complicati di quanto si pensi.
Per quello che vale, è a mia conoscenza che la difficoltà nel trovare buoni sistemi di tipo fa parte di ciò che è motivato Gilad Bracha a includere il supporto del sistema di tipi innestabile in Newspeak.