Minha resposta é realmente apenas uma elaboração de Gilles, que eu não havia lido antes de escrever a minha. Talvez seja útil.
Deixe-me começar minha tentativa de responder sua pergunta com uma distinção entre duas dimensões do trabalho das linguagens de programação que se relacionam de maneira bastante diferente à teoria da linguagem de programação em geral e ao cálculo do processo em particular.
O último ocorre tipicamente na indústria, com o objetivo de fornecer linguagens de programação como um produto. As equipes que desenvolvem Java na Oracle e C # na Microsoft são exemplos. Por outro lado, a pesquisa pura não está ligada a produtos. Seu objetivo é entender as linguagens de programação como objetos de interesse intrínseco e explorar as estruturas matemáticas subjacentes a todas as linguagens de programação.
Devido a objetivos divergentes, diferentes aspectos da teoria da linguagem de programação são relevantes em pesquisa pura e em pesquisa e desenvolvimento focados em produtos. A imagem abaixo pode dar uma indicação do que é importante onde.
Pode-se perguntar neste ponto por que as duas dimensões são tão aparentemente diferentes e como elas se relacionam.
O insight principal é que a pesquisa e o desenvolvimento da linguagem de programação têm múltiplas dimensões: técnica, social e econômica. Quase por definição, a indústria está interessada no retorno econômico das linguagens de programação. Microsoft e colaboradores não desenvolvem linguagens a partir da bondade de seus corações, mas porque acreditam que as linguagens de programação lhes dão uma vantagem econômica. E eles investigaram profundamente por que algumas linguagens de programação são bem-sucedidas e outras, aparentemente semelhantes ou com recursos mais avançados, não. E eles descobriram que não há uma única razão. As linguagens de programação e seus ambientes são complexos, e também as razões para a adoção ou ignoração de qualquer linguagem específica. Mas o maior fator para o sucesso de uma linguagem de programação é o apego preferencial de programadores a linguagens já amplamente utilizadas: quanto mais pessoas usam uma linguagem, mais bibliotecas, ferramentas, material didático estão disponíveis e mais produtivo é o programador. pode estar usando esse idioma. Isso também é chamado de efeito de rede. Outro motivo é o alto custo da troca de linguagens para indivíduos e organização: dominar a linguagem, especialmente para um programador não tão experiente, e quando a distância semântica para linguagens familiares é grande, é um esforço sério e demorado. Diante desses fatos, pode-se perguntar por que os novos idiomas são atraídos? Por que as empresas desenvolvem novos idiomas? Por que não ficamos apenas com Java ou Cobol? Penso que existem várias razões principais para o soro de leite que uma língua tenha sucesso,
Um novo domínio de programação é aberto e não há titulares a serem substituídos. O exemplo principal é a web com seu aumento concomitante de Javascript.
Visibilidade de linguagem. Com isso, quero dizer o alto preço da mudança de idioma. Mas, às vezes, os programadores se mudam para campos diferentes, levando consigo uma linguagem de programação e obtendo sucesso com a linguagem antiga no novo campo.
Uma linguagem é promovida por uma grande empresa com poder de fogo financeiro sério. Esse apoio reduz o risco de adoção, porque os adotantes iniciais podem ter certeza razoável de que o idioma ainda será suportado em alguns anos. Um bom exemplo disso é o C #.
Um idioma pode vir com ferramentas atraentes e ecossistema. Aqui também C # e seu ecossistema .Net e Visual Studio podem ser mencionados como exemplo.
Os idiomas antigos adquirem novos recursos. O Java vem à mente, o qual, a cada iteração, capta mais boas idéias da tradição de programação funcional.
Finalmente, um novo idioma pode ter vantagens técnicas intrínsecas, por exemplo, ser mais expressivo, ter uma sintaxe melhor, sistemas de digitação que detectam mais erros etc.
Dado esse pano de fundo, não deve surpreender que exista uma desconexão entre pura pesquisa em linguagem de programação e desenvolvimento comercial de linguagem de programação. Embora ambos tenham como objetivo tornar a construção e a evolução do software mais eficientes, especialmente para software em larga escala, o trabalho da linguagem de programação industrial deve estar mais interessado em facilitar a adoção rápida para atingir uma massa crítica e obter o efeito de rede. Isso leva a um foco de pesquisa em coisas que os programadores que trabalham se preocupam. E isso tende a incluir coisas como disponibilidade de biblioteca, velocidade do compilador, qualidade do código compilado, portabilidade e assim por diante. O cálculo de processo como o praticamos hoje é de pouca utilidade para programadores que trabalham em projetos convencionais (embora eu acredite que isso mudará no futuro).
λπβ-redução para programação funcional, resolução / unificação para programação lógica, passagem de nome para computação simultânea). Para entender se um idioma como o Scala pode ter uma inferência de tipo completa viável, não precisamos nos preocupar com a JVM. De fato, pensar na JVM prejudicará uma melhor compreensão da inferência de tipo. É por isso que a abstração da computação em pequenos cálculos de núcleo é vital e poderosa.
Assim, você pode pensar na pesquisa em linguagem de programação como uma enorme caixa de areia onde as pessoas brincam com brinquedos e, se encontram algo interessante ao brincar com um brinquedo específico e investigam o brinquedo minuciosamente, esse brinquedo interessante inicia sua longa marcha em direção à aceitação industrial convencional . Digo uma longa marcha porque os recursos da linguagem inventados pela primeira vez pelo pesquisador da linguagem de programação tendem a levar décadas para serem amplamente aceitos. Por exemplo, a coleta de lixo foi concebida na década de 1950 e tornou-se amplamente disponível com Java na década de 1990. A correspondência de padrões remonta a 1970 e é amplamente usada apenas desde Scala.
O cálculo de processo é um brinquedo especialmente interessante. Mas é novo demais para ser investigado minuciosamente. Isso levará mais uma década de pesquisa pura. O que está acontecendo atualmente na pesquisa de teoria de processos é pegar a maior história de sucesso da pesquisa em linguagem de programação, a teoria de tipos (seqüenciais) e desenvolver a teoria de tipos para simultaneidade de passagem de mensagem. Sistemas de digitação de expressividade moderada para programação seqüencial, dizem Hindley-Milner, agora são bem compreendidos, onipresentes e aceitos pelos programadores que trabalham. Gostaríamos de ter tipos moderadamente expressivos para programação simultânea. Pesquisas sobre isso começaram na década de 1980 por pioneiros como Milner, Sangiorgi, Turner, Kobayashi, Honda e outros, freqüentemente baseados, explícita ou implicitamente, na idéia de linearidade que vem da lógica linear. Os últimos anos viram um grande aumento de atividade e espero que essa trajetória ascendente continue no futuro próximo. Também espero que este trabalho comece a vazar para P&D focada em produtos, em parte pelo motivo pragmático de que jovens pesquisadores treinados em cálculo de processos trabalharão em laboratórios industriais de P&D, mas também devido à evolução da CPU e da arquitetura de computadores. de formas seqüenciais de computação.
Em resumo, não me preocuparia que você não ache a teoria da linguagem de programação de ponta, como o cálculo de processo, útil em seu próprio trabalho de construção de linguagens. Isso é simplesmente porque a teoria de ponta não trata das preocupações das linguagens de programação atuais. É sobre idiomas futuros. Vai demorar um pouco para o 'mundo real' se atualizar. O conhecimento que você usa para criar linguagens para hoje é a teoria da linguagem de programação do passado. Encorajo-vos a aprender mais sobre cálculo de processos, porque é uma das áreas mais interessantes de toda a ciência da computação teórica.