Perché i linguaggi con caratteri deboli sono ancora attivamente sviluppati?

17

Mi chiedo perché i linguaggi debolmente tipizzati siano ancora attivamente sviluppati. Ad esempio, quale vantaggio si può trarre dall'essere in grado di scrivere

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

invece di usare la versione molto diversa, tipizzata con precisione

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

È vero che devi dichiarare una variabile adizionale nel secondo esempio, ma fa davvero male? Non dovrebbero tutte le lingue cercare di essere strongmente tipizzate poiché impone la sicurezza del tipo in fase di compilazione, evitando così alcune insidie nel type-casting?

    
posta DotNetStudent 22.10.2011 - 10:40
fonte

4 risposte

25

La tipizzazione strong / debole e la digitazione statica / dinamica sono ortogonali.

strong / debole indica se il tipo di un valore è importante, dal punto di vista funzionale. In un linguaggio tipizzato debolmente, puoi prendere due stringhe che si riempiono di cifre ed eseguire l'aggiunta di interi su di esse; in un linguaggio strongmente tipizzato, si tratta di un errore (a meno che non si esegua il cast o si convertano prima i valori nei tipi corretti). La digitazione strong / debole non è una cosa in bianco e nero; la maggior parte delle lingue non sono né al 100% rigorose né al 100% deboli.

La tipizzazione

statico / dinamico riguarda il tipo di associazione ai valori o agli identificatori. In un linguaggio tipizzato dinamicamente, puoi 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 è un errore o genera un cast implicito. Alcune lingue adottano un approccio ibrido, consentendo tipi dichiarati staticamente e identificatori non tipizzati ('variant'). C'è anche inferenza di tipo, un meccanismo in cui la tipizzazione statica è possibile senza dichiarare esplicitamente il tipo di tutto, facendo capire al compilatore i tipi (Haskell lo usa estesamente, C # lo espone attraverso la parola chiave var ).

Una programmazione dinamica debole consente un approccio pragmatico; la lingua non si intromette per la maggior parte del tempo, ma non entrerà in azione quando ti sparerai ai piedi. La strong tipizzazione statica, al contrario, spinge il programmatore ad esprimere determinate aspettative sui valori esplicitamente nel codice, in un modo che consente al compilatore o all'interprete di rilevare una classe di errori. Con un buon sistema di tipi, un programmatore può definire esattamente ciò che può e non può essere fatto a un valore, e se, per caso, qualcuno prova qualcosa di indesiderato, il sistema tipo può spesso prevenirlo e mostrare esattamente dove e perché le cose vanno male. / p>     

risposta data 22.10.2011 - 13:26
fonte
4

La digitazione debole è più simile a 1 == "TRUE" . Questa sezione su wikipedia illustra bene la differenza.

Si noti che né l'esempio di wikipedia è tipizzato staticamente, che è quello a cui si fa riferimento nel secondo esempio.

Quindi, se la domanda è, perché le persone usano le lingue digitate dinamicamente, allora la risposta è: i sistemi di tipo statico mettono dei limiti su di te. 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.

    
risposta data 22.10.2011 - 11:00
fonte
0

I linguaggi dei tipi deboli sono ancora in fase di sviluppo perché le persone li usano e li gradiscono. Se non ti piace la digitazione debole, non utilizzare linguaggi tipizzati debolmente. Dichiarare che qualcosa è L'unico vero modo e che tutti dovrebbero farlo L'unico vero modo di ignorare la complessità del mondo.

    
risposta data 23.10.2011 - 02:50
fonte
0

Shouldn't all languages strive to be strongly-typed since it enforces type-safety at compile time, thus avoiding some pitfalls in type-casting?

Non necessariamente. Obiettivo di apprendimento-C: A Primer indirizza quella domanda direttamente nel contesto di Objective-C:

Weakly typed variables are used frequently for things such as collection classes, where the exact type of the objects in a collection may be unknown. If you are used to using strongly typed languages, you might think that the use of weakly typed variables would cause problems, but they actually provide tremendous flexibility and allow for much greater dynamism in Objective-C programs.

    
risposta data 23.10.2011 - 03:57
fonte

Leggi altre domande sui tag