
Возможности языка C++, разработанного в 80-е годы XX века, до сих пор остаются одними из наиболее востребованных в разработке программного обеспечения, но их можно многократно усилить, если отказаться от старых способов написания кода. Об этом 4 февраля написал создатель языка Бьерн Страуструп в статье на сайте Communications of the ACM. Опрошенные «Экспертом» специалисты отрасли рассказали о преимуществах и проблемах кодирования с помощью C++. Он остается одним из самых популярных и востребованных языков в мире программирования.
C++ стабильно удерживает лидирующие позиции в TIOBE — одном из наиболее известных рейтингов популярности языков программирования. Он оценивается по запросам в поисковиках. В период с 2001 по 2024 гг. C++ не опускался в рейтинге ниже пятой позиции, всего TIOBE отслеживает 50 языков. На C++ написаны такие современные системы, как программный пакет Adobe, главные продукты Microsoft (Office, Visual Studio), поисковая система Google, значительная часть MacOS, внутренние системы Facebook и Siemens. C++ известен благодаря высокой производительности и широкому распространению, он также считается одним из самых сложных в изучении языков программирования.
В своей статье Страуструп отмечает, что значительно ускорить работу программ на C++ можно за счет тех средств, которые были в нем почти с самого его запуска в 1983 г.
Чтобы использовать какие-либо заранее подготовленные функции в языке (библиотеки), например, для математических вычислений, программист должен сначала «подключить» их к своему коду. Для этого в C++ традиционно используется команда #include (в самом начале кода пишем: #include ). Как пишет Страуструп, замена #include на существующую в C++ аналогичную и более современную команду import позволяет ускорить работу кода почти в 25 раз, при этом возникает значительно меньше ошибок.
Одна из больших трудностей C++ заключается в работе с памятью. Если в большинстве современных языков программирования она осуществляется автоматически, в C++ программист должен сам за ней следить и освобождать её, если она не используется. Это как если бы после каждой строчки, которую мы копируем с помощью Ctrl+C, нам приходилось самостоятельно удалять её потом — иначе произошла бы утечка памяти. Страуструп настаивает на отказе от традиционных для C++ инструментов работы с памятью вроде сборщиков мусора — они освобождают ее автоматически. Сборщики мусора часто работают неэффективно и с ошибками, а подходы вроде RAII (Resource Acquisition Is Initialization) способны значительно снизить вычислительную нагрузку и обезопасить код, указывает Страуструп.
Эти и многие другие способы улучшить код уже существуют в C++, и главная проблема в том, что они почти не используются, уверен он. «Избегать неоптимальных методов сложно. Старые привычки умирают с трудом. Привычность часто путают с простотой. В сети и учебных материалах циркулирует много запутанной и устаревшей информации», — пишет Страуструп.
Еще одним важным направлением развития C++ он видит в его постепенном движении в сторону отказа от использования устаревших функций языка и внедрения упрощенных вариаций его базовых инструментов. Таким образом, язык может стать более простым для новичков, более безопасным и эффективным — «C++ на стероидах», отмечает Страуструп в своей колонке.
Язык C++ по-прежнему остается актуальным, поскольку значительная часть прикладного программного обеспечения — базы данных, операционные системы и критически важные компоненты современного ИТ — написана на нем, указывает в комментарии «Эксперту» директор продуктового направления компании «КомьюнитиТех» (Community tech) Игорь Горячев. Однако у языка есть и проблемы. Одна из главных — это низкоуровневая работа с памятью, которая может привести к ошибкам в коде, отмечает аналитик. Около 80% уязвимостей, используемых для взлома компьютерных систем, связаны с некорректной работой с памятью, добавляет он.
Одной из главных проблем C++ можно назвать стремительное появление новых стандартов языка (каждые три года) после практически десятилетия затишья — между стандартом 2003 г. и «новой эрой C++», которую открыл стандарт C++11 в 2011 г., считает академический руководитель магистерской программы «Системная и программная инженерия» факультета компьютерных наук НИУ ВШЭ Сергей Шершаков. В последние годы язык движется в сторону упрощения: стали появляться конструкции, которые идейно призваны облегчить решение прикладных задач, сообщил Шершаков «Эксперту». Однако реализация и поддержка этих конструкций — так, чтобы соблюдалась главная идея языка: «принцип нулевых добавленных накладных расходов» (the Zero-Overhead Principle) — весьма сложна, и сложность эта ложится не только на разработчиков компиляторов и инструментов проектирования, но и на разработчиков библиотек, которые хотят поддерживать код в относительно «свежем» состоянии.
Главной проблемой и одновременно достоинством С++ является огромное количество функций и библиотек, считает директор по развитию программных продуктов разработчика программного обеспечения «АЛМИ Партнер» Сергей Аксенов. Это позволяет реализовать одну и ту же логику множеством способов, поэтому язык является сложным для изучения, высокая вероятность допустить ошибку, пояснил он «Эксперту».
С++ достаточно сложен из-за огромного набора функционала, при этом «упрощение» языка и отсечение старых методов и синтаксиса может ударить по совместимости и лишить язык его основных преимуществ, уверен Аксенов.
«Говорить о снижении „порога входа“ для начала работы с такими системами — это то же самое, что говорить о снижении „порога входа“ в профессию врача, например, за счет удаления из человеческого организма части органов: действительно, в целом это упрощает систему», — говорит Шершаков.
Чтобы снизить порог входа для начинающих, стоит, например, разработать более интуитивно понятные библиотеки или инструменты, которые скрывают сложные детали управления памятью, допускает Горячев.
Главное преимущество C++ заключается в максимальном использовании вычислительных ресурсов системы, для которой разрабатывается ПО, уверен Шершаков. Этот язык поддерживает множество парадигм (процедурное, объектно-ориентированное программирование и др.), может взаимодействовать как с множеством высокоуровневых систем, так и напрямую с процессором и памятью.
Область применения языка весьма широка: это и системные приложения, и настольные пакеты, программы для обработки графики и мультимедиа, серверные приложения (особенно в области высоконагруженных систем), код для микроконтроллеров, перечисляет Шершаков. Все вычислительные программные ядра для востребованного сегодня искусственного интеллекта написаны на C++, язык Python здесь — не более, чем обертка, хотя для многих она и является единственным видимым программным звеном к ИИ, продолжает он. C++ довольно активно применяется для разработки мобильных приложений, особенно предъявляющих повышенные требования к производительности, и даже для веб-приложений, пусть эта область традиционно считается сферой других языков.
телеграм-канал @expert_mag
Оценили 4 человека
8 кармы