Файл: Разработать справочную систему по стандартным функциям выбранного языка программирования ( С++).pdf
Добавлен: 01.04.2023
Просмотров: 187
Скачиваний: 3
C++ — компилируемый, статически типизированный язык программирования общего назначения.
Поддерживает такие парадигмы программирования, как процедурное программирование, объектно-ориентированное программирование, обобщённое программирование. Язык имеет богатую стандартную библиотеку, которая включает в себя распространённые контейнеры и алгоритмы, ввод-вывод, регулярные выражения, поддержку многопоточности и другие возможности. C++ сочетает свойства как высокоуровневых, так и низкоуровневых языков. В сравнении с его предшественником — языком C, — наибольшее внимание уделено поддержке объектно-ориентированного и обобщённого программирования.
C++ широко используется для разработки программного обеспечения, являясь одним из самых популярных языков программирования. Область его применения включает создание операционных систем, разнообразных прикладных программ, драйверов устройств, приложений для встраиваемых систем, высокопроизводительных серверов, а также игр.
Синтаксис C++ унаследован от языка C. Одним из принципов разработки было сохранение совместимости с C. Тем не менее, C++ не является в строгом смысле надмножеством C; множество программ, которые могут одинаково успешно транслироваться как компиляторами C, так и компиляторами C++, довольно велико, но не включает все возможные программы на C.
Изначально, Microsoft собиралась выпустить свою версию языка Java (Microsoft Java или J++), однако им пришлось судиться с правообладателями (Sun Microsystems) из-за некоторых спорных моментов. Поэтому руководство приняло решение о необходимости создания собственного языка, который бы отвечал их требованиям и развитие которого они могли бы контролировать. Так и появился С#.
С# был разработан благодаря усилиям Андерса Хейлсберга - создателя компилятора, который лег в основу Turbo Pascal и языка программирования Delphi. Первая версия языка увидел свет в июне 2000 года (возможно, что майкрософт хотела отметить так новое тысячелетие), а окончательная версия вышла в 2002 году вместе с Visual Studio. Сейчас C# стало одним из самых популярных языков программирования, начавшим даже немного опережать своего предшественника.
Плюсы
- поддержка майкрософтом. В отличии от Java, которой не пошел на пользу переход в собственность Oracle, C# хорошо развивается благодаря усилиям Microsoft;
- в последнее время много совершенствуется. Так как C# был создан позже, чем Java и другие языки, то требовалось очень много доработать. Также это касается популяризации и бесплатности - было обещано открыть исходный код, а инструменты (Visual Studio, Xamarin) стали бесплатными для частных лиц и небольших компаний;
- много синтаксического сахара. Синтаксический сахар - это такие конструкции, которые созданы для облегчения написания и понимания кода (особенно если это код другого программиста) и не играют роли при компиляции;
- средний порог вхождения. Синтаксис похожий на C, С++ или Java облегчает переход для других программистов. Для новичков это также один из самых перспективных языков для изучения;
- Xamarin. Благодаря покупке Xamarin на C# теперь можно писать под Android и iOS. Это, несомненно, большой плюс, так как их собственная мобильная ОС (Windows Phone) не завоевала большой популярности;
- добавлено функциональное программирование (F#);
- большое сообщество программистов;
- много вакансий на должность C# программиста в любом регионе.
Минусы
- ориентированность, в основном, только на .NET (на Windows платформу);
- бесплатность только для небольших компании, учащихся и программистов-одиночек. Для больших команд покупка лицензий обойдется недешево. Поэтому если у вас есть своя фирма, то придется раскошелиться;
- сохранили оператор go to.
Их перечисленных языков программирования наиболее изучен и более знаком язык C++ что позволит из множества доступной информации отсеять наиболее важную, предоставить достоверные справочные данные с приведение подробных примеров.
Существует множество реализаций языка C++, как бесплатных, так и коммерческих и для различных платформ. Например, на платформе x86 это GCC, Visual C++, Intel C++ Compiler, Embarcadero (Borland) C++ Builder и другие. C++ оказал огромное влияние на другие языки программирования, в первую очередь на Java и C#.
Язык возник в начале 1980-х годов, когда сотрудник фирмы Bell Labs Бьёрн Страуструп придумал ряд усовершенствований к языку C под собственные нужды. Когда в конце 1970-х годов Страуструп начал работать в Bell Labs над задачами теории очередей (в приложении к моделированию телефонных вызовов), он обнаружил, что попытки применения существующих в то время языков моделирования оказываются неэффективными, а применение высокоэффективных машинных языков слишком сложно из-за их ограниченной выразительности. Так, язык Симула имеет такие возможности, которые были бы очень полезны для разработки большого программного обеспечения, но работает слишком медленно, а язык BCPL достаточно быстр, но слишком близок к языкам низкого уровня и не подходит для разработки большого программного обеспечения.
Вспомнив опыт своей диссертации, Страуструп решил дополнить язык C (преемник BCPL) возможностями, имеющимися в языке Симула. Язык C, будучи базовым языком системы UNIX, на которой работали компьютеры Bell, является быстрым, многофункциональным и переносимым. Страуструп добавил к нему возможность работы с классами и объектами. В результате практические задачи моделирования оказались доступными для решения как с точки зрения времени разработки (благодаря использованию Симула-подобных классов), так и с точки зрения времени вычислений (благодаря быстродействию C). В первую очередь в C были добавлены классы (с инкапсуляцией), наследование классов, строгая проверка типов, inline-функции и аргументы по умолчанию. Ранние версии языка, первоначально именовавшегося «C with classes» («Си с классами»), стали доступны с 1980 года.
Разрабатывая C с классами, Страуструп написал программу cfront[en] — транслятор, перерабатывающий исходный код C с классами в исходный код простого C. Это позволило работать над новым языком и использовать его на практике, применяя уже имеющуюся в UNIX инфраструктуру для разработки на C. Новый язык, неожиданно для автора, приобрёл большую популярность среди коллег и вскоре Страуструп уже не мог лично поддерживать его, отвечая на тысячи вопросов.
При создании C++ Бьёрн Страуструп хотел
- получить универсальный язык со статическими типами данных, эффективностью и переносимостью языка C;
- непосредственно и всесторонне поддерживать множество стилей программирования, в том числе процедурное программирование, абстракцию данных, объектно-ориентированное программирование и обобщённое программирование;
- дать программисту свободу выбора, даже если это даст ему возможность выбирать неправильно;
- максимально сохранить совместимость с C, тем самым делая возможным лёгкий переход от программирования на C;
- избежать разночтений между C и C++: любая конструкция, допустимая в обоих языках, должна в каждом из них обозначать одно и то же и приводить к одному и тому же поведению программы;
- избегать особенностей, которые зависят от платформы или не являются универсальными;
- «не платить за то, что не используется» — никакое языковое средство не должно приводить к снижению производительности программ, не использующих его;
- не требовать слишком усложнённой среды программирования.
Выбор именно C в качестве базы для создания нового языка программирования объясняется тем, что язык C:
- является многоцелевым, лаконичным и относительно низкоуровневым языком;
- подходит для решения большинства системных задач;
- исполняется везде и на всём;
- стыкуется со средой программирования UNIX.
Несмотря на ряд известных недостатков языка C, Страуструп пошёл на его использование в качестве основы, так как «в C есть свои проблемы, но их имел бы и разработанный с нуля язык, а проблемы C нам известны». Кроме того, это позволило быстро получить прототип компилятора (cfront), который лишь выполнял трансляцию добавленных синтаксических элементов в оригинальный язык C.
По мере разработки C++ в него были включены другие средства, которые перекрывали возможности конструкций C, в связи с чем неоднократно поднимался вопрос об отказе от совместимости языков путём удаления устаревших конструкций. Тем не менее, совместимость была сохранена из следующих соображений:
- сохранение действующего кода, написанного изначально на C и прямо перенесённого в C++;
- исключение необходимости переучивания программистов, ранее изучавших C (им требуется только изучить новые средства C++);
- исключение путаницы между языками при их совместном использовании («если два языка используются совместно, их различия должны быть или минимальными, или настолько большими, чтобы языки было невозможно перепутать»).
К 1983 году в язык были добавлены новые возможности, такие как виртуальные функции, перегрузка функций и операторов, ссылки, константы, пользовательский контроль над управлением свободной памятью, улучшенная проверка типов и новый стиль комментариев (//). Получившийся язык уже перестал быть просто дополненной версией классического C и был переименован из C с классами в «C++». Его первый коммерческий выпуск состоялся в октябре 1985 года.
Имя языка, получившееся в итоге, происходит от оператора унарного постфиксного инкремента C ++ (увеличение значения переменной на единицу).
До начала официальной стандартизации язык развивался в основном силами Страуструпа в ответ на запросы программистского сообщества. Функцию стандартных описаний языка выполняли написанные Страуструпом печатные работы по C++ (описание языка, справочное руководство и так далее).
В 1985 году вышло первое издание «Языка программирования C++», обеспечивающее первое описание этого языка, что было чрезвычайно важно из-за отсутствия официального стандарта.
В 1989 году состоялся выход C++ версии 2.0. Его новые возможности включали множественное наследование, абстрактные классы, статические функции-члены, функции-константы и защищённые члены. В 1990 году вышло «Комментированное справочное руководство по C++», положенное впоследствии в основу стандарта. Последние обновления включали шаблоны, исключения, пространства имён, новые способы приведения типов и булевский тип.
Стандартная библиотека C++ также развивалась вместе с ним. Первым добавлением к стандартной библиотеке C++ стали потоки ввода-вывода, обеспечивающие средства для замены традиционных функций C printf и scanf. Позднее самым значительным развитием стандартной библиотеки стало включение в неё Стандартной библиотеки шаблонов.
В 1998 году был опубликован стандарт языка ISO/IEC 14882:1998 (известный как C++98), разработанный комитетом по стандартизации C++ (ISO/IEC JTC1/SC22/WG21 working group). Стандарт C++ не описывает способы именования объектов, некоторые детали обработки исключений и другие возможности, связанные с деталями реализации, что делает несовместимым объектный код, созданный различными компиляторами. Однако для этого третьими лицами создано множество стандартов для конкретных архитектур и операционных систем.
В 2003 году был опубликован стандарт языка ISO/IEC 14882:2003, где были исправлены выявленные ошибки и недочёты предыдущей версии стандарта.
В 2005 году был выпущен отчёт Library Technical Report 1 (кратко называемый TR1). Не являясь официально частью стандарта, отчёт описывает расширения стандартной библиотеки, которые, как ожидалось авторами, должны быть включены в следующую версию языка C++. Степень поддержки TR1 улучшается почти во всех поддерживаемых компиляторах языка C++.
С 2009 года велась работа по обновлению предыдущего стандарта, предварительной версией нового стандарта сперва был C++09, а спустя год C++0x, сегодня — C++11, куда были включены дополнения в ядро языка и расширение стандартной библиотеки, в том числе большую часть TR1.
В связи с выше перечисленного свой выбор остановим на языке программирования C++ версии 11. Подвергнутый стандартизации 2009 года в ядро языка внесли дополнения и расширили стандартную библиотеку.
В стандарте 2009 года произошли изменения в ядре языка:
- Повышена производительность за счет добавления многопоточности, улучшения оптимизацию, добавили ссылки на временные объекты и семантику переноса, обобщили константные выражения, произвели изменения в определении простых данных;
- Ускорена компиляция, за счет изменения во внешних шаблонах;
- Повышение удобства использования за счет изменения в списках инициализации, изменения в универсальной инициализации, изменения в выводе типов, изменения в For-цикле по коллекции, изменения в Лямбде-функции и выражениях, изменения в альтернативном синтаксисе функции, улучшение конструктов объектов, изменения в спецификаторах default и delete, изменения в явном замещении виртуальных функций и финальности, изменения в константе нулевого указателя, изменения в перечислении со строгой типизацией, изменения в угловых скобках, изменения в операторах явного преобразования, изменения в шаблонном typedef, изменения в снятии ограничений с union, изменения в индентификаторах со специальным значением, расширения функциональности;
- Расширение функциональности за счет изменения в шаблонах с переменным числом аргументов, появились новые строки литералы, изменения в пользовательских литералах, изменения в многопоточной модели памяти, изменения в статистике диагностике, изменения в работе sizeof с элементами данных в классах без создания объекта, изменения в управлении выравниванием объектов и запросах на выравнивание и расширение реализации со сбором мусора;
- Изменения стандартной библиотеки C++ повлекли за собой изменения в имеющихся компонентах, написание удобного шаблона, вызывающий конструкторы без выделения памяти, добавлены новые языковые возможности C++11, добавлены методы cbegin и cend, гарантированно создающие константные итераторы, в контейнерах, которые заводят память с запасом, появилась функция shrink_to_fit, для std::list поставлены более жёсткие рамки на то, что выполняется за O(n), а что — за константное время, для std::vector добавился прямой доступ к памяти через data(), запретили нескольким std::string ссылаться на одну и ту же память, изменения в управлении потоками, изменения в Хеш-таблицах, изменения в Регулярных выражениях и изменения в расширяемых классах генерации случайных чисел.