Uno può inventarsi tutti i linguaggi formali che gli detti la fantasia, avranno pro e contro, ma un
linguaggio di programmazione deve funzionare in un computer del mondo fisico, non in una realtà platonica.
Nella realtà fisica qualsiasi computer immaginabile ha una
CPU con registri di dimensione finita e nemmeno tanto grande, capaci solo di rappresentare numeri interi finiti piuttosto piccoli.
I numeri reali, ma anche semplicemente i razionali, non possono essere rappresentati fedelmente all'interno di un computer, bisognerà approssimarli in qualche modo e usare algoritmi di calcolo specializzati per trattarli. Al contrario numeri interi abbastanza piccoli possono essere trattati direttamente dalle istruzioni della
CPU. Non si può sperare di verificare esattamente un'uguaglianza come π == π , bisognerà accontentarsi di verificare se la differenza tra due
float rientri entro un certo margine d'errore, che è un'operazione concettualmente diversa da verificare l'uguaglianza tra due
int come 1 == 1 analogo a verificare se
vero ==
vero, cosa fattibile usando lo stesso algoritmo e la stessa istruzione macchina.
Sarà inoltre ben difficile, non mi risulta ci siano casi esistenti al riguardo, che una qualità di tipo
vero o falso possa avere dei registri o delle celle di memoria dedicati di un
solo bit, in genere verranno usati otto o più bit e condiviso l'utilizzo delle istruzioni di comparazione
uguale,
maggiore o
minore per la verifica della verità delle espressioni logiche.
Per questo nel linguaggio
C vero e
falso vengono intelligentemente rappresentati in condivisione con i piccoli interi col tipo
int, mentre i numeri reali hanno i loro tipi a parte
float. Le stringhe di caratteri possono essere rappresentate da stringhe di numeri interi. Tutto quadra.
Ciò vale su
tutti i computer attualmente in commercio o ragionevolmente disponibili per parecchi anni a venire.
Quelli che hanno inventato
JavaScript invece per "fare le cose semplici" si sono sognati i tipi nativi
String,
Number e
Boolean, distinti tra loro, dove nel tipo
Number ricadono sia gli interi che i reali. La confusione poi è tale che hanno dovuto anche distinguere tra
null e
undefined e aggiungere nuovi operatori di equivalenza === e !==, roba che voi umani...
Appare evidente che
JavaScript è stato inventato da gente sotto l'effetto di droghe o minorati mentali, e la cosa più pazzesca è che questa peste ormai ha invaso il mondo e continua a diffondersi. Non c'è modo di sistemare una cosa del genere, sarà sempre un taccone su una cosa
defective by design. Tutta la programmazione
WEB si basa su un linguaggio con
fondamenta di sabbia.
Buttiamola in ridere a questo punto ...sia mai per quello che i browser hanno le
sandbox? :-)