A separação das línguas humanas vem da evolução (darwiniana?) Em comunidades isoladas. A separação de linguagens de programação vem de variações na necessidade técnica, ideologia técnica, de mudanças no entendimento técnico e teórico, de mudanças na nossa capacidade técnica de implementar. É um processo um pouco mais consciente, eu acho.
As linguagens de computador poderiam ser mais parecidas com as línguas naturais? Provavelmente um pouco, até certo ponto. Eu acho que uma grande parte da complexidade da linguagem natural resulta de uma variedade de fenômenos de evolução simultâneos que não têm motivos para produzir um resultado consistente a qualquer momento, mesmo que seja provável que inconsistências antigas sejam eliminadas progressivamente enquanto uma nova aparece . Não sou especialista em linguística diacrônica. Mas queremos esse tipo de complexidade nas linguagens de programação.
A questão da ambiguidade é importante, mas não como afirma a maioria das pessoas. Uma linguagem é um meio de comunicação, e deve ser analisada no contexto dessa comunicação (homem-homem, homem-máquina, ambos, entre lugares ou entre tempos, ... para dizer um pouco simplista). O que importa não é se você pode fazer apenas declarações não ambíguas no idioma, mas se você sempre pode garantir que a comunicação seja inequívoca no contexto pretendido. Existe uma linguagem de programação bem conhecida e amplamente usada, que permite escrever programas ambíguos (bem, sim, mas eu não vejo as últimas versões há algum tempo). Nesse caso, o compilador é inteligente o suficiente para detectar a ambiguidade e solicitar esclarecimentos, que podem ser incorporados no programa para eliminar a ambiguidade. Observe que a detecção de ambiguidade não significa que apenas uma das opções possíveis tenha significado, todas elas têm. A questão é se uma das entidades comunicantes pode detectar a ambiguidade para que o remetente possa esclarecê-la. Os seres humanos são ruins nisso, mas os computadores podem ser muito bons.
Formalismos e linguagens de programação podem ter sintaxe mais rica e flexível. Eu acredito que a principal razão pela qual eles não fazem isso é o simples conservadorismo. As ferramentas sintáticas usadas ainda são muitas vezes ferramentas projetadas há trinta anos ou mais, para atender às limitações dos computadores da época. A eficiência da análise não é mais uma questão tão crítica na compilação, e existem técnicas mais poderosas de forma tratável.
Curiosamente, a base mais amplamente usada para sintaxe de linguagens de programação vem da pesquisa em linguagem natural: a gramática livre de contexto. Grande parte da pesquisa técnica mudou-se para a ciência da computação teórica / técnica nos anos sessenta, para ser redescoberta de alguma maneira no início dos anos 80 por pessoas de linguagem natural (estou simplificando). Desde então, muito progresso foi feito para a sintaxe em linguagens naturais, enquanto a ciência da computação parece em grande parte presa às antigas ferramentas sintáticas. O pêndulo da linguagem natural está agora voltando para as técnicas estatísticas, mas as abordagens algébricas da sintaxe não são esquecidas. Provavelmente, boas abordagens virão de uma combinação de técnicas algébricas e estatísticas.
Meu sentimento é que a área crítica é a semântica e a transição entre sintaxe e semântica. Ainda é muito difícil formalizar a linguagem natural, enquanto temos muitas técnicas precisas no caso de linguagens de programação e sistemas formais. Como o jogo está longe de ser jogado para linguagens naturais, é difícil dizer qual o impacto que poderia ter sobre linguagens de programação no futuro.
Outro ponto é que muitos designers de linguagem de programação estão tentando provar alguma coisa ou reforçar uma ideologia técnica. Assim, eles são extremamente prescritivos em seu design para impedir que os usuários se afastem dos paradigmas pretendidos. Infelizmente, isso é extremamente contraproducente para a criatividade. A linguagem mais criativa já projetada foi uma das primeiras: Lisp (1958). A liberdade e a flexibilidade permitidas foram a fonte de considerável criatividade. O preço era que exigia autodisciplina e compreensão. Mas Lisp era realmente uma metalinguagem, uma linguagem para a criação de linguagens.
Agora, para outra perspectiva, os programas são na verdade provas de suas especificações vistas como uma declaração matemática (bem, estou simplificando novamente). Algumas pessoas (não me lembro de referências, desculpe) estão brincando com provadores de teoremas para produzir provas que pareceriam ter sido escritas por um matemático em linguagem natural. Então, acho que a ideia de ter programas que parecem que foram escritos em linguagem natural pode não ser totalmente absurda.
No entanto, você pode notar que, mesmo quando escrito informalmente por um matemático, o discurso matemático parece bem diferente da conversa comum ou de um livro de história. Isso se deve a uma diferença significativa no universo do discurso em questão, os domínios semânticos que estão sendo discutidos. Assim, embora você possa imaginar linguagens de programação que se parecem mais com linguagens naturais, há uma limitação natural que é o domínio do discurso e suas próprias propriedades desejáveis. Muito provavelmente permanecerá essencialmente superficial, isto é, principalmente sintático. O matemático pode falar sobre sistemas formais e sobre política. Espero que os dois discursos não sejam parecidos. Os computadores não podem (ainda?) Falar de política ou entendê-la. O dia em que eles fizerem isso não será mais a programação.
Olhando para trás na história, as linguagens de alto nível foram, desde o início (FORTRAN), uma tentativa de se aproximar de uma forma mais natural para expressar tarefas computacionais, mas essas tarefas foram entendidas como matemáticas ou lógicas (Fortran 1957, Algol 1958, Lisp 1958 ) ou mais orientada para os negócios (Cobol 1959). Dentro de dez anos, as pessoas estavam preocupadas com idiomas que seriam mais próximos, mais bem adaptados ao problema em questão, e houve uma pesquisa significativa nos chamados extensible
languages
, cobrindo sintaxe e semântica. Um caminho importante para expressar problemas de maneira mais natural foi o surgimento de object
orientation
(às vezes sob outros nomes). Embora seja sempre difícil atribuir paternidade, provavelmente surgiu do trabalho sobre inteligência artificial, principalmente em Lisp, e da linguagemSimula
67
(Família Algol), que pretendia expressar mais naturalmente problemas do mundo real que devem ser simulados em um computador. Tudo parece historicamente consistente.