Каково определение «действующей программы»?
ISO / IEC 9899: рабочий проект 202x (E) - N2596 от 11 декабря 2020 г., сноска 9:
... реализация может создавать любое количество диагностических сообщений, часто называемых предупреждениями, пока действующая программа все еще правильно переведена. Он также может успешно переводить неверную программу.
Поиск определения «действительная / недействительная программа» по стандарту не дал результатов. Фактически сноска 9 - единственное место, где упоминается «действительная / недействительная программа».
Примечание: да:
В стандартах ISO примечания не являются нормативными.
Источник: https://www.iso.org/schema/isosts/v1.0/doc/n-6ew0.html.
Однако люди часто используют термин «действительная / недействительная программа».
Может ли кто-нибудь помочь предложить / вывести определение (относительно стандарта) термина «действующая программа»?
На первый взгляд вопрос может показаться глупым. Однако бывают случаи, когда люди по-разному понимают термин «действующая программа». Следовательно, возникают неправильные толкования.
Мое предположение: действительная программа - программа, которая не нарушает никаких правил или ограничений синтаксиса.
Примечание: «правило семантики» намеренно не включено в это определение, потому что согласно теореме Райса «нетривиальные семантические свойства программ неразрешимы».
Уместно ли такое определение? Если нет, то какое это подходящее определение?
2 ответа
Ваше предположение, что действующая программа не может нарушать никаких ограничений, верно. Как и ваше предположение, что правильность невозможно доказать с помощью статического анализа, но ее можно подтвердить только на конкретном проходе выполнения.
Это нечеткое определение «недействительной программы». Программа может быть действительной для ограниченного набора входных данных, поэтому вы не можете полностью пометить программу как недопустимую. Только программы, которые недопустимы для всех возможных вводов, недействительны в целом. Точно так же «действительно действительна» только программа, которая действительна для всех возможных входных данных. На самом деле вряд ли найдется какая-нибудь нетривиальная программа, в которой не было бы крайних случаев, когда она все еще недействительна.
Подводя итог этому к формальному определению:
Программа действительна, если существует хотя бы один возможный вход, для которого не нарушаются никакие ограничения.
Программа недействительна только в том случае, если она нарушает ограничения для всех возможных входов.
И, пожалуйста, не путайте действительный / недействительный с правильным / неправильным. Критерий последнего - правильность всех возможных входов.
По крайней мере, в более старых версиях Стандарта Соответствующая Программа C — это любой исходный текст, который принят по крайней мере одной Соответствующей Реализацией C где-то во вселенной. Учитывая, что соответствующие реализации могут расширять язык для приема практически любого произвольного исходного текста, включая программы, содержащие нарушения ограничений, при условии, что они принимают последний только после выдачи хотя бы одной диагностики, вопрос о том, является ли какой-либо конкретный исходный текст Соответствие программы C определяется наличием или отсутствием реализаций, которые ее принимают, а не какой-либо чертой самого исходного текста.