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

29.09.2010, 19:41:25
 
Сегодня имя Бьерна Страуструпа проходят в университетах. Это живая легенда, человек, создавший язык 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: Существует ли идеальный программист? Если да, то как он выглядит?
 
Бьерн Страуструп: В действительности, программирование – это кластер из соответствующих навыков и действий. Никто не может быть лучшим во всех аспектах программирования. Я хочу, чтобы мои программисты имели твердые фундаментальные знания (алгоритмы, структуры данных, архитектура, и т.д.) и специализацию (например, графика или приложения для исторических исследований). Хороший программист также должен уметь общаться (устно и письменно) и быть эффективным членом команды. Я думаю, что степень магистра является нужным уровнем образования для разработчика нетривиальных систем. Я написал короткую заметку по этому поводу: "Чему мы должны обучить разработчиков ПО? Почему?"
 
CNews: 10-20 лет назад новые языки программирования создавались очень часто. Теперь ситуация изменилась – новичков меньше. Существует ли необходимость в новых языках программирования? Какими они должны быть?
 
Бьерн Страуструп: Действительно ли 10 или 20 лет назад создавалось больше языков? Помню, когда я начинал на С++, общепринятым было мнение, что время новых языков прошло. Старые языки довольно прочно "стояли на ногах", и язык Ада подавлял все новое. Последние 50 лет появлялось около 2 тыс языков в десятилетие, и я не вижу признаков замедления – но у меня нет статистических данных.
Бьерн Страуструп: Настоящий прогресс требует любопытного смешения идеализма и прагматизма
 
Не думаю, что современные языки близки к совершенству. Некоторые примитивны, некоторые раздуты, некоторые напоминают красочные игрушки, а некоторые зависят от обширной инфраструктуры (часто – собственности), так что я надеюсь, что придут новые и лучшие языки.
 
Я рассчитываю на разработку более совершенной проверки типов, лучших механизмов абстракции, на совершенствование интеграции между статическими и динамическими проверками, на лучшую адаптацию к утилитам, поддержку параллелизма высокого уровня – и все это в относительно простом языке.
 
CNews: Вы посетите Москву в середине октября и проведёте выступление и семинар на конференции CEE-SECR. О чем пойдет речь?
 
Бьерн Страуструп: О возможностях C++0x и, в частности, об общих правилах разработки и направлении применения языка. Я постараюсь убедить аудиторию в том, что C++0x будет лучшим языком для создания инфраструктуры и приложений в случае серьезной нехватки ресурсов. Я попытаюсь показать, чем отличается C++0x от С++, который они знают – ну или думают, что знают. Возможности и библиотеки C++0x входят в основную реализацию С++, так что никаких научно-фантастических бесед не будет.
 
Также я дам несколько уроков с упором на нынешний С++. В обоих случаях я буду выделять важность гибкой и эффективной абстракции. На уроках будет уделено пристальное внимание использованиям исключений, обсуждению общих вопросов программирования и многому другому.
 
CNews: Вы работаете над новыми книгами? О чем они?
 
Бьерн Страуструп: В прошлом году в США вышел мой первый учебник по программированию "Программирование: принципы и практика использования С++". Как понятно из названия, основная цель книги – обучить программированию. Думаю, это лучшая книга для начинающих и для программистов с небольшим опытом работы на С++. Она была написана для первокурсников по специальностям "инженер-электронщик" и "инженер-специалист по компьютерной технике", но вполне подойдет и для студентов других компьютерных специальностей. За последние три года по книге обучились сотни студентов. Сейчас она доступна на английском, польском, немецком, китайском и французском языках. А в середине октября будет доступна и на русском.
 
Сейчас я работаю над четвертым изданием книги "Язык программирования С++". Это масштабный проект, который я не могу быстро закончить. Мне необходимо не только рассказать о возможностях языка и компонентах стандартной библиотеки C++0x, но и объяснить основы их использования. C++0x выглядит как новый язык, так что эта задача нетривиальна и интересна.
 
CNews: Сегодня одна из самых актуальных тем в России - высокие технологии и инновации. Правительство поддерживает развитие ИТ, чтобы наша экономика меньше зависела от экспорта нефти и газа. Что бы вы посоветовали правительству для создания прочной высокотехнологичной экосистемы в России?
 
Бьерн Страуструп: Это сложная тема, и я подозреваю, что правительство не нуждается в непрошенных советах. Однако, раз вы спрашиваете, я поделюсь с вами своим мнением, личным и не основанным на опыте работы в правительстве. Я считаю, что когда политики и топ-менеджеры пытаются выбирать актуальные технологии, они ошибаются, и ошибаются, неся серьезные убытки.
 
Вам необходимы хорошие университеты и, возможно, научно-исследовательские институты. Они должны иметь стабильное долгосрочное финансирование (на десятилетия), и правительство должно очень постараться не вмешиваться в их работу. Серьезные успехи зачастую происходят там, где руководители их не ждут. Можно посмотреть на истории успеха MIT, Stanford, Bell Labs. Таким образом вы получите квалифицированные научные и технические кадры. Не нужно препятствовать студентам, профессорам, исследователям заниматься предпринимательской деятельностью или сотрудничать с бизнесом. Нужно поощрять сочетание фундаментальных и прикладных исследований, сочетание небольших и серьезных проектов, краткосрочных, среднесрочных и долгосрочных. Не стоит заниматься покупкой технологий, надо разрабатывать что-то свое. Для этого необходимо обеспечить финансирование предпринимателей для поддержки стартапов. Получив шанс, они будут расти и процветать.
 
CNews: Что бы вы сказали русским программистам?
 
Бьерн Страуструп: Настоящий прогресс требует любопытного смешения идеализма и прагматизма. Не нужно просто быстро зарабатывать деньги, постарайтесь сделать что-то для совершенствования мира. Однако очевидно, что идеального решения не существует. Постепенные, эволюционные изменения возможны.
 
Когда я начинал, никто не слышал об объектно-ориентированном программировании, а почти все, кто "знал", о чем шла речь, считали тему невозможной (слишком сложно, слишком трудно изучить, слишком медленно, слишком специализировано и так далее), и все же сегодня мы все пользуемся результатами той идеи. Аналогичная ситуация наблюдается сейчас с парадигмой обобщенного программирования: только представьте, что будет через десять лет. Прогресс возможен – даже если он кажется слишком, удручающе медленным.