Разделы

Цифровизация Системное ПО Софт

Эксклюзивное интервью с создателем языка программирования C++

Сегодня имя Бьерна Страуструпа проходят в университетах. Это живая легенда, человек, создавший язык C++. В интервью CNews он поделился своим видением современной России и перспектив, открывающихся перед ИТ в нашей стране, а также рассказал о новом стандарте языка - C++0x, о возможностях и принципах разработки которого пойдет речь на на конференции CEE-SECR.

CNews: В ближайшее время будет презентован новый стандарт C++. Что изменится в этом языке программирования? Какие новые возможности появятся?

Бьерн Страуструп: У нас уже есть окончательный "черновик" проекта для версии C++0x. Я ожидаю, что он будет скорректирован в соответствии с официальными комментариями и утвержден окончательным голосованием 12 мая 2011 года. После этой процедуры, через несколько месяцев, необходимых на соответствующие бюрократические формальности, он станет официальным стандартом ISO. Никаких существенных изменений в подготовленном проекте не ожидается.


Бьерн Страуструп: Не нужно препятствовать студентам, профессорам, исследователям заниматься предпринимательской деятельностью или сотрудничать с бизнесом

Первое: изменения будут практически полностью совместимы с существующим стандартом. Комитет постарался cделать все возможное, чтобы правильно обработать существующие исходники ISO C++. Нарушения компиляции будут происходить в случае, если в старом коде использованы идентификаторы, которые в новом стандарте являются ключевыми словами. Так что если в вашем коде использованы идентификаторы static_assert, constexpr, или nullptr - мы приносим свои извинения, но существующий код придется изменить. Хорошей идеей было бы начать миграцию с широкоизвестных библиотек, интегрированных в новый стандарт. Это, в частности, thread, unordered_map, и regex.

C++0x был разработан для улучшения языка C++ в области системного программирования и построения библиотек. Также мы хотели сделать C++ более простым для изучения. Думаю, высокоэффективным решением было произвести сотни небольших изменений вместо того, чтобы выпустить одно или два глобальных расширения. Одним из показателей проведенной работы является то, что объем языковых разделов стандартных выражений вырос на 27%, а библиотеки - на 100%, но, вероятно, эти цифры преувеличивают степень внесенных изменений: около половины добавленных текстов являются разъяснениями для разработчиков.

Если говорить о возможностях, то их список вряд ли поможет по-настоящему оценить C++0x. Посмотреть их описание можно в моем my C++0x FAQ . Первое, что приходит на ум – безопасная поддержка традиционного параллельного программирования с использованием threads, locks, и так далее. Привлекательными для многих разработчиков окажутся регулярные выражения, хэш-таблицы, генераторы случайных чисел. В практическом использовании языка появилась возможность объявлять функции с указанием возвращаемого типа в конце (ключевое слово auto), разрешение лямбда-выражений, шаблоны с переменным количеством аргументов. Добавлен конструктор посредством списков инициализации, улучшен конструктор констант, упрощена работа for-loop. Иными словами, стандарту C++0x есть, что предложить, но программистам потребуется время для сочетания новых возможностей с эффективным стилем программирования.

CNews: Как создаются новые версии стандарта языка программирования? Какой вклад в этот процесс могут внести русские программисты?

Бьерн Страуструп: Различные языки имеют различные процессы стандартизации, и значение слова "стандарт" понимается тоже по-разному. C++ использует формальный, медленный и демократический процесс ISO, который считается эталоном для систем стандартизации. ISO категорически отличается от стандартизации языков, принадлежащих корпорациям : там "стандарт" подразумевает последнюю версию продукта.

Комитет по стандарту ISO C++ проводит свои заседания в течение недели трижды в год. Национальные комитеты по стандартизации также принимают участие во встречах и присылают своих представителей. Основная часть работы над стандартом заключается в постоянном общении по электронной почте, обсуждении вопросов и предложений, и работы над рядом документов, представленных в комитет. Их можно найти по запросу в поисковике "WG21" - они находятся в свободном доступе. На моей странице публикаций есть ссылки на те из них, в создании которых я принимал участие.

Любое действие в комитете осуществляется по достижении консенсуса среди нескольких десятков человек из двух десятков стран. Эта мера позволяет предотвратить какие-либо радикальные изменения. Процесс продвигается медленнее, чем хотелось бы, но гарантирует широкое признание конечного продукта. Технические голосования осуществляются организациями (один голос на организацию), и финальное – странами-участниками (один голос на страну).

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

Уже слишком поздно вносить существенные изменения в стандарт C++0x ("существенные" в том значении, как его понимает большинство), но целью для русских специалистов может стать участие в разработке C++1x.

CNews: Как вы считаете, что произойдет с С++ через 10 лет? 20 лет?

Бьерн Страуструп: При нынешних темпах развития за это время произойдет два или три изменения стандарта. Я ожидаю таких изменений, которые в значительной мере будут отражать потребности большинства групп пользователей, новые лучшие методы программирования. 10 и 20 лет – это весьма длительные периоды в среде ИТ. Язык C++ отметит свой 25-летний юбилей в качестве коммерческого продукта, пока я нахожусь в Москве. Первый релиз (от AT&T) и публикация моей книги "Язык программирования C++" состоялся 14 октября 1985 года.

Какие новые разработки хотелось бы увидеть? У меня нет реальных идей. Надеюсь, что будут поддерживаться модели с более высоким уровнем параллелизма, и что различные стили программирования, которые мы знаем как "мультипарадигмы", будут правильно интегрированы в четко сформулированные системы проектирования и программирования (и получат хорошее описывающее наименование). Я надеюсь на значительное увеличение безопасности в современном коде. В идеале, на появление безопасного типа программирования.

CNews: Существует ли идеальный программист? Если да, то как он выглядит?

Бьерн Страуструп: В действительности, программирование – это кластер из соответствующих навыков и действий. Никто не может быть лучшим во всех аспектах программирования. Я хочу, чтобы мои программисты имели твердые фундаментальные знания (алгоритмы, структуры данных, архитектура, и т.д.) и специализацию (например, графика или приложения для исторических исследований). Хороший программист также должен уметь общаться (устно и письменно) и быть эффективным членом команды. Я думаю, что степень магистра является нужным уровнем образования для разработчика нетривиальных систем. Я написал короткую заметку по этому поводу: "Чему мы должны обучить разработчиков ПО? Почему?"