Является ли POSIX предписывающим или описательным?

Является ли POSIX предписывающим или описательным?

Является ли POSIX описанием того, как приложения реализовывали каждую конкретную часть UNIX в прошлом, или это предписывающая норма того, как должен быть реализован UNIX?

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

Если предписывающий: На какой теоретической базе он основан? Математика? Язык C? Опыт?

решение1

Это предписывающийде-юре, но в основном описательныйде-факто.

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

На практике POSIX начинался в основном как общее подмножество существующих реализаций. Так что в этом смысле он в основном описательный. Но POSIX иногда предписывает новое поведение. Чаще всего, для функций, которые существовали во многих реализациях, но с разными интерфейсами (имена функций, параметры командной строки и т. д.), POSIX ввел несколько функций и утилит, таких какpax(замена для tarи cpio, которые сильно различались в разных вариантах Unix) и различныеposix_xxxфункции. POSIX также ввел новые константы и параметры командной строки; например, дляps, « -AОпция эквивалентна BSD -gи SVID -e. Поскольку две системы различались, был выбран мнемонический компромисс». Разделы обоснования часто объясняют, почему была включена та или иная функция, часто упоминая, в каких реализациях уже была эта функция, или почему был сделан или не сделан выбор между несовместимыми реализациями.

решение2

Цель POSIX — описать существующее поведение, а не нарушать историческое поведение (не делать историческую версию UNIX несовместимой), если только историческое поведение уже не может рассматриваться как определенная историческая ошибка.

Дальнейшее намерение POSIX не заключается в том, чтобы вводить собственное изобретение. Если выясняется, что потребуется так называемое собственное изобретение (потому что существующие реализации не подходят для стандартизации), идеи комитета POSIX обсуждаются с авторами различных версий UNIX (или программ) для того, чтобы получить наилучшее решение. Такое обсуждение часто приводит к появлению новых реализаций, которые поддерживают окончательное предложение на момент их написания.

Есть несколько исключений, например, POSIX, определенный getpgrp()и setpgrp()таким образом, что он конфликтует с интерфейсами BSD, которые существовали уже 10 лет назад. POSIX, определенный getline()и fexec()таким образом, что он совершенно несовместим с реализациями, которые существовали почти 30 лет до введения несовместимых интерфейсов из GNU libc.

Если оказывается, что существующие реализации не совпадают, принимается решение, какой вариант использовать (или вводится ли смесь существующих различных реализаций) и вводится специфическое имя posix. Это произошло, например, для интерфейсов потоков, где posix_xxx()были введены функции, очень похожие на предыдущую эталонную реализацию от Роджера Фолкнера (Sun Microsystems).

Связанный контент