~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ 48BAA00FF69C69BA75C34433A94D0A67__1715084220 ✰
Заголовок документа оригинал.:
✰ SPARK (programming language) - Wikipedia ✰
Заголовок документа перевод.:
✰ СПАРК (язык программирования) — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/SPARK_(programming_language) ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/48/67/48baa00ff69c69ba75c34433a94d0a67.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/48/67/48baa00ff69c69ba75c34433a94d0a67__translat.html ✰
Дата и время сохранения документа:
✰ 22.06.2024 12:30:56 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 7 May 2024, at 15:17 (UTC). ✰ 

~~~~~~~~~~~~~~~~~~~~~~ Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~~ 
Сервисы Ask3.ru: 
 Архив документов (Снимки документов, в формате HTML, PDF, PNG - подписанные ЭЦП, доказывающие существование документа в момент подписи. Перевод сохраненных документов на русский язык.)https://arc.ask3.ruОтветы на вопросы (Сервис ответов на вопросы, в основном, научной направленности)https://ask3.ru/answer2questionТоварный сопоставитель (Сервис сравнения и выбора товаров) ✰✰
✰ https://ask3.ru/product2collationПартнерыhttps://comrades.ask3.ru


Совет. Чтобы искать на странице, нажмите Ctrl+F или ⌘-F (для MacOS) и введите запрос в поле поиска.
Arc.Ask3.ru: далее начало оригинального документа

СПАРК (язык программирования) — Википедия Jump to content

СПАРК (язык программирования)

Из Википедии, бесплатной энциклопедии

ИСКРА
Парадигма Мультипарадигмальность
Разработчик Альтран и АдаКор
Стабильная версия
Сообщество 2021 / 1 июня 2021 г .; 3 года назад ( 01.06.2021 )
Дисциплина набора текста статический , сильный , безопасный , именительный падеж
ТЫ Кроссплатформенность : Linux , Microsoft Windows , Mac OS X.
Лицензия лицензия GPLv3
Веб-сайт О СПАРК
Основные реализации
SPARK Pro, SPARK GPL Edition, Сообщество SPARK
Под влиянием
Да , Эйфель

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

Первоначально существовало три версии языка SPARK (SPARK83, SPARK95, SPARK2005), основанные на Ada 83, Ada 95 и Ada 2005 соответственно.

Четвертая версия языка SPARK, SPARK 2014, основанная на Ada 2012, была выпущена 30 апреля 2014 года. SPARK 2014 представляет собой полную переработку языка и поддерживает проверки инструменты .

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

В SPARK83/95/2005 контракты закодированы в комментариях Ada и поэтому игнорируются любым стандартным компилятором Ada, но обрабатываются SPARK «Examiner» и связанными с ним инструментами.

SPARK 2014, напротив, использует встроенный в Ada 2012 «аспектный» синтаксис для выражения контрактов, перенося их в ядро ​​языка. Основной инструмент для SPARK 2014 (GNATprove) основан на инфраструктуре GNAT/GCC и повторно использует почти весь интерфейс GNAT Ada 2012.

Технический обзор [ править ]

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

Сочетание этих подходов позволяет СПАРК достичь своих целей проектирования, а именно:

Примеры контрактов [ править ]

Рассмотрим спецификацию подпрограммы Ada ниже:

Приращение процедуры  (X:  вход  Counter_Type);
 

В чистой Ada это может увеличить переменную Xна одну или тысячу; или он может установить какой-то глобальный счетчик X и верните исходное значение счетчика в X; или это может совершенно ничего не сделать с X совсем.

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

Приращение процедуры  (X:  входной  тип_счетчика) 
    с  Global =>  null  , 
         Зависит => (X => X); 
 

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

В качестве альтернативы дизайнер может указать:

Приращение процедуры  (X:  входной  тип_счетчика) 
    с  Global => (In_Out => Count), 
         Зависит => (Количество => (Количество, X), 
                     X => ноль); 
 

Это указывает на то, что Increment будет использовать глобальную переменную Count в той же упаковке, что и Increment, что экспортированная стоимость Count зависит от импортированных значений Count и X, и что экспортированная стоимость X вообще не зависит ни от каких переменных и будет получен только на основе постоянных данных.

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

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

Приращение процедуры  (X:  входной  тип_счетчика) 
    с  Global => null, 
         Зависит => (X => X), 
         Pre => X <Counter_Type'Last, 
         Сообщение => X = X'Old + 1; 
 

Это, теперь, указывает не только на то, что X выводится только из самого себя, но также и из того, что прежде Increment называется X должно быть строго меньше последнего возможного значения своего типа (чтобы гарантировать, что результат никогда не переполнится ) и чтобы впоследствии X будет равна первоначальному значению X плюс один.

Условия проверки [ править ]

GNATprove также может генерировать набор условий проверки или VC. Эти условия используются для установления того, выполняются ли определенные свойства для данной подпрограммы. Как минимум, GNATprove сгенерирует VC, чтобы установить, что все ошибки времени выполнения не могут возникнуть в подпрограмме, например:

  • индекс массива вне диапазона
  • нарушение диапазона типов
  • деление на ноль
  • числовое переполнение.

Если в подпрограмму добавляется постусловие или любое другое утверждение, GNATprove также сгенерирует VC, которые требуют от пользователя показать, что эти свойства сохраняются для всех возможных путей через подпрограмму.

Под капотом GNATprove использует промежуточный языкWhy3 и генератор VC, а также средства доказательства теорем CVC4 , Z3 и Alt-Ergo для выгрузки VC. Использование других средств проверки (в том числе интерактивных средств проверки корректур) также возможно с помощью других компонентов набора инструментовWhy3.

История [ править ]

Первая версия SPARK (на основе Ada 83) была создана в Университете Саутгемптона Великобритании (при спонсорской поддержке Министерства обороны ) Бернаром Карре и Тревором Дженнингсом. Название SPARK произошло от SPADE Ada Kernel , относящегося к SPADE подмножеству языка программирования Pascal . [1]

Впоследствии этот язык постепенно расширялся и уточнялся сначала компанией Program Validation Limited, а затем Praxis Critical Systems Limited. В 2004 году Praxis Critical Systems Limited сменила название на Praxis High Integrity Systems Limited. В январе 2010 года компания стала Altran Praxis .

В начале 2009 года Praxis заключила партнерство с AdaCore и выпустила «SPARK Pro» на условиях GPL. За этим в июне 2009 г. последовала версия SPARK GPL Edition 2009, предназначенная для FOSS и академических сообществ.

В июне 2010 года компания «Альтран-Праксис» объявила, что язык программирования SPARK будет использоваться в программном обеспечении американского лунного проекта CubeSat , завершение которого ожидается в 2015 году.

В январе 2013 года Altran-Praxis сменила название на Altran, которое в апреле 2021 года стало Capgemini Engineering (после слияния Altran с Capgemini ).

О первом профессиональном выпуске SPARK 2014 было объявлено 30 апреля 2014 года, за ним вскоре последовала версия SPARK 2014 GPL, предназначенная для FLOSS и академических сообществ.

Промышленное применение

Системы безопасности [ править ]

SPARK использовался в нескольких высококлассных критических по безопасности системах, охватывающих коммерческую авиацию ( Rolls-Royce Trent реактивные двигатели серии , система ARINC ACAMS , Lockheed Martin C130J ), военную авиацию ( EuroFighter Typhoon , Harrier GR9 , AerMacchi M346 ), авиацию - управление дорожным движением (система UK NATS iFACTS LifeFlow ), железнодорожное (многочисленные приложения сигнализации), медицинское ( желудочковое вспомогательное устройство ) и космическое применение ( проект CubeSat Вермонтского технического колледжа ). [ нужна цитата ]

Системы безопасности [ править ]

SPARK также использовался при разработке безопасных систем. В число пользователей входят Rockwell Collins (междоменные решения Turnstile и SecureOne), разработка оригинального MULTOS АНБ CA, демонстратор Tokeneer , многоуровневая рабочая станция secunet, ядро ​​разделения Muen и Genode шифратор блочных устройств .

В августе 2010 года Род Чепмен, главный инженер Altran Praxis, внедрил Skein , одного из кандидатов на SHA-3 в СПАРК . Сравнивая производительность реализаций SPARK и C и после тщательной оптимизации, ему удалось заставить версию SPARK работать лишь примерно на 5–10 % медленнее, чем C. Позднее усовершенствование среднего уровня Ada в GCC (реализовано Эриком Ботказу из AdaCore) ) закрыл разрыв: код SPARK точно соответствует C по производительности. [2]

NVIDIA также внедрила SPARK для реализации критически важного для безопасности встроенного ПО. [3]

В 2020 году Род Чепмен повторно реализовал криптографическую библиотеку TweetNaCl в SPARK 2014. [4] Версия библиотеки SPARK имеет полное автоматическое подтверждение безопасности типов, безопасности памяти и некоторых свойств корректности, а также сохраняет алгоритмы постоянного времени. Код SPARK также значительно быстрее, чем TweetNaCl.

См. также [ править ]

Ссылки [ править ]

  1. ^ «SPARK — Ядро Ada SPADE (включая RavenSPARK)» . АдаКор . Проверено 30 июня 2021 г.
  2. ^ Хэнди, Алекс (24 августа 2010 г.). «Криптовалюта Skein, основанная на Ada, показывает SPARK» . СД Таймс . ООО «БЗ Медиа» . Проверено 31 августа 2010 г.
  3. ^ «Обеспечение безопасности и защищенности встроенного программного обеспечения в будущем» . 8 января 2020 г.
  4. ^ «СПАРКNaCl» . Гитхаб . 8 октября 2021 г.

Дальнейшее чтение [ править ]

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец оригинального документа.
Arc.Ask3.Ru
Номер скриншота №: 48BAA00FF69C69BA75C34433A94D0A67__1715084220
URL1:https://en.wikipedia.org/wiki/SPARK_(programming_language)
Заголовок, (Title) документа по адресу, URL1:
SPARK (programming language) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)