Programação funcional para software incorporado [fechado]

15

Eu estava discutindo F # e Programação Funcional com um amigo ontem à noite e ele me trouxe uma pergunta interessante. Como você faria o software incorporado funcional? Quero dizer, isso parece um ajuste bastante natural em termos de código sem estado, mas incorporado também implica ser muito frugal com a memória e não tenho certeza da história de funcionalidade nesse sentido.

Alguma sugestão sobre idiomas ou pacotes para incorporado com funcional?

Onorio Catenacci
fonte
Este link pode ajudá-lo a ftp.cs.york.ac.uk/pub/malcolm/thesis.html . Faça o download do arquivo postscript e leia-o.
Ubermensch
@Ubermensch obrigado, mas estou recebendo um erro ao tentar acessar esse link.
Onorio Catenacci
3
Por favor, dê uma olhada nesta questão SO . Parece estar muito próximo do que você pediu. E esta página lidar com a programação do Arduino com Haskell.Atom
Bhargav Bhat
@OnorioCatenacci Este link é o arquivo real PostScript ftp.cs.york.ac.uk/pub/malcolm/thesis.ps.Z
Ubermensch
1
Você também pode estar interessado em ler Usando o Haskell para sistemas de tempo real consideráveis: como (se?)?
Mark Booth

Respostas:

2

A quarta é uma excelente opção para programação de sistemas embarcados. Sendo uma linguagem de pilha, pode ser analisada em termos de composição de funções ( programação concatenativa ). Não vejo razão para que uma linguagem com aspectos mais funcionais também não possa ser implementada com eficiência, mas ainda não existe (que eu saiba).

Jon Purdy
fonte
1
A programação concatenativa é um paradigma muito diferente da programação funcional, mas existe um adiante funcional ( funforth ) que implementa alguns aspectos simplificados da linguagem da linguagem funcional Haskell .
Mark Booth
@ MarkBooth: Não é tão diferente; a programação concatenativa (basicamente por definição) faz uso pesado de combinadores de ordem superior e muitos conceitos funcionais se traduzem diretamente em código concatenativo.
31812 Jon Purdy
3

Uma opção é Erlang . Na página da wikipedia :

Erlang é uma linguagem de programação simultânea de uso geral e sistema de tempo de execução coletado por lixo. O subconjunto seqüencial de Erlang é uma linguagem funcional, com avaliação rigorosa, atribuição única e digitação dinâmica. Por simultaneidade, segue o modelo do ator. Foi desenvolvido pela Ericsson para oferecer suporte a aplicativos distribuídos, tolerantes a falhas, em tempo real suave e sem interrupção. Ele suporta troca a quente, para que o código possa ser alterado sem parar o sistema.

Embora os threads sejam considerados um tópico complicado e propenso a erros na maioria dos idiomas, o Erlang fornece recursos no nível do idioma para criar e gerenciar processos com o objetivo de simplificar a programação simultânea. Embora toda a simultaneidade seja explícita no Erlang, os processos se comunicam usando a passagem de mensagens em vez de variáveis ​​compartilhadas, o que elimina a necessidade de bloqueios.

A primeira versão foi desenvolvida por Joe Armstrong em 1986. 2 Era originalmente uma linguagem proprietária da Ericsson, mas foi lançada como código aberto em 1998.

Mark Booth
fonte