Na maioria das vezes, isso não tem nada a ver com facilitar para os escritores do compilador e analisar a eficiência, mas mais com o design de uma sintaxe que incentive códigos legíveis e inequívocos.
Os designers da linguagem pensaram que seria bom poder escrever literais numéricos como o número 1 como apenas 1 .
Seria perfeitamente possível projetar uma sintaxe de linguagem onde literais numéricos fossem citados de alguma forma, por exemplo, tildas, de modo que o literal numérico do número um fosse codificado como ~ 1 ~ e qualquer coisa que não fosse uma palavra-chave e não estivesse entre aspas seria tratada como um nome de variável .
Então você pode codificar instruções como:
1 = ~2~
two = 1 * ~2~
Mas também:
2 = ~3~
six = 2 + 2
Seja qual for a sintaxe escolhida, o código ambíguo e difícil de seguir é inevitável.
A linguagem C e a maioria das linguagens de "colchetes" descendentes de C também consideraram uma boa idéia permitir que os programadores codificassem diretamente os literais Octal e Hexadecimal e especificar o tipo de literal, se isso fosse importante. tão
010 // Octal 10 = 8;
0x10 // Hexadecimal 10 = 16;
5l // long integer with decimal value 5
2.0d // double float with value 2
Portanto, mesmo que você permita que nomes de variáveis iniciem com um número seguido por uma combinação de números e letras que incluam pelo menos uma letra, você apresentaria ao programador o problema de decidir se um determinado grupo formou um nome de variável ou um literal numérico, de modo que
2lll = 22 // OK
2ll = 2 // compiler error
Essa ambiguidade não ajudaria ninguém a escrever ou ler um programa.
Para um exemplo do mundo real estreitamente relacionado, você pode olhar para a linguagem PL / 1, cujos designers pensaram que poder usar palavras-chave como nomes de variáveis era uma boa idéia para que:
IF THEN THEN THEN = ELSE; ELSE ELSE = THEN;
IF IF THEN ELSE = IF; ELSE THEN = ELSE;
DO WHILE (WHILE = DO); END = WHILE + DO; END;
É um código válido que compila e executa.