§1 Язык программирования C++. История. Стандарты. C и C++. Стандартная библиотека (STD). Компилятор GCC

Общие сведения о языке С++

C++ — это компилируемый язык со статической типизацией на котором можно создавать программы любого уровня сложности. C++ спроектирован и динамично развивается как язык, поддерживающий различные методы и технологии программирования, но реализующий их на платформе, обеспечивающей высокую техническую эффективность. В настоящее время C++ является одним из самых популярных языков программирования. С++ использовался в следующих проектах: MS Windows, SQL Server, DirectX, Edge и Office, KDE, Qt, MySQL, Opera, Adobe Photoshop, Facebook, Google Chrome, Blender, Inkscape, LibreOffice, Firefox, VLC, 7-ZIP, Stellarium и очень многих других (с большой долей вероятности, во всех крупных и значимых проектах).
C++ продолжает развиваться, чтобы отвечать современным требованиям. Одна из групп, разрабатывающих язык C++ и направляющих комитету по стандартизации C++ предложения по его улучшению — это Boost, которая занимается, в том числе, совершенствованием возможностей языка путём добавления в него особенностей метапрограммирования.
Никто не обладает правами на язык C++, он является свободным.

История языка и выхода стандартов

  • 1983
  • создатель языка — Бьёрн Страуструп, сотрудник Bell Labs, представил раннюю версию языка C++ («Си с классами»)

  • 1985
  • первый коммерческий выпуск C++, язык приобретает современное название

  • 1986
  • выпуск первого издания The C++ Programming Language — книги, посвящённой C++, которую написал Бьёрн Страуструп

  • 1998
  • ратифицирован международный стандарт языка C++: ISO/IEC 14882:1998 «Standard for the C++ Programming Language»

  • 2003
  • опубликован стандарт языка ISO/IEC 14882:2003, где были исправлены выявленные ошибки и недочёты предыдущей версии стандарта

  • 2005
  • выпущен отчёт Library Technical Report 1 (TR1). Не являясь официально частью стандарта, отчёт описывал расширения стандартной библиотеки, которые должны быть включены в следующую версию языка C++

  • 2011
  • выход нового стандарта — C++11 или ISO/IEC 14882:2011; новый стандарт включил дополнения в ядре языка и расширение стандартной библиотеки, в том числе большую часть TR1

  • 2014
  • выход стандарта C++14 («International Standard ISO/IEC 14882:2014(E) Programming Language C++»); C++14 можно рассматривать как небольшое расширение над C++11, содержащее в основном исправления ошибок и небольшие улучшения

  • 2017
  • предположительное время появления нового стандарта, работа над которым сейчас активно ведется. Имя нового стандарта — C++1z. Стали известны основные нововведения в будущем стандарте, но этот список, вероятно, будет многократно увеличен ко времени выхода.

Bjarne Stroustrup - создатель языка C++

Bjarne Stroustrup — создатель языка C++

Философия С++

В книге «Дизайн и эволюция C++» (2007) Бьёрн Страуструп описывает принципы, которых он придерживался при проектировании C++ (приводятся в сокращении):

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

C и C++

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

#include <stdio.h>

int main()
{
    printf("%s\n", (sizeof('a') == sizeof(char)) ? "C++" : "C");
    return 0;
}

Связано это с тем, что символьные константы в C имеют тип int, а в C++ — тип char, но размеры этих типов различаются.

Стандартная библиотека (STD)

В языке программирования C++ термин Стандартная Библиотека означает коллекцию классов и функций, написанных на базовом языке. Стандартная библиотека С++ включает в себя часть стандартной библиотеки C. Стандарт C++ содержит нормативную ссылку на стандарт C90 и не определяет самостоятельно те функции стандартной библиотеки, которые заимствуются из стандартной библиотеки C. Стандарт C++11 значительно расширил эту часть STD, добавив некоторые функции, которые вошли в стандарт C99.
Доступ к возможностям стандартной библиотеки C++ обеспечивается с помощью включения в программу (посредством директивы #include) соответствующих стандартных заголовочных файлов. Всего в стандарте C++11 определено 79 таких файлов.
Средства стандартной библиотеки объявляются как входящие в пространство имён std.
Контейнеры, строки, алгоритмы, итераторы и основные утилиты, за исключением заимствований из библиотеки C, собирательно называются STL (Standard Template Library — стандартная шаблонная библиотека). STL до включения в стандарт C++ была сторонней разработкой, в начале — фирмы HP, а затем SGI. Стандарт языка не называет её STL, так как эта библиотека стала неотъемлемой частью языка (и, следовательно, стандартной библиотеки), однако многие люди до сих пор используют это название, чтобы отличать её от остальной части STD. В названии отражено то, что для реализации средств общего вида (контейнеров, строк, алгоритмов) использованы механизмы обобщённого программирования (шаблоны C++ — template).

Независимые библиотеки для C++

  • Boost — собрание библиотек классов, использующих функциональность языка C++ и предоставляющих удобный, кроссплатформенный, высокоуровневый интерфейс для лаконичного кодирования различных повседневных подзадач программирования (работа с данными, алгоритмами, файлами, потоками и т.п.). Свободно распространяются по лицензии Boost Software License вместе с исходным кодом. Сайт
  • GMP или GNU Multi-Precision Library — библиотека, написанная на языке Си, предназначенная для вычислений с плавающей запятой, целыми и рациональными числами с произвольной точностью. Библиотека широко используется в криптографических целях и для компьютерных вычислений. Данная библиотека необходима для сборки GCC. Сайт
  • Qt — кроссплатформенный фреймворк, содержащий элементы пользовательского интерфейса (виджеты), шаблоны контейнеров, средства работы с мультимедиа. В отличие от других библиотек, Qt использует Meta Object Compiler (MOC) — предварительной системы обработки исходного кода (Qt — это библиотека не для чистого C++, а для его особого наречия, с которого и «переводит» MOC для последующей компиляции любым стандартным C++ компилятором). Сайт
  • wxWidgets — это кроссплатформенная библиотека инструментов с открытым исходным кодом для разработки кроссплатформенных (на уровне исходного кода) приложений. Основным применением wxWidgets является построение графического интерфейса пользователя (GUI), однако библиотека включает большое количество других функций и используется для создания весьма разнообразного ПО. Сайт

GNU Compiler Collection

GNU Compiler Collection (GCC) — набор компиляторов для различных языков программирования, разработанный в рамках проекта GNU. GCC является свободным программным обеспечением, распространяется фондом свободного программного обеспечения (FSF) на условиях GNU GPL. Он используется как стандартный компилятор для свободных UNIX-подобных операционных систем.
Изначально названный GNU C Compiler поддерживал только язык Си. Позднее GCC был расширен для компиляции исходных кодов на таких языках программирования, как C++, Objective-C, Java, Фортран и Ada.
В дистрибутивах Linux компилятор GCC доступен в репозиториях пакетов. Сборку GCC для Windows можно получить на сайте MinGW. Подробнее об установке MinGW в Windows (с IDE Eclipse) можно прочитать в методичке. Кроме того, можно установить версию IDE Code::Blocks, которая поставляется вместе с MinGW или тулкит Qt, также поставляющийся с этим компилятором.

Разговор с Бьерном Страуструпом


Онлайн-конференция разработчиков, использующих Embarcadero C++Builder. Беседу с Бьерном Страуструпом, легендарным создателем языка C++, провёл Дейвид Интерсимоне, вице-президент Embarcadero по связям с разработчиками. (Дублированный перевод).

Презентация к уроку

lesson-1(cpp)

Темы сообщений
  • Фонд свободного программного обеспечения (FSF)
  • Свободные лицензии ПО
  • FreeSoftware и Open Source
  • История развития языков программирования
  • История возникновения языка C. C и C++
  • История Linux
  • Критика C++
  • История UNIX
Литература
  1. Возвращение к C++ (современный C++)
  2. The Programming Languages Beacon v13 — December 2013
  3. https://ru.wikipedia.org/wiki/C++
  4. https://ru.wikipedia.org/wiki/GNU_Compiler_Collection
  5. C++ для начинающих
  6. Bjarne Stroustrup’s homepage
  7. C++. Бархатный путь
  8. https://ru.wikipedia.org/wiki/Стандартная_библиотека_языка_C++


Добавить комментарий