venerdì 18 novembre 2016

JavaScript la Peste del nuovo secolo

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? :-)


Nessun commento:

Posta un commento