Выбор языка программирования для высоких систем целостности

Какие языки программирования являются хорошим выбором для Высоких Систем Целостности?

Примером плохого выбора является Java, поскольку существует значительный объем кода, который недоступен программисту. Я ищу примеры языков блочно-структурированных, со строгим контролем типов, где программист ответственен за 100% кода, и существует как можно меньше интерференции от вещей как JVM.

Компиляторы, очевидно, будут проблемой. Язык должен иметь полное и однозначное определение.

Править: Высокие Системы Целостности являются обобщающим понятием для Безопасности Критические Системы и т.д., Защищенные системы, и т.д.

РЕДАКТИРОВАНИЕ РЕДАКТИРОВАНИЯ: Я хочу примеры языков, которые не являются под влиянием платформы, которая приведет к тому же результату независимо от компилятора и которая полностью определяется.

7
задан Finbarr 3 May 2010 в 12:12
поделиться

7 ответов

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

SPARK можно использовать без среды выполнения. Аналогично для языка Ада (см. Прагму No_Runtime).

Конечно, с такими языками, как SPARK, вы жертвуете гибкостью в пользу безопасности (или безопасности).

4
ответ дан 6 December 2019 в 14:01
поделиться

Я не совсем понимаю, что это за «система высокого уровня целостности». Предполагая, что вы имеете в виду «систему, которая оставляет меньше места для ошибок», я предлагаю вам взглянуть на ML и его производную от ООП, O'CaML . ML был разработан для минимизации ошибок типов. В ML нет ошибок приведения или нулевых указателей - вы просто не можете их закодировать. Ему также не хватает динамических функций, что делает его менее крутым, но более безопасным.

Сказав это, ML далеко не доставляет удовольствие хакерам; Это несколько громоздкий язык. Но если вы предпочитаете работать на час больше и получать на одно исключение меньше, это правильный выбор.

1
ответ дан 6 December 2019 в 14:01
поделиться

Я думаю, что ADA обычно используется для этого.

4
ответ дан 6 December 2019 в 14:01
поделиться

Насколько высокий уровень интеграции вы ищете?

  • Галуа в Портленде, штат Орегон построили очень успешный бизнес на системах с высокой степенью целостности, написанных на Haskell . Я считаю, что они делают упор на целостность и безопасность данных. Несколько удивительно выполнять такого рода работу на таком сложном языке, с очень сложной системой времени выполнения, но система типов Haskell обеспечивает очень надежные гарантии, а семантика языка обеспечивает гораздо более строгие принципы рассуждения, чем большинство языков. Кроме того, вы склонны писать гораздо меньше кода для каждого приложения, поэтому его легко показать правильно.

  • Если вам нужны еще более строгие гарантии, SPARK Ada (или просто SPARK в наши дни) - это относительно простой традиционный императивный язык, который поставляется с полной формальной семантикой и инструментами для полной формальной проверки. Вы получаете более надежные гарантии, чем с Haskell, но по гораздо более высокой цене, как в капитале, так и в рабочей силе.

4
ответ дан 6 December 2019 в 14:01
поделиться

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

3
ответ дан 6 December 2019 в 14:01
поделиться

Это противоречие в терминах. Сильно типизированные, блочно-структурированные языки почти всегда компилируются компилятором, создавая машинный код, за который программист не отвечает. Если вы хотите на 100% отвечать за код, вам нужно использовать язык ассемблера.

1
ответ дан 6 December 2019 в 14:01
поделиться

Вы можете искать то, что хотите, но вы выиграли не понимаю.

Ваши требования несовместимы друг с другом. Они в основном полностью исключают любую библиотеку. Вы можете сказать, что можете использовать C / C ++, но БЕЗ КАКИХ-ЛИБО ФАЙЛОВ И СТАНДАРТНЫХ БИБЛИОТЕК (за которые программист, очевидно, не несет ответственности).

Это оставляет вас в значительной степени на суше - требование нереалистично. Даже в большой команде никто не захочет перепрограммировать большинство библиотек.

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

-2
ответ дан 6 December 2019 в 14:01
поделиться
Другие вопросы по тегам:

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