image

Утром 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 в пятницу и за последнюю неделю.

Помимо основного анонса гайдлайнов, Страуструп также анонсировал два связанных проекта:
  1. 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. Эта реализация будет поддерживаемой, а ее исходный код продолжит оставаться открытым; приветствуется появление альтернативных реализаций от других вендоров для своих компиляторов/анализаторов.
  2. 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 будут готовы примерно через месяц и будут открыты для всех.

Комментарии (11)


  1. kokorins
    22.09.2015 12:03
    +7

    Название, однако, пересекается с GNU Scientific Library.


  1. lockywolf
    22.09.2015 12:29
    +1

    Кажется, это очень хорошая новость.

    Мне вот интересно, насколько производительна эта самая «Checker Tool»? Можно ли её запускать при каждой компиляции для выдачи ворнингов?


    1. HotWaterMusic
      24.09.2015 11:18

      Единственный встретившийся мне за эти дни комментарий про нее здесь, где автор пишет, что инструмент намечается очень полезный для реального кода, однако «the static analysis is 'local', which I understood as meaning it can look at one function at a time (plus any visible class definitions and signatures of called functions, but not their bodies)».
      В октябре выйдет всего лишь превью-версия от Microsoft, затем наверняка будут улучшать производительность.


  1. ReanGD
    22.09.2015 13:52
    +7

    Интересно, это влияние Rust?


    1. semenyakinVS
      23.09.2015 00:37
      +2

      Здоровая конкуренция всем идёт на пользу.


    1. semenyakinVS
      24.09.2015 01:13
      +4

      Только сейчас заметил. Это ж был комментарий о Rust в посте о С++ от автора с логотипом Go в качестве аватарки.

      Achievement unlocked: Collect all system languages


    1. HotWaterMusic
      24.09.2015 11:00

      Да. Страуструп не просто так сделал акцент на написание type-safety и memory-safety кода на C++.
      Rust также упоминает Герб Саттер в качестве одного из источников вдохновения.
      А на Reddit обсуждали конкретные заимствования.


  1. Andrey2008
    22.09.2015 14:19
    +1

    P.S. Кстати, не забывайте заглядывать к нам в cpphints.com. Так сказать смежная тематика.


    1. Fil
      22.09.2015 15:58
      +1

      Интересно, спасибо!


  1. encyclopedist
    23.09.2015 21:16
    +3

    Уже доступно и видео: www.youtube.com/watch?v=1OEu9C51K2A


    1. Bas1l
      26.09.2015 02:27
      +1

      И видео Саттера: youtu.be/hEx5DNLWGgA