Кто является целевой аудиторией 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) или в большинстве случаев он игнорируется?