Programação em nível de função
Na ciência da computação, a programação em nível de função se refere a um dos dois paradigmas de programação contrastantes identificados por John Backus em seu trabalho sobre programas como objetos matemáticos, sendo o outro a programação em nível de valor .
Em sua palestra do Prêmio Turing de 1977 , Backus expôs o que ele considerava ser a necessidade de mudar para uma filosofia diferente no design de linguagem de programação: [1]
As linguagens de programação parecem estar em apuros. Cada linguagem sucessiva incorpora, com uma pequena limpeza, todos os recursos de suas predecessoras, além de mais alguns. [...] Cada nova linguagem reivindica recursos novos e modernos... mas o fato é que poucas linguagens tornam a programação suficientemente mais barata ou confiável para justificar o custo de produzi-las e aprender a usá-las.
Ele projetou o FP para ser a primeira linguagem de programação a oferecer suporte específico ao estilo de programação em nível de função.
Um programa em nível de função é livre de variáveis (cf. programação sem pontos ), uma vez que variáveis de programa , que são essenciais em definições em nível de valor, não são necessárias em programas em nível de função.
Introdução
No estilo de programação em nível de função, um programa é construído diretamente a partir de programas que são fornecidos no início, combinando-os com operações de formação de programa ou funcionais . Assim, em contraste com a abordagem em nível de valor que aplica os programas fornecidos a valores para formar uma sucessão de valores culminando no valor de resultado desejado, a abordagem em nível de função aplica operações de formação de programa aos programas fornecidos para formar uma sucessão de programas culminando no programa de resultado desejado.
Como resultado, a abordagem de nível de função para programação convida ao estudo do espaço de programas sob operações de formação de programas , buscando derivar propriedades algébricas úteis dessas operações de formação de programas. A abordagem de nível de função oferece a possibilidade de tornar o conjunto de programas um espaço matemático enfatizando as propriedades algébricas das operações de formação de programas sobre o espaço de programas .
Outra vantagem potencial da visão de nível de função é a capacidade de usar apenas funções estritas e, portanto, ter semântica bottom-up, que é o tipo mais simples de todos. Outra é a existência de definições de nível de função que não são a imagem elevada (isto é, elevada de um nível de valor inferior para um nível de função superior) de qualquer nível de valor existente: essas definições de nível de função (frequentemente concisas) representam um estilo mais poderoso de programação não disponível no nível de valor.
Contraste com a programação funcional
Quando Backus estudou e divulgou seu estilo de programação em nível de função, sua mensagem foi mal interpretada [2] como suporte às linguagens de programação funcional tradicionais em vez de seu próprio FP e seu sucessor FL .
Backus chama a programação funcional de programação aplicativa ; [ esclarecimento necessário ] sua programação em nível de função é um tipo particular e restrito.
Uma distinção fundamental das linguagens funcionais é que a linguagem de Backus tem a seguinte hierarquia de tipos:
- átomos
- funções que levam átomos a átomos
- Funções de ordem superior (que ele chama de "formas funcionais"), que levam uma ou duas funções para funções
...e a única maneira de gerar novas funções é usar uma das formas funcionais, que são fixas: você não pode construir sua própria forma funcional (pelo menos não dentro do FP; você pode dentro do FFP ( Formal FP )).
Essa restrição significa que funções em FP são um módulo (gerado pelas funções internas) sobre a álgebra de formas funcionais e, portanto, são algebricamente tratáveis. Por exemplo, a questão geral da igualdade de duas funções é equivalente ao problema da parada e é indecidível, mas a igualdade de duas funções em FP é apenas igualdade na álgebra e, portanto (Backus imagina) mais fácil.
Mesmo hoje, muitos usuários de linguagens de estilo lambda frequentemente interpretam erroneamente a abordagem de nível de função de Backus como uma variante restritiva do estilo lambda, que é um estilo de nível de valor de fato . De fato, Backus não teria discordado da acusação "restritiva": ele argumentou que era precisamente devido a tais restrições que um espaço matemático bem formado poderia surgir, de uma maneira análoga à maneira como a programação estruturada limita a programação a uma versão restrita de todas as possibilidades de fluxo de controle disponíveis em programas não estruturados simples, irrestritos .
O estilo livre de valores do PF está intimamente relacionado à lógica equacional de uma categoria cartesiana fechada .
Exemplos de idiomas
A linguagem de programação de nível de função canônica é FP . Outras incluem FL e J .
Veja também
- Linguagem de programação concatenativa
- Programação funcional , programação declarativa (comparar)
- Programação tácita
- Programação de nível de valor , programação imperativa (contraste)
Referências
- ^ Backus, John (1978). "A programação pode ser libertada do estilo von Neumann?: Um estilo funcional e sua álgebra de programas" (PDF) . Comunicações da ACM . 21 (8): 613– 641. doi : 10.1145/359576.359579 .
- ^ Hudak, Paul (1989). "Concepção, evolução e aplicação de linguagens de programação funcional". ACM Computing Surveys . 21 (3): 359– 411. doi :10.1145/72551.72554. S2CID 207637854.
Links externos
- Programas de Nível de Função como Objetos Matemáticos de John Backus
- Da Semântica de Nível de Função à Transformação e Otimização de Programas SpringerLink veja os pontos 1.2 e 1.3
- Linguagens aplicativas fechadas, FP e FL, em John W. Backus (Publicações) ou a Linguagem de Programação Semântica e Linguagens Aplicativas Fechadas originais
- Variáveis de instância, uma saída para a abstinência de variáveis