Programowanie funkcjonalne dla oprogramowania wbudowanego [zamknięte]

15

Rozmawiałem wczoraj wieczorem z F # i programowaniem funkcjonalnym z przyjacielem, który przyniósł mi interesujące pytanie. Jak zrobiłbyś wbudowane oprogramowanie funkcjonalne? Mam na myśli, że wydaje się to dość naturalne dopasowanie pod względem kodu bezstanowego, ale osadzenie oznacza również bardzo oszczędność pamięci i nie jestem pewien, czy historia jest funkcjonalna pod tym względem.

Wszelkie sugestie dotyczące języków lub pakietów do wbudowania w funkcjonalne?

Onorio Catenacci
źródło
Ten link może ci pomóc ftp.cs.york.ac.uk/pub/malcolm/thesis.html . Pobierz plik postscriptowy i przeczytaj go.
Ubermensch
@ Dzięki Ubermensch, ale próbuję uzyskać dostęp do tego linku, pojawia się błąd.
Onorio Catenacci
3
Proszę spojrzeć na to SO pytanie . Wygląda na bardzo ściśle związany z tym, o co prosiłeś. I ta strona poświęcona programowaniu Arduino z Haskell.Atom
Bhargav Bhat
@OnorioCatenacci Ten link jest rzeczywisty plik PostScript ftp.cs.york.ac.uk/pub/malcolm/thesis.ps.Z
Ubermensch
1
Być może zainteresuje Cię również czytanie Korzystanie z Haskell dla dużych systemów czasu rzeczywistego: jak (jeśli?)?
Mark Booth

Odpowiedzi:

2

Forth to doskonały wybór do programowania systemów wbudowanych. Będąc językiem stosowym, można go analizować pod kątem składu funkcji ( programowanie konkatenatywne ). Nie widzę powodu, dla którego taki język o bardziej funkcjonalnych aspektach nie mógłby być również skutecznie wdrożony, ale jak na razie nie istnieje (według mojej wiedzy).

Jon Purdy
źródło
1
Programowanie konkatenatywne jest zupełnie innym paradygmatem niż programowanie funkcjonalne, ale istnieje czwarta funkcja ( funforth ), która implementuje pewne uproszczone aspekty języka funkcjonalnego języka Haskell .
Mark Booth
@MarkBooth: Nie tak inaczej; programowanie konkatenatywne (prawie z definicji) intensywnie wykorzystuje kombinatory wyższego rzędu, a wiele koncepcji funkcjonalnych przekłada się bezpośrednio na kod konkatenacyjny.
Jon Purdy,
3

Jedną z opcji jest Erlang . Ze strony wikipedii :

Erlang jest uniwersalnym, współbieżnym, zbierającym śmieci językiem programowania i systemem wykonawczym. Sekwencyjny podzbiór Erlanga jest językiem funkcjonalnym, z dokładną oceną, pojedynczym przypisaniem i dynamicznym pisaniem. W przypadku współbieżności jest to model Actora. Został zaprojektowany przez Ericsson do obsługi aplikacji rozproszonych, odpornych na uszkodzenia, działających w czasie rzeczywistym bez przerw. Obsługuje funkcję wymiany na gorąco, dzięki czemu kod można zmienić bez zatrzymywania systemu.

Podczas gdy wątki są uważane za skomplikowany i podatny na błędy temat w większości języków, Erlang zapewnia funkcje na poziomie językowym do tworzenia procesów i zarządzania nimi w celu uproszczenia programowania współbieżnego. Chociaż w Erlang cała współbieżność jest jawna, procesy komunikują się za pomocą przekazywania wiadomości zamiast wspólnych zmiennych, co eliminuje potrzebę blokowania.

Pierwsza wersja została opracowana przez Joe Armstronga w 1986 roku. 2 Był to pierwotnie zastrzeżony język Ericsson, ale został wydany jako open source w 1998 roku.

Mark Booth
źródło