Кто является целевой аудиторией PEP7 Python, и все еще считается ли она действительной?

Недавно я наткнулся на PEP7 (руководство по стилю Python для кода C), и это немного смутило меня.

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

  • Использовать Py префикс для публичных функций; никогда для статических функций. Py_ префикс зарезервирован для глобальных процедур обслуживания, таких как Py_FatalError; определенные группы подпрограмм (например, API-интерфейсы определенного типа объекта) используют более длинный префикс, например PyString_ для строковых функций.
  • Открытые функции и переменные используют MixedCase с подчеркиванием, например: PyObject_GetAttr, Py_BuildValue, PyExc_TypeError,
  • Иногда "внутренняя" функция должна быть видна загрузчику; мы используем _Py префикс для этого, например: _PyObject_Dump,
  • Макросы должны иметь префикс MixedCase, а затем использовать верхний регистр, например: PyString_AS_STRING, Py_PRINT_RAW,

Эти рекомендации имели бы смысл, если бы я модифицировал сам CPython, но, как автор расширения C, я бы предпочел не называть свои функции так, чтобы их можно было принять за API-интерфейс CPython.

Кроме того, есть следующие два пункта из раздела C диалект:

  • Используйте стандарт ANSI/ISO C (версия стандарта 1989 года). Это означает (среди прочего), что все объявления должны быть в верхней части блока (не обязательно в верхней части функции).
  • Нет предупреждений компилятора с основными компиляторами (gcc, VC++, несколько других).

Направление использовать C89, вероятно, имело смысл в 2001 году, когда был написан PEP7. Тем не менее, я обнаружил, что если я попытаюсь скомпилировать C-расширение с -std=c89 -pedantic-errors флаги, компиляция не удалась из-за Python.h заголовок (например, использование long long тип, сравнивая целые числа со знаком и без знака или создавая переменную как часть шага инициализации цикла for). Это заставляет меня задуматься о том, насколько строго соблюдается этот PEP, и если мне нужно, чтобы мои C-расширения соответствовали C89, или просто компилировались без предупреждений / ошибок в большинстве компиляторов.


Является ли целевая аудитория авторов PEP7 базой кодов CPython или создателей расширений C в целом? В любом случае, PEP по-прежнему считается действительным (например, PEP8) или в большинстве случаев он игнорируется?

0 ответов

Другие вопросы по тегам