Pull to refresh
592.3
OTUS
Цифровые навыки от ведущих экспертов

Язык программирования C++: Как он незаметно стал основой всего, и его ближайшее будущее

Reading time7 min
Views27K
Original author: Owen Hughes

Мощный, гибкий, сложный: история C++ началась еще 40 лет назад, и по сей день он остается одним из наиболее широко используемых языков программирования. TechRepublic в беседе с создателем C++ Бьерном Страуструпом попытался выяснить, в чем его особенность.

Бьерн Страуструп. Изображение: National Academy of Engineering
Бьерн Страуструп. Изображение: National Academy of Engineering

Бьерн Страуструп: «Эволюция необходима для того, чтобы справляться с вызовами меняющегося мира и реализовывать новые идеи». ("Evolution is necessary to meet the challenges of a changing world and to incorporate new ideas.")

История C++ начинается в 1979 году, когда Бьерн Страуструп, создатель этого языка программирования, впервые начал работу над языком, который тогда был известен как «С c классами» (C with Classes). Изначально язык разрабатывался, как новая улучшенная версия языка программирования C с добавлением дополнительных фич, которые сделали его объектно-ориентированным.

«Такой успех C++ был неожиданностью», — говорит Страуструп TechRepublic. «Я считаю, что успех C++ стал следствием успешной реализации функций и целей для которых он изначально был создан — эффективное использование железа, плюс мощные механизмы абстракции — и его выверенной эволюции, с учетом обратной связи от реальных пользователей». Сейчас этот язык является одним из самых популярных среди разработчиков по всему миру и лежит в основе множества систем и сервисов.

«Моей целью было создать мультикомпьютерную платформу с коммуникационной системой, в качестве которой могли бы выступать либо общая память, либо сеть», — объясняет Страуструп.

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

Ни один язык, из существующих в то время, не подходил для выполнения этих задач, и Страуструп взял на себя миссию создать такой язык. «“C c классами” объединил в себе способность языка C работать “близко к железу”, с эффективной реализацией классов Simula для абстракции и организации кода», — говорит Страуструп .

С самого начала Страуструп понимал, что у него нет единовластного контроля над языком. На ранних этапах над C++ работали только он сам и несколько его коллег из Bell Labs, а когда начались попытки стандартизировать язык, число вовлеченных человек возросло до нескольких десятков.

На сегодняшний день в комитете по стандартам языка программирования C++ насчитывается около 400 членов, не считая гораздо более широкого сообщества пользователей, которые следят и стараются влиять на направление развития языка.

Возникает вопрос: как же сохранить целостность языка программирования при таком большом всеобщем энтузиазме? «Это одновременно и открывает возможности и является огромной проблемой», — говорит Страуструп.

«Самое сложное здесь — решить, что действительно важно и что послужит согласованности. Как только вы узнаете, чего хотите, в конце концов, вы найдете хороший технический способ, чтобы это осуществить».

Вспомните «Вазу»

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

Вдобавок, появление C++11 тринадцатью годами позже заложило фундамент для начала будущей эволюции языка, как говорит Страуструп. «С выходом C++11 — новой версии стандарта языка C++ — он ощущается совсем как новый язык», — говорит он.

«Для параллелизма была важна поддержка типобезопасности. C++11 предоставил плотно скомпанованную сеть взаимно поддерживающих фич, таких как [constexpr] функции для вычислений во время компиляции, лямбда-выражения, автоматический вывод типов и вариативные шаблоны».

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

«C++ действительно сложен, и чтобы научиться его использовать необходимо приложить определенные усилия», — говорит Страуструп. «К сожалению, людям не достаточно простоты, они хотят чего-то невозможного: еще более простого языка, с еще большим количеством фич и сохранением работоспособности существующего кода».

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

Легче сказать, чем сделать это с таким большим монстром, как C++ или любым другим крупным языком программирования, если на то пошло. Страуструп объясняет, что одной из самых тяжелых задач является достижение консенсуса в принятии решений о том, какие новые фичи следует внедрить, а какие отбросить, что само по себе требует много тяжелой работы, обсуждений, времени и терпения.

Тем не менее не все хорошие фичи можно внедрить. «Вашей задачей является добавление только тех нескольких фич, которые действительно необходимы людям — ведь мы не можем добавлять каждую фичу, которая кому-то в чем-то может помочь, потому что при таком сценарии язык не выдержит собственной тяжести», — объясняет он.

Страуструп привел в пример «Вазу», величественный шведский линкор XVII века, который затонул из-за плохой конструкции в гавани Стокгольма во время своего первого рейса. 

«По настоянию Короля — то бишь высшего руководства — и вопреки здравому мнению технических специалистов корабль был завален красивыми статуями и огромными пушками. В итоге из-за смещенного центра тяжести линкор был опрокинут порывом ветра».

«Я неоднократно привожу в пример “Вазу”, как своего рода предостережение для людей, которые с большим рвением хотят улучшить C++ посредством добавления новых фич: помните, что случилось с “Вазой”! C++ до сих пор на плаву».

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

Действительно, C++ уже более 35 лет пользуется успехом с момента, как он впервые был представлен публике. Сегодня C++ намного мощнее и выразительнее, чем его ранняя версия. Однако его первоначальная структура видна и по сей день.

«Можно найти простые программы, написанные в первые годы разработок — примерно 40 лет назад — которые все еще работали бы сегодня», — говорит Страуструп.

«Стабильность — важный критерий для языка, используемого для систем, которые должны работать десятилетиями. В действительности, многие из первоначальных идей получилось реализовать только в C++20. Я с самого начала знал, что не смогу построить идеальный язык, поэтому должен был настраиваться на постепенное развитие — эволюцию. На самом деле, я не верил в идею создания идеального языка — идеального для чего? Для кого?».

Страуструп добавляет: «Эволюция необходима для того, чтобы справляться с вызовами меняющегося мира и реализовывать новые идеи».

C++ на практике

На сентябрь 2020 года C++ является четвертым по популярности языком программирования в мире после C, Java и Python, и — согласно последнему индексу TIOBE - является самым быстрорастущим. C++ — это язык программирования широкого применения, пользующийся успехом у разработчиков за его мощность и гибкость, что делает его идеальным для операционных систем, веб-браузеров, поисковых систем (включая Google), игр, бизнес-приложений и многого другого.

Страуструп подытожил: «Если ваша проблема подразумевает эффективное использование железа, а также решения задач значительной сложности, C++ — очевидный кандидат. Если у вас нет двух этих потребностей, вы выберете либо эффективный язык низкого уровня либо высокоуровневый расточительный язык».

Также Страуструп отметил, что, несмотря на его широкую популярность, трудно со всей точностью определить, где и для чего используется C++.

«По предварительной оценке можно сказать, что “везде”», — говорит он.

«В любой крупной системе C++ обычно можно найти в низкоуровневых и скоростных частях. Такие части системы часто не видны конечным пользователям или даже самим разработчикам, работающим с другими частями системы, поэтому я иногда называю C++ незримой основой всего».

Страуструп также подчеркивает относительную ненадежность опросов разработчиков при оценке популярности того или иного языка программирования: «Собрать мнения программистов — и сложная и в тоже время простая задача. Интернет-опросы обычно являются просто индикатором “шума”; то есть отражением того, о чем говорят, а не то, что по факту используется».

Будущее C++

Сегодня Страуструп является техническим партнером  (Technical Fellow) в Morgan Stanley. Его работа с Международной организацией по стандартизации (ISO) над стандартом C++ и C++ Core Guidelines считаются частью его обязанностей в рамках сотрудничества с финансовым гигантом, и он по-прежнему также активно участвует в разработке C++. 

В частности, Страуструп входит в координационную группу, которая презентует и обсуждает рекомендации о будущем языка программирования. Он также курирует группу по эволюции языка и принимает участие в обсуждениях новых фич. 

Однако, что касается повседневной работы над C++, Страуструп с радостью берет на себя более второстепенную роль. «Я занимаюсь административной деятельностью, но стараюсь делать это как можно меньше. Я не самый лучший администратор», — признает он.

До пандемии Страуструп много путешествовал, преподавая и объясняя язык C++ всему миру в своих книгах, статьях и интервью — как и для всего в остальном мире, 2020 временно приостановил эту деятельность.

«В рамках своей работы я получаю огромную пользу от разговоров с людьми, во время которых узнаю об их проблемах и таким образом понимаю, как мои идеи могут им помочь», — говорит Страуструп. 

«Во время пандемии я лишился столь необходимой мне обратной связи. Виртуальные беседы и интервью — это не одно и то же. Когда дело доходит до обсуждения архитектуры и идей, динамика Zoom-конференций сильно проигрывает реальным встречам». 

Пандемия COVID-19 также сильно препятствовала работе над следующими двумя версиями языка C++20 и C++23, однако Страуструп утверждает, что “почти весь” C++20 будет готов к 2020 году.

«Кроме того, мы работаем над Unicode, численными операциями, разработкой игр, понижением задержки, инструментами, AI и многим другим», — говорит он.

«Мы выпускаем фичи (библиотеки и язык) по готовности, а обновленный стандарт выходит каждые три года. C++14, C++17 и C++20 были выпущены без задержек». Стоит отметить, что усилия по разработке стандартов и основные разработчики все на одной волне.

«Для нас крайне важно, чтобы C ++ продолжал оставаться согласованной и стабильной платформой для разработки». 

Спасибо за внимание!


Материал подготовлен в рамках курса «C++ Developer. Professional».

Всех желающих приглашаем на бесплатный двухдневный интенсив «Асинхронный сервер на сопрограммах из C++20».

В данном интенсиве мы рассмотрим как можно сделать обертку над асинхронными сокетами под Linux, которую можно будет использовать для передачи управления с помощью сопрограмм. Итоговый результат будет интересно сравнить с классическим решением на основе функций обратного вызова, чтобы проверить насколько для сопрограммы выполняется принцип zero-overhead abstractions.
>> РЕГИСТРАЦИЯ

Tags:
Hubs:
Total votes 23: ↑5 and ↓18-10
Comments33

Articles

Information

Website
otus.ru
Registered
Founded
Employees
101–200 employees
Location
Россия
Representative
OTUS