Programmation fonctionnelle pour les logiciels embarqués [fermé]

15

Hier soir, je discutais de F # et de programmation fonctionnelle avec un ami et il m'a posé une question intéressante. Comment feriez-vous un logiciel embarqué fonctionnel? Je veux dire que cela semble être un ajustement assez naturel en termes de code sans état mais incorporé implique également d'être très économe en mémoire et je ne suis pas sûr de l'histoire fonctionnelle à cet égard.

Avez-vous des suggestions de langues ou de packages pour embarqué avec fonctionnel?

Onorio Catenacci
la source
Ce lien pourrait vous aider ftp.cs.york.ac.uk/pub/malcolm/thesis.html . Téléchargez le fichier postscript et lisez-le.
Ubermensch
@Ubermensch merci mais je reçois une erreur lorsque j'essaie d'accéder à ce lien.
Onorio Catenacci
3
Veuillez jeter un œil à cette question SO . Il semble être très proche de ce que vous avez demandé. Et cette page traitant de la programmation de l'Arduino avec Haskell.Atom
Bhargav Bhat
@OnorioCatenacci Ce lien est le fichier postscript réel ftp.cs.york.ac.uk/pub/malcolm/thesis.ps.Z
Ubermensch
1
Vous pouvez également être intéressé par la lecture Utilisation de Haskell pour des systèmes en temps réel de taille importante: comment (si?)?
Mark Booth

Réponses:

2

Forth est un excellent choix pour la programmation de systèmes embarqués. Étant un langage de pile, il peut être analysé en termes de composition de fonctions ( programmation concaténative ). Je ne vois aucune raison pour laquelle un tel langage avec des aspects plus fonctionnels ne pourrait pas également être mis en œuvre efficacement, mais pour l'instant aucune chose de ce genre (à ma connaissance) n'existe.

Jon Purdy
la source
1
La programmation concaténative est un paradigme très différent de la programmation fonctionnelle, mais il existe un quatrième fonctionnel ( funforth ) qui implémente certains aspects simplifiés du langage de langage fonctionnel Haskell .
Mark Booth
@MarkBooth: Pas si différent; la programmation concaténative (à peu près par définition) fait un usage intensif de combinateurs d'ordre supérieur, et de nombreux concepts fonctionnels se traduisent directement en code concaténatif.
Jon Purdy
3

Une option est Erlang . De la page wikipedia :

Erlang est un langage de programmation et un système d'exécution concurrents simultanés à usage général. Le sous-ensemble séquentiel d'Erlang est un langage fonctionnel, avec une évaluation stricte, une affectation unique et un typage dynamique. Pour la concurrence, il suit le modèle Actor. Il a été conçu par Ericsson pour prendre en charge les applications distribuées, tolérantes aux pannes, en temps réel doux, sans interruption. Il prend en charge l'échange à chaud, de sorte que le code peut être modifié sans arrêter un système.

Alors que les threads sont considérés comme un sujet compliqué et sujet aux erreurs dans la plupart des langues, Erlang fournit des fonctionnalités au niveau de la langue pour créer et gérer des processus dans le but de simplifier la programmation simultanée. Bien que toute concurrence soit explicite dans Erlang, les processus communiquent en utilisant le passage de messages au lieu de variables partagées, ce qui supprime le besoin de verrous.

La première version a été développée par Joe Armstrong en 1986. 2 C'était à l'origine un langage propriétaire au sein d'Ericsson, mais il a été publié en open source en 1998.

Mark Booth
la source