Nella maggior parte dei casi ciò non ha nulla a che fare con la semplificazione degli autori del compilatore e l'analisi dell'efficienza, ma soprattutto con la progettazione di una sintassi che incoraggi un codice chiaro e inequivocabile.
I designer del linguaggio hanno pensato che sarebbe stato bello poter scrivere letterali numerici come il numero 1 come solo 1 .
Sarebbe del tutto possibile progettare una sintassi linguistica in cui i letterali numerici fossero citati in qualche modo, ad esempio tildas, quindi il letterale numerico per il numero uno era codificato come ~ 1 ~ e tutto ciò che non era una parola chiave e non racchiuso tra virgolette veniva trattato come un nome di variabile .
Quindi potresti codificare istruzioni come:
1 = ~2~
two = 1 * ~2~
Ma anche:
2 = ~3~
six = 2 + 2
Qualunque sia la sintassi scelta, il codice ambiguo e difficile da seguire è inevitabile.
Il linguaggio C e la maggior parte delle lingue "parentesi graffe" discendenti da C hanno anche ritenuto una buona idea consentire ai programmatori di codificare direttamente i letterali ottali ed esadecimali e, se questo era importante, specificare il tipo di letterale. Così
010 // Octal 10 = 8;
0x10 // Hexadecimal 10 = 16;
5l // long integer with decimal value 5
2.0d // double float with value 2
Quindi, anche se consentissi che i nomi delle variabili inizino con un numero seguito da una combinazione di numeri e lettere che includessero almeno una lettera, presenteresti al programmatore il problema di decidere se un determinato gruppo formasse un nome di variabile o un valore letterale numerico, quindi
2lll = 22 // OK
2ll = 2 // compiler error
Tale ambiguità non aiuterebbe nessuno a scrivere o leggere un programma.
Per un esempio del mondo reale strettamente correlato, puoi guardare il linguaggio PL / 1 i cui progettisti hanno pensato che poter usare le parole chiave come nomi di variabili fosse una buona idea in modo che:
IF THEN THEN THEN = ELSE; ELSE ELSE = THEN;
IF IF THEN ELSE = IF; ELSE THEN = ELSE;
DO WHILE (WHILE = DO); END = WHILE + DO; END;
Codice valido che compila ed esegue.