Современные RNGs и проверяются по корреляциям в соседних семенах и выполняют несколько сотен повторений после отбора. Так, к сожалению, скучный, но истинный ответ - то, что это действительно не имеет значения очень.
Вообще говоря, использование случайные физические процессы должны быть проверены, что они соответствуют равномерному распределению и иначе detrended.
, По-моему, часто лучше использовать очень хорошо понятый генератор псевдослучайного числа.
В Galois мы используем Haskell для двух целей:
Поэтому будьте осторожны, чтобы отличать EDSL (Copilot или Atom) от основного языка (Haskell).
Некоторые примеры критических систем, а в некоторых случаях и систем реального времени, либо написано или сгенерировано из Haskell, произведено Galois.
EDSL
Системы
Пройдет много времени, прежде чем появится система Haskell, которая умещается в небольшой памяти и может гарантировать время паузы менее миллисекунды. Сообщество разработчиков Haskell, похоже, не заинтересовано в этом виде цели.
Существует здоровый интерес к использованию Haskell или чего-то подобного Haskell для компиляции чего-то очень эффективного; например, Bluespec компилируется на аппаратное обеспечение.
Я не думаю, что он удовлетворит ваши потребности, но если вас интересует функциональное программирование и встроенные системы, вам следует узнать о Erlang ].
Я не думаю, что Haskell или другие языки Garbage Collected очень хорошо подходят для систем жесткого реального времени, так как сборщики мусора обычно сокращают время выполнения до коротких пауз.
Написание на Atom - это не совсем программирование на Haskell, поскольку Haskell здесь можно рассматривать как чисто препроцессор для фактической программы, которую вы пишете.
Я думаю, что Haskell - это отличный препроцессор, использующий DSEL вроде Atom, вероятно, является отличным способом создания крупных систем жесткого реального времени, но я не знаю, подходит ли Atom этим требованиям или нет. Если это не так, я почти уверен, что возможно (и я призываю всех, кто это делает!) Реализовать DSEL, который это делает.
Эндрю,
Да, может быть сложно отладить проблемы с помощью сгенерированного кода обратно в исходный источник. Одна вещь, которую предоставляет Atom, - это средство для проверки внутренних выражений, а затем оставляет на усмотрение пользователя, как обрабатывать эти проверки. Для тестирования транспортных средств мы создаем передатчик (в Atom) и передаем данные с датчиков по шине CAN. Затем мы можем захватить эти данные, отформатировать их, а затем просмотреть с помощью таких инструментов, как GTKWave, либо в постобработке, либо в реальном времени. Для программного моделирования зонды обрабатываются иначе. Вместо получения данных датчика из протокола CAN, к коду C добавляются перехватчики, чтобы напрямую поднять значения датчиков. Затем значения зонда используются в структуре модульного тестирования (распространяемой вместе с Atom), чтобы определить, прошел ли тест или нет, и рассчитать покрытие моделирования.
Я обманул атом. Это довольно круто, но я думаю, что это лучше для небольших систем. Да, он работает в грузовых автомобилях и автобусах и реализует реальные критические приложения, но это не означает, что эти приложения обязательно являются большим или сложным. Это действительно для приложений в режиме трудовых времен и идет на большие длины, чтобы воспользоваться всеми то же время. Например, вместо того, чтобы оператор IF / ELVE, который условно выполняет один из двух ветвей кода, который может отличаться в течение времени работы, он имеет оператор «MUX», который всегда выполняет оба ветви перед условному выбору одного из двух вычисленных значений (так что общее Время выполнения - это то же самое, которое будет выбрано значение). У него нет существенного типа системы, отличной от встроенных типов (сопоставимых с CS), которые применяются через значения GADT, прошедших через Atom Monad. Автор работает над статическим инструментом проверки, который анализирует выходной код C, который довольно прохладный (он использует SMT Solver), но я думаю, что Atom извлекает выгоду из больших возможностей и проверок. Даже в моем приложении Toy Sized (контроллер светодиода фонарика), я сделал ряд ошибок Newbie, что кто-то более опытный с пакетом может избежать, но это привело к баггическому выходу, что я бы предпочел бы быть пойманным компилятором вместо через тестирование. С другой стороны, он все еще находится в версии 0.1. Что-то, поэтому улучшения, несомненно, приходят.