Дисциплина оформления и ведения исходного текста
Совместная разработка =>
Дисциплина использования корпуса текстов (хранилища)
Дисциплина формирования исходного текста
Пример дисциплины работы с хранилищем (git)
- Одно изменение — один коммит
- Двухчастный commit-message (резюме+полный текст)
- Трёхпоточная разработка в ветках (devel, release, legacy)
- Многоуровневый нециклический орграф слияния (merge) хранилищ
Дисциплина оформления кода
Цель: продуктивная совместная работа
- Не «качество кода»
- Не «унификация кода»
- Не «скорость написания кода»
- …
(хотя могут стоять такие задачи)
- Индивидуальная продуктивность (типичные ошибки, «удобный» вид, планирование)
- Включение в общее инф. пространство (документирование, комментарии, повторнаое использование кода)
- Доступность сообществу (KISS, следование общим правилам)
(greg@kroah.com со ссылкой на Elliot Solloway & Kate Ehrlich): добровольное использование разумных правил позволяет надеяться на то, что все в сообществе также используют эти правила
- Учёт специфики проекта и сообщества:
- Размер и ротация сообщества
- Требования к надёжности кода
- Специфика ЯП и предметной области
Что стоит фиксировать
- Внешний вид
- Именование объектов
- (не-)Использование конструкций ЯП
- Разбиение на модули (C: функции, .c и .h файлы)
- Комментарии
- Использование системных и библиотечных примитивов
=> Отдельная дисциплина при работе с большими инструментариями
Пример: Linux Kernel Coding Style
«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.» 1
- Indentation
- Breaking long lines and strings
- Placing Braces and Spaces
- Naming
- Typedefs
- Functions
- Centralized exiting of functions
- Commenting
You've made a mess of it
- Kconfig configuration files
- Data structures
- Macros, Enums and RTL
- Printing kernel messages
- Allocating memory
- The inline disease
- Function return values and names
- Don't re-invent the kernel macros
- Editor modelines and other cruft
- Inline assembly
Замечания от greg@croah
Д/З
Ещё раз с печалью проглядеть исходный код Greed 3.4. Указать несоответствия LKSG
На самом деле master -- это довольно старая ветка. Выкачать ветку sisyphus, посмотреть изменения. Всё ли поправлено по части CSG?
Применить indent и astyle к этому коду. Много ли изменилось? Продолжает ли компилироваться? А работать?
Найти в Интернетах Lindent, упоминающийся в LKSG. Применить его к разным программам, в т. ч. к коду greed.
Посмотреть на http://www.ioccc.org/ Зачем они это делают?
Как работает программа, вычисляющая число Пи? (Для начала — как её скомпилировать, чтобы вычисляла?)