Funktionale Programmierung für eingebettete Software [geschlossen]

15

Ich habe gestern Abend mit einem Freund über F # und funktionale Programmierung gesprochen und er hat mir eine interessante Frage gestellt. Wie würden Sie eingebettete Software funktionsfähig machen? Ich meine, dies scheint eine ziemlich natürliche Übereinstimmung in Bezug auf staatenlosen Code zu sein, aber eingebettet bedeutet auch, sehr sparsam mit dem Gedächtnis umzugehen, und ich bin mir nicht sicher, was die Funktionsweise in dieser Hinsicht angeht.

Irgendwelche Vorschläge zu Sprachen oder Paketen für eingebettete Funktionen?

Onorio Catenacci
quelle
Dieser Link könnte Ihnen helfen, ftp.cs.york.ac.uk/pub/malcolm/thesis.html . Laden Sie die Postscript-Datei herunter und lesen Sie sie.
Ubermensch
@ Übermensch, danke, aber ich erhalte eine Fehlermeldung, wenn ich versuche, auf diesen Link zuzugreifen.
Onorio Catenacci
3
Bitte werfen Sie einen Blick auf diese SO- Frage . Es scheint sehr eng mit dem zu tun zu haben, was Sie gefragt haben. Und diese Seite befasst sich mit der Programmierung des Arduino mit Haskell.Atom
Bhargav Bhat
@OnorioCatenacci Dieser Link ist die aktuelle Postscript-Datei ftp.cs.york.ac.uk/pub/malcolm/thesis.ps.Z
Ubermensch
1
Sie könnten auch daran interessiert sein, " Using Haskell" für umfangreiche Echtzeitsysteme zu
Mark Booth

Antworten:

2

Forth ist eine ausgezeichnete Wahl für die Programmierung eingebetteter Systeme. Als Stack-Sprache kann sie hinsichtlich ihrer Funktionszusammensetzung analysiert werden ( Concatenative Programming ). Ich sehe keinen Grund, warum eine solche Sprache mit mehr funktionalen Aspekten nicht auch effizient implementiert werden könnte, aber es gibt noch keine solche (meines Wissens).

Jon Purdy
quelle
1
Concatenative Programming ist ein ganz anderes Paradigma als Functional Programming, aber es gibt ein funktionales Her ( Funforth ), das einige vereinfachte Aspekte der funktionalen Sprache Haskell implementiert.
Mark Booth
@ MarkBooth: Nicht so anders; Bei der verketteten Programmierung (per definitionem) werden häufig Kombinatoren höherer Ordnung verwendet, und viele Funktionskonzepte werden direkt in verketteten Code übersetzt.
Jon Purdy
3

Eine Option ist Erlang . Von der Wikipedia-Seite :

Erlang ist eine Allzweck-Programmiersprache und ein Laufzeitsystem für die gleichzeitige Speicherung von Daten. Die sequentielle Untermenge von Erlang ist eine funktionale Sprache mit strenger Bewertung, einfacher Zuweisung und dynamischer Typisierung. Für die Parallelität folgt es dem Actor-Modell. Es wurde von Ericsson entwickelt, um verteilte, fehlertolerante Echtzeitanwendungen ohne Unterbrechung zu unterstützen. Es unterstützt Hot-Swapping, sodass der Code geändert werden kann, ohne ein System anzuhalten.

Während Threads in den meisten Sprachen als kompliziertes und fehleranfälliges Thema gelten, bietet Erlang Funktionen auf Sprachebene zum Erstellen und Verwalten von Prozessen mit dem Ziel, die gleichzeitige Programmierung zu vereinfachen. Obwohl die gesamte Parallelität in Erlang explizit angegeben ist, kommunizieren Prozesse mithilfe der Nachrichtenübergabe anstelle gemeinsam genutzter Variablen, wodurch Sperren überflüssig werden.

Die erste Version wurde 1986 von Joe Armstrong entwickelt. 2 Es war ursprünglich eine proprietäre Sprache bei Ericsson, wurde jedoch 1998 als Open Source veröffentlicht.

Mark Booth
quelle