nsg Опубликовано 26 февраля, 2010 Жалоба Поделиться Опубликовано 26 февраля, 2010 История языка С++,будущее развитие,отличия С++ от С Ссылка на комментарий Поделиться на другие сайты Поделиться
nsg Опубликовано 26 февраля, 2010 Автор Жалоба Поделиться Опубликовано 26 февраля, 2010 История языка С++ Бьерн Страуструп начал работать над «Си с классами» в 1979 году. Идея создания нового языка берёт начало от опыта программирования Страуструпа для диссертации. Он обнаружил, что язык моделирования Симула, имеет такие возможности, которые были бы очень полезны для разработки большого программного обеспечения, но работает слишком медленно. В то же время язык BCPL достаточно быстр, но слишком близок к языкам низкого уровня и не подходит для разработки большого программного обеспечения. Страуструп начал работать в «Bell Labs» над задачами теории очередей (в приложении к моделированию телефонных вызовов). Попытки применения существующих в то время языков моделирования оказались неэффективными. Вспоминая опыт своей диссертации, Страуструп решил дополнить язык Си (преемник BCPL) возможностями, имеющимися в языке Симула. Язык Си, будучи базовым языком системы UNIX, на которой работали компьютеры «Bell» является быстрым, многофункциональным и переносимым. Страуструп добавил к нему возможность работы с классами и объектами. В результате, практические задачи моделирования оказались доступными для решения как с точки зрения времени разработки (благодаря использованию Симула - подобных классов) так и с точки зрения времени вычислений (благодаря быстродействию Си). В начале в Си были добавлены классы (с инкапсуляцией), производные классы, строгая проверка типов, inline-функции и аргументы по умолчанию. Разрабатывая Си с классами (позднее Си++), Страуструп также написал программу Cfront, транслятор, перерабатывающий исходный код Си с классами в исходный код простого Си. Новый язык, неожиданно для автора, приобрел большую популярность среди коллег и вскоре Страуструп уже не мог лично поддерживать его, отвечая на тысячи вопросов. В 1983 г. произошло переименование языка из Си с классами в Си++ по соображениям маркетинга. Кроме того, в него были добавлены новые возможности, такие как виртуальные функции, перегрузка функций и операторов, ссылки, константы, пользовательский контроль над управлением свободной памятью, улучшенная проверка типов и новый стиль комментариев (//). Его первый коммерческий выпуск состоялся в октябре 1985 г.. В 1985 г. вышло первое издание «Языка программирования Си++», обеспечивающее первое описание этого языка, что было чрезвычайно важно из-за отсутствия официального стандарта. В 1989 г. состоялся выход Си++ версии 2.0. Его новые возможности включали множественное наследование, абстрактные классы, статические функции-члены, функции-константы и защищённые члены. В 1990 г. вышло «Комментированное справочное руководство по C++», положенное впоследствии в основу стандарта. Последние обновления включали шаблоны, исключения, пространства имён, новые способы приведения типов и булевский тип. Стандартная библиотека Си++ также развивалась вместе с ним. Первым добавлением к стандартной библиотеке Си++ стали потоки ввода/вывода, обеспечивающие средства для замены традиционных функций Си printf и scanf. Позднее самым значительным развитием стандартной библиотеки стало включение в неё Стандартной библиотеки шаблонов. После многих лет работы совместный комитет ANSI-ISO стандартизировал Си++ в 1998 г. (ISO/IEC 14882:1998). В течение нескольких лет после официального выхода стандарта комитет обрабатывал сообщения об ошибках и в итоге выпустил исправленную версию стандарта Си++ в 2003 году. Никто не обладает правами на язык Си++, он является свободным. Однако сам документ стандарта языка (за исключением черновиков) не доступен бесплатно. Ссылка на комментарий Поделиться на другие сайты Поделиться
nsg Опубликовано 26 февраля, 2010 Автор Жалоба Поделиться Опубликовано 26 февраля, 2010 Отличия С++ от С Язык Си++ во многом является надмножеством Си. Новые возможности Си++ включают объявления в виде выражений, преобразования типов в виде функций, операторы new и delete, тип bool, ссылки, расширенное понятие константности, подставляемые функции, аргументы по умолчанию, переопределения, пространства имён, классы (включая и все связанные с классами возможности, такие как наследование, функции-члены виртуальные функции, абстрактные классы и конструкторы), переопределения операторов, шаблоны, оператор ::, обработку исключений, динамическую идентификацию и многое другое. Язык Си++ также во многих случаях строже относится к проверке типов, чем Си. В Си++ появились комментарии в виде двойной косой черты («//»), которые были в предшественнике Си — языке BCPL. Некоторые особенности Си++ позднее были перенесены в Си, например ключевые слова const и inline, объявления в циклах for и комментарии в стиле Си++ («//»). В более поздних реализациях Си также были представлены возможности, которых нет в Си++, например макросы vararg и улучшенная работа с массивами-параметрами.Не объектно-ориентированные возможности В этом разделе описываются возможности, непосредственно не связанные с объектно-ориентированным программированием (ООП). Многие из них, однако, особенно важны в сочетании с ООП.Описатель inline означает, что функция является хорошим кандидатом на оптимизацию, при которой в местах обращения к функции компилятор вставит тело этой функции, а не код вызова. Пример: inline double Sqr(double x) {return x*x;} Вместо функций malloc и free (которые оставлены только для обратной совместимости), введены новые операции new и delete. Если T — произвольный тип, то new T выделяет память, достаточную для размещения одного объекта типа Т, возможно, инициализирует объект в этой памяти, и возвращает указатель типа Т*. new T[n] выделяет память, достаточную для размещения n объектов типа Т, возможно, инициализирует каждый объект в этой памяти, и возвращает указатель типа Т*. delete p — разрушает объект, на который ссылается указатель p, и освобождает область памяти, выделенную для него ранее операцией new T. delete [] p — разрушает каждый объект в массиве, на который ссылается указатель p, и освобождает область памяти, выделенную для этого массива ранее операцией new T[n]. Операция delete проверяет, что её аргумент не NULL, в противном случае она ничего не делает. Операции new и delete вызывают конструкторы и деструкторы (см. ниже).Функции могут принимать аргументы по ссылке. Например, функция void f(int& x) {x=3;} присваивает своему аргументу значение 3. Функции также могут возвращать результат по ссылке, и ссылки могут быть вне всякой связи с функциями. Например, {double&b=a[3]; b=sin(b);} эквивалентно a[3]=sin(a[3]);. Ссылки в определённой степени сходны с указателями, со следующими особенностями: при описании ссылки инициализируются указанием на существующее значение данного типа; ссылка пожизненно указывает на один и тот же адрес; при обращении к ссылке операция * производится автоматически. Могут быть несколько функций с одним и тем же именем, но разными типами или количеством аргументов (перегрузка функций; при этом тип возвращаемого значения на перегрузку не влияет). Например, вполне можно писать: void Print(int x);void Print(double x);void Print(int x, int y);Один или несколько последних аргументов функции могут задаваться по умолчанию. К примеру, если функция описана как void f(int x, int y=5, int z=10) , вызовы f(1), f(1,5) и f(1,5,10) эквивалентны. При описании функций отсутствие аргументов в скобках означает, в отличие от Си, что аргументов нет, а не то, что они неизвестны. Если аргументы неизвестны, надо пользоваться многоточием, например int printf(const char* fmt, ...) Тип первого аргумента должен быть задан. Можно описывать операции над новыми типами. К примеру, так: struct Date {int day, month, year;};void operator ++(struct Date& date); Операции ничем не отличаются от (других) функций. Нельзя описывать операции над предопределёнными типами (скажем, переопределять умножение чисел); нельзя выдумывать новые операции, которых нет в Си++ (скажем, ** ); арность (количество параметров) и приоритет операций сохраняется (скажем, в выражении a+b*c сначала будет выполняться умножение, а потом сложение, к каким бы типам ни принадлежали a, b и c.) Можно переопределить операции [] (с одним параметром) и () (с любым числом параметров).Добавлены пространства имён namespace. Например, если написать namespace Foo { const int x=5; typedef int** T; void f(y) {return y*x}; double g(T); ...} то вне фигурных скобок мы должны обращаться к T,x,f,g как Foo::T, Foo::x, Foo::f, Foo::g. Если мы в каком-то файле хотим обращаться к ним непосредственно, мы можем написатьusing namespace Foo; Или жеusing Foo::T; Пространства имён нужны, чтобы не возникало коллизий между пакетами, имеющими совпадающие имена глобальных переменных, функций и типов. Специальным случаем является безымянное пространство имёнnamespace { ...} Все имена, описанные в нём, доступны в текущем файле и больше нигде, как если бы мы к каждому описанию приписали static.Добавлен новый тип bool , имеющий значения true и false . Операции сравнения возвращают тип bool . Выражения в скобках после if , while приводятся к типу bool . // означает, что вся оставшаяся часть строки является комментарием. Добавлены шаблоны (template). Например, template<class T> T Min(T x, T y) {return x<y?x:y;} определяет функцию Min для любых типов. Шаблоны могут задавать не только функции, но и типы. Например, template<class T> struct Array{int len; T* val;}; определяет массив значений любого типа, после чего мы можем писать Array<float> x; Введена стандартная библиотека шаблонов (STL, Standard Template Library), определяющая шаблоны и функции для векторов (одномерных массивов произвольной длины), множеств, ассоциативных массивов (map), списков, символьных строк, потоков ввода-вывода и другие шаблоны и функции. Если описана структура, класс (о классах см. ниже), объединение (union) или перечисление (enum), её имя является именем типа, например: struct Time{int hh,mm,ss;};Time t1, t2;Внутри структуры или класса можно описывать новые типы, как через typedef, так и через описание других структур или классов. Для доступа к таким типам вне структуры или класса, к имени типа добавляется имя структуры и два двоеточия: struct S {typedef int** T; T x;}; S::T y; Ссылка на комментарий Поделиться на другие сайты Поделиться
nsg Опубликовано 26 февраля, 2010 Автор Жалоба Поделиться Опубликовано 26 февраля, 2010 Будущее развитие Си++ продолжает развиваться, чтобы отвечать современным требованиям. Одна из групп, занимающихся языком Си++ в его современном виде и направляющих комитету по стандартизации Си++ советы по его улучшению — это Boost. Например, одно из направлений деятельности этой группы — совершенствование возможностей языка путём добавления в него особенностей метапрограммирования. Стандарт Си++ не описывает способы именования объектов, некоторые детали обработки исключений и другие возможности, связанные с деталями реализации, что делает несовместимым объектный код, созданный различными компиляторами. Однако для этого третьими лицами создано множество стандартов для конкретных архитектур и операционных систем. Тем не менее (по состоянию на время написания этой статьи) среди компиляторов Си++ всё ещё продолжается битва за полную реализацию стандарта Си++, особенно в области шаблонов — части языка, совсем недавно полностью разработанной комитетом стандартизации. Одной из точек преткновения в этом вопросе является ключевое слово export, используемое также и для разделения объявления и определения шаблонов. Первым компилятором, поддерживающим export в шаблонах, стал Comeau C++ в начале 2003 года (спустя пять лет после выхода стандарта). В 2004 году бета-версия компилятора Borland C++ Builder X также начала его поддержку. Оба этих компилятора основаны на внешнем интерфейсе EDG. Другие компиляторы, такие как Microsoft Visual C++ или GCC, вообще этого не поддерживают. Эрб Саттер (Herb Sutter), секретарь комитета по стандартизации Си++, рекомендовал убрать export из будущих версий стандарта по причине серьёзных сложностей в полноценной реализации, однако впоследствии окончательным решением было решено его оставить. Из списка других проблем, связанных с шаблонами, можно привести вопросы конструкций частичной специализации шаблонов, которые плохо поддерживались в течение многих лет после выхода стандарта Си++. Ссылка на комментарий Поделиться на другие сайты Поделиться
fdsa Опубликовано 14 января, 2011 Жалоба Поделиться Опубликовано 14 января, 2011 Довольно интересная ветка, мне было весьма интересно прочитать материал. Приходится часто работать с данным языком (и др. С-подобными), но в такие подробности я, если честно не вдавался ранее!!!! Ссылка на комментарий Поделиться на другие сайты Поделиться
poik Опубликовано 15 января, 2011 Жалоба Поделиться Опубликовано 15 января, 2011 История языка С, лично для меня тоже тема довольно-таки интересная. Интересно было узнать факты, о которых я ранее както не слышал, и даже не задумывался!!!! Ссылка на комментарий Поделиться на другие сайты Поделиться
black_panther Опубликовано 23 февраля, 2016 Жалоба Поделиться Опубликовано 23 февраля, 2016 во многих странах с вводят в курс школьной программы, но язык один из сложнейших Ссылка на комментарий Поделиться на другие сайты Поделиться
dyadyaSasha Опубликовано 29 августа, 2023 Жалоба Поделиться Опубликовано 29 августа, 2023 Язык программирования C++ имеет богатую историю и остается одним из наиболее важных и широко используемых языков в мире разработки программного обеспечения. Вот несколько перспектив развития C++:1. Поддержка новых стандартов:C++ постоянно развивается, и новые версии стандарта добавляют в него новые функциональности и улучшения. С++11, C++14, C++17, C++20 и будущие стандарты улучшают язык, упрощают разработку и делают его более безопасным.2. Применение в высокопроизводительных приложениях:C++ остается популярным выбором для разработки высокопроизводительных приложений, таких как игры, системное программное обеспечение, встроенное программирование и научные вычисления.3. Развитие в сфере искусственного интеллекта и машинного обучения:C++ используется в разработке многих библиотек и фреймворков для машинного обучения и искусственного интеллекта. Это связано с высокой производительностью и возможностью оптимизации кода.4. Системное программное обеспечение и операционные системы:C++ остается важным инструментом для разработки операционных систем, драйверов устройств и другого системного программного обеспечения.5. Разработка встроенных систем:C++ применяется в разработке встроенных систем, таких как микроконтроллеры, автомобильная электроника и устройства IoT (интернет вещей).6. Игровая индустрия:В игровой индустрии C++ остается одним из основных языков программирования. Многие игровые движки и игры разрабатываются на C++.7. Многозадачность и параллельное программирование:C++ обеспечивает возможности для многозадачности и параллельного программирования, что важно для современных многопоточных приложений.8. Сетевое и веб-программирование:C++ используется в сетевом и веб-программировании для создания серверных приложений и бэкенд-сервисов.9. Блокчейн и криптовалюты:В разработке блокчейн-приложений и криптовалют C++ играет важную роль благодаря высокой производительности и надежности.10. Автоматизация и робототехника: - C++ используется в разработке программного обеспечения для автоматизации и управления роботами и автономными системами.Перспективы развития C++ связаны с его гибкостью, производительностью и широким спектром применений. Он продолжит оставаться востребованным в будущем, и разработчики, владеющие этим языком, будут иметь множество возможностей для работы в различных областях. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения