Стандарты кодирования GNU: правила и рекомендации для разработки программ, совместимых с GNU. Написаны Ричардом Столлманом, применимы к C и другим языкам.
Сравнивайте с английским: нажмите на абзац — оригинал откроется в окне. Кнопка EN под абзацем показывает его прямо в тексте.
Содержание
Введение
Стандарты кодирования GNU — это набор правил и рекомендаций по написанию программ, обеспечивающих согласованную работу в системе GNU. Стандарты кодирования GNU были разработаны Ричардом Столлманом и другими волонтерами проекта GNU. Документ со стандартами является частью проекта GNU и доступен на веб-сайте GNU. Хотя он ориентирован на написание свободного программного обеспечения для GNU на языке C, многие его положения применимы в более общем случае. В частности, проект GNU рекомендует своим участникам всегда стремиться следовать этим стандартам, независимо от языка реализации их программ.
The GNU coding standards are a set of rules and guidelines for writing programs that work consistently within the GNU system. The GNU Coding Standards were written by Richard Stallman and other GNU Project volunteers. The standards document is part of the GNU Project and is available from the GNU website. Though it focuses on writing free software for GNU in C, much of it can be applied more generally. In particular, the GNU Project encourages its contributors to always try to follow the standards—whether or not their programs are implemented in C.
Файлы
Стандарты требуют, чтобы все программы могли работать при монтировании /usr и /etc в режиме только для чтения. Следовательно, файлы, изменяемые для внутренних нужд (файлы журналов, файлы блокировок, временные файлы и т.п.), не должны храниться ни в /usr, ни в /etc. Исключение составляют программы, предназначенные для обновления системных конфигурационных файлов в /etc. Также допустимо хранение файлов в каталоге, если пользователь явно запросил изменение файла в этом же каталоге.
The standards require that all programs be able to operate when /usr and /etc are mounted read only. Therefore, files that are modified for internal purposes (log files, lock files, temporary files, etc.) should not be stored in either /usr or /etc. An exception is made for programs whose job it is to update system configuration files in /etc. Another exception is made for storing files in a directory when the user has explicitly asked to modify a file in the same directory.
Переносимость
Стандарт кодирования GNU определяет переносимость следующим образом: в мире Unix переносимость означает 'между Unix-подобными системами'; в программе GNU такой вид переносимости желателен, но не критически важен. Согласно стандарту, проблемы переносимости весьма ограничены, поскольку программы GNU разрабатываются для компиляции с использованием одного компилятора – GNU C Compiler – и предназначены для работы только на одной системе, а именно GNU. Тем не менее, существует один вид проблемы переносимости: стандарт четко указывает, что программа должна работать на различных типах центральных процессоров. Стандарт утверждает, что GNU не поддерживает и не планирует поддерживать 16-битные системы, но обеспечение работы со всеми различными 32- и 64-битными системами абсолютно необходимо.
The GNU Coding Standards define the issue of portability in this way: portability in the Unix world means 'between Unixes'; in a GNU program this kind of portability is desirable, but not vitally important. According to the standard, portability problems are very limited as GNU programs are designed to be compiled with one compiler, the GNU C Compiler, and only run on one system, which is the GNU system. There is one form of portability problem though, and that is the fact that the standard makes it clear that a program should run on different CPU types. The standard says that GNU doesn't and won't support 16 bit systems, but handling all the different 32 and 64 bit systems is absolutely necessary.
Критика
Стандарт кодирования GNU используется прежде всего в проектах GNU, хотя его применение не ограничивается только ими. Ядро Linux настоятельно не рекомендует этот стиль для кода ядра и пренебрежительно о нём отзывается: «Для начала, я бы посоветовал распечатать копию стандартов кодирования GNU и НЕ читать её. Сожгите их – это отличный символический жест». Стив Макконнелл в своей книге «Совершенный код» также предостерегает от использования этого стиля; он помечает пример кода, использующего его, значком «Coding Horror», символизирующим особо опасный код, и утверждает, что он затрудняет читаемость, требуя дополнительного уровня отступов для фигурных скобок.
The GNU coding standards are primarily used by GNU projects, though its use is not limited to GNU projects alone. The Linux kernel strongly discourages this style for kernel code, and refers to the style pejoratively: "First off, I’d suggest printing out a copy of the GNU coding standards, and NOT read it. Burn them, it’s a great symbolic gesture.". Steve McConnell, in his book Code Complete, also advises against using this style; he marks a code sample which uses it with a "Coding Horror" icon, symbolizing especially dangerous code, and states that it impedes readability by requiring an extra level of indentation for braces.