Perché i linguaggi debolmente tipizzati vengono ancora sviluppati attivamente?


17

Mi chiedo perché siano ancora attivamente sviluppati linguaggi debolmente tipizzati. Ad esempio, quali vantaggi si possono trarre dalla capacità di scrivere

$someVar = 1;
(...)  // Some piece of code
$someVar = 'SomeText';

invece di usare la versione molto diversa e tipizzata in modo stonghiato

int someInt = 1;
(...)
string SomeString = 'SomeText';

È vero che devi dichiarare una variabile adizionale nel secondo esempio, ma ti fa davvero male? Tutte le lingue non dovrebbero sforzarsi di essere fortemente tipizzate poiché impone la sicurezza del tipo in fase di compilazione, evitando così alcune insidie ​​nella fusione del tipo?


9
"Fortemente tipizzato" non è un termine ben definito. Principalmente significa "non è possibile sovvertire il sistema di tipi". È ortogonale a ciò che descrivi sopra che potrebbe essere la tipizzazione latente contro manifest o la tipizzazione statica contro dinamica.
Frank Shearar,

10
Cosa mi manca che sposta questo da esca di fiamma con diverse domande strettamente correlate, probabilmente anche duplicate (basta cercare SackOverflow per domande che menzionano la digitazione statica e dinamica nei loro tag) alla domanda legittima?

1
Esistono vantaggi e svantaggi sia per le lingue tipizzate staticamente che per quelle tipicamente dinamiche. I linguaggi tipizzati dinamicamente si prestano bene allo sviluppo o alla prototipazione rapidi (da qui la ragione per cui i "linguaggi di scripting" sono tipicamente tipizzati in modo dinamico), mentre i linguaggi tipizzati staticamente (probabilmente) sono più facili da mantenere ed estendere man mano che crescono in grandi progetti complicati.
Charles Salvia,

6
Il primo esempio è un po 'come Python in cui le variabili non hanno un tipo dichiarato. Tuttavia, Python è un linguaggio fortemente tipizzato perché gli oggetti - essi stessi - hanno un tipo che è quasi impossibile da modificare o forzare. Penso che l'abuso della terminologia renda molto difficile rispondere a questa domanda.
S. Lott,

1
@delnan Il fatto che questa domanda abbia due risposte ragionevoli e non si sia trasformato in una guerra di fiamma aiuta.
Adam Lear

Risposte:


25

La tipizzazione forte / debole e la tipizzazione statica / dinamica sono ortogonali.

Forte / debole è se il tipo di un valore è importante, dal punto di vista funzionale. In un linguaggio debolmente tipizzato, puoi prendere due stringhe che si riempiono di cifre ed eseguire addizioni intere su di esse; in un linguaggio fortemente tipizzato, si tratta di un errore (a meno che non si eseguano prima il cast o la conversione dei valori nei tipi corretti). La digitazione forte / debole non è una cosa in bianco e nero; la maggior parte delle lingue non è né rigorosa al 100% né debole al 100%.

La tipizzazione statica / dinamica riguarda se i tipi si legano ai valori o agli identificatori. In una lingua tipizzata in modo dinamico, è possibile assegnare qualsiasi valore a qualsiasi variabile, indipendentemente dal tipo; la tipizzazione statica definisce un tipo per ogni identificatore e l'assegnazione da un tipo diverso può essere un errore o comporta un cast implicito. Alcune lingue adottano un approccio ibrido, consentendo tipi dichiarati staticamente e identificatori non tipizzati ("variante"). Esiste anche l'inferenza dei tipi, un meccanismo in cui la tipizzazione statica è possibile senza dichiarare esplicitamente il tipo di tutto, facendo in modo che il compilatore capisca i tipi (Haskell lo usa ampiamente, C # lo espone attraverso la varparola chiave).

Una programmazione dinamica debole consente un approccio pragmatico; la lingua non ti ostacola per la maggior parte del tempo, ma non interviene nemmeno quando ti spari a un piede. La forte tipizzazione statica, al contrario, spinge il programmatore a esprimere esplicitamente nel codice determinate aspettative riguardo ai valori, in modo da consentire al compilatore o all'interprete di rilevare una classe di errori. Con un buon sistema di tipi, un programmatore può definire esattamente cosa può e non può essere fatto a un valore e se, per caso, qualcuno prova qualcosa di indesiderato, il sistema di tipo può spesso prevenirlo e mostrare esattamente dove e perché le cose vanno male.


In un linguaggio tipicamente debolmente tipizzato come HyperTalk con operatori separati per la concatenazione e l'aggiunta di stringhe (ad es. Assumere &per la concatenazione), operazioni come "12"+3o 45 & "6"non presentano alcuna ambiguità (calcolano rispettivamente 15 e "456"). In un linguaggio più fortemente tipizzato, l'operatore "+" potrebbe essere sovraccaricato in modo sicuro sia per la concatenazione di stringhe che per l'aggiunta numerica senza causare ambiguità perché le operazioni su stringhe e numeri sarebbero vietate. I problemi sorgono quando la lingua specifica i chiodi né i tipi né le operazioni da eseguire.
supercat

4

Digitazione debole è più sulla falsariga di 1 == "TRUE". Questa sezione su Wikipedia illustra bene la differenza.

Si noti che nessuno degli esempi di Wikipedia è tipizzato staticamente, che è ciò a cui si fa riferimento nel secondo esempio.

Quindi, se la domanda è: perché le persone usano linguaggi tipicamente dinamici, allora la risposta è: i sistemi di tipo statico ti mettono dei limiti. Molte persone semplicemente non hanno mai lavorato con un sistema di tipo statico espressivo, il che li porta alla conclusione che gli svantaggi della tipizzazione statica superano i benefici.


0

I linguaggi di tipo debole sono ancora in fase di sviluppo perché le persone li usano e li apprezzano. Se non ti piacciono i caratteri deboli, non usare linguaggi deboli. Dichiarare che qualcosa è L'unica vera via e che tutti dovrebbero farlo L'unica vera via ignora la complicità del mondo.


0

Tutte le lingue non dovrebbero sforzarsi di essere fortemente tipizzate poiché impone la sicurezza del tipo in fase di compilazione, evitando così alcune insidie ​​nella fusione del tipo?

Non necessariamente. Learning Objective-C: A Primer affronta questa domanda direttamente nel contesto di Objective-C:

Le variabili debolmente tipizzate vengono utilizzate frequentemente per cose come le classi di raccolta, in cui il tipo esatto degli oggetti in una raccolta potrebbe essere sconosciuto. Se sei abituato a usare linguaggi fortemente tipizzati, potresti pensare che l'uso di variabili debolmente tipizzate causerebbe problemi, ma in realtà forniscono un'enorme flessibilità e consentono un dinamismo molto maggiore nei programmi Objective-C.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.