Ключевые факты
- Проект Chromium официально запретил определенные функции C++ для поддержания стабильности и безопасности кодовой базы в рамках своей огромной браузерной экосистемы.
- Эти ограничения подробно описаны в официальном стилевом руководстве проекта, которое служит окончательной ссылкой для всех участников.
- Среди запрещенных функций — std::make_unique, std::make_shared и std::regex из-за проблем с совместимостью и производительностью.
- Проект предоставляет альтернативы, специфичные для Chromium, такие как base::MakeUnique, чтобы обеспечить согласованное поведение на всех поддерживаемых платформах.
- Процессы ревью кода теперь включают автоматические проверки, которые помечают запрещенные функции до того, как код будет объединен с основной веткой.
- Стилевое руководство — это живой документ, который регулярно обновляется по мере развития стандартов C++ и улучшения поддержки компиляторов.
Эволюция кодовой базы
Проект Chromium установил всеобъемлющие руководящие принципы, запрещающие определенные функции C++ для поддержания стабильности в рамках своей огромной кодовой базы. Эти ограничения отражают приверженность проекта долгосрочной сопровождаемости и безопасности.
Будучи одним из крупнейших мировых проектов с открытым исходным кодом, решения Chromium влияют на миллионы разработчиков и пользователей по всему миру. Стилевое руководство проекта теперь явно запрещает определенные современные дополнения C++, которые могут привести к нестабильности или уязвимостям безопасности.
К запрещенным функциям относятся несколько современных дополнений C++, которые могут скомпрометировать стандарты стабильности и безопасности проекта. Это решение подчеркивает фокус проекта на качестве кода и кроссплатформенной совместимости.
Список запрещенных функций
Проект Chromium определил несколько функций C++, которые теперь запрещены в кодовой базе. Эти ограничения подробно описаны в официальном стилевом руководстве проекта, которое служит окончательной ссылкой для участников.
Среди запрещенных функций:
- std::make_unique — запрещена из-за проблем с совместимостью
- std::make_shared — ограничена по аналогичным причинам совместимости
- std::shared_ptr с массивами — не разрешена из-за несогласованности реализации
- std::atomic с определенными типами — ограничена для предотвращения неопределенного поведения
- std::regex — запрещена из-за проблем с производительностью и совместимостью
Проект также ограничивает использование std::filesystem и std::optional в определенных контекстах. Эти функции, хотя и являются частью современных стандартов C++, признаны неподходящими для конкретных требований Chromium.
Стилевое руководство подчеркивает, что эти ограничения распространяются на всю кодовую базу, включая все подпроекты и зависимости. Участники должны соблюдать эти руководящие принципы при отправке кода на ревью.
Обоснование ограничений
Решение запретить эти функции проистекает из уникального положения Chromium как кроссплатформенного проекта, поддерживающего несколько операционных систем и архитектур. Проект должен поддерживать совместимость со старыми компиляторами и библиотеками, обеспечивая при этом согласованное поведение на платформах.
Соображения безопасности также играют решающую роль в этих ограничениях. Некоторые современные функции C++ могут привести к появлению незаметных ошибок или неопределенного поведения, которыми можно воспользоваться. Сопровождающие проекта отдают приоритет безопасности и надежности перед удобством.
Производительность — еще один критический фактор. Хотя некоторые современные функции C++ предлагают удобство, они могут не соответствовать требованиям Chromium к производительности. Масштаб проекта означает, что даже незначительные регрессии производительности могут иметь значительное влияние.
Команда Chromium обнаружила, что определенные функции, несмотря на то, что являются частью стандарта C++, имеют несогласованные реализации на разных платформах. Эта несогласованность может привести к неожиданному поведению и усложнить отладку.
Влияние на разработку
Эти ограничения значительно влияют на то, как разработчики пишут код для Chromium. Участники должны использовать альтернативные подходы, соответствующие руководящим принципам проекта, при этом достигая той же функциональности.
Например, вместо использования std::make_unique разработчики должны использовать base::MakeUnique или аналогичные альтернативы, специфичные для Chromium. Эти альтернативы тщательно разработаны для согласованной работы на всех поддерживаемых платформах.
Проект предоставляет подробную документацию и примеры для каждой ограниченной функции, помогая разработчикам понять одобренные альтернативы. Эта документация регулярно обновляется по мере развития проекта.
Процессы ревью кода были улучшены для автоматического выявления нарушений этих ограничений. Система сборки Chromium включает проверки, которые помечают запрещенные функции до того, как код будет объединен с основной веткой.
Будущие соображения
Проект Chromium непрерывно оценивает свои стандарты кодирования по мере развития C++. Хотя определенные функции в настоящее время запрещены, проект остается открытым для пересмотра этих решений по мере улучшения поддержки компиляторов и созревания стандартов.
Стилевое руководство — это живой документ, который регулярно обновляется. Участников поощряют предоставлять обратную связь и предлагать изменения на основе реального опыта и меняющихся требований.
По мере роста проекта и появления новых стандартов C++ в список запрещенных функций могут быть добавлены дополнительные функции, в то время как другие могут стать допустимыми при определенных условиях. Этот динамический подход гарантирует, что Chromium остается на переднем крае лучших практик программной инженерии.
Приверженность проекта этим стандартам демонстрирует его преданность созданию высококачественного, безопасного и сопровождаемого программного обеспечения, которое обслуживает миллионы пользователей по всему миру.
Ключевые выводы
Решение проекта Chromium запретить определенные функции C++ представляет собой взвешенный подход к управлению огромной, сложной кодовой базой. Эти ограничения отдают приоритет стабильности, безопасности и сопровождаемости перед удобством.
Разработчики, работающие с Chromium, должны адаптироваться к этим руководящим принципам, используя одобренные альтернативы, обеспечивающие согласованное поведение на платформах. Хотя это может потребовать дополнительных усилий, преимущества в качестве кода и надежности значительны.
Эволюционирующие стандарты проекта отражают динамичный характер разработки программного обеспечения, где лучшие практики постоянно улучшаются, чтобы соответствовать новым вызовам и возможностям.
Часто задаваемые вопросы
Какие функции C++ запретил Chromium?
Chromium запретил несколько современных функций C++, включая std::make_unique, std::make_shared, std::shared_ptr с массивами, std::atomic с определенными типами, std::regex, std::filesystem и std::optional в определенных контекстах. Эти ограничения подробно описаны в официальном стилевом руководстве проекта.
Почему Chromium запретил эти функции?
Ограничения проистекают из проблем совместимости, соображений безопасности и требований к производительности. Некоторые функции имеют несогласованные реализации на разных платформах, в то время как другие могут привести к появлению незаметных ошибок или неопределенного поведения, которыми можно воспользоваться.
Какие альтернативы используют разработчики?
Chromium предоставляет специфичные альтернативы, такие как base::MakeUnique вместо std::make_unique. Эти альтернативы тщательно разработаны для согласованной работы на всех поддерживаемых платформах и соответствуют требованиям проекта к производительности.
Как эти ограничения обеспечиваются?
Система сборки Chromium включает автоматические проверки, которые помечают запрещенные функции во время ревью кода. Это гарантирует, что нарушения будут выявлены до того, как код будет объединен с основной веткой, поддерживая целостность кодовой базы.









