Используя Haskell для значительных систем реального времени: как (если?)?

Современные RNGs и проверяются по корреляциям в соседних семенах и выполняют несколько сотен повторений после отбора. Так, к сожалению, скучный, но истинный ответ - то, что это действительно не имеет значения очень.

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

, По-моему, часто лучше использовать очень хорошо понятый генератор псевдослучайного числа.

56
задан Community 23 May 2017 в 11:55
поделиться

5 ответов

В Galois мы используем Haskell для двух целей:

  • Мягкое реальное время (уровни устройств ОС, сеть), где время отклика составляет 1-5 мс. GHC генерирует быстрый код и имеет множество возможностей для настройки сборщика мусора и планировщика для получения правильного времени.
  • для систем реального времени EDSL используются для генерации кода для других языков, которые обеспечивают более строгие гарантии времени. Например, Cryptol, Atom и Copilot.

Поэтому будьте осторожны, чтобы отличать EDSL (Copilot или Atom) от основного языка (Haskell).


Некоторые примеры критических систем, а в некоторых случаях и систем реального времени, либо написано или сгенерировано из Haskell, произведено Galois.

EDSL

Системы

  • HaLVM - легкое микроядро для встраиваемых и мобильных приложений
  • TSE - междоменное сетевое устройство (уровень безопасности)
49
ответ дан 26 November 2019 в 17:29
поделиться

Пройдет много времени, прежде чем появится система Haskell, которая умещается в небольшой памяти и может гарантировать время паузы менее миллисекунды. Сообщество разработчиков Haskell, похоже, не заинтересовано в этом виде цели.

Существует здоровый интерес к использованию Haskell или чего-то подобного Haskell для компиляции чего-то очень эффективного; например, Bluespec компилируется на аппаратное обеспечение.

Я не думаю, что он удовлетворит ваши потребности, но если вас интересует функциональное программирование и встроенные системы, вам следует узнать о Erlang ].

6
ответ дан 26 November 2019 в 17:29
поделиться

Я не думаю, что Haskell или другие языки Garbage Collected очень хорошо подходят для систем жесткого реального времени, так как сборщики мусора обычно сокращают время выполнения до коротких пауз.

Написание на Atom - это не совсем программирование на Haskell, поскольку Haskell здесь можно рассматривать как чисто препроцессор для фактической программы, которую вы пишете.

Я думаю, что Haskell - это отличный препроцессор, использующий DSEL вроде Atom, вероятно, является отличным способом создания крупных систем жесткого реального времени, но я не знаю, подходит ли Atom этим требованиям или нет. Если это не так, я почти уверен, что возможно (и я призываю всех, кто это делает!) Реализовать DSEL, который это делает.

4
ответ дан 26 November 2019 в 17:29
поделиться

Эндрю,

Да, может быть сложно отладить проблемы с помощью сгенерированного кода обратно в исходный источник. Одна вещь, которую предоставляет Atom, - это средство для проверки внутренних выражений, а затем оставляет на усмотрение пользователя, как обрабатывать эти проверки. Для тестирования транспортных средств мы создаем передатчик (в Atom) и передаем данные с датчиков по шине CAN. Затем мы можем захватить эти данные, отформатировать их, а затем просмотреть с помощью таких инструментов, как GTKWave, либо в постобработке, либо в реальном времени. Для программного моделирования зонды обрабатываются иначе. Вместо получения данных датчика из протокола CAN, к коду C добавляются перехватчики, чтобы напрямую поднять значения датчиков. Затем значения зонда используются в структуре модульного тестирования (распространяемой вместе с Atom), чтобы определить, прошел ли тест или нет, и рассчитать покрытие моделирования.

6
ответ дан 26 November 2019 в 17:29
поделиться

Я обманул атом. Это довольно круто, но я думаю, что это лучше для небольших систем. Да, он работает в грузовых автомобилях и автобусах и реализует реальные критические приложения, но это не означает, что эти приложения обязательно являются большим или сложным. Это действительно для приложений в режиме трудовых времен и идет на большие длины, чтобы воспользоваться всеми то же время. Например, вместо того, чтобы оператор IF / ELVE, который условно выполняет один из двух ветвей кода, который может отличаться в течение времени работы, он имеет оператор «MUX», который всегда выполняет оба ветви перед условному выбору одного из двух вычисленных значений (так что общее Время выполнения - это то же самое, которое будет выбрано значение). У него нет существенного типа системы, отличной от встроенных типов (сопоставимых с CS), которые применяются через значения GADT, прошедших через Atom Monad. Автор работает над статическим инструментом проверки, который анализирует выходной код C, который довольно прохладный (он использует SMT Solver), но я думаю, что Atom извлекает выгоду из больших возможностей и проверок. Даже в моем приложении Toy Sized (контроллер светодиода фонарика), я сделал ряд ошибок Newbie, что кто-то более опытный с пакетом может избежать, но это привело к баггическому выходу, что я бы предпочел бы быть пойманным компилятором вместо через тестирование. С другой стороны, он все еще находится в версии 0.1. Что-то, поэтому улучшения, несомненно, приходят.

4
ответ дан 26 November 2019 в 17:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: