ua ru

IAPT

Главная » Программное обеспечение » История, развитие и сегодняшние реалии С++

История, развитие и сегодняшние реалии С++

История, развитие и сегодняшние реалии С++

Созданный там же, где и предшественник, язык C, - в Исследовательском центре компьютерных наук Bell Labs, С + + в полной мере повторил и приумножил успех С. Следует отметить, что успехи и C, и C + +, основывались исключительно на свойствах этих языков как инструментов. Ведь по сути никакой коммерческой «раскруткой» языков программирования компания AT&T, в состав которой входила Bell Labs, не занималась. C распространялся как бы «в нагрузку» к ОС UNIX, C + + вообще фактически не имел «товарного» характера. Более того, AT&T своевременно поддержала политику стандартизации открытых спецификаций этих языков. Благодаря этой модели распространения разработок в области языков программирования, принятой AT&T, сегодня доступны не только высококлассные коммерческие компиляторы С и С + +, но и великолепный GCC, ставший главным инструментом в мире Open Source. Достоинства модели распространения ПО - это вещь весьма абстрактная.

А у языка C + + все-таки есть вполне конкретный автор, которого замечательная во всем модель свободного распространения открытых стандартных спецификаций в какой мере обделила. Американец датского происхождения, получивший образование в Дании и Англии, Бьярн Страуструп никаких отчислений по спецификации C + + не получает. Благо специфика любого языка программирования - сложность (даже «самая простая» речь на самом деле очень сложная, отлично демонстрируется хоррор-программой Тома Даффи). Ну а там, где люди вынужденно сталкиваются со сложностью, всегда есть потребность в едином универсальном средстве борьбы с ней - в документации. Выданные во множестве стран мира суммарным легальным тиражом свыше миллиона экземпляров сложные книги Бьярна Страуструп о сложном языке C + + - лучшее тому подтверждение. В технологическом аспекте создания C + +, в принципе, довольно обычная история. Бьярн Страуструп для создания первого компилятора использовал распространенный прием, известный под названием «Метод раскрутки».

На языке C Страуструп написал препроцессор, преобразующий подмножество нового языка в обычный язык C. C + + и был разработан первый транслятор с C + + и потом «раскрученный» в C-код, пригодный к компиляции в исполняемую программу. Целевой машиной для первого C + + транслятора была любая машина, способная выполнять любой C-компилятор, так как результатом трансляции был C-код. Интересно в C + + - это идея Страуструп создать одновременно высокоуровневый язык, несоизмеримо более высокоуровневый по сравнению с C, и в то же время максимально приближенный по низкоуровневым возможностям к C. Возможно, именно благодаря такой затее современный C + + - вовсе не «C с классами» и даже не «объектно-ориентированный язык». C + + - это так называемый «полипарадигменный язык».

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

Если несоизмеримо более простой C свое время поразил Тома Дафф, C-программиста с десятилетним стажем, обилием «неразведанных уголков», то что тогда можно говорить о С + +, отдельной технике которого посвящены такие непростые книги, как 550-страничное руководство по шаблонам «C + + Templates: The Complete Guide»? И между тем, даже при этом уровне сложности на юбилейной конференции, посвященной 20-летию С + +, Бьярн Страуструп отметил, что С + + уже начал терять, как бы это лучше сказать, «крутизну»: «C + + стал мощным, отработанным инструментом , но использовать его уже не круто (no cool)». Возможно, лишение С + + ореолов «крутизны» и «ковбойства »пойдет только на пользу. И в интересах не столько языке, сколько использующим его программистам и организациям.

По крайней мере, период, когда С + + выбирался языком реализации исключительно потому, что это было «круто», безвозвратно прошел. Ведь такой период в истории языка был, и именно благодаря этому убедительно звучали голоса тех, которые предрекают скорый уход C + + с арены популярных инструментальных средств. Сегодняшний С + + многим кажется языке, пик развития которого уже в прошлом. И, по большому счету, эта мысль верна. 20 лет - срок, достаточный для достижения зрелости даже такой сложной разработкой. И все же говорить о том, что развитие языка после стандартизации ISO в 1998 г. полностью прекратился, нельзя. В будущем более трёхмиллионных армия С + + - программистов получит обновленный инструмент, который соответствует стандарту C + +0 x, который формируется. Говорить о точной дате появления нового стандарта и, тем более, о времени выхода компиляторов, понимающих C + +0 x C + +, пока очень трудно.

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

В идеале, конечно, язык со строгой типизацией был просто замечателен. В реальной жизни программистам необходимы одновременно и возможность создания абстрактных типов, и возможность, например, доступа к элементам памяти или регистров, расположенных в адресном пространстве по известным адресам. В реальной жизни программисты стараются использовать как можно большую часть ранее написанного кода повторно, и строгая типизация в С + +0 x привела бы к тому, что все исходные тексты, где используются массивы, указатели, объединения, явные и неявные приведения типов, пришлось бы отправить в мусорные корзины. И наконец, к несовершенству реальной жизни следует отнести и жесткие требования к высокой производительности полученного с помощью компиляции кода. Неважно, что сейчас эпоха «дешевых гигагерцевый» - далеко не во всех областях применения эти гигагерц нужны, далеко не везде компьютерам разрешена работа «обогревателем по совместительству».

Иными словами, требование к минимальности среды времени исполнения C + +0 x остаются в силе. С + +0 x сохраняет минимальную дистанцию между программистом и «железом», отражая один в один целевую машину языковыми средствами. Машинные слова, байты, регистры - все это в C + +0 x остается. Вместе с принципами, по которым формируется C + +0 x, уже известно и о некоторых конкретных нововведения. Так, в стандартной библиотеке появится поддержка кортежей - tuples. Кортежи - это коллекции определенного количества (до десяти) объектов разных типов. Обычно они поддерживаются в языках, интерпретируемых, и позволяют эффективно возвращать множество значений из функций, проводить множественные сравнения или присвоение и другие групповые операции над гетерогенными наборами данных.

Перечень базовых операций с кортежами включает механизмы их создания, определения числа элементов и типа каждого элемента, а также доступа как кортежа в целом, так и каждого его элемента. Реализацию кортежей в C + +0 x можно считать очень удачной, поскольку она фактически не потребовала модификаций ядра языка. К полезным модификациям также следует отнести «Облатку» над ссылками С + +. В текущих спецификациях языка объекты типа «ссылка» не являются равноправными с другими объектами базовых типов. Так, например, ссылки нельзя использовать как параметры в шаблонных конструкциях. В некоторых случаях такое неравноправие ссылок, например с указателями, вынуждали программистов заниматься различными ухищрениями.

В С + +0x от несправедливости решили избавляться малой кровью и ввели специальные класс - «Облатку» (reference_wrapper), позволяющий скрыть в объекте класса ссылку так, чтобы одновременно сохранить ее свойства и устранить ограничения. Реализация «облатки» такова, что из ссылок на объекты разных типов в С + +0 x можно, например, формировать кортежи. Еще одно новшество С + +0 x - возвращение в язык старого ключевого слова auto, но в совершенно новом качестве. Идея нового auto очень проста и отвечает на вопрос: какова степень избыточности следующего выражения: const double Salary = 2563.92. Если немного подумать, то почти вся левая часть, касающаяся объявления переменной, избыточна. Потому как информация о типе совершенно явно указывается в правой части, в значении, используемом для инициализации переменной.

Соответственно, в С + +0 x можно будет полениться и доверить компилятору дописать очевидное, заменив его словом auto: const auto Salary = 2563.92. В примерах, где в правой части инициализаций использовались данные в явной форме, ценность auto невелика. Но если вместо явных данных использовать вызовы функций, объявление переменной с auto-определением типа может помочь избежать тонких ошибок, особенно в случаях, когда могут сработать механизмы приведения типов по умолчанию, а они-то как раз и нежелательны. В общем, возвращаясь к оценкам перспектив развития языка, можно уверенно говорить, что революции с появлением C + +0 x не произойдет. Что-то будет удобнее, то - лучше, все сделанное ранее останется работоспособным. И это не может не радовать.