Linguagens funcionais como Haskell, LISP ou Scheme permitem que um programador trabalhe rapidamente usando o paradigma de programação funcional . Eles têm suas ineficiências , mas meu aplicativo enfatiza mais a eficiência do programador do que a eficiência do próprio programa.
Eu gostaria de usar a programação funcional em um microcontrolador para fazer o controle da máquina, etc.
Que limitações existem, como recursos mínimos do sistema?
Quais exemplos de implementações desses idiomas estão disponíveis?
microcontroller
programming
J. Polfer
fonte
fonte
Respostas:
http://armpit.sourceforge.net/
Você diz:
O uso de linguagens de alto nível é um uso mais eficiente do tempo do programador, mas geralmente pode ser um uso menos eficiente dos recursos de computação. Para sistemas embarcados fabricados em volume, o custo e o desempenho geralmente são uma prioridade mais alta que o esforço de desenvolvimento.
fonte
Você também pode programar controladores AVR com Haskell usando Atom / Copilot, por exemplo http://leepike.wordpress.com/2010/12/18/haskell-and-hardware-for-the-holidays/
fonte
C, C ++ e Assembly são todos muito próximos da linguagem de máquina. Ao usar um idioma de nível superior, você está adicionando uma sobrecarga adicional em troca de um desenvolvimento mais rápido / fácil / etc.
fonte
Estive programando uma placa ARM em Python recentemente e acho ótimo. Não é bom para o controle em tempo real, mas estou fazendo mais coisas relacionadas à Web, o que é muito mais agradável em uma linguagem de alto nível do que em C.
fonte
A maioria dos microcontroladores ainda são dispositivos de 8 e 16 bits (embora isso esteja mudando lentamente). As duas instâncias de linguagens de nível superior (Scheme e Python) mencionadas em outras respostas até agora estão sendo executadas em núcleos ARM de 32 bits. Os dispositivos menores de 8 e 16 bits (que podem custar apenas alguns dólares) não têm RAM suficiente para suportar os idiomas mencionados - normalmente eles têm apenas alguns KB de RAM.
Além disso, esses idiomas de nível superior não foram projetados para escrever manipuladores de interrupção de baixa latência e similares. Não é incomum que um manipulador de interrupções por microcontrolador seja chamado centenas ou milhares de vezes por segundo, e cada vez é necessário executar sua tarefa em dezenas de microssegundos ou menos.
fonte
É possível fazer alguma programação funcional com a linguagem Lua. Realmente, Lua é uma linguagem de paradigma mútuo; A Wikipedia afirma que é uma linguagem de 'script, imperativa, funcional, orientada a objetos e baseada em protótipo'. A linguagem não impõe um único paradigma, mas é flexível o suficiente para permitir que o programador implemente qualquer paradigma aplicável à situação. Foi influenciado pelo Scheme.
Os recursos de Lua incluem funções de primeira classe , escopo lexical e fechamentos e corotinas , úteis para programação funcional. Você pode ver como esses recursos são usados no wiki de usuários do Lua, que possui uma página dedicada à programação funcional . Também me deparei com esse projeto do Google Code , mas não o usei (ele afirma ter sido influenciado pelo Haskell, outro idioma que você mencionou).
eLua é uma implementação disponível configurada para várias placas de desenvolvimento para as arquiteturas ARM7TMDI, Cortex-M3, ARM966E-S e AVR32, e é de código aberto para que você possa configurá-lo para sua própria plataforma. Lua é implementada no ANSI C e a fonte inteira pesa menos de 200kB, portanto, você poderá construí-lo para a maioria das plataformas com um compilador C. Recomenda-se pelo menos 128k de Flash e 32k de RAM. No momento, estou trabalhando em uma porta PIC32 (ainda no estágio 'Get the PIC32 board').
O melhor de Lua é que ele foi projetado como uma linguagem de cola, por isso é muito fácil escrever extensões C para as coisas que precisam ser rápidas (como interrupções etc.) e usar os recursos dinâmicos e interpretados da linguagem para executar rapidamente desenvolvimento na lógica do programa.
Lua não é uma linguagem puramente funcional, mas você pode fazer muita programação funcional, é rápida e pequena (em comparação com outras linguagens de script ) e não precisa atualizar o dispositivo novamente para experimentar um programa. Existe até um intérprete interativo!
fonte
"Existem maneiras de fazer programação funcional com uma linguagem funcional em um MCU para resolver problemas difíceis?"
Sim, existem maneiras. Mas o lado negativo é que você precisa de um processador de 32 bits, MMU, 128MB de RAM, SSD, um RTOS e $$$.
Microcontroladores são diferentes dos microprocessadores. O microcontrolador pode ser apenas uma CPU de 8 bits, 1K RAM, 8K ROM, mas possui UART, PWM, ADC, etc. embutidos, e custa apenas US $ 1,30.
Portanto, você pode ter todas as linguagens de alto nível em execução, mas custa muito mais.
fonte
Este livro fornece uma maneira de programar com uma leve sensação do FP. http://www.state-machine.com/psicc2/
Mas o FP real precisa ter a capacidade de construir funções em tempo de execução e transmiti-las pelo seu programa. Aqui temos um problema: como podemos representar essa função construída? e como podemos efetivamente executar essa função? Em um sistema grande, podemos usar a compilação dinâmica que gera código de máquina real em um aplicativo de primeira função. No MCU, temos apenas RAM para implementar compiladores muito primitivos, como o núcleo da linguagem Forth.
A única maneira de usar FP ou OOP, se preferir, é a metaprogramação : escreva programas funcionais / OOP complexos que geram programas para MCU (código-fonte C, por exemplo, ou LLVM IL). Nesta variante, você não está limitado pelo paradigma ou pela complexidade dos métodos de programação.
fonte