Меню

Власти США требуют отказаться от языка C++. Его создатель призывает одуматься

Бьерн Страуструп раскритиковал АНБ США за попытку ведомства навязать разработчикам использование языков программирования, обеспечивающих безопасную работу с памятью. «Отец» C++ – одного из самых популярных языков современности – упрекнул ведомство в поспешности в выводах и узости представлений о безопасности.

Бьерн Страуструп раскритиковал АНБ США за попытку ведомства навязать разработчикам использование языков программирования, обеспечивающих безопасную работу с памятью. «Отец» C++ – одного из самых популярных языков современности – упрекнул ведомство в поспешности в выводах и узости представлений о безопасности.

Страуструп возразил АНБ

Создатель языка программирования C++ Бьерн Страуструп (Bjarne Stroustrup) отреагировал на призыв Агентства национальной безопасности (АНБ) США к неограниченному кругу организаций отказаться от использования языков программирования, в которых ответственность за управление памятью возложена на разработчика, таких как C и C++, в пользу более обеспечивающих безопасную работу с памятью, например, любимого современными программистами Rust.

В своем открытом письме, опубликованном на open-std.org, Страуструп выразил несогласие с позицией агентства. Во-первых, он отметил, что его представители «смешали в одну кучу» C и C++, несмотря на то, что языки развивались независимо на протяжении последних 30 лет. Впрочем, и практика применения C++ во многом «застряла в прошлом» – разработчики нередко игнорируют изменения в языке, которые позволяют кардинально повысить безопасность кода, сетует Страуструп.

В действительности же, по его мнению, C++ ни в чем не уступает современным так называемым безопасным языкам вроде C#, Go, Java, Ruby, Rust и Swift. Базовые рекомендации по использованию C++ (C++ Core Guidelines), над которыми Страуструп работал в последние несколько лет, охватывают методы безопасного программирование и предписывают использование средств, гарантирующих безопасную работу с типами и ресурсами.

Рис. АНБ США покусилось на детище Бьерна Страуструпа – язык C++. «Отец» выступил в его защиту

Серьезным подспорьем программисту станет добротный статический анализатор кода (например, входящий в состав Microsoft Visual Studio инструмент учитывает рекомендации упомянутого выше C++ Core Guidelines), считает Страуструп. Внедрение такого инструмента влечет за собой куда меньшие трудозатраты в сравнении с переходом на «безопасные» языки.

По мнению программиста и ученого, помимо прочего, авторы рекомендаций не видят всю картину целиком. В их представлении безопасность ПО якобы ограничивается безопасной работой с памятью. В то же время, как отмечает создатель C++, существует свыше десятка других сценариев, при которых особенности конкретного языка можно – умышленно или нет – использовать в ущерб безопасности разрабатываемого софта.

«Отец» C++ считает, что добиться безопасности ПО возможно, сочетая различные стили программирования, проверенные библиотеки и обязательное осуществление статического анализа кода.

«Следовало бы хорошенько подумать»

Страуструп призвал АНБ со своей стороны сперва серьезно подумать о «безопасности» новых языков и лишь затем предложить что-нибудь разумное по этому поводу (“Think seriously about 'safety'; then do something sensible about it”).

«Разумным» Страуструп, по его словам, счел бы формирование списка проблем безопасности C++, которые впоследствии можно было бы устранить путем принятия поправок к международным стандартам языка. «Этим я и планирую заняться», – отметил программист.

В 2022 г. Страуструп и Габриэль дос Рейс (Gabriel dos Reis), представляющий Microsoft, опубликовали работу, в которой разобрали часто встречающиеся ошибки программистов, приводящие к «поломке» системы типов данных и возникновению проблем с безопасностью использования системных ресурсов (в частности, памяти), а также предложили меры по предотвращению их возникновения.

В заключение письма Страуструп недвусмысленно намекает на то, что авторам доклада АНБ следовало бы обращаться за экспертным мнением к представителям комитета ISO по стандартам C++, а не опираться на точку зрения некоего «всеобъемлющего сообщества разработчиков ПО, представляющего частный и государственный сектора экономики США, а также академическую среду». Именно так в отчете АНБ обозначены инициаторы повсеместного перехода на языки программирования, обеспечивающие безопасную работу с памятью.

Рекомендации АНБ

В ноябре 2020 г. АНБ выпустило отчет, посвященный проблемам безопасной работы с памятью при разработке программного обеспечения.

Эксперты агентства порекомендовали организациям, занимающимся созданием ПО, по возможности отказаться от применения языков программирования, которые либо не обеспечивают защиту памяти вовсе, либо не делают это недостаточно эффективно. По мнению ведомства, к таковым относятся языки C и C++.

В качестве альтернативы рекомендуется использовать C#, Go, Java, Ruby и Swift.

«Безопасные для памяти языки программирования обеспечивают различные степени безопасности при работе с памятью, поэтому доступные средства защиты кода, такие как использование соответствующих параметров компилятора, инструментального анализа и конфигурации операционной системы, также должны применяться. При использовании безопасных для памяти языков и доступных средств защиты кода возникновение многих уязвимостей, связанных с доступом к памяти, можно предотвратить или сделать их эксплуатацию киберпреступниками чрезвычайно сложной», – говорится в отчете.

При этом авторы отчета отмечают недостаточно высокую эффективность инструментов статического анализа кода (SAST) и динамического тестирования безопасности приложений (DAST) в выявлении ошибок работы с памятью. Первые, согласно выводам экспертов ведомства, позволяют обнаружить лишь небольшую часть из них и отличаются значительным количеством ложных срабатываний. Вторые же эффективны лишь на поздних этапах процесса разработки, когда исправление ошибок, допущенных на его заре, может дорого обойтись команде программистов и тестировщиков в плане трудозатрат.

Некоторые факты о C++

C++ – компилируемый, статически типизированный язык программирования общего назначения, который позволяет разработчикам придерживаться нескольких парадигм программирования, в частности, процедурной и объектно-ориентированной.

Разработан в 1983 г. Бьерном Страуструпом под крылом Bell Labs, изначально в качестве расширения языка C. Впоследствии стал одним из самых востребованных ЯП в мире и оказал значительное влияние на другие языки, такие как C# и Java.

В рейтинге TIOBE за январь 2023 г. C++ занял третью позицию, уступив в популярности только C и Python. В результате Java, замыкавшая тройку лидеров января 2022 г., сместился на одну строчку рейтинга ниже.

Язык C++ применяется в разработке самого разнообразного ПО: от драйверов до видеоигр.

Источник: CNews.