Функциональное программирование для встроенного программного обеспечения [закрыто]

15

Вчера вечером я обсуждал F # и функциональное программирование с другом, и он поднял мне интересный вопрос. Как бы вы сделали встроенное программное обеспечение в функционале? Я имею в виду, что это выглядит как вполне естественное соответствие с точки зрения кода без сохранения состояния, но встроенное также влечет за собой очень скромное использование памяти, и я не уверен в том, что такое функционал в этом отношении.

Есть предложения по языкам или пакетам для встраивания с функционалом?

Онорио Катеначчи
источник
Эта ссылка может помочь вам ftp.cs.york.ac.uk/pub/malcolm/thesis.html . Загрузите файл postscript и прочитайте его.
Ubermensch
@ Ubermensch спасибо, но я получаю ошибку, когда пытаюсь получить доступ к этой ссылке.
Онорио Катеначчи
3
Пожалуйста, посмотрите на этот ТАК вопрос . Кажется, это очень близко к тому, что вы просили. И эта страница посвящена программированию Arduino с помощью Haskell.Atom
Бхат,
@OnorioCatenacci Эта ссылка представляет собой фактический файл postscript ftp.cs.york.ac.uk/pub/malcolm/thesis.ps.Z
Ubermensch
1
Вам также может быть интересно прочитать Использование Haskell для значительных систем реального времени: как (если?)?
Марк Бут

Ответы:

2

Forth - отличный выбор для программирования встраиваемых систем. Будучи языком стека, он может быть проанализирован с точки зрения композиции функций ( конкатенативное программирование ). Я не вижу причин, по которым такой язык с более функциональными аспектами также не мог бы быть реализован эффективно, но пока такой вещи (насколько мне известно) не существует.

Джон Перди
источник
1
Конкатенативное программирование - это парадигма, очень отличающаяся от функционального программирования, но есть функциональная четверть ( интересная ), которая реализует некоторые упрощенные аспекты языка функциональных языков Haskell .
Марк Бут
@MarkBooth: не так уж и отличается; в конкатенативном программировании (в значительной степени по определению) интенсивно используются комбинаторы более высокого порядка, и многие функциональные концепции напрямую преобразуются в конкатенационный код.
Джон Пурди
3

Одним из вариантов является Erlang . Со страницы википедии :

Erlang - это универсальный параллельный язык для сборки мусора и система времени исполнения. Последовательное подмножество Erlang - это функциональный язык со строгой оценкой, единичным присваиванием и динамической типизацией. Для параллелизма следует модель актера. Он был разработан компанией Эрикссон для поддержки распределенных, отказоустойчивых, программных приложений реального времени, без остановок. Он поддерживает горячую замену, так что код может быть изменен без остановки системы.

В то время как потоки считаются сложной и подверженной ошибкам темой в большинстве языков, Erlang предоставляет функции на уровне языка для создания и управления процессами с целью упрощения параллельного программирования. Хотя весь параллелизм явно выражен в Erlang, процессы взаимодействуют с помощью передачи сообщений вместо общих переменных, что устраняет необходимость в блокировках.

Первая версия была разработана Джо Армстронгом в 1986 году. 2 Изначально это был проприетарный язык в Ericsson, но он был выпущен как открытый исходный код в 1998 году.

Марк Бут
источник