Un sistema di tipo strong è un sistema di tipi che ha una funzione di restrizione in fase di compilazione o di runtime che trovi interessante.
Un sistema di tipo debole è un sistema di tipi che non ha questa restrizione o caratteristica.
Seriamente, è così. Leggi la pagina di Wikipedia, quindi sai che ci sono almeno undici diversi significati reciprocamente incompatibili di "strongmente tipizzato". Il termine è inutile se non chiarito; non è necessario che due persone che discutono di un sistema di tipi abbiano la stessa definizione nella loro testa di "strongmente tipizzato".
La cosa sensata da fare è quindi evitare di usare interamente "forti" e "deboli"; quando parli di una funzionalità di un sistema di tipi, descrivi semplicemente la funzione anziché definirla come "strong" o "debole". Se intendi "Mi piacciono le lingue in cui il compilatore assegna i tipi statici alle espressioni e cerca gli errori di tipo", allora dillo. Se intendi "Mi piacciono le lingue in cui ogni oggetto ha uno o più tipi di dati associati e può descrivere questi tipi in modo riflessivo in fase di esecuzione", quindi dire . Non dire "strong" perché qualcuno penserà che tu intenda "staticamente dattiloscritto" e qualcuno penserà che tu intenda "ha una riflessione temporale" e queste due cose non hanno praticamente nulla a che fare l'una con l'altra.
Ricorda anche che molte persone usano "strong" per significare che una particolare restrizione del sistema di tipi è impossibile da ignorare, e alcuni usano "strong" per indicare il contrario: che una restrizione è incoraggiata ma può essere evitato. Ad esempio, qualcuno che crede che un sistema di tipi sia "strong" se gli errori di tipo sono impossibile in fase di esecuzione, caratterizzerebbe C # come "debolmente" digitato, perché C # consente allo sviluppatore di inserire conversioni di tipo che falliranno a runtime. (esempio: short x = (short)(object)(123.ToString());
) Qualcuno che crede che un sistema di tipi sia "strong" se incoraggia scrivendo programmi in cui il compilatore trova molti ma non tutti digitare errori in fase di compilazione caratterizzerebbe C # come strongmente scritto per lo stesso motivo . Se la stessa caratteristica del sistema tipo può essere ragionevolmente caratterizzata sia come "strong" che come "debole", allora sappiamo che i termini sono inutili e dovrebbero essere evitati.