Утром 21 сентября, на открывающем докладе CppCon Бьерн Страуструп официально анонсировал C++ Core Guidelines [ссылка на GitHub проекта][ссылка на слайды] — старт нового open source-проекта по разработке современных авторитетных гайдлайнов по написанию кода на C++. Гайдлайны создаются таким образом, чтобы быть современными, машинно-проверяемыми, а также открытыми для использования в сторонних компаниях — такими, чтобы любая желающая организация могла взять их и включить в свои собственные корпоративные стандарты кодирования.
В качестве авторов-инициаторов проекта выступили Бьерн Страуструп и Герб Саттер; гайдлайны создавались при участии экспертов из CERN, Microsoft, Morgan Stanley и еще нескольких организаций. Сейчас гайдлайны достигли версии 0.6, и Страуструп призывает всех желающих активно контрибьютить в проект.
Страуструп в своем выступлении сказал следующее: «Вы можете писать программы на С++, которые будут статически типобезопасными, и в которых не будет утечек ресурсов. Вы можете делать это без потери производительности и без ограничения выразительной мощи С++. Все это служит поддержкой основного тезиса о том, что сборка мусора не является как необходимой, так и достаточной частью качественного программного обеспечения (garbage collection is neither necessary nor sufficient for quality software). Наши новые гайдлайны делают написание кода более простым, чем это было в старых стилях программирования на С++, а его безопасность может быть проверена инструментами, которые вскоре будут доступны в open source».
В целом, правила в гайдлайнах носят скорее характер предписаний, чем запретов, и касаются гораздо более широкого круга тем, чем стандарты оформления кода.
Несмотря на то, что репозиторий официально был анонсирован только в понедельник, он был открыт публично еще в конце прошлой недели, и был #1 в трендах GitHub в пятницу и за последнюю неделю.
Помимо основного анонса гайдлайнов, Страуструп также анонсировал два связанных проекта:
- Guideline Support Library (GSL): В C++ Core Guidelines определяется небольшая библиотека GSL, представляющая собой набор общеупотребимых типов вроде array_view и not_null, которые должны облегчить переход на гайдлайны. Стартовая реализация выложена в open source Microsoft на Github в репозитории GSL. Она написана на переносимом С++, который должен работать на любом современном компиляторе и платформе, и была протестирована на Clang/LLVM 3.6 и GCC 5.1 под Linux, с Xcode и GCC 5.2.0 под OS X, и Microsoft Visual C++ 2013 (Update 5) и 2015 под Windows. Эта реализация будет поддерживаемой, а ее исходный код продолжит оставаться открытым; приветствуется появление альтернативных реализаций от других вендоров для своих компиляторов/анализаторов.
- Checker tool: C++ Core Guidelines разработаны таким образом, чтобы быть машинно-проверяемыми настолько, насколько это вообще возможно — поэтому большинство из правил может быть проверено компилятором, статическим анализатором или другим инструментом. Первоначальная реализация на основе Microsoft Visual Studio будет продемонстрирована на этой неделе на конференции, и станет доступна в виде исполняемого модуля под Windows в октябре, с намерением открыть исходный код позже. Этот инструмент также будет поддерживаемым, а его исходный код продолжит оставаться открытым; приветствуется появление альтернативных реализаций от других вендоров для своих компиляторов/анализаторов.
Подобного шага стоило ожидать, поскольку на недостаток отсутствия подобного современного руководства Бьерн неоднократно указывал в своем ежегодном выступлении What – if anything – have we learned from C++?. Попытка унификации используемого набора средств языка вызвана тем, что сейчас несколько человек в рамках одной команды могут пользоваться разными подмножествами C++, вследствие чего между ними может возникать недопонимание (и компании вроде Google в этом плане не исключение).
Некоторые из докладов на CppCon подробнее рассмотрят темы, связанные с гайдлайнами — там выступят докладчики, принимающие участие в их создании:
- Herb Sutter: Writing Good C++14 by Default
- Gabriel Dos Reis: Large Scale C++ with Modules: What You Should Know
- Neil MacIntosh: More Than Lint: Modern Static Analysis for C++
- Neil MacIntosh: A Few Good Types: Evolving array_view and string_view for Safe C++ Code
- Gabriel Dos Reis: Contracts for Dependable C++
- Eric Niebler: Ranges and the Future of the STL
Если вы заинтересовались одним из докладов, то профессиональные записи выступлений с CppCon 2015 будут готовы примерно через месяц и будут открыты для всех.