Бьерн Страуструп довел до совершенства шаблоны в C++
Бьерн Страуструп довел до совершенства шаблоны в C++

Бьерн Страуструп определяет обобщенное программирование как методологию, подразумевающую разработку и реализацию обобщенных алгоритмов, которые без изменений могут работать с входными данными различных типов

Источник: stroustrup.com


10:18 31.01.2017   |   5218 |  Пол Крил |  InfoWorld, США

Рубрика Технологии



Как подчеркивает создатель языка, концепции в обобщенном программировании — ключ к написанию более рационального и надежного кода.

Легендарный Бьерн Страуструп взялся за задачу упростить обобщенное программирование на C++.

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

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

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

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

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

Концепции также позволяют решить давнюю проблему чрезмерной громоздкости синтаксиса шаблонов. Решение Страуструпа позволит проверять аргументы в период компиляции на соответствие требованиям, заданным с помощью предикатов.

На данный момент механизм концепций уже реализован в CNU C Compiler 6.2. По словам Страуструпа, он рассчитывает, что они станут частью стандарта C++ 20: «Надеюсь, концепции появятся во всех ведущих реализациях языка еще задолго до 2020 года. На мой взгляд, их надо было включить еще в C++ 17, но комитет по стандартизации не смог прийти к консенсусу по этому вопросу».

Он объясняет, что согласно первоначальному замыслу о поддержке обобщенного программирования в C++, шаблоны должны были отвечать трем требованиям: «Полная общность b выразительность, нулевые накладные расходы по сравнению с ручным переписыванием алгоритмов и удобно заданные интерфейсы. Но реализовать все три свойства никак не удавалось, в итоге мы добились сводимости по Тьюрингу и более высокой, по сравнению с ручным кодированием, продуктивности, а интерфейсы оставались неудачными — по сути, это 'утиная типизация' на этапе компиляции, когда функция вместо того, чтобы проверять типы в интерфейсе, принимает входные параметры любых типов со свойствами, используемыми в реализации. При этом код мог быть очень запутанным».

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


Теги: Языки и системы программирования Разработка ПО Бьерн Страуструп


На ту же тему: