Язык программирования c бьерн страуструп: Книга: «Язык программирования С++. Специальное издание» — Бьерн Страуструп. Купить книгу, читать рецензии | The C++ Programming Language. Special Edition | ISBN 978-5-9518-0425-9
Издана книга «Язык программирования С++. Краткий курс», Бьярне Страуструп, 2-е издание, (перевод Игоря Красикова), бумага офсетная-белая, твердый переплет, 320 стр., ISBN 978-5-907144-12-5, «ДИАЛЕКТИКА», 2019
В продаже книга «Язык программирования С++. Краткий курс», Бьярне Страуструп, 2-е издание, (перевод Игоря Красикова), бумага офсетная-белая, твердый переплет, 320 стр., ISBN 978-5-907144-12-5, «ДИАЛЕКТИКА», 2019 — заказать-купить книгу «Язык программирования С++. Краткий курс» в интернет-магазине ComBook.ru
В книге «Язык программирования С++. Краткий курс» Бьярне Страуструп, создатель языка C++, предоставляет для опытных программистов — всего за несколько часов чтения книги — ясное и точное представление о том, что собой представляет современный C++
В этом кратком, самодостаточном руководстве Страуструп охватывает большинство важных особенностей языка программирования C++ и основных компонентов стандартной библиотеки. В таком кратком объеме невозможно сделать обзор с полной глубиной изложения материала, однако уровень данной книги обеспечивает для программистов профессиональный обзор языка, включающий ряд ключевых примеров, и обеспечивает практическую помощь в его изучении
Страуструп представляет функциональные возможности C++ в контексте поддерживаемых ими стилей программирования, таких как объектно-ориентированное и обобщенное программирование. Его книга оказывается на удивление всеобъемлющей
Охватываемый материал книги «Язык программирования С++. Краткий курс» начинается с основ языка программирования C++, и постепенно переходит к таким сложным темам, как многие новые и уже устоявшиеся функциональные возможности C++17, включая семантику перемещения, однородную инициализацию, лямбда-выражения, усовершенствованные контейнеры, случайные числа и параллелизм. Сюда входят и некоторые расширения C++20, например, концепты и модули, а заканчивается книга обсуждением дизайна и эволюции C++
Книга «Язык программирования С++. Краткий курс» не ставит целью научить читателя программировать (для этого служит другая книга того же автора — «ПРОГРАММИРОВАНИЕ: принципы и практика использования C++» (2-е издание). Не является она и исчерпывающим учебником, который приведет вас на вершины мастерства C++ (здесь можно порекомендовать основную книгу Страуструпа «Язык программирования С++. Четвертое издание» (2013, которая так и не была издана на русском языке), и множество источников информации в Интернете)
Однако если вы являетесь программистом на C или C++, желающим получше познакомиться с текущим состоянием языка программирования C++, или программистом на другом языке программирования, желающем получить точную картину и преимущества современного C++, то более короткого и простого введения в C++, чем книга «Язык программирования С++. Краткий курс», Вам не найти
Оригинал книги: «A Tour of C++»(C++ In-Depth Series), 2nd Edition, Bjarne Stroustrup, 256 pages, ISBN 9780134997834, July 2018
(книгу можно заказать в Библио-Глобус)
(заказать-купить книгу «Язык программирования С++. Краткий курс» в интернет-магазине biblio-globus.ru)
(книгу можно заказать-купить в КОМБУКе — самая низкая цена в России)
(заказать-купить книгу «Язык программирования С++. Краткий курс» в интернет-магазине ComBook.ru)
(книгу можно заказать-купить в Ozon.ru)
(заказать-купить книгу «Язык программирования С++. Краткий курс» в онлайн-мегамаркете Ozon.ru)
(книгу можно заказать-купить в DiaMail Украина)
(заказать-купить книгу «Язык программирования С++. Краткий курс» в интернет-магазине diamail.com.ua)
На русском языке книга вышла в апреле 2019 года в издательстве «ДИАЛЕКТИКА» и издана ограниченным тиражом
_______________________________________________
ОГЛАВЛЕНИЕ книги «Язык программирования С++. Краткий курс» (2-е издание)
_______________________________________________
ПРЕДИСЛОВИЕ
ГЛАВА 1. Основы
ГЛАВА 2. Пользовательские типы
ГЛАВА 3. Модульность
ГЛАВА 4. Классы
ГЛАВА 5. Основные операции
ГЛАВА 6. Шаблоны
ГЛАВА 7. Концепты и обобщенное программирование
ГЛАВА 8. Обзор библиотеки
ГЛАВА 9. Строки и регулярные выражения
ГЛАВА 10. Ввод и вывод
ГЛАВА 11. Контейнеры
ГЛАВА 12. Алгоритмы
ГЛАВА 13. Утилиты
ГЛАВА 14. Числовые вычисления
ГЛАВА 15. Параллельные вычисления
ГЛАВА 16. История и совместимость
Предметный указатель
Бьярне Страуструп |
Бьярне Страуструп (на фото) спроектировал и первым реализовал в 1980-1983 годы язык программирования C++
Бьярне Страуструп является одним из первых идеологов объектно-ориентированной парадигмы программирования
Страуструп автор культовых книг «Язык программирования С++» (3-е издание) и «Дизайн и эволюция языка C++»
На фото: Бьярне Страуструп в Москве в октябре 2010 года на конференции CEE-SECR-2010-Moscow с русским изданием книги «ПРОГРАММИРОВАНИЕ: принципы и практика использования C++» (на фото: Бьярне Страуструп с первым изданием своей новой книги на русском языке)
В продаже книга «Компьютерные науки. Базовый курс», Гленн Брукшир, Деннис Брилов, 13-е издание, бумага офсетная, твердый переплет, 992 стр., ISBN 978-5-907144-63-7, «ДИАЛЕКТИКА», 2019 — заказать-купить книгу «Компьютерные науки. Базовый курс» в интернет-магазине ComBook.ru
Назначение книги «Компьютерные науки. Базовый курс» — предоставить читателю всестороннее представление о предмете компьютерных наук (Computer Science), охватывающее все его аспекты, от сугубо практических до полностью абстрактных
В 13-ом издании книги «Компьютерные науки. Базовый курс» Гленна Брукшира и Денниса Брилова учтён новый международный стандарт преподавания компьютерных наук CS2013 — Computer Science Curricula 2013 (ACM/IEEE-CS)
Такой подход к изучению базовых понятий открывает студентам любых, необязательно компьютерных дисциплин всю широту предмета и позволяет получить общее представление о тех возможностях, которые доступны им в современном технократическом обществе
Изложение материала вкниге «Компьютерные науки. Базовый курс» ведется от простого к сложному, от конкретных аспектов к абстрактным и каждая рассматриваемая тема непосредственно подводит к следующей. Тем не менее, отдельные главы и разделы книги достаточно независимы и вполне могут рассматриваться как самостоятельные единицы
Важные достоинства книги — наличие около 1000 заданий и упражнений (!), предназначенных для углубления и закрепления понимания основных излагаемых концепций, обсуждение этических и юридических аспектов рассматриваемых технологий, которые необходимо знать, чтобы использовать их безопасно и ответственно, а также подборки общественных и социальных вопросов, призывающих читателя задуматься о связях между излагаемым материалом и тем обществом, в котором они живут
Изюминкой 13-е издания книги «Компьютерные науки. Базовый курс» является переход к использованию языка Python для записи примеров кода и псевдокода, выдержанного в том же стиле
На официальном веб-сайте книги можно найти дополнительные материалы по данному курсу
ОБ АВТОРАХ
Дж. Гленн Брукшир Glenn Brookshear |
Дж. Гленн Брукшир, заслуженный профессор в отставке университета Маркетта (Marquette University), является автором всех предыдущих изданий книги «Компьютерные науки. Базовый курс»
Деннис Брилов, доцент отделения математики, статистики и компьютерных наук университета Маркетт с 2005 г., недавно получил высшую педагогическую награду университета — премию Teaching Excellence Award. Привлечен в качестве соавтора при подготовке 12- и 13-го изданий этой книги
_____________
Оригинал книги: «Computer Science: An Overview», Glenn Brookshear, Dennis Brylow, 13th Edition, 736 pages, ISBN 9780134875460, March 2018
ЗДЕСЬ — читайте ВВЕДЕНИЕ из книги «Компьютерные науки. Базовый курс»
ЗДЕСЬ — читайте полное СОДЕРЖАНИЕ книги «Компьютерные науки. Базовый курс»
ЗДЕСЬ — читайте 7 Главу «Технология разработки программного обеспечения» из книги Гленна Брукшира и Денниса Брилова «Компьютерные науки. Базовый курс»
(книгу можно заказать-купить в книжном магазине «Москва»)
(заказать-купить книгу «Компьютерные науки. Базовый курс» (13-е издание) в интернет-магазине www.moscowbooks.ru)
(книгу можно заказать-купить в «Московский Дом Книги» (МДК) на Арбате)
(заказать-купить книгу «Компьютерные науки. Базовый курс» (13-е издание) в интернет-магазине mdk-arbat.ru)
(книгу можно заказать-купить в Библио-Глобус)
(заказать-купить книгу «Компьютерные науки. Базовый курс» (13-е издание) в интернет-магазине biblio-globus.ru)
(книгу можно заказать-купить в КОМБУКе — самая низкая цена в России)
(заказать-купить книгу «Компьютерные науки. Базовый курс» (13-е издание) в интернет-магазине ComBook.ru)
(книгу можно заказать-купить в Ozon.ru)
(заказать-купить книгу «Компьютерные науки. Базовый курс» (13-е издание) в онлайн-мегамаркете Ozon.ru)
(книгу можно заказать-купить в DiaMail Украина)
(заказать-купить книгу «Компьютерные науки. Базовый курс» (13-е издание) в интернет-магазине diamail.com.ua)
(книгу можно заказать-купить в bizbook.ua Украина)
(заказать-купить книгу «Компьютерные науки. Базовый курс» (13-е издание) в интернет-магазине bizbook.ua)
Книга обсуждается в отдельном сообщении моего блога
ПРОГРАММИРОВАНИЕ принципы и практика использования C++ Бьярне Страуструп |
В продаже книга «ПРОГРАММИРОВАНИЕ: принципы и практика использования C++ (для C++11 и C++14)», Бьярне Страуструп, (перевод Игоря Красикова), 2-е издание, бумага офсетная-белая, твердый переплет, 1328 стр., ISBN 978-5-8459-1949-6, «ВИЛЬЯМС», 2016 — заказать-купить книгу Страуструпа «ПРОГРАММИРОВАНИЕ» в интернет-магазине ComBook.ru
Второе издание книги Страуструпа «ПРОГРАММИРОВАНИЕ: принципы и практика использования C++» представляет собой комплексное и обширное введение в программирование для людей, которые никогда не программировали до этого. Она также будет полезна и для тех, кто хочет улучшить свой стиль и технику программирования, или же узнать больше о современном состоянии языка C++ с учетом новых стандартов языка: C++11 и C++14
В книге излагается оригинальный авторский подход изобретателя языка программирования C++ к изложению основ программирования в целом — Страуструп возводит прочный фундамент системных знаний для написания полезного, корректного и эффективного кода на языке программирования C++
В книге «ПРОГРАММИРОВАНИЕ: принципы и практика использования C++» Страуструп представляет широкий взгляд (Provides a Broad View) на основные концепции, методы дизайна и программирования, особенности языка C++ и существующих для него библиотек; разъясняет основные понятия и методы программирования на C++ более глубоко и фундаментально, чем существующие описания языка C++ других авторов
В первую очередь, книга «ПРОГРАММИРОВАНИЕ: принципы и практика использования C++» адресована начинающим программистам и студентам компьютерных специальностей, которые найдут в ней много новой информации, и смогут узнать точку зрения создателя языка С++ на современные методы программирования
Оригинал книги: «Programming: Principles and Practice Using C++» by Bjarne Stroustrup, 2nd Edition, 1312 pages, ISBN 9780321992789, June 2014
Книга удостоена награды — Dr. Dobb’s Jolt Awards: The Best Books 2014
ЗДЕСЬ — читайте ОБ АВТОРЕ книги — Бьярне Страуструп
ЗДЕСЬ — читайте СОДЕРЖАНИЕ книги «ПРОГРАММИРОВАНИЕ» (2-е издание)
ЗДЕСЬ — читайте Главу 2 «Hello, World!» из книги «ПРОГРАММИРОВАНИЕ: принципы и практика использования C++» (2-е издание)
(книгу можно заказать в Библио-Глобус)
(заказать-купить книгу Страуструпа «ПРОГРАММИРОВАНИЕ» в интернет-магазине biblio-globus.ru)
(книгу можно заказать-купить в КОМБУКе — самая низкая цена в России)
(заказать-купить книгу Страуструпа «ПРОГРАММИРОВАНИЕ» в интернет-магазине ComBook.ru)
(книгу можно заказать-купить в Ozon.ru)
(заказать-купить книгу Страуструпа «ПРОГРАММИРОВАНИЕ» в онлайн-мегамаркете Ozon.ru)
(книгу можно заказать-купить в DiaMail Украина)
(заказать-купить книгу Бьярне Страуструпа «ПРОГРАММИРОВАНИЕ» в интернет-магазине diamail.com.ua)
Читайте отдельное сообщение в моем блоге об этой книге
Оптимизация программ на C++ Курт Гюнтерот |
В продаже книга «Оптимизация программ на C++. Проверенные методы для повышения производительности», Курт Гантерот, (перевод Игоря Красикова), бумага офсетная-белая, твердый переплет, 400 стр., ISBN 978-5-9908910-6-7, «ДИАЛЕКТИКА», 2017 — заказать-купить книгу «Оптимизация программ на C++» в интернет-магазине ozon.ru
В современном скоростном и конкурентном мире производительность программы для клиентов важна не менее ее функциональных возможностей. Книга «Оптимизация программ на C++» представляет собой практическое руководство, цель которого — обучить разработчиков основным принципам и методам повышения производительности программ, написанных на C++
Из книги Вы узнаете, как заставить код, уже являющийся воплощением наилучших принципов проектирования C++, работать еще быстрее и потреблять еще меньше ресурсов на любом компьютере, будь то часы, телефон, рабочая станция, суперкомпьютер или сеть серверов, охватывающая всю Землю
Автор книги — Курт Гантерот — приводит ряд “запущенных” программ, и на их примере демонстрирует применение описываемых в книге принципов для постепенного улучшения имеющегося кода, который в результате приобретает быстродействие и пропускную способность, удовлетворяющее самого требовательного заказчика
Книга «Оптимизация программ на C++» научит вас следующему:
• Обнаруживать узкие места производительности с помощью профилировщика и программных таймеров
• Выполнять эксперименты для измерения производительности кода при внесении в него изменений
• Оптимизировать использование динамически выделенных переменных
• Улучшать производительность циклов и функций
• Ускорять функции, работающие со строками
• Находить эффективные алгоритмы обработки и шаблоны оптимизации
• Понимать сильные и слабые стороны различных классов контейнеров C++
• Смотреть на сортировку и поиск “оптимизированным” взглядом
• Эффективно использовать функции потокового ввода-вывода C++
• Эффективно использовать возможности многопоточности в C++
Книга «Оптимизация программ на C++» является единственной в своем роде на сегодняшний день на книжном рынке. Лучшей рекламой приводимых в этой книге советов, и лучшей наградой за их изучение будет удивление вашего коллеги, который просто не поверит, что программа, над которой вы вместе трудились, в состоянии работать с такой скоростью!
Книгу «Оптимизация программ на C++» можно рассматривать как продолжение ранее изданной книги Скотта Мейерса «Эффективный и современный С++: 42 рекомендации по использованию C++11 и C++14»
Оригинал книги: «Optimized C++: Proven Techniques for Heightened Performance», Kurt Guntheroth, 388 pages, ISBN 9781491922064, May 2016
ЗДЕСЬ — читайте ПРЕДИСЛОВИЕ из книги «Оптимизация программ на C++»
ЗДЕСЬ — читайте полное СОДЕРЖАНИЕ книги «Оптимизация программ на C++»
ЗДЕСЬ — читайте раздел «Оптимизация, влияющая на поведение компьютера» из книги Курта Гантерота «Оптимизация программ на C++. Проверенные методы для повышения производительности»
(книгу можно заказать-купить в Библио-Глобус)
(заказать-купить книгу «Оптимизация программ на C++» в интернет-магазине biblio-globus.ru)
(книгу можно заказать-купить КОМБУКе — самая низкая цена в России)
(заказать-купить книгу «Оптимизация программ на C++» в интернет-магазине ComBook.ru)
(книга есть на складе в ОЗОНе)
(заказать-купить книгу «Оптимизация программ на C++» в интернет-магазине ozon.ru)
(книгу можно заказать-купить в DiaMail Украина)
(заказать-купить книгу «Оптимизация программ на C++» в интернет-магазине diamail.com.ua)
Книга обсуждается в отдельном сообщении моего блога
Эффективный и современный С++ Скотт Мейерс |
Издана уникальная книга «Эффективный и современный С++: 42 рекомендации по использованию C++11 и C++14», Скотт Мейерс, (перевод Игоря Красикова), бумага офсетная-белая, твердый переплет, 304 стр., ISBN 978-5-8459-2000-3, «ВИЛЬЯМС», 2016 — заказать-купить книгу Скотта Мейерса в интернет-магазине ComBook.ru (самая низкая цена в России!)
В книге «Эффективный и современный С++: 42 рекомендации по использованию C++11 и C++14» Скотт Мейерс предлагает 42 важных способа улучшения кода Ваших программ с учетом новых возможностей стандартов языка программирования C++: C++14 и C++11
Основываясь на своем многолетнем опыте, Скотт Мейерс объясняет, как писать наиболее эффективные программы: надежные, совместимые, переносимые и пригодные для повторного использования, то есть программы, безупречные во всех отношениях
В книге «Эффективный и современный С++: 42 рекомендации по использованию C++11 и C++14» описываются приемы, которые позволяют значительно повысить производительность программ, выбрав оптимальное соотношение затрат времени/памяти на различные операции
«Если вы переходите с C++98/03 на C++11/14, вам нужна точная практичная информация, которую вам предоставляет Скотт Мейерс в книге Эффективный и современный C++. Если вы уже пишете код на C++11, то, вероятно, сталкивались с проблемами при использовании новых возможностей, которые легко решаются с помощью книги Скотта. В любом случае можно уверенно утверждать, что время, затраченное на чтение этой книги, не пропадет впустую» — Роб Стюарт (Rob Stewart), член Boost Steering Committee (boost.org)
Оригинал книги: «Effective Modern C++: 42 Specific Ways to Improve Your Use of C++11 and C++14», Scott Meyers, 336 pages, ISBN 9781491903995, November 2014
ЗДЕСЬ — читайте ОБ АВТОРЕ книги — Скотт Мейерс
ЗДЕСЬ — читайте ВВЕДЕНИЕ из книги «Эффективный и современный С++»
ЗДЕСЬ — читайте СОДЕРЖАНИЕ книги «Эффективный и современный С++»
ЗДЕСЬ — читайте часть книги «Объявление auto» из книги «Эффективный и современный С++: 42 рекомендации по использованию C++11 и C++14»
(книгу можно заказать в Библио-Глобус)
(заказать-купить книгу «Эффективный и современный С++» в интернет-магазине biblio-globus.ru)
(книгу можно заказать в КОМБУКе — самая низкая цена в России!)
(заказать-купить книгу «Эффективный и современный С++» в интернет-магазине ComBook.ru)
(книгу можно заказать в Ozon.ru)
(заказать-купить книгу по «Эффективный и современный С++» в онлайн-мегамаркете Ozon.ru)
(книгу можно заказать в DiaMail Украина)
(заказать-купить книгу «Эффективный и современный С++» в интернет-магазине diamail.com.ua)
Читайте отдельное сообщение в моем блоге об этой книге
Шаблоны C++ : справочник разработчика Дэвид Вандевурд Николай М. Джосаттис Дуглас Грегор 2-е издание |
В продаже книга «Шаблоны C++: Справочник разработчика», Дэвид Вандевурд, Николай М. Джосаттис, Дуглас Грегор, 2-е издание (перевод Игоря Красикова), бумага офсетная-белая, твердый переплет, 848 стр., ISBN 978-5-9500296-8-4, «ДИАЛЕКТИКА», 2018 — заказать-купить книгу «Шаблоны C++: Справочник разработчика» в интернет-магазине ozon.ru
Наверняка вы знакомы с таким литературным приемом, как “роман в романе”. Но это встречается не только в литературе, но и в программировании. Шаблоны в C++ — это, по сути, целый язык в языке (к тому же язык Тьюринг-полный), который достоин отдельных книг, и не просто книг — а шедевров!
Одним из таких шедевров можно смело считать книгу, которую вы держите в руках. Несмотря на то, что в заглавии скромно указано — “второе издание”, это совершенно новая книга, отражающая тот факт, что за прошедшие со времени первого издания 15 лет (!) произошло очень много изменений, и в первую очередь это кардинальные изменения самого языка C++, который стал еще более мощным инструментом в руках программиста, позволяющим создавать существенно более производительные программы
Принятые со времени первого издания стандарты C++11, C++14 и C++17 не обошли стороной и шаблоны, сделав их еще более выразительным средством программирования, позволяющем создавать еще более эффективные (и эффектные с точки зрения эстетики программирования) программы. По сути, почти вся стандартная библиотека C++ построена на применении шаблонов
Авторы книги (которые, по сути, не нуждаются в представлении) — Дэвид Вандевурд, Николаи Джосаттис и Дуглас Грегор — не зря потратили столько лет на работу над книгой
Книга «Шаблоны C++: Справочник разработчика» описывает работу с шаблонами C++ от азов до самых “темных уголков”, в которые вряд ли придется заглядывать при повседневной работе даже самым искушенным программистам, которая будет одинаково полезна как программисту, желающему повысить свой начальный уровень умений и понимания шаблонов, так и профессиональному разработчику сложнейших шаблонных библиотек
Основы работы с шаблонами, шаблоны с параметрами, не являющимися типами, вариативные шаблоны, вопросы передачи аргументов в шаблоны, метапрограммирование, специализация и перегрузка, вывод аргументов, полиморфизм и наследование шаблонов, шаблоны выражений, и даже возможности работы с шаблонами, которые должны появявятся в следующем после C++17 стандарте языка — вряд ли найдется такая связанная с шаблонами тема, о которой можно было бы сказать, что она слабо освещена в этой книге
Книга «Шаблоны C++: Справочник разработчика» рекомендуется в первую очередь для профессиональных программистов в качестве справочного пособия, но она будет полезна программистам на C++ любого уровня — каждый найдет в ней важный и нужный материал для себя. Книга предполагает знание читателем языка программирования C++
Оригинал книги: «C++ Templates: The Complete Guide», David Vandevoorde, Nicolai M. Josuttis, Douglas Gregor, 2nd Edition, 832 pages, ISBN 9780321714121, 2018
ЗДЕСЬ — читайте ПРЕДИСЛОВИЕ из книги «Шаблоны C++: Справочник разработчика»
ЗДЕСЬ — читайте полное СОДЕРЖАНИЕ книги «Шаблоны C++: Справочник разработчика»
ЗДЕСЬ — читайте 21 Главу «Шаблоны и наследование» из книги Дэвида Вандевурда, Николаи Джосаттиса и Дугласа Грегора «Шаблоны C++: Справочник разработчика» (2-е издание)
(книгу можно заказать-купить в Библио-Глобус)
(заказать-купить книгу «Шаблоны C++: Справочник разработчика» в интернет-магазине biblio-globus.ru)
(книгу можно заказать-купить в КОМБУКе — самая низкая цена в России!)
(заказать-купить книгу «Шаблоны C++: Справочник разработчика» в интернет-магазине ComBook.ru)
(книгу можно заказать-купить в ОЗОНе)
(заказать-купить книгу «Шаблоны C++: Справочник разработчика» в интернет-магазине ozon.ru)
(книгу можно заказать-купить в DiaMail Украина)
(заказать-купить книгу «Шаблоны C++: Справочник разработчика» в интернет-магазине diamail.com.ua)
(книгу можно заказать-купить в bizbook.ua Украина)
(заказать-купить книгу «Шаблоны C++: Справочник разработчика» в интернет-магазине bizbook.ua)
Книга обсуждается в отдельном сообщении моего блога
Освой самостоятельно C++ по одному часу в день Сиддхартха Рао 8-е издание |
В продаже книга «Освой самостоятельно C++ по одному часу в день», Сиддхартха Рао, 8-е издание, бумага офсетная-белая, твердый переплет, 752 стр., ISBN 978-5-9909445-6-5, «ДИАЛЕКТИКА», 2018 — заказать-купить книгу по «Освой самостоятельно C++» (C++17) в онлайн-мегамаркете Ozon.ru
Книга «Освой самостоятельно C++ по одному часу в день» поможет изучить язык C++14 и C++17 маленькими шагами. Книга специально разделена на отдельные занятия, излагающие основные принципы этого языка объектно-ориентированного программирования с практической точки зрения
Книга начинается с самых основ языка C++. Необходимо лишь желание изучить этот язык и сообразительность, чтобы понять, как он работает. Уделив всего один час в день(!) Вы сможете приобрести квалификацию, достаточную для начала программирования на языке C++
В книге «Освой самостоятельно C++ по одному часу в день» содержится полный курс обучения программированию, который позволит быстро овладеть основами языка и перейти к более сложным понятиям и концепциям
Полностью переработанная под стандарты C++14 и C++17, книга «Освой самостоятельно C++ по одному часу в день» представляет язык с практической точки зрения, помогая узнать то, как использовать язык C++11 (C++14 и C++17) для создания более быстрых, простых и эффективных приложений на C++
В книге «Освой самостоятельно C++ по одному часу в день» представлены:
— Описание фундаментальных принципов языка C++ и объектно-ориентированного программирования
— Использование средств языка C++14 и C++17 при написании компактного и эффективного кода с помощью лямбда-выражений, конструкторов перемещения и операторов присваивания
— Полезные советы и рекомендации, позволяющие избежать проблем
— Изучение стандартной библиотеки шаблонов, включая контейнеры и алгоритмы, используемые в большинстве реальных приложений C++
— Проверка знаний и опыта с использованием упражнений в конце каждого занятия
— Предварительный опыт программирования не требуется
— Изучите C++14 и C++17, объектно-ориентированное программирование и анализ
— Пишите быстрые и мощные программы на C++, компилируйте исходный код и создавайте исполняемые файлы
— Используйте алгоритмы стандартной библиотеки шаблонов и контейнеры для написания многофункциональных и стабильных приложений на C++
— Разрабатывайте сложные методики программирования, используя лямбда-выражения, интеллектуальные указатели и конструкторы перемещения
— Научитесь наращивать мощность ваших программ с использованием наследования и полиморфизма
— Овладейте средствами C++ на опыте ведущих экспертов по программированию на языке C++
— Изучите возможности C++14 и C++17, позволяющие создавать компактные и высокопроизводительные приложения
Оригинал книги: «C++ in One Hour a Day, Sams Teach Yourself» by Siddhartha Rao, 8th Edition, 800 pages, ISBN 9780789757746, January 2017
(книгу можно заказать-купить в Библио-Глобус)
(заказать-купить книгу «Освой самостоятельно C++» (C++17) в интернет-магазине biblio-globus.ru)
(книгу можно заказать-купить КОМБУКе — самая низкая цена в России)
(заказать-купить книгу «Освой самостоятельно C++» (C++17) в интернет-магазине ComBook.ru)
(книгу можно заказать-купить в Ozon.ru)
(заказать-купить книгу по «Освой самостоятельно C++» (C++17) в онлайн-мегамаркете Ozon.ru)
(книгу можно заказать-купить в DiaMail Украина)
(заказать-купить книгу «Освой самостоятельно C++» (C++17) в интернет-магазине diamail.com.ua)
Книга обсуждается в отдельном сообщении моего блога
Структуры данных в C++ Краткий справочник Кен Браунси |
В продаже книга «Структуры данных в C++. Краткий справочник», Кен Браунси, бумага офсетная-белая, мягкий переплет, 304 стр., ISBN 978-5-907114-33-3, «ДИАЛЕКТИКА», 2019 — книгу можно заказать в КОМБУКе — самая низкая цена в России!)
(заказать-купить книгу «Структуры данных в C++. Краткий справочник» в интернет-магазине ComBook.ru
Автор предлагает читателю описание основных структур данных, таких как массивы, списки, последовательности и бинарные деревья, и показывает, как использовать их при построении других структур: стеков, очередей, итераторов, графов и т.д.
Много внимания в книге «Структуры данных в C++. Краткий справочник» уделено рекурсии. Читатель увидит, что благодаря применению рекурсии, сложные задачи, предполагающие обработку таких структур, как последовательности или бинарные деревья поиска, становятся предельно простыми
Автор также показывает, как от рекурсии можно непосредственно перейти к использованию циклов, повысив тем самым производительность программы. Материал, изложенный в книге, иллюстрируется многочисленными примерами
Книга «Структуры данных в C++. Краткий справочник» ориентирована как на студентов, специализирующихся на разработке программ, так и на профессиональных программистов, которые хотели бы повысить свою квалификацию
Оригинал книги: «The Essence of Data Structures Using C++ », Ken Brownsey
(книгу можно заказать в Библио-Глобус)
(заказать-купить книгу «Структуры данных в C++. Краткий справочник» в интернет-магазине biblio-globus.ru)
(книгу можно заказать в КОМБУКе — самая низкая цена в России!)
(заказать-купить книгу «Структуры данных в C++. Краткий справочник» в интернет-магазине ComBook.ru)
(книгу можно заказать в Ozon.ru)
(заказать-купить книгу по «Структуры данных в C++. Краткий справочник» в онлайн-мегамаркете Ozon.ru)
(книгу можно заказать-купить в DiaMail Украина)
(заказать-купить книгу «Структуры данных в C++. Краткий справочник» в интернет-магазине diamail.com.ua)
Читайте отдельное сообщение о книге в моем блоге
Алгоритмы Справочник с примерами на C, C++, Java и Python Джордж Т. Хайнеман Гэри Поллайс Стэнли Селков 2-е издание |
В продаже книга «Алгоритмы. Справочник с примерами на C, C++, Java и Python», Джордж Т. Хайнеман, Гэри Поллайс, Стэнли Селков, 2-е издание (перевод Игоря Красикова), бумага офсетная-белая, твердый переплет, 432 стр., ISBN 978-5-9908910-7-4, «ДИАЛЕКТИКА», 2017 — заказать-купить книгу «Алгоритмы. Справочник» в интернет-магазине ComBook.ru
Создание надежного программного обеспечения требует использования эффективных алгоритмов, но программисты редко думают об этом, пока не возникнет проблема
Это исправленное и дополненное второе издание книги «Алгоритмы. Справочник с примерами на C, C++, Java и Python» содержит множество кратких описаний существующих алгоритмов для решения разных задач и поможет читателям выбрать и реализовать правильный алгоритм для своих потребностей
Книга содержит достаточно математических подробностей, чтобы позволить читателям понять и проанализировать производительность алгоритмов
Делая акцент на приложениях, а не теории, книга «Алгоритмы. Справочник с примерами на C, C++, Java и Python» предоставляет эффективные решения для программирования на нескольких языках, которые можно легко адаптировать к определенному проекту
Все основные алгоритмы представлены в виде шаблонов проектирования, включающих информацию, которая помогает читателям сделать обоснованный выбор
С помощью книги «Алгоритмы. Справочник с примерами на C, C++, Java и Python» читатели смогут:
• Решить конкретную задачу или повысить производительность существующего решения
• Быстро найти алгоритмы, которые могут решить поставленную задачу и выяснить, почему они подходят для решения
• Получить алгоритмические решения на языках C, C++, Java и Python с советами, касающимися реализации
• Оценить ожидаемую производительность алгоритма и условия, при которых она достигает максимума
• Оценить влияние, которое подобные проектные решения оказывают на разные алгоритмы
• Изучите сложные структуры данных, позволяющие повысить эффективность алгоритмов
Оригинал книги: «Algorithms in a Nutshell. A Practical Guide», George Heineman, Gary Pollice, Stanley Selkow, 2nd Edition, 390 pages, ISBN 9781491948927, March 2016
(книгу можно заказать-купить в Библио-Глобус)
(заказать-купить книгу «Алгоритмы. Справочник с примерами на C, C++, Java и Python» в интернет-магазине biblio-globus.ru)
(книгу можно заказать-купить в КОМБУКе — самая низкая цена в России!)
(заказать-купить книгу «Алгоритмы. Справочник» в интернет-магазине ComBook.ru)
(книгу можно заказать-купить в Ozon.ru)
(заказать-купить книгу по «Алгоритмы. Справочник с примерами на C, C++, Java и Python» в онлайн-мегамаркете Ozon.ru)
(книгу можно заказать-купить в DiaMail Украина)
(заказать-купить книгу «Алгоритмы. Справочник» в интернет-магазине diamail.com.ua)
Читайте отдельное сообщение в моем блоге об этой книге
_________________________________________
РЕКОМЕНДУЮ ОБРАТИТЬ ВНИМАНИЕ на КНИГИ
_________________________________________
Искусство программирования Дональд Эрвин Кнут том 4А |
В продаже 4-й том Кнута — книга «Искусство программирования, том 4А. Комбинаторные алгоритмы, часть 1», Дональд Эрвин Кнут, бумага офсетная-белая, твердый переплет, 960 стр., ISBN 978-5-8459-1744-7, «ВИЛЬЯМС», 2013 — заказать-купить книгу в интернет-магазине Ozon.ru (в Украине — diamail.com.ua)
В 4-ом томе Дональда Кнута «Искусство программирования, том 4А. Комбинаторные алгоритмы, часть 1» рассматриваются методы, позволяющие компьютерам эффективно работать с задачами гигантского размера
Рассматриваемый материал начинается с булевых функций и технологий и трюков работы с битами, затем всесторонне рассматривается генерация всех кортежей и перестановок, всех сочетаний и разбиений, и всех деревьев
Комбинаторный поиск — богатая и важная тема, и Кнут приводит слишком много нового, интересного и полезного материала, чтобы его можно было разместить в одном или двух (а может быть, даже в трех) томах. Одна эта книга включает около 1500 упражнений с ответами для самостоятельной работы, а также сотни полезных фактов, которые вы не найдете ни в каких других публикациях
Том 4А книги «Искусство программирования, том 4А. Комбинаторные алгоритмы, часть 1» определенно должен занять свое место на полке рядом с первыми тремя томами этой классической работы в библиотеке каждого серьезного программиста
Оригинал книги: «The Art of Computer Programming, Volume 4A: Combinatorial Algorithms, Part 1», Donald E. Knuth, 912 pages, ISBN 978-0-201-03804-0, 2011
ЗДЕСЬ — читайте ПРЕДИСЛОВИЕ 4-го тома книги «Искусство программирования»
ЗДЕСЬ — читайте СОДЕРЖАНИЕ книги «Искусство программирования, том 4А. Комбинаторные алгоритмы, часть 1»
ЗДЕСЬ — читайте введение к 7-ой главе «КОМБИНАТОРНЫЙ ПОИСК» 4-го тома книги «Искусство программирования, том 4А. Комбинаторные алгоритмы, часть 1»
(книгу можно заказать-купить в Библио-Глобус)
(самая низкая цена в России!)
(книгу можно заказать-купить в ОЗОН)
(книгу можно заказать-купить в DiaMail Украина)
Читайте отдельное сообщение о 4-ом томе Дональда Кнута в моем блоге
Искусство программирования том 1 выпуск 1 RISC-компьютер MMIX Дональд Э. Кнут |
В продаже книга «Искусство программирования, том 1, выпуск 1. MMIX — RISC-компьютер для нового тысячелетия», Дональд Э. Кнут, бумага офсетная-белая, мягкий переплет, 160 стр., ISBN 978-5-8459-1163-6, «ДИАЛЕКТИКА», 2017 — заказать-купить книгу по «Искусство программирования, том 1, выпуск 1. MMIX» в онлайн-мегамаркете Ozon.ru
В данный выпуск многотомного издания Дональда Э. Кнута вошли разделы первого тома «Искусство программирования», посвященные RISC-компьютеру MMIX, который заменит прежний компьютер MIX, и языка ассемблера MMIX
Материалы этого выпуска в будущем войдут в новое издание первого тома серии «Искусство программирования», посвященный базовым алгоритмам — возможно, с определенными дополнениями и исправлениями на основе отзывов читателей данного выпуска
Оригинал книги: «The Art of Computer Programming, Volume 1, Fascicle 1: MMIX — A RISC Computer for the New Millennium», Donald E. Knuth, 144 pages, ISBN 9780201853926, 2005
ЗДЕСЬ — официальная веб-страница многотомного издания Дональда Э. Кнута «Искусство программирования»
(книгу можно заказать-купить в Библио-Глобус)
(заказать-купить книгу «Алгоритмы для чайников» в интернет-магазине biblio-globus.ru)
(книгу можно заказать-купить в КОМБУКе — самая низкая цена в России)
(заказать-купить книгу «Искусство программирования, том 1, выпуск 1. MMIX» в интернет-магазине ComBook.ru)
(книгу можно заказать-купить в Ozon.ru)
(заказать-купить книгу по «Искусство программирования, том 1, выпуск 1. MMIX» в онлайн-мегамаркете Ozon.ru)
(книга есть на складе в DiaMail Украина)
(заказать-купить книгу «Искусство программирования, том 1, выпуск 1. MMIXRISC-компьютер MMIX» в интернет-магазине diamail.com.ua)
Читайте отдельное сообщение в моем блоге о книге «Искусство программирования, том 1, выпуск 1. MMIX — RISC-компьютер для нового тысячелетия»
первый том Кнута |
В продаже первый том Дональда Кнута «Искусство программирования, том 1. Основные алгоритмы», 3—е издание, Дональд Эрвин Кнут, бумага офсетная-белая, твердый переплет, 720 стр., ISBN 978-5-8459-0080-7, «ВИЛЬЯМС», 2012 — купить книгу в ozon.ru (в Украине — diamail.com.ua)
(заказать-купить в Библио-Глобус)
(самая низкая цена в России!)
(книгу можно заказать-купить в ОЗОН)
(книгу можно заказать-купить в DiaMail Украина)
Оригинал книги: «The Art of Computer Programming, Volume 1. Fundamental Algorithms», 3-rd Edition, Donald E. Knuth, 784 pages, ISBN 0-201-89683-4, 1998
На русском языке книга вышла в издательстве «ВИЛЬЯМС» — книга регулярно допечатывается
второй том Кнута |
В продаже второй том Кнута: «Искусство программирования, том 2. Получисленные алгоритмы», 3—е издание, Дональд Эрвин Кнут, бумага офсетная-белая, твердый переплет, 832 стр., ISBN 978-5-8459-0081-4, «ВИЛЬЯМС», 2012 — купить книгу в Ozon.ru (в Украине — diamail.com.ua)
(заказать-купить в Библио-Глобус)
(самая низкая цена в России!)
(заказать-купить в ОЗОН)
(заказать-купить в DiaMail Украина)
Оригинал книги: «The Art of Computer Programming, Volume 2. Seminumerical Algorithms», 3-rd Edition, Donald E. Knuth, 784 pages, ISBN 0-201-89684-2, 1998
На русском языке книга вышла в издательстве «ВИЛЬЯМС» — книга регулярно допечатывается
третий том Кнута |
В продаже третий том книги Дональда Кнута «Искусство программирования, том 3. Сортировка и поиск», 2—е издание, Дональд Эрвин Кнут, бумага офсетная-белая, твердый переплет, 824 стр., ISBN 978-5-8459-0082-1, «ВИЛЬЯМС», 2012 — купить книгу в интернет-магазине Ozon.ru (в Украине — diamail.com.ua)
(заказать-купить в Библио-Глобус)
(самая низкая цена в России!)
(заказать-купить в ОЗОН)
(заказать-купить в DiaMail Украина)
Оригинал книги: «The Art of Computer Programming, Volume 3. Sorting and Searching», 2-nd Edition, Donald E. Knuth, 800 pages, ISBN 0-201-89685-0, 1998
На русском языке книга вышла в издательстве «ВИЛЬЯМС» — книга регулярно допечатывается
Искусственный интеллект для чайников Джон Пол Мюллер Лука Массарон |
В продаже книга «Искусственный интеллект для чайников», Джон Пол Мюллер, Лука Массарон, бумага офсетная-белая, мягкий переплет, 384 стр., ISBN 978-5-907114-57-9, «ДИАЛЕКТИКА», 2019 — заказать-купить книгу «Искусственный интеллект для чайников» в интернет-магазине ComBook.ru
Книга «Искусственный интеллект для чайников» Джона Пола Мюллера и Лука Массарона поможет вам понять, что такое искусственный интеллект, как он должен работать и почему он терпел неудачи в прошлом
Вы также узнаете о причинах некоторых из проблем с искусственным интеллектом, а также о том, что сегодня их почти невозможно решить в некоторых случаях
В отличие от множества книг по этой теме, данная книга говорит вам правду о том, где и как искусственный интеллект не может работать, она развеет все мифы об искусственном интеллекте
Каждый вынесет из книги «Искусственный интеллект для чайников» то, что люди всегда будут важны. Фактически, искусственный интеллект делает людей еще более важными, причем такими способами, которые вы даже не могли бы вообразить
Оригинал книги: «Artificial Intelligence For Dummies», John Paul Mueller, Luca Massaron, 336 pages, ISBN 9781119467656, April 2018
(книгу можно заказать-купить в Библио-Глобус)
(заказать-купить книгу «Искусственный интеллект для чайников» в интернет-магазине biblio-globus.ru)
(книгу можно заказать-купить в КОМБУКе — самая низкая цена в России)
(заказать-купить книгу «Искусственный интеллект для чайников» в интернет-магазине ComBook.ru)
(книгу можно заказать-купить в Ozon.ru)
(заказать-купить книгу по «Искусственный интеллект для чайников» в онлайн-мегамаркете Ozon.ru)
(книгу можно заказать-купить в DiaMail Украина)
(заказать-купить книгу «Искусственный интеллект для чайников» в интернет-магазине diamail.com.ua)
Книга обсуждается в отдельном сообщении моего блога
___________________________________________________
СЛЕДИТЕ ЗА ИЗМЕНЕНИЯМИ В ЭТОМ СООБЩЕНИИ —
последнее обновление — 27 ноября 2019 года
___________________________________________________
Виктор Штонда, издатель Viktor Shtonda, publisher |
ВОПРОС — какие еще книги этой тематики Вы можете предложить для оперативного издания на русском языке ?
P.S. Только Ваша активная позиция в столь непростое время будет способствовать появлению новых и нужных Вам книг. А также, способствовать повышению качества книг, издаваемых издательской группой «ДИАЛЕКТИКА—ВИЛЬЯМС»
_________________________________________________
Ваши комментарии перед публикацией я просматриваю. Поэтому, я оставляю за собой право публиковать или нет комментарии с подписью Анонимный
Бьерн Страуструп — книги автора, биография, фото, личная жизнь
Известный программист, создатель одного из «высоких» языков программирования — С++ и автор множества учебных пособий по этому языку Бьёрн Страуструп родился и вырос в городе Орхус, Королевство Дания. Еще в школе проявилась его склонность к точным наукам – физике и математике, а еще – увлечение фотографией. После школы учится в Университете Орхуса на отделении информатики и компьютерных технологий. В 1975 году получает степень магистра этого университета. Он уезжает в Англию, продолжает обучение в аспирантуре Университета Кембриджа. Работает в Вычислительной лаборатории и занимается компьютерным проектированием. В 1979 году оканчивает обучение и получает степень доктора философии.
В этом же году уезжает в Америку, в Мюррей Хилл, штат Нью-Джерси по приглашению известной компании Bell Labs. В компании он возглавляет отдел по исследованиям в области программного обеспечения. Во время работы в компании сталкивается с задачами, для выполнения которых нужен язык объектно – ориентированного программирования. И понимает, что существующие для этих задач языки имеют слишком низкую скорость работы. Он начинает разрабатывать дополнения к уже существующему языку Си. Новая разработка получает название языка «СИ с классами». Продолжается работа над новой модификацией Си до начала 80-х, пока отличие от первоначального языка не становится слишком сильным. Новый язык получает название С++.
Чтобы популяризовать новый язык, его предлагают к совершенно бесплатному использованию в университетах. Одновременно Страуструп пишет книгу — учебник по языку программирования С++. Неожиданно быстро язык принимается пользователями, за 3 года их число достигает миллиона. Соответственно, становится популярным и учебник, который получает прекрасные рецензии и отзывы за легкость и доступность изложения информации. В 1990 году выходит продолжение учебника – «Справочное руководство по С++ с комментариями», которое получает награду за мастерство в области технической документации. За следующие несколько лет Страуструп получает еще несколько престижных наград и званий. Он продолжает возглавлять одно из отделений компании, занимаясь исследованиями, совершенствованием языка и созданием его стандарта, который вышел в 1999 году. С 2002 года он оставляет работу в компании и занимается преподавательской деятельностью в Техасском университете. Ученый женат, у него двое детей – дочь и сын. Он увлекается фотографией, медициной, историей и путешествиями.В интернет-магазине Yakaboo Вы можете купить книги Бьёрна Страуструпа или заказать их с доставкой по Киеву или в любой из городов Украины.
Рецензия на книгу- Бьёрн Страуструп «Язык программирования C++»
«Язык программирования C++ (Бьерн Страуструп)» — книга дает основные данные по вопросам программирования и базируется по занимательному принципу: вначале теория, затем практические задания. После каждого раздела находятся специальные домашние задания для запоминания изученного материала.
В книге полно теории, много информации, что и как происходит в процессе программирования, а главное, почему вот так, а не по- другому. Некоторые темы имеют шанс показаться весьма длительными, потому, что довольно огромны, и некоторым читателям это может показаться очень скучным. Но не следует так думать, потому, что автор книги показывает не только основы работы самого языка, но и принципы работы некоторых компонентов компьютера, к примеру, процессора, винчестера и т.д.
Отличительная черта данной книги в том, что она описывает совсем новый стандарт C++11, что нельзя оставить без внимания. Из всей кучи научной литературы которую обязан прочесть разработчик программного обеспечения — эта книга должна быть одной из первых, независимо от того в какую специфику вы попадете дальше. Возможно после нее у вас появится желание углубляться и в другие области программирования. Возможно, и наоборот, вы поймете , что это не для вас. От этой книжки у меня замечательные эмоции и я не пожалел, собственно, что прикупил ее. Единственное, что печалит, так это орфографические опечатки переводчика, но на процесс изучения это никоим образом не воздействовало. Эта книга подойдет как для начинающих «чайников», так и для более продвинутых юзеров. Книга на самом деле очень классная.
Бьёрн Страуструп «Язык программирования C++»
Описание:
Книга написана Бьерном Страуструпом — автором языка программирования С++ — и является каноническим изложением возможностей этого языка. Помимо подробного описания собственно языка, на страницах книги вы найдете доказавшие свою эффективность подходы к решению разнообразных задач проектирования и программирования. Многочисленные примеры демонстрируют как хороший стиль программирования на С-совместимом ядре С++, так и современный объектно-ориентированный подход к созданию программных продуктов.
Книга адресована программистам, использующим в своей повседневной работе С++. Она также будет полезна преподавателям, студентам и всем, кто хочет ознакомиться с описанием языка «из первых рук».
Eng t.me/bfbook/63
Rus t.me/bfbook/64
Бьёрн Страуструп — биография, творчество, отзывы, лучшие книги.
Бьёрн Страуструп (дат. Bjarne Stroustrup) — автор языка программирования C++.Окончил Орхусский университет (Дания, 1975) по математике и информатике, защитил диссертацию (Ph. D.) по информатике в Кембридже (1979). До 2002 возглавлял отдел исследований в области крупномасштабного программирования в компании AT&T (Computer Science Research Center of Bell Telephone Laboratories). Ныне профессор Техасского университета А&М. Бьёрн родился и вырос в городе Орхус («Aarhus»), втором по величине …
Бьёрн Страуструп (дат. Bjarne Stroustrup) — автор языка программирования C++.Окончил Орхусский университет (Дания, 1975) по математике и информатике, защитил диссертацию (Ph. D.) по информатике в Кембридже (1979). До 2002 возглавлял отдел исследований в области крупномасштабного программирования в компании AT&T (Computer Science Research Center of Bell Telephone Laboratories). Ныне профессор Техасского университета А&М. Бьёрн родился и вырос в городе Орхус («Aarhus»), втором по величине городом в Дании. Он поступил в государственный университет на отделение компьютерных наук. Закончив его, он получил степень магистра. Бьёрн Страуструп получил степень доктора философии, когда работал над конструированием распределённой системы в Компьютерной Лаборатории Кэмбриджского Университета (Англия). Он член колледжа имени Черчилля, где он и его жена Марьян («Marian») провели несколько чудесных и занятых лет, где у них родилась дочь Аннемария.В 1979 году Страуструп, вместе со своей женой и дочерью, переехал в Нью-Джерси, чтобы пойти работать в Компьютерный Научно-Исследовательский Центр Bell Telephone Laboratories. В этом же году у него родился сын, Николас («Nicholas»). Бьёрн был главой отдела Исследования Программирования, со времени его создания в AT&T до 2002 года, когда он соединился с отделением Научных Исследований Техасского университета A&M.
На нашем книжном сайте Вы можете скачать книги автора Бьёрн Страуструп в самых разных форматах (epub, fb2, pdf, txt и многие другие). А так же читать книги онлайн и бесплатно на любом устройстве – iPad, iPhone, планшете под управлением Android, на любой специализированной читалке. Электронная библиотека КнигоГид предлагает литературу Бьёрн Страуструп в жанрах .
Бьорн Страуструп Создатель языка C++. Архитекторы компьютерного мира
Бьорн Страуструп
Создатель языка C++
Всякий язык программирования общего назначения обязан поддерживать сразу множество парадигм, и каждая парадигма должна быть реализована хорошо, обеспечивая близкое к оптимальному время выполнения и распределения памяти.
Бьорн Страуструп
Бьорн Страуструп
Как пишет Том Даффи (Computerworld): «Множество открытий обязаны своим происхождением случаю. Но есть и немало других, которые стали возможны благодаря кропотливой работе и предвидению. Язык программирования C++, впервые предложенный лабораторией Bell Labs университетам в 1985 году, безусловно относится ко второй категории». Создателем языка C++, одного из наиболее популярных языков, основанных на концепции объектно-ориентированного программирования, является Бьорн Страуструп.
Он родился в 1950 году, в Ааргусе, втором по величине (250 тыс. жителей) городе Дании, расположенном на восточном побережье Ютландии. В 1975 году он окончил Университет Ааргуса по отделению компьютерных технологий и получил степень магистра. После получения магистерского диплома Бьорн Страуструп продолжил свое образование в Кембриджском университете Англии. В Кембридже, в Вычислительной лаборатории, он занимался проектированием распределенных систем, и в 1979 году ему была присуждена степень доктора философии.
В этом же году Страуструп вместе с семьей переехал в Нью-Джерси (США), где стал работать в Центре компьютерных исследований фирмы Bell Labs.
Когда он занимался исследованиями в фирме, Бьорну Страуструпу потребовалось написать несколько имитационных программ. SIMULA-67 — первый объектно-ориентированный язык для моделирования мог бы быть идеальным для подобных задач, если бы не его сравнительно низкая скорость выполнения программ.
Язык BCPL (Basic Combined Programming Language) не обладал средствами абстрагирования, которые казались необходимыми программисту. Те же ограничения имел и язык С, производный от BCPL.
Поэтому доктор Страуструп решил написать свою версию языка С, которую он назвал «Си с классами» (С with classes). В 1983 году язык подвергся значительным изменениям и получил название C++. Название придумал Рик Мэсчитти. Термин C++ — это оператор инкремента в С, который как бы намекает на то, что язык C++, нечто больше, чем просто С.
По словам коллеги Страуструпа Энди Кенига, тот не сомневался в шумном успехе нового языка. (Впоследствии Кениг совместно с Барбарой Му напишет книгу «Рассуждения о C++»). Страуструп разработал свой язык таким образом, чтобы он препроцессировался в С, а не компилировался в машинный язык, что открывало к нему доступ сотням тысяч пользователей С, имевших соответствующий компилятор.
«Препроцессирование в С обусловило повсеместное применение нового языка», — подчеркнул Кениг.
В 1984 году фирма Bell Labs была реорганизована и получила название АТ & Т Bell Labs. Первыми, кому фирма предложила C++, причем практически безо всякой оплаты, стали университеты. Это произошло в 1985 году. Для того чтобы смягчить положение, Страуструп одновременно опубликовал книгу «Язык программирования C++», которая выдержала четыре издания.
Язык быстро нашел свою аудиторию. В 1987 году на конференции по C++ собралось 200 человек. На следующий год, по словам Кенига, число участников возросло до 600, а в начале 90-х годов число пользователей, по его же оценкам, приближалось к полумиллиону. Это сделало данный язык мировым лидером по скорости распространения.
Изюминка C++ в том, что он позволяет программистам писать приложения всевозрастающей сложности с простыми как никогда интерфейсами. C++ доминирует среди объектно-ориентированных языков и служит фундаментом для программных приложений, ориентированных на любые машины — от ПК до суперкомпьютеров.
Поддержка C++ была встроена в средства передачи, коммутации и операционную систему корпорации АТ & Т, на этом же языке были написаны многие ее Internet-службы WorldNet.
Страуструп тем временем продолжал работать в АТ & Т Bell Labs, где возглавлял подразделение широкомасштабных программных исследований и активно занимался совершенствованием своего языка и созданием его стандарта. Стандарт ANSI/ISO C++ был выпущен в 1999 году.
В начале наступившего века корреспондент электронного журнала «Linux World» Дэнни Калев встретился с доктором Бьорном Страуструпом и попросил его ответить на некоторые вопросы, касающиеся особенностей и дальнейшего развития языка C++. В своем ответе Страуструп назвал 10 основных особенностей, которые являются предметом обсуждения разработчиков.
? «Параллелизм: я сторонник библиотечной реализации потоков и параллельного выполнения операций без разделения памяти.
? Отображение типов: неплохо было бы обеспечить библиотечную организацию интерфейса с информацией расширенных типов.
? Типизация: хотелось бы, чтобы в библиотеку Standard Library были включены функции поддержки расширенных типов, однако конкретных предложений у меня нет.
? Хэш-таблицы: конечно, необходимо интегрировать некоторые варианты популярной схемы hash_map.
? Ограничения для аргументов-шаблонов: все это просто, универсально и элегантно реализуется в рамках существующего стандарта C++.
? Операторы контроля: многие из наиболее важных операторов контроля — верификация кода и обработка ошибок — можно было бы реализовать в виде шаблонов. Некоторые из них следует включить в библиотеку Standard Library.
? Сопоставление с регулярными выражениями: хотелось бы видеть в стандартном варианте языка библиотеку определения соответствия шаблонам.
? Сборка мусора: в стандарте C++ нужно явно определить технологию, позволяющую игнорировать «скрытые указатели», а также конкретизировать порядок обработки деструкторов.
? Графический интерфейс пользователя: хорошо было бы иметь стандартные конструкции GUI, но не знаю, насколько это реально в сложившейся ситуации.
? Независимость от платформы: хотелось бы, чтобы Standard Library поддерживала более широкий набор интерфейсов с общими системными ресурсами, например с каталогами и сокетами».
И далее в этом интервью он высказал мысль о том, «что любой язык, претендующий на широкое распространение, должен обладать необходимой базой для поддержания самых разнообразных технологий, включая объектно-ориентированное (иерархия классов) и обычное (параметрические типы и алгоритмы) программирование. Особенно хотелось бы отметить важность компоновки программ из отдельных блоков (возможно, даже написанных на разных языках). Я думаю также, что исключения совершенно необходимы для управления сложным механизмом обработки ошибок. Язык, в котором отсутствуют подобные средства, заставляет разработчиков потратить массу сил на то, чтобы их имитировать».
Бьорн Страуструп написал несколько прекрасных книг по языку C++, а книга «Язык программирования C++» выдержала четыре издания. (1985, 1991, 1997, 2000) и является наиболее читаемой среди программистов, она переведена на 14 языков. Дважды (1990 и 1995 годах) его книги получали награды Доктора Добба за помощь программистам. В 1993 году Страуструп был удостоен награды ACM Грейс Мюррей Хоппер. В 1990 году журналом
Fortune он был назван одним из «20 самых молодых ученых Америки», а в 1995 году журналом BYTE — «одним из 20 самых значительных личностей в компьютерной индустрии за последние 20 лет».
В настоящее время Бьорн Страуструп живет в Ватчунге (Нью-Джерси, США) вместе с женой Мэриан, дочерью Аннемари и сыном Николасом. Его увлечение — история, литература, музыка, фотография, туризм, бег и путешествия (он посетил Австралию, Исландию и Индию).
В заключение хотелось бы привести еще одно высказывание его коллеги Энди Кенига: «В середине 90-х многие представители Sun Microsystems не уставали твердить, что Java обладает такими потрясающими возможностями, что C++ теперь ничего не остается, как сойти со сцены за пару лет. Однако прошло не два, а три года, и число пользователей этого языка все прибывает».
Б. Страуструп.Язык программирования C++Г. Буч.Объектно-ориентированный анализ и проектирование с примерами приложений на C++А. Пол.Объектно-ориентированное программирование на C++
Архив
автор : Денис Коновальчик 07.03.2000
Б. Страуструп.
Язык программирования C++
3-е изд., пер. с англ. — М.: «Бином», СПб.: «Невский диалект», 1999. — 991 с.
Г. Буч.
Объектно-ориентированный анализ и проектирование с примерами приложений на C++
2-е изд., пер. с англ. — М.: «Бином», СПб.: «Невский диалект», 1999. — 560 с.
А. Пол.
Объектно-ориентированное программирование на C++
2-е изд., пер. с англ. — М.: «Бином», СПб.: «Невский диалект», 1999. — 462 с.
Усвоение языка программирования чем-то сродни акклиматизации в чужой стране: не овладев как следует местными «обычаями», легко влезть со своим «уставом» в чужой «монастырь». Возможно, услуги живого гуру, указывающего путь к сияющим вершинам этого Знания, вам сейчас недоступны. Но не стоит отчаиваться: на «книжном развале» есть достойные книги, способные помочь окунуться в философию нового для вас языка.
Праздник пришел на улицу любителей C++: в минувшем году московское издательство «Бином» и «Невский диалект» из Питера совместно выпустили симпатичную серию из трех книг, которая объединила труды корифеев программирования, посвященные этому языку. Особенно приятно, что на их страницах C++ предстает в своем наисовременнейшем ANSI-стандарте, узаконившем стандартную библиотеку шаблонов (STL), механизм идентификации типов во время выполнения (RTTI) и еще «маленькую тележку» нововведений.
Перелистывая книги серии, ловишь себя на мысли, что она напоминает чертеж в трех проекциях: каждый из томов прекрасно дополняет два других, незначительно пересекаясь с ними по содержанию и принципиально отличаясь углом зрения на предмет. Так, «отец C++» Бьерн Страуструп (Bjarne Stroustrup) обеспечивает идеальный «вид сверху», давая исчерпывающее представление о средствах и возможностях своего детища; эксперт Гради Буч (Grady Booch) глядит на C++ «сбоку», с точки зрения применения объектно-ориентированного подхода; «вид спереди» нарисовал Айра Пол (Ira Pohl), написавший «курс молодого бойца» по объектно-ориентированному программированию на C++. В результате «прочтения чертежа» вырисовывается четкое и объемное представление о языке, чему немало способствует обилие в книгах удачных примеров и «живых» строк кода. Рассмотрим поподробнее каждую из «проекций».
В очередном издании своей книги «Язык программирования C++» Бьерн Страуструп делает упор на демонстрацию того, как современными средствами языка поддерживаются ключевые методы программирования. Так что ныне эта общепризнанная энциклопедия C++ может служить еще и отличным практическим руководством для программиста. Тех, кто желает применить полученные знания, в конце каждой главы ждут изящные упражнения, помеченные «сложностными» баллами (от 1 до 3). В новое издание автор включил описание стандартной библиотеки шаблонов (STL), один только беглый рассказ о которой заслуживает целой книги. И такое внимание к библиотеке вполне оправданно: в ней наконец-то реализована голубая мечта программиста об удобном едином наборе динамических структур данных и алгоритмов «на все случаи жизни». Как результат, со времени второго издания том «распух» чуть ли не вдвое. К сожалению, издательство не наделило его (а равно и его собратьев) твердой обложкой, вследствие чего он так и норовит распасться надвое.
Свою блестящую монографию по объектно-ориентированному анализу и проектированию Гради Буч адресует как студентам, так и как профессиональным аналитикам в области программирования. Примечательно, что в заголовке впервые появилось заветное «C++»: все собственные примеры проектов — от системы криптоанализа до базы данных по складскому учету — автор приводит на этом языке. Похоже, все шансы стать такой же популярной и вездесущей, как блок-схемы, имеет предложенная Бучем система графических обозначений для сущностей и отношений между ними («облачка», «квадратики», «стрелочки»). Остроумные рисунки в первой части книги удачно дополняют серьезный материал: так, сакраментальную фразу «Модульность позволяет хранить абстракции раздельно» сопровождает изображение кота-тамагочи, собираемого из запчастей согласно инструкции. Составленная автором библиография по объектно-ориентированному программированию насчитывает свыше 1000 источников! Жаль, не хватает аналогичного списка на русском (впрочем, интересно, какой длины был бы тогда список?). Философский посыл книги и обилие «живых» примеров делают ее настоящим пособием для воспитания аналитика.
Цель книги Айры Пола — научить читателя, уже имеющего опыт программирования, писать объектно-ориентированные программы на C++. Основное внимание автор уделил созданию классов «с нуля», а также использованию готовых наработок (например, той же STL), тема же «наследование» рассматривается лишь «под занавес», в десятой главе. Публикуемые в конце главы упражнения просты (где-то «единичка» по шкале Страуструпа) и касаются, как правило, особенностей синтаксиса языка, так что большинство заданий может быть выполнено в «безмашинном» варианте. Четверть объема книги занимает справочное руководство по C++ и библиотеке STL, способное ответить на большинство вопросов новичков и освобождающее их от лихорадочного листания «талмуда».
Все три книги уже успели пройти «огонь, воду и медные трубы», выдержав не по одному изданию. Как видно, прогрессивные методы софтверной индустрии постепенно проникают и в книжный бизнес: идя навстречу читателю, авторы обзавелись «сетевыми представительствами», откуда можно скачать новейшие исправления в тексте (увы, пока только с сайтов западных издательств). Как знать, не будут ли «издания» и «тиражи» вытеснены в скором времени стремительно наступающими «версиями» и «релизами»? Как бы то ни было, «продукт» у столичных издателей получился отменным. А мы займемся его «внедрением» и «апгрейдом» своих познаний в нестареющем и любимом С++.
Bjarne Stroustrup
30.12.1950
|
История
Так же как и в случае с языком Pascal, автором которого считается Никлаус Вирт, создание языка C++ обычно приписывают одному конкретному человеку. Бьерн Страуструп на основе языка С разработал столь же эффективный язык, но с некоторыми дополнительными возможностями в области наследования объектов. Для понимания языка C++ желательно, чтобы уже был изучен язык С.
Возможности
Язык C++ является производным от языка С. Основным отличием языка C++ является наличие классов и механизма наследования объектов класса другими классами. При разработке языка C++ руководствовались следующими тремя принципами:
Пример
|
Язык программирования C ++ (второе издание)
Страуструп: язык программирования C ++ (второе издание)
Эддисон-Уэсли, ISBN 0-201-53992-6.
Здесь
предисловие,
в
предисловие к первому изданию,
в
заметки для читателя,
первая глава, которая является
Тур по C ++,
а
последняя глава,
документирование решений комитета по стандартам ANSI / ISO C ++ и некоторых
опечатки (по материалам 9-го издания).
Текст задней обложки:
Написано дизайнером C ++,
Бьярне Страуструп,
Язык программирования C ++
является исчерпывающим руководством по языку, его фундаментальным принципам и ключевым
техники для его овладения. Язык программирования C ++ обеспечивает охват
все функции C ++, включая обработку исключений, шаблоны (параметризованные типы),
и последние расширения ANSI / ISO. Язык программирования C ++ — это
краеугольный камень библиотеки каждого программиста.
Особенности:
- Предоставляет полное руководство по C ++ и его основным методам проектирования и программирования.
- Основное внимание уделяется функциям языка, поддерживающим абстракцию и объектно-ориентированное программирование.
- Обсуждает технические и организационные вопросы, возникающие при использовании C ++.
при проектировании и внедрении крупных программных комплексов. - Описывает отношения между C и C ++.
- Представлены методы проектирования высококачественных библиотек.
- Дает примеры реализации ключевых определяемых пользователем типов, таких как графические фигуры,
ассоциативные массивы, списки и потоки ввода-вывода. - Содержит Приложение, охватывающее последние резолюции ANSI / ISO, касающиеся
стандартизация C ++. - Включает справочное руководство по C ++.
Эта книга вышла в 1991 году и устарела.
Я написал
более свежие книги по C ++. Ты можешь найти
информация о C ++ из
моя домашняя страница.
Для переводов см.
мой список публикаций и
моя галерея обложек.
Обзор
Вот несколько абзацев из обзора моего второго издания Маршалла Клайна.
(Автор C ++ FAQ) написано для «The C ++ Report, vol ?? no ??»
(естественно, я выбрал из моих любимых фрагментов этого обзора, но я не
исказил смысл обзора, опустил любую осуждающую критику или каким-либо образом отредактировал абзацы, которые я цитирую):
Вот мои первые впечатления.
Идеальным учебником для начинающих программистов на C ++ было бы:
(1) должно быть « эталонного качества » по отношению к собственно языку.
(2) следует объяснить, как использовать язык в качестве инструмента.
Другими словами, в нем должно быть указано, какой язык * это *, а также * как *
использовать его (новые программисты, кажется, находят « темные углы » языка больше
быстрее, чем можно представить, поэтому текст эталонного качества абсолютно
существенный).
Новая книга Бьярна — это идеал.
Книга Бьярна делает то, чего нет в других учебниках по C ++.
преуспел до сих пор: он интегрирует учебник по * использованию * языка
вместе с корявыми деталями того, что именно является законным. Если бы это было где
он остановился, я бы, например, был в восторге (я часто комментировал свои
классы, которые я жду такую книгу).
Но на этом он не остановился. Он не только покрывает правильное использование вместе с
справочное руководство по языку, оно также охватывает основы интеграции
объектно-ориентированный * дизайн *.Есть некоторые упущенные аспекты OOD
лечение (подробности см. ниже), но я сконцентрируюсь на том, что оно * делает *
обложке, и я скажу, что аспекты разработки программного обеспечения этого текста находятся на
уровень, который ранее был доступен только в книгах строго ООД, таких как
Превосходный текст Буча (или Вирфс-Брок и др., Рамбо и др.).
Общий подход (сначала язык, затем дизайн) — это то, что я лично
найти легкий способ научить. Некоторые будут спорить со мной по этому поводу, но оба мои
опыт обучения и преподавания научил меня, что люди учатся первыми
конкретный, * затем * абстрактный.« Из одного яблока и двух яблок получается три яблока »
осваивается задолго до « x + 2x = 3x ». Таким образом люди изучают новый материал
связывая это с тем, что они уже понимают, убеждение, которое кажется
хорошо принят в образовательных кругах, особенно в отношении компьютеров
(цитируйте [Р. Майер, Психология того, как новички изучают компьютерное программирование,
Comp Surveys, 13 (1981), 121-41], [D. Ausubel, Использование заранее организаторов
в усвоении и запоминании значимого словесного материала Дж.Образовательный
Psychol, 51 (1960), 266-74] и т. Д.).
Эта философия, если ее принять, окажет множество прагматических воздействий на
учебный план. Например, я преподаю множественный полиморфизм только после того, как
студент твердо разбирается в единственном полиморфизме (я * мог бы * начать с
« самый общий случай » и работал над более простыми концепциями). Опять виртуальный
диспетчеризация не рассматривается, пока я полностью не установлю базовые концепции
инкапсуляция, классы и объекты.
Эти решения соответствуют подходу к образованию « точно вовремя »: не учить
абстрактная (и, следовательно, мощная) концепция, пока студент не будет готов к
решать проблемы, требующие дополнительной мощности.К абстрактным понятиям относятся
предоставляется « точно в срок ». Таким образом, ученику предоставляется встроенный
мотивация, и я никогда не должен спрашивать: « Зачем я учу это? »
С другой стороны, это обычно приводит к спиральному учебному плану, поэтому он будет
быстрее перейти непосредственно к самому общему случаю. Педагоги часто жалуются
долгого обучения, чтобы овладеть языком парадигма +. Нужда в
людей, чтобы « декомпрессировать » в новой парадигме неизбежно, но я обнаружил
его можно ускорить с помощью подхода « точно в срок » (например, он дает людям
конкретный формализм для выражения своих мыслей).
Книга Бьярна эффективно использует этот подход « как раз вовремя ».
ПОСЛЕДНИЕ МЫСЛИ:
Книга отличная. У каждого программиста на C ++ должна быть копия.
— Маршалл Клайн
Язык программирования C ++: как он стал невидимой основой для всего и что будет дальше
Мощный, гибкий, сложный: происхождение C ++ насчитывает 40 лет, но сегодня он остается одним из наиболее широко используемых языков программирования.TechRepublic поговорил с создателем C ++ Бьярном Страуструпом, чтобы выяснить, почему.
Бьярне Страуструп: «Эволюция необходима для решения проблем меняющегося мира и внедрения новых идей».
Изображение: Национальная инженерная академия
C ++ возник в 1979 году, когда Бьярн Страуструп, создатель языка программирования, впервые начал работу над языком, который тогда был известен как «C с классами».Изначально язык был разработан как усовершенствование языка программирования C, в котором были добавлены функции, основанные на объектно-ориентированном программировании.
Материалы для разработчиков, обязательные к прочтению
«Успех C ++ был, очевидно, неожиданностью», — сказал Страуструп TechRepublic. «Я вижу успех C ++ как функцию его первоначальных целей — эффективное использование оборудования, плюс мощные механизмы абстракции — и его тщательного развития, основанного на обратной связи с реальным использованием.«Сейчас этот язык является одним из самых популярных среди разработчиков и поддерживает системы и сервисы по всему миру.
SEE: Язык программирования C ++: как он стал основой для всего и что будет дальше (бесплатный PDF) (TechRepublic)
«Я хотел создать многопользовательскую систему с коммуникационной системой, которая могла бы быть как с разделяемой памятью, так и по сети», — объясняет Страуструп.
«Я сосредоточился на программном обеспечении. Мне нужно было написать низкоуровневый, близкий к оборудованию код, такой как менеджеры памяти, планировщики процессов и драйверы устройств, для разделения программных компонентов, чтобы они могли работать на разных компьютерах, обмениваясь данными четко определенными способами.«
Ни один язык того времени не подходил для этой задачи, поэтому Страуструп взял на себя обязательство построить что-то, что было. «C с классами объединил способность C работать близко к оборудованию с эффективным вариантом классов Simula для абстракции и организации кода», — говорит он.
С самого начала Страуструп понял, что у него нет диктаторского контроля над языком. В то время как в ранней работе над C ++ участвовал только он и несколько его коллег из Bell Labs, их число увеличилось до нескольких десятков, когда начались попытки стандартизировать язык.
SEE: Познакомьтесь с хакерами, которые зарабатывают миллионы на спасении Интернета, по одной ошибке за раз (обложка PDF) (TechRepublic)
Сегодня в комитет по стандартам C ++ входит около 400 членов, кроме того более широкому сообществу пользователей, которые следят за языком и пытаются повлиять на его развитие.
Так как же сохранить целостность языка программирования при таком энтузиазме? «Это возможность и огромная проблема», — говорит Страуструп.
«Самое сложное — решить, что важно, и поддерживать согласованность. Как только вы узнаете, чего хотите, в конечном итоге вы найдете хороший технический способ сделать это».
SEE: Python пожирает мир: как побочный проект одного разработчика стал самым популярным языком программирования на планете (TechRepublic)
Вспомните Vasa
1998 год ознаменовал собой год формальной стандартизации C ++ и его прочную рабочую лошадку. К этому моменту C ++ был одним из наиболее часто используемых языков программирования в мире и сохраняет эту позицию по сей день.
Тем не менее, появление C ++ 11 тринадцатью годами позже заложило основы для будущей эволюции языка, говорит Страуструп. «C ++ 11 сделал C ++ новым языком», — говорит он.
«Поддержка параллелизма с типобезопасностью была важна. C ++ 11 предоставил плотную сеть взаимно поддерживающих функций, таких как функции [константное выражение] для вычислений во время компиляции, лямбда-выражения, автоматический вывод типов и вариативные шаблоны».
В то время как C ++ 11 представил несколько новых функций и возможностей, которые сделали язык более простым, быстрым и выразительным, язык сохраняет репутацию трудного для освоения — факт, который его создатель с готовностью подтверждает.
«C ++ действительно сложен, и нужно приложить усилия, чтобы научиться правильно его использовать», — говорит Страуструп. «К сожалению, люди хотят не просто простоты, они хотят чего-то невозможного: более простого языка, с большим количеством функций и без поломки существующего кода».
Ответ Страуструпа на эту «трилемму», как он ее называет, заключается в добавлении функций, которые «упрощают выполнение простых вещей» — например, посредством обобщения или прямой поддержки для распространенных вариантов использования — при сохранении совместимости и стабильности.
Это легче сказать, чем сделать с таким большим чудовищем, как C ++ или любой другой крупный язык программирования, если на то пошло. Страуструп объясняет, что одной из самых больших проблем является достижение консенсуса в отношении принятия решения о том, какие новые функции следует принять, а какие исключить, что само по себе требует много тяжелой работы, обсуждения, времени и терпения.
SEE: 5 лучших языков программирования для изучения системными администраторами (бесплатный PDF) (TechRepublic)
Даже в этом случае не все хорошие функции можно использовать.«Вы должны попытаться добавить только то, что действительно помогает людям, и только несколько таких вещей — потому что, если бы мы приняли каждую функцию, которая могла бы кому-то помочь, язык утонет под собственной тяжестью», — объясняет он.
Страуструп относится к Vasa, великому шведскому линкору XVII века, который затонул в гавани Стокгольма во время своего первого рейса из-за своей плохой конструкции.
«По настоянию Короля — высшего руководства — и вопреки здравому смыслу технических специалистов он был завален красивыми статуями и огромными пушками.Верх тяжелый, его перевернул порыв ветра.
«Я неоднократно говорил и писал о Vasa в качестве предостережения для людей, с энтузиазмом желающих улучшить C ++ путем добавления функций: помните о Vasa! Пока что C ++ не упал».
Его секрет удержания C ++ на плаву после всех этих лет? «Вы начинаете с малого, формулируете основополагающие принципы, формулируете долгосрочные идеалы и развиваетесь на основе обратной связи от реального использования».
Действительно, C ++ по-прежнему пользуется успехом более 35 лет после того, как он впервые появился на сцене.Сегодняшний C ++ намного мощнее и выразительнее, чем ранний C ++. Однако оригинальный дизайн остается видимым и по сей день.
«Существуют простые программы, появившиеся в первые годы — 40 лет назад, — которые работают и сегодня», — говорит Страуструп.
«Стабильность — важная особенность языка, используемого для систем, которые должны работать десятилетиями. Фактически, многие из первых идей стали доступны только в C ++ 20. Я с самого начала знал, что не могу построить идеальный язык, поэтому я должен был стремиться к постепенному развитию — эволюции.На самом деле, я не верил в идею идеального языка — идеального для чего? Для кого? »
Он добавляет:« Эволюция необходима для решения проблем изменяющегося мира и внедрения новых идей ».
C ++ на практике
По состоянию на сентябрь 2020 года C ++ является четвертым по популярности языком программирования в мире после C, Java и Python, и — согласно последнему индексу TIOBE — также являются наиболее быстрорастущими. C ++ — это язык программирования общего назначения, пользующийся успехом у разработчиков за его мощность и гибкость, что делает его идеальным для операционных систем, веб-браузеров, поиска движки (включая Google), игры, бизнес-приложения и многое другое.
Страуструп резюмирует: «Если у вас есть проблема, которая требует эффективного использования оборудования, а также справляется со значительной сложностью, C ++ — очевидный кандидат. Если у вас нет обеих потребностей, либо низкоуровневый эффективный язык, либо высокопроизводительный язык. уровень расточительного языка будет делать. »
СМОТРЕТЬ: Разработчик C # Торгерсен: Почему язык программирования все еще так популярен и куда он пойдет дальше (TechRepublic)
И все же, несмотря на его широкую популярность, Страуструп отмечает, что трудно точно определить, где используется C ++, и для чего.
«Первая оценка по обоим вопросам -« везде », — говорит он.
«В любой большой системе вы обычно найдете C ++ в низкоуровневых и критичных для производительности частях. Такие части системы часто не видны конечным пользователям или даже разработчикам других частей системы, поэтому я иногда называют C ++ невидимой основой всего ».
Он также подчеркивает относительную ненадежность опросов разработчиков при оценке популярности того или иного языка программирования: «Считать программистов сложно и просто.Интернет-опросы обычно просто измеряют «шум»; то есть то, о чем говорят, а не то, что используется ».
Будущее C ++
Сегодня Страуструп является техническим сотрудником в Morgan Stanley. Его работа с Международной организацией по стандартизации (ISO) над C ++ стандарта и в C ++ Core Guidelines считаются частью его роли в финансовом гиганте, и он по-прежнему активно участвует в разработке C ++.
В частности, Страуструп входит в группу руководителей, которая представляет и обсуждает рекомендации по будущее языка программирования.Он также следит за эволюционной группой и принимает участие в обсуждениях новых языковых функций.
Однако, когда дело доходит до повседневного использования C ++, Страуструп с радостью берет на себя роль второго плана. «Я слежу за административной деятельностью, но стараюсь делать там как можно меньше. Я не очень хороший администратор», — признается он.
Перед пандемией Страуструп много путешествовал, чтобы преподавать и объяснять C ++ всему миру в своих книгах, статьях и интервью — хотя, как и во всем остальном мире, 2020 год положил этому временный конец.
СМОТРЕТЬ: Команды Linux для управления пользователями (TechRepublic Premium)
«В своей работе я критически полагаюсь на общение с людьми, чтобы узнать об их проблемах и узнать, как мои идеи могут им помочь», — говорит Страуструп. .
«В это время пандемии я лишен столь необходимой обратной связи. Виртуальные беседы и интервью — это не одно и то же, а динамика встреч Zoom уступает реальным личным встречам, когда дело доходит до обсуждения дизайна. и идеи.«
Пандемия COVID-19 также помешала прогрессу в следующих двух итерациях языка, C ++ 20 и C ++ 23, хотя Страуструп утверждает, что« почти весь »C ++ 20 поступит в продажу в 2020 году.
«Помимо этого, идет работа над Unicode, числами, разработкой игр и низкой задержкой, инструментами, AI и многим другим», — говорит он.
«Мы отправляем функцию (язык и библиотеку), когда она будет готова, и мы выпускать пересмотренный стандарт каждые три года. C ++ 14, C ++ 17 и C ++ 20 отправлены вовремя.Стоит отметить, что усилия по разработке стандартов и основные разработчики очень синхронизированы.
«Крайне важно, чтобы C ++ оставался согласованным и стабильной платформой для разработки».
Информационный бюллетень Developer Essentials
От самых популярных языков программирования до вакансий с самыми высокими зарплатами — получайте новости и полезные советы для разработчиков.Еженедельно
Зарегистрироваться Сегодня
См. Также
Интервью с Деннисом Ричи, Бьярном Страуструпом, Джеймсом Гослингом
Семейство языков C: интервью с Деннисом Ричи, Бьярном Страуструпом и Джеймсом Гослингом
Эта статья появилась в Java Report, 5 (7), Июль 2000 г., и Отчет о C ++, 12 (7), июль / август 2000 г. .
Семейство языков C — C, C ++ и Java — доминирует в коммерческом программировании более 30 лет. Сегодня все три языка переживают поворотный момент:
o Второй стандарт ISO / ANSI C был только что опубликован (C99 был официально выпущен в декабре 1999 года). C продолжает оставаться одним из самых влиятельных языков в мире, особенно в области встроенных систем.
o Первое официальное обновление стандарта ISO / ANSI C ++ будет завершено в октябре 2000 года.C ++ — один из наиболее широко используемых коммерческих языков программирования в мире, с беспрецедентной поддержкой как объектно-ориентированного, так и универсального программирования, и продолжает стабильно расти.
o Популярность Java продолжает расти в различных областях, от программирования на стороне клиента до программирования на стороне сервера. Sun недавно решила, что Java может лучше всего развиваться как стандарт де-факто, а не как формальный стандарт ISO / ANSI или ECMA, и отказалась от формальных усилий по стандартизации.
Что сделало семейство языков C таким доминирующим? Что мы можем ожидать увидеть в ближайшем будущем на этих и родственных им языках? Это знаковое интервью о состоянии союза, опубликованное одновременно в этом месяце в C ++ Report и Java Report , объединяет трех легенд, которые вряд ли нуждаются в представлении: Денниса Ричи, Бьярна Страуструпа и Джеймса Гослинга, создателей C , C ++ и Java.
Оглядываясь назад: откуда мы?
Q: Почему семейство языков C стало настолько успешным и широко используемым?
Деннис Ричи: Для меня всегда было загадкой, чтобы я мог разбираться в деталях. Очевидно, что использование C [1] в ранние времена (имеется в виду 70-е и большая часть 80-х) значительно поощрялось его использованием в качестве lingua franca Unix в период, когда Unix рос в исследовательское и академическое сообщество, а затем, когда Unix была принята в качестве основы программного обеспечения для индустрии рабочих станций 80-х.Это, в свою очередь, отчасти было связано с неполитической природой C и Unix (не привязанной к мощи компьютерного оборудования до 1984 года). Были также технические и полутехнические аспекты: язык оказался подходящим как для описания вещей на достаточно высоком уровне, так что переносимость через оборудование была возможной, но достаточно простой по своим требованиям, чтобы сделать его дешевым в реализации.
Бьярн Страуструп: C и C ++ стали популярными, потому что они были гибкими, дешевыми и более эффективными, чем альтернативы.Своей первоначальной популярностью C во многом обязан популярности Unix. Свою первоначальную популярность C ++ во многом обязан своей высокой степени совместимости с C.
Очень важным успехом C и C ++ было то, что AT&T не пыталась монополизировать эти языки, но позволила своим исследователям поддержать создание альтернативных реализаций. Кроме того, AT&T полностью поддержала стандартизацию ANSI и ISO для C и C ++, как только эти усилия были начаты. Систематического маркетинга C или C ++ не существовало до того, как они стали устоявшимися языками, и несколько поставщиков начали конкурировать.Это некоммерческое распространение C и C ++ очень понравилось многим программистам.
Java очень отличается по дизайну от двух других языков и, похоже, имеет совсем другую философию. Своей первоначальной популярностью он во многом обязан самой интенсивной маркетинговой кампании, когда-либо проводившейся для языка программирования. С момента своего первоначального коммерческого дебюта Java позиционировалась как радикально отличающаяся от всех других языков и превосходящая их. Интересно, что Java продавалась людям на всех уровнях организации, а не только программистам.
Я подозреваю, что корень многих различий между C / C ++ и Java заключается в том, что AT&T в первую очередь является пользователем (потребителем) компьютеров, языков и инструментов, тогда как Sun в первую очередь является поставщиком таких вещей.
Напомню, что и C, и C ++ были изобретены в Исследовательском центре компьютерных наук Bell Labs в Мюррей-Хилле и нашли свое первоначальное серьезное применение в Bell Labs и AT&T. Тогда Bell labs была отделением исследований и разработок AT&T. Теперь часть Bell Labs является отделом исследований и разработок Lucent, а часть осталась в AT&T под названием «AT&T Labs».»
Ни один из этих языков не отличался радикально или значительно лучше других современных языков. Однако они были достаточно хороши и выиграли от удачи и» социальных «факторов, таких как Unix, низкая цена, маркетинг (только Java) и т. Д.
Среди технических факторов преимущества C и C ++ заключаются в их близости к машине и отсутствии искусственных ограничений на то, что может быть выражено. Это позволяет выполнять работу низкоуровневых систем на этих языках и обеспечивать полную производительность машины. своим пользователям.Java выиграла от работы на собственной виртуальной машине и от наличия большого набора библиотек, которые сокращают время, необходимое программисту, чтобы стать продуктивным. Unix дала аналогичный импульс развитию C. В отличие от этого, мир C ++ страдает от фрагментации огромной базы библиотек, многие из которых являются проприетарными и поставляются конкурирующими поставщиками.
Джеймс Гослинг: Я думаю, что причина номер один в том, что это вообще очень прагматичная семья языков. По большому счету, это не были эксперименты в области языкового дизайна; они были собраны как инструменты людьми, которые хотели сделать что-то еще.C был в значительной степени обусловлен написанием операционной системы Unix и всех утилит в ней, поэтому многие вещи, которые есть в C, напрямую связаны с тем, что требуется для создания эффективной операционной системы, а также с тем, что требуется для сделайте это на машине с 32К.
Вопрос: Каковы были ваши основные первоначальные цели при разработке [C / C ++ / Java]? Какие проблемы должен был решать язык? Какие проблемы не предназначался для решения языка?
Ritchie: Суть C (в отличие от своего непосредственного предшественника B) заключалась в том, чтобы взять язык, который был разработан с учетом машин, ориентированных на слова, и адаптировать его к более новому аппаратному обеспечению, которое стало доступным, в частности, PDP -11.Не потребовалось много времени, чтобы понять, что подобные вещи, представленные на раннем этапе, также сделают его адаптируемым для самых разных машин.
Страуструп: Моей первоначальной целью для C ++ был язык, на котором я мог бы писать программы, которые были бы столь же элегантны, как программы Simula, но столь же эффективны, как программы C.
Проекты, которые я рассматривал в то время, были связаны с распределением функций и приложений операционных систем между несколькими компьютерами в локальной сети. Я должен был учитывать как сложность всей системы, так и эффективность объектов самого низкого уровня.Объектно-ориентированные средства Simula помогли с первым, а средства системного программирования C — со вторым.
Gosling: Как и C, цели Java на самом деле заключались в том, чтобы создавать относительно специфические виды программного обеспечения, и мы действительно стремились к очень распределенным, очень надежным программам, взаимодействующим с людьми, — таким, в которых Надежность имела огромное значение, такие вещи, как безопасность, имели огромное значение, и все они имели достаточно большое значение, чтобы было желание понизить производительность для них.
Например, одно из различий между Java и C состоит в том, что в Java есть реальные массивы, и массивы проверяются на границы, что важно как для надежности, так и для безопасности. Если вы посмотрите на историю нарушений безопасности в Интернете, то увидите, что очень большая часть из них использует переполнение буфера, статически распределенные массивы, которые люди просто перебирают. Если вы посмотрите на журналы исправления ошибок, через которые люди проходят, оказывается, что проблемы с целостностью памяти составляют огромную часть того, откуда возникают проблемы.
И все же, если вы попытаетесь сделать что-то вроде того, что делает Java, где очень строгое отношение к модели памяти, это приведет к некоторому снижению производительности. Оказывается, с достаточно хорошими оптимизирующими компиляторами потери производительности могут стать почти неизмеримо маленькими, но для этого действительно требуется высококачественный компилятор, а 20 лет назад никто не создавал компиляторы, которые выполняли бы такую оптимизацию, как сегодня. Цели в отношении безопасности и надежности привели к различиям, которые вызвали проблемы с производительностью, которые можно было восстановить только с помощью высококачественных компиляторов, и большая часть оригинального дизайна C была мотивирована тем, что «из чего можно получить код хорошего качества без действительно великолепного? оптимизирующий компилятор.»
Q: Как эти цели для [C / C ++ / Java] изменились с течением времени? Почему?
Ritchie: Мои собственные цели для C не сильно изменились в много лет, и я не был центральным игроком в изменениях ни в стандартах 1989, ни в 1999. Стандарт ANSI и ISO 1989 года кодифицировал вещи значительно лучше, чем наш исходный документ; наиболее важным введением было то, что я должен был сделать раньше on (прототипы функций).Между прочим, самая ранняя работа Бьярна над тем, что стало C ++, вероятно, оказала самое важное прямое влияние на это.
Страуструп: Я не думаю, что мои общие цели в отношении C ++ сильно изменились. Я по-прежнему хочу писать программы, которые одновременно элегантны и эффективны. Я по-прежнему хочу, чтобы серьезное системное программирование, в том числе работа на машинном уровне и над системами с ограниченными ресурсами, было осуществимо на C ++.
Главный сдвиг в акцентах / стиле происходит из-за того, что наконец-то стали доступны шаблоны и исключения.Из первой статьи, которую я написал о предке C ++, C с классами, я знал, что мне нужен эффективный и статически проверенный способ доступа к контейнерам. Шаблоны обеспечивали это, а STL предоставлял набор методов для практического использования таких контейнеров.
Более общий ответ: я попытался задокументировать свои цели и соображения по дизайну для C ++ в документе The Design and Evolution of C ++ . [2] Здесь можно задать вопросы о том, почему C ++ такой, какой он есть, и почему он не пошел по другому правдоподобному пути.
Gosling: Я полагаю, что цели в отношении масштабируемости и надежности становятся все сильнее и сильнее, потому что они окупаются такими вещами, как время разработки, и люди очень дорожат такими вещами. Было довольно странно пытаться создать язык, который находился бы в этом пространстве между интерпретируемыми языками, где все гибко и все динамично, и статическими языками, такими как C, где все статически предварительно скомпилировано.Java как бы находится в этом преисподней между ними, и, учитывая то, как мир эволюционировал, стал еще более сетевым, чем раньше, даже более осведомленным о проблемах безопасности, даже более тесным контактом с людьми в каждый момент, основные цели были довольно хороши. многое осталось там. Они только что стали сильнее.
Q: Когда вы проектировали [C / C ++ / Java], какие функции было сложнее всего реализовать правильно или какие функции сложнее всего создать так, чтобы их приняли ваши первоначальные пользователи?
Ritchie: В общем, возникает вопрос, что добавить, а что оставить.Вероятно, самым странным аспектом C по сравнению с другими языками, не входящими в его непосредственное семейство, является синтаксис объявления, в котором (в некотором роде из Фортрана) упоминается тип, а затем переменные оформляются таким образом, чтобы отражать их использование в выражениях. Многим это не нравится, поэтому вопрос о том, правильно ли я понял.
Тесно связанный аспект — обработка массивов и указателей. Учитывая постоянство вопросов по этому поводу и искажения, через которые проходит C ++, чтобы отойти от C в этом вопросе, это вполне может быть сочтено ошибкой.
Страуструп: Получение нужной степени совместимости с C было постоянной борьбой. Для того, что я хотел сделать с C ++, мне требовалась более строгая статическая проверка, чем предлагалось в C. Однако любая несовместимость является неудобством для кого-то — особенно для тех, кто ценит старый код (пусть даже плохо написанный) перед новыми возможностями (какими бы полезными). Программисты и маркетологи могут быть очень безжалостными в своем осуждении, когда старый код может быть взломан — даже если этот код написан на другом языке или на нестандартном диалекте.
Однако я считаю, что эти хлопоты того стоят, потому что сообщества C и C ++ извлекают выгоду из подлинной степени совместимости. Кроме того, большая часть моей работы над неабстракционными областями C ++ была передана обратно в Standard C. Примерами являются объявления / прототипы функций, const (Деннис также приложил руку к их дизайну), объявления везде, где могут появляться операторы, и / / Комментарии.
Шаблоны потребовалось много времени, чтобы получить правильные и достаточно полные формы. В некотором смысле, их разработка началась с моих (в основном неудачных) экспериментов с макросами в «C с классами».«Легко спроектировать средство параметризованного типа, которое удовлетворяет базовую потребность в статической типобезопасности контейнеров. Обеспечить гибкость и эффективность, которые я считаю необходимыми, гораздо сложнее и требует экспериментов и обратной связи от реального использования. Общее программирование, как в настоящее время практикуется в Стандартном C ++, выходит за рамки того, что большинство людей считало возможным (особенно в языке, который нацелен на бескомпромиссную эффективность). Я предполагаю, что в этой области мы увидим значительный прогресс в следующие несколько лет — и где языковые возможности могут быть необходимо для поддержки новых методов.
Gosling: Было много действительно серьезных проблем с дизайном, и они были повсюду. Например, те, которые действительно интересовали людей, включали идею о том, что в Java есть такая вещь, которая называется интерфейсом. Большая часть дизайна интерфейсов была довольно просто заимствована из Objective C, и у нее есть свои плюсы и минусы, и это был действительно сложный баланс.
Q: Вы когда-нибудь добавляли функции, которые ваши пользователи не ценили так сильно, как вы, а затем вынуждены были отказаться от них или удалить их позже? Что вы узнали из опыта?
Ritchie: Я добавил некоторые вещи под давлением пользователей, которые, как мне кажется, были выполнены плохо.Типы перечисления немного странные, битовые поля более странные. Ключевое слово «static» очень странное, оно выражает как время жизни хранилища, так и то, что в стандарте называется «связью» (внешняя видимость). Здесь и там есть много странностей.
Я не могу вспомнить функции, которые я добавил, которые мне пришлось удалить, за исключением некоторых крошечных битов, таких как ключевое слово «entry».
Stroustrup: Когда я разрабатывал C с классами и C ++, мне очень нравилась идея, что класс определяет среду, в которой работает код его функций-членов (я все еще так считаю).Это привело к понятию конструкторов, которые устанавливают эту среду (инвариантную) и получают необходимые ресурсы. Деструкторы обращают этот процесс вспять (высвобождая ресурсы). Эти идеи лежат в основе дизайна исключений и управления ресурсами. Например, см. Новое Приложение E: «Безопасность исключений стандартной библиотеки» к The C ++ Programming Language . [3] Это приложение можно загрузить с моих домашних страниц. [4]
Основываясь на этом образе мышления, C с классами также позволил вам определить функцию call (), которая вызывалась перед входом в функцию-член, и функцию return (), которая вызывалась после выхода из функция-член.Механизм call () / return () был предназначен для того, чтобы позволить программисту управлять ресурсами, необходимыми для вызова отдельной функции-члена. Это позволило мне реализовать мониторы для первой библиотеки задач. Вызов задачи () захватил блокировку, а соответствующий ей return () снял блокировку. Идея частично пришла из методов Lisp: before и: after. Однако это понятие не было совершенно общим — например, вы не могли получить доступ к аргументам для вызова функции-члена из call (). Хуже того, мне совершенно не удалось убедить людей в полезности этого понятия, поэтому я удалил call () и return () при определении C ++.
Я недавно повторно рассмотрел эту проблему и написал шаблон на стандартном C ++, который обертывает вызовы объекта произвольным префиксом и суффиксом. Документ, описывающий это, Обертывание вызовов функций-членов C ++ , появился в прошлом месяце в выпуске отчета C ++ Report . [5]
Я попытался что-то сделать с синтаксисом декларатора. Я рассматривал возможность использования postfix -> в качестве альтернативы postfix * и экспериментировал с тем, чтобы имя появлялось в альтернативных местах в последовательности декларатора.Например:
int (* p) [10]; // указатель на массив int
int p -> [10]; // альтернатива
int -> [10] p; // альтернатива
-> [10] int p; // альтернатива
p: -> [10] int; // альтернатива
К сожалению, я проверил этот набор идей, и ничего не вышло. Несколько примеров улучшений основного синтаксиса C, которые я реализовал локально, были встречены мной, и я отказался от них на несколько дней.
Gosling: Нет, у меня было такое личное правило, что я, по большому счету, ничего не вставлял только потому, что думал, что это круто. Поскольку у меня все время было сообщество пользователей, я ждал, пока несколько человек набросятся на меня, прежде чем вставлять что-нибудь. Если бы кто-нибудь сказал: «О, это было бы круто», в общем, я их проигнорировал. пока ко мне не подошли два или три человека и сказали: «Это должна сделать Java». Тогда я бы начал думать, что, может быть, люди действительно воспользуются им.
Есть такой принцип переезда, когда вы переезжаете из одной квартиры в другую.Интересный эксперимент — упаковать квартиру и сложить все в ящики, потом переехать в следующую квартиру и ничего не распаковывать, пока это не понадобится. Итак, вы готовите свой первый обед и что-то достаете из коробки. Затем примерно через месяц вы использовали это, чтобы в значительной степени выяснить, какие вещи в вашей жизни вам действительно нужны, а затем вы беретесь за остальное — забываете, насколько вам это нравится или насколько это круто — и вы просто выбросите это. Удивительно, как это упрощает вашу жизнь, и вы можете использовать этот принцип во всех вопросах дизайна: не делать вещи только потому, что они крутые или просто потому, что они интересны.
Q: Если бы вы могли вернуться в прошлое, зная то, что знаете сейчас, что бы вы сделали по-другому при разработке [C / C ++ / Java]? Почему?
Ritchie: Очевидно, гигантских ошибок не было. Конечно, есть много аспектов, которые я бы по крайней мере переосмыслил (некоторые подробно описаны выше).
Страуструп: Вы никогда не сможете вернуться, и делать что-то снова бессмысленно.
Как я часто говорил, своей самой большой ошибкой я считаю отказ от поставки стандартной библиотеки большего размера.Кроме того, мне явно хотелось бы что-нибудь сделать с синтаксисом декларатора C. Наличие шаблонов как неотъемлемой части языка на раннем этапе помогло бы многим лучше использовать C ++. Однако в то время я не думал, что знаю, как это делать достаточно хорошо. Мое нежелание запугивать меня спасало меня — и моих пользователей — достаточно часто, чтобы я не хотел пересматривать себя в этих вопросах.
Сейчас я очень рад, что наконец-то появилось много доступных реализаций, приближенных к стандарту.Теперь я могу написать код, который действительно использует Стандартный C ++, как он должен был использоваться, и перемещать элегантный код от реализации к реализации и с машины на машину. Удовольствие от программирования и качество кода, который я теперь могу написать, не дают мне зацикливаться на возможных прошлых ошибках.
Gosling: Есть много вещей, которые я бы сделал иначе. Есть ряд вещей, которые меня не совсем устраивают, и неясно, какой ответ правильный. Я не очень доволен расколом между интерфейсами и классами; во многих отношениях кажется, что правильное решение не помешает.
Было много вещей — например, множественные возвращаемые значения — которые в наши дни я как бы хотел добавить. Это был тот момент, когда мне действительно понравилась эта функция, и большинство людей просто сказали: «А?» Еще одно, что вроде как пошло по этому пути, заключалось в том, что я шел по этому пути, имея кучу вещей, связанных с предусловиями, постусловиями и утверждениями в стиле Эйфеля, и фактически в сообществе людей, которые использовали его в в то время средний ответ был: «А? Зачем мне вообще это?» Я думаю, что средний разработчик сегодня тоже так сказал бы.Но есть довольно разумная толпа людей, которые верят в такие вещи, как «Дизайн по контракту», и это одна из тех вещей, где многие люди думают: «Если бы только остальной мир был достаточно образован, чтобы понять, о чем идет речь, им будет лучше «. И я действительно с этим согласен. Проблема в том, что большая часть мира на самом деле меньше заботится.
Есть некоторые вещи, которые меня беспокоят, например, перегрузка оператора. Я не стал рассматривать перегрузку операторов как довольно личный выбор, потому что видел слишком много людей, злоупотребляющих ею в C ++.За последние пять-шесть лет я провел много времени, опрашивая людей о перегрузке операторов, и это действительно увлекательно, потому что вы разбиваете сообщество на три части: примерно от 20 до 30 процентов населения считают перегрузку оператора порождение дьявола; кто-то сделал что-то с перегрузкой операторов, что их просто отметило, потому что они использовали что-то вроде + для вставки в список, и это действительно запутывает жизнь. Большая часть этой проблемы проистекает из того факта, что есть только около полудюжины операторов, которые вы можете разумно перегрузить, и все же есть тысячи или миллионы операторов, которые люди хотели бы определить, поэтому вам нужно выбирать, и часто выбор противоречит вашей интуиции.Кроме того, есть около 10% сообщества, которое действительно использовало перегрузку операторов должным образом и действительно заботится об этом, и для кого это действительно важно; это почти исключительно люди, которые работают с числами, где обозначения очень важны для обращения к интуиции людей, потому что они приходят к ним с интуицией о том, что означает +, и способностью сказать «a + b», где a и b комплексные числа или матрицы, или что-то действительно имеет смысл. Когда вы доходите до таких вещей, как умножение, вы становитесь немного шаткими, потому что на самом деле существует несколько видов операторов умножения — есть векторное произведение и скалярное произведение, которые в корне очень разные.И все же оператор только один, так что же делать? И нет оператора для извлечения квадратного корня. Эти два лагеря — полюса, а еще есть каша среди 60 с лишним процентов, которым все равно. Лагерь людей, которые думают, что перегрузка операторов — это плохая идея, просто по моей неофициальной статистической выборке был значительно больше и, безусловно, более громким, чем числители. Итак, учитывая то, как все пошло сегодня, когда некоторые функции языка голосуются сообществом — это не просто какой-то небольшой комитет по стандартам, это действительно масштабно — было бы довольно сложно добиться перегрузки оператора в.И все же это оставляет это единственное сообщество довольно важных людей как бы полностью закрытым. Это оттенок трагедии проблемы общественного достояния.
Использование языков
Q: По вашему опыту, какие ошибки чаще всего допускают разработчики в [C / C ++ / Java]?
Ричи: Я действительно не знаю ответа на этот вопрос. Я бы предположил, что ошибки низкого уровня связаны с ошибками типов, и особенно с индексами массива и ссылками на указатели.Хотя правила относительно того, что вы можете делать, довольно ясны, реализации обычно мало проверяют ..
Я также рискну предположить, что действительно большие проблемы связаны с не продумыванием крупномасштабной структуры больших систем: что видно где, наименование вещей, кто что может изменить. Сам по себе C очень мало может вам здесь помочь; вам нужно разработать схему.
Stroustrup: Использование C ++ так же, как если бы это был C или Smalltalk. Это приводит к серьезно неоптимальному C ++.Чтобы правильно использовать C ++, вы должны принять некоторые собственные стили C ++. Они, как правило, отличаются небольшими конкретными классами и шаблонами. Стиль программирования, на который чрезмерно влияет C, имеет тенденцию использовать множество массивов, умные манипуляции с указателями, приведение типов и макросы, а не стандартные библиотечные средства (такие как векторы, строки и карты). Стиль программирования, на который слишком сильно влияет Smalltalk, пытается втиснуть каждый класс в иерархию и чрезмерно использовать приведение типов (и часто макросы). В любом случае ключевые абстракции имеют тенденцию исчезать в беспорядке деталей реализации, и люди (без надобности) связывают себя узлами с распределением, указателями, приведениями и макросами.
Одна распространенная ошибка, которая меня особенно раздражает, — это использование сложных базовых классов с большим количеством элементов данных в качестве части интерфейсов, предлагаемых разработчикам приложений (пользователям). Абстрактные базовые классы значительно улучшают интерфейсы сервисов. Я пытался искоренить такие злоупотребления более десяти лет: я добавил абстрактные классы в 1989 году после того, как не смог донести идею без поддержки явной языковой функции.
Идея действительно проста:
интерфейс класса {// видят пользователи
// чистые виртуальные функции
};
class my_implementation: открытый интерфейс {
// данные
// функции
// замещающие функции
};
Когда пользовательский код видит только «интерфейс», он невосприимчив к изменениям в «my_implementation.»
Если для реализации необходимы общие структуры данных или операции, их можно добавить в базовый класс, который виден только разработчикам:
класс общий {// виден разработчикам
// данные
// функции
};
class my_implementation: общедоступный интерфейс, защищенный общий {
// данные
// функции
// замещающие функции
};
class your_implementation: открытый интерфейс, защищенный общий {
// данные
// функции
// замещающие функции
};
Это одно из простейших и наиболее фундаментальных применений множественного наследования.
То, что многим людям нужно, чтобы получить от C ++ намного больше , — это не новые функции, это просто более подходящий стиль дизайна и программирования. Я написал несколько статей по этому поводу (см. Мою страницу с «бумагами» среди моих домашних страниц). В частности, Изучение стандартного C ++ как нового языка [6] сравнивает простые упражнения, выполненные в стилях C и C ++.
Gosling: Вероятно, самая распространенная ошибка — это не делать со вкусом объектно-ориентированного программирования.Есть люди, которые этого совсем не понимают, которые просто выполняют какие-то процедурные вещи и пишут свою программу как один огромный класс с множеством методов; они пытаются сделать это в стиле C. Еще есть люди, которые говорят: «Ооо, объекты! Они классные! Давайте сделаем из них миллионы!» На самом деле, это кажется почти ошибкой образовательной системы, потому что если вы посмотрите, чему учили много детей, только что окончивших колледж, это: «Объекты хороши, определите многие из них!» Итак, вы получаете программы с бесчисленным множеством маленьких адаптеров, с методами длиной в одну или две строки, и вы начинаете их профилировать, а они все свое время тратят на диспетчеризацию методов.Тогда единственные виды оптимизирующих компиляторов, которые приносят пользу, — это те, которые тратят почти все свое время, пытаясь исключить отправку методов и выполняя много полного встраивания.
Вопрос: По вашему опыту, сколько времени нужно начинающему программисту, чтобы стать достаточно опытным разработчиком [C / C ++ / Java], способным писать нетривиальный производственный код? Сколько времени требуется программисту с опытом работы на одном или нескольких других языках? Как можно сократить это время?
Ritchie: Я тоже не знаю ответа на этот вопрос — моя обычная шутка по поводу подобных: «Ну, мне никогда не приходилось изучать C…. «
Stroustrup: Это в значительной степени зависит от опыта новичка, сложности задачи, которая была впервые решена с помощью C ++, и от подхода к преподаванию / обучению.
Для начинающего программиста год и год половина кажется подходящей; для программиста, который не знаком с C ++ и поддерживаемыми им методами, полгода кажется более вероятным. Ясно, что я говорю о времени, необходимом для реального использования возможностей языка в важном приложении. напишите «Hello world», и его кузенов, очевидно, можно будет сделать за несколько минут.
Я считаю, что хорошие библиотеки необходимы для обеспечения плавного обучения и правильной последовательности изучения концепций C ++. Например, наличие стандартной библиотеки C ++ позволяет изучить основные концепции типа, области видимости и структуры управления без одновременного использования массивов, указателей и управления памятью. Такие фундаментальные, но низкоуровневые концепции лучше всего изучить немного позже.
Конечно, полагаться на библиотеки в обучении опасно.Они могут создать видимость компетентности, скрывая при этом полное невежество. Одна из целей обучения программированию должна заключаться в том, чтобы сделать происходящее понятным, а не волшебным. Для многих программистов поведение их системы и даже их фундаментальных библиотек — чистая магия. Это опасно. В этом контексте сильной стороной C ++ (и C) является то, что стандартные библиотеки обычно реализуются на самом языке, используя только средства, доступные каждому программисту.
Gosling: Я знаю, что для кого-то, кто является довольно талантливым программистом на C ++, день в значительной степени делает это для многих людей.Вы, вероятно, потратите много времени на изучение руководства по библиотеке. Сам язык, как правило, несложно выучить; это все библиотечные вещи, которые требуют времени, и лучший способ сделать это — просто начать писать и использовать это, а когда вам что-то нужно, ищите это.
Для людей, которые никогда раньше не писали программы, я не знаю. Произошел интересный феномен: раньше стандартным первым языком, которому людей учили в колледже, был Паскаль. Во многом это было связано с тем, что Паскаль был относительно простым и чистым, но также и потому, что, когда что-то идет не так в Паскале, они имеют тенденцию идти не так, как надо, более очевидным образом.Простая проверка указателя и проверка границ массива составляет огромную часть ошибок, которые допускают начинающие программисты, и поэтому на курсах первого года обучения, как правило, в значительной степени преобладает Паскаль. C появился позже только потому, что на C так легко делать глупые вещи; так легко иметь массив и писать «for (i = 1; i <= length; ...)», и вы должны объяснять: «нет, это не меньше или равно length, и это не 1, это 0 и это меньше. " Но, конечно, ваш цикл работает нормально, только, может быть, иногда вы обнаружите, что вы ударяете по заголовку malloc блока, следующего за массивом, и никто никогда вам об этом не сказал.Система не мешала вам, но программа выйдет из строя по-разному, потому что очень легко повредить чужие структуры данных, и поэтому этот фрагмент программы выглядит так, как будто он работает нормально, а вот этот фрагмент выглядит так, как будто он сломан, но этот фрагмент работает со структурами данных, которые были повреждены первым фрагментом. Это невероятно распространено в C и C ++ или любом языке, не имеющем действительно строгой модели памяти. В последние несколько лет люди на самом деле много обучали Java в качестве первого курса, потому что он обладает большой безопасностью, что упрощает преподавание начального курса, плюс, в отличие от Паскаля, это то, что действительно коммерчески актуально для карьеры. .
Взгляд в будущее: куда мы идем?
Q: Есть ли какие-то важные функции, отсутствующие в семействе языков C? Из [C / C ++ / Java]?
Страуструп: В каком смысле C, C ++ и Java составляют семейство языков? C и C ++ имеют большое общее подмножество, и на протяжении многих лет были предприняты серьезные усилия, чтобы свести к минимуму неизбежную тенденцию двух языков к разделению, поскольку они контролируются отдельными органами по стандартизации.Однако Java не обеспечивает реальной совместимости, и аналогичные синтаксические конструкции имеют семантику, отличную от версий C и C ++. Ясно, что Java заимствует у C и C ++, но внутренне сходство с Modula-3 кажется большим.
Несомненно, все три языка можно было бы значительно улучшить добавлением. Однако я не вижу оснований полагать, что есть одна важная функция, которая поможет всем трем языкам.
Gosling: Существование определенно доказывает, что отсутствуют какие-либо важные функции, которые отсутствуют, потому что люди могут выполнять свою работу.Это больше о настройке языка, чем о том, что вы действительно можете сделать. Некоторые из наиболее очевидных функций — это те, которые превратят его в другой язык. Одна из вещей, которая всегда беспокоила меня в C, была слабая модель памяти, тот факт, что вы могли преобразовать указатель на символ в указатель на целое число; он просто делал странные вещи. Но затем вы меняете это, и это больше не C, это в основном Java.
Если вы посмотрите журналы RFE для Java, то на самом деле есть только две функции, которые люди просят, чтобы они появлялись с какой-либо частотой: одна — это утверждения, и на самом деле есть группа, работающая над добавлением утверждений в Java прямо сейчас.Другой — полиморфизм типов, что-то вроде шаблонов, и в Java прямо сейчас есть что-то вроде системы шаблонов для бедняков, в которой иерархия типов имеет общий корень для всего и вся, а именно Object, но есть также группа, работающая над правильным работа полиморфизма типов в Java. Оказывается, это действительно сложная проблема. Одна из причин, по которой я упустил полиморфизм типов в Java, хотя я думаю, что это хорошая идея, заключается в том, что в академических кругах было много споров о том, как это сделать.Вы найдете множество людей, которые имеют очень твердые мнения, и очень трудно найти что-то вроде консенсуса. Другие проблемы яснее: сборка мусора — хорошая идея; goto — плохая идея.
Я думаю, что сами языки для общего применения на самом деле довольно полны. Я думаю, что интересными областями становятся все более специализированные, и у этого есть две развилки: одна — это специализация с точки зрения создания большего количества библиотек, и сегодня для Java создается больше библиотек, которые любой может перечислить.Другой — языковые особенности для определенных сообществ. На самом деле я думаю о перегрузке операторов, которая очень важна для людей, выполняющих числовую работу. Люди, занимающиеся бизнесом, могут действительно привести достаточно веские аргументы в пользу функций, которые выглядят немного в стиле COBOL, например, связанных с запросами к базе данных. Если вы создаете запросы к базе данных с использованием JDBC API, это будет немного неуклюже, так же как создание арифметических выражений становится немного неуклюжим.В некотором смысле, чтобы сделать ее неуклюжей, система должна понимать обозначения для баз данных и математики.
Q: Все языки меняются со временем, и наличие большой установленной базы пользователей может как стимулировать, так и сдерживать такие изменения. Как [C / C ++ / Java] удалось изменить от выпуска к выпуску? Что вы узнали о ключевых моментах или методах успешного создания улучшений, если у вас есть большая установленная база программистов?
Ritchie: Я понял, что это ужасно сложно, и что люди, связанные с успешными языками, могут стать безумно консервативными независимо от их общих склонностей.Проблема в том, что после того, как есть установленная база, даже «совместимое снизу вверх» расширение может стать настоящей проблемой для многих. Программы, использующие расширение, не могут обрабатываться теми, кто еще не был вынужден обновиться. Если им повезет, новый синтаксис, по крайней мере, укажет на проблемы, потому что старый компилятор его не примет. Если им не повезет, они столкнутся с загадочными проблемами, потому что новый язык точно определяет то, что ранее не было определено, и новая программа зависит от этой определенности поведения.
Stroustrup: Я думаю, что идеальная стратегия эволюции — это провести обширные эксперименты перед внесением изменений, точно определить новые функции таким образом, чтобы старый код не стал недействительным, и сделать их доступными повсюду. Затем, через год или два, предупредите о старых (запрещенных или устаревших) функциях, а через год или два удалите эти функции. К сожалению, эта стратегия требует координации между всеми поставщиками.
Старые реализации были серьезным препятствием для стиля программирования C ++, потому что они не позволяли людям, которым нужен переносимый код, использовать новейшие средства (в этом контексте «недавний» иногда означает «изобретенный менее 10 лет назад»).Похоже, что стандарт и желание основных пользователей использовать стандартную библиотеку теперь создают значительные стимулы для разработчиков, чтобы они соответствовали требованиям, а для пользователей — для перехода на современные реализации.
Развитие языка программирования и его реализаций по своей сути сложно, потому что разные люди придают разное значение запуску старого кода без изменений. Раньше я считал совместимость ссылок гораздо более важной, чем совместимость источников. Я не так уверен. У многих организаций нет ресурсов, чтобы исправить сломанный старый код (даже там, где он всегда был сломан).Это свидетельствует в пользу использования параметров компилятора для управления вариациями совместимости.
Я не поклонник опций компилятора для управления вариациями совместимости и предупреждений, но для некоторых они необходимы. Однако настройка по умолчанию для всех компиляторов C ++ должна полностью соответствовать ISO C ++, и отклонения от этого должны вызывать некоторое беспокойство. К сожалению, люди, которые больше заботятся о сроках поставки, чем о качестве кода и подлинной переносимости, склонны выступать за язык, который можно бесконечно изменять с помощью параметров, при этом по умолчанию используется совместимость с ошибками с некоторыми основными поставщиками.
Gosling: В целом мы чрезвычайно консервативны в отношении самого языка. Количество людей, которые просят изменить язык, довольно невелико; количество RFE, связанных с языковыми изменениями, очень и очень мало. Место, где работают изменения и происходят изменения, находится в библиотеках, потому что существует установленный формализм для установления того, что некоторые люди считают языком, всей системой классов, в которой вы можете определять новые классы, и это довольно хорошо справляется с инкапсуляцией это действительно огромная часть всех видов эволюции, которые людям действительно нравятся.
Есть несовместимые изменения, которые меняют смысл существующего кода. Если изменение меняет значение чего-либо в библиотеке, почти всегда ответом было изменение имени. Самые первые библиотеки ввода-вывода читали и записывали байты, и это было главным образом потому, что у нас не было много времени, чтобы делать это правильно. На самом деле они должны были работать с символами, а не с байтами; существует огромная разница между символом и байтом, и они связаны с интернационализацией и кодировкой файлов, а также с ISO this или ANSI that, или UTF-7, или UTF-8 и всем остальным, что делает его намного более сложным.Поэтому вместо того, чтобы изменять семантику входных и выходных потоков, мы фактически создали новые классы, называемые читателями и писателями, и оставили старые для людей, которые хотели их использовать, а новые — для людей, которые хотели к ним адаптироваться.
С библиотеками это в большинстве случаев сойдет с рук. Есть места, где это сделать действительно сложно. В потоках возникали все эти вопросы: «Что значит остановить поток? Убить поток?» и есть много кандидатских диссертаций, которые нужно написать на тему «Что такое thread.kill () означает? «, потому что он затрагивает самую суть целого ряда действительно сложных проблем. И многие системы, включая Java прямо из коробки, имели это определение того, что значит убить поток, которое было довольно целесообразным и добрым. of проигнорировал кучу проблем. По мере поступления сообщений об ошибках стало действительно ясно, что вся идея уничтожения потока — плохая идея.
Q: Что бы вы хотели видеть в [C / C ++ / Java] в ближайшие 2–5 лет? В следующие 10 лет? Почему?
Ritchie: Для C новый стандарт 1999 г. существует, но не стал легкодоступным, и в нем есть несколько изменений по сравнению с более ранние, но не революционные.Я думаю, ему нужно на некоторое время замолчать.
Stroustrup: Я думаю, что упор при развитии C ++ должен быть сделан на создании библиотек. Я надеюсь, что следующий стандарт будет в первую очередь посвящен предоставлению дополнительных возможностей в стандартной библиотеке, и что изменения языка возникнут в первую очередь из-за потребностей таких возможностей.
Решить, какие библиотеки включить, и сохранить / сделать их согласованными будет очень сложно. Идеальная ситуация была бы, если бы кто-то пришел в комитет с библиотекой, которая была бы достаточно общей, достаточно элегантной, достаточно эффективной и достаточно инновационной, чтобы дать комитету основу для работы.Это случилось с STL. Комитет не умеет синтезировать вещи. Я думаю, что в природе комитетов — лучше оттачивать и доводить до совершенства, чем над реальным дизайном и экспериментами. По этой причине я опасаюсь потока несвязанных предложений по решению (небольших) индивидуальных проблем.
Очевидно, что многих беспокоит параллелизм и интерфейсы с различными системами (например, графический интерфейс, базы данных, операционные системы, другие языки, модели компонентов). Это [] наиболее вероятная область работы, и создание и поддержание согласованности будет основной проблемой.Например, будет важно обеспечить единообразное представление текста из C ++. Если одни интерфейсы используют строки в стиле C, другие — строку стандартной библиотеки, а третьи — представления строк, полученных из систем, с которыми сопрягаются интерфейсы, — это рецепт хаоса. Я предлагаю сделать стандартную библиотечную строку основой для всех привязок C ++ к «другим системам». В общем, нам нужен согласованный взгляд на управление ресурсами, чтобы пронизывать стандартную библиотеку.
В: Есть ли место и / или рыночный спрос на новый язык в семействе C?
Ritchie: Немного сложно представить язык, который почти похож на C, но достаточно лучше, чтобы его заменить.Это зависит от того, что подразумевается под «семейством C». Означает ли это «использует {}»? «Называет тип в начале объявления»?
Страуструп: Я думаю, что сообществу пользователей лучше всего будет обслуживать единый язык, обеспечивающий низкоуровневую поддержку системного программирования. Я думаю, что C ++ здесь хорошо подойдет, и я не вижу технических проблем при слиянии C и C ++. Но я вижу много политических проблем. Продавцы / поставщики любят множество языков и диалектов, так что они могут претендовать на преимущества для своего варианта и удерживать своих пользователей.Кроме того, каждая организация стремится увековечить себя, поэтому я не вижу, чтобы ни один из языков, диалектов и вариантов мирно умирал.
Java не поддерживает низкоуровневое системное программирование, поэтому она должна полагаться на другие языки (такие как ассемблер, C или C ++). И наоборот, чтобы C или C ++ были полезны для безопасной загрузки на другую машину, нам нужна либо поддержка оборудования (мое предпочтительное долгосрочное решение для всех языков), либо виртуальная машина C ++ (да, такие звери существуют), либо прорыв в программе. проверка (не затаив дыхание).
Итак, есть ли место для другого языка помимо C, C ++ и Java? Конечно, есть место для большего количества языков. Вопрос в том, следует ли считать такие языки частью семьи. Кроме того, новый язык следует создавать только в том случае, если существуют серьезные проблемы, которые нельзя решить с помощью существующих языков. Языки и диалекты, которые предоставляют пользователям лишь незначительные удобства, просто фрагментируют сообщество и отвлекают ресурсы, которые можно было бы использовать для общего блага.
Гослинг: Да, конечно.Я не знаю, что вы называете «языком в этой семье». Есть ли язык, в котором используются фигурные скобки, из семейства C? AWK принадлежит семейству C? Вы можете назвать AWK в семействе C. И мне бы хотелось думать, что есть место для большего количества языков; принадлежат ли они к семейству C или нет, почти не имеет значения.
Одной из настоящих трагедий за годы до появления Java было то, что исследования языков программирования почти прекратились во всем мире. Затем появилась Java, и она действительно имела успех. Когда я учился в университетах, я получил много комментариев: «Вау, вы действительно узаконили все изучение языков программирования.«Я думаю, что это было бы трагическим заявлением о вселенной, если бы Java была последним языком, который пронесся мимо. Я надеюсь, что появятся некоторые новые, более интересные парадигмы, и буду ли я участвовать в этом или нет, кто знает. Было бы хорошо, если бы мир не ждал еще 20 лет. Может быть, еще пять лет было бы неплохо, чтобы получить некоторую стабильность, потому что изменение языка программирования похоже на изменение базовой генетической структуры организма. ремесла программирования, так что изменить его действительно сложно.
Q: Какие типы приложений хорошо подходят для [C / C ++ / Java]? Какие нет?
Stroustrup: Без поддержки библиотек большинство серьезных приложений на C ++ излишне сложно. С подходящими библиотеками большинство из них довольно просто. C ++ имеет неотъемлемую силу в приложениях с системным компонентом, особенно там, где есть ограничения на ресурсы (такие как время выполнения и память). Исходя из этого, C ++ обеспечивает значительную поддержку для организации более крупных программ для упрощения обслуживания и развития.
При соответствующей поддержке библиотеками C ++ может стать отличным языком обучения. В концепции обучения важно начинать с современного C ++, а не увлекать студентов старыми стилями. См. «Изучение стандартного C ++ как нового языка» (этот документ можно загрузить с моих домашних страниц). В преподавании величайшая сила C ++, вероятно, состоит в том, что он позволяет студенту познакомиться с множеством техник, которые могут быть применены к реальным проблемам.
Gosling: Java, безусловно, хорошо подходит для всего, что связано с сетями и там, где важна безопасность.Есть некоторые вещи, на которые он никогда не был нацелен, хотя люди определенно этим занимаются. Написание драйверов устройств, как правило, довольно неудобно, хотя удивительно, как много людей сделали ряд довольно очевидных вещей, чтобы сделать написание драйверов устройств на Java более простым. Кроме того, есть люди, которые занимаются очень интенсивными вычислениями … Java на самом деле не создавалась с учетом этого, и в ней есть некоторые вещи, которые несколько сложны, но есть много людей, которые занимаются числовым программированием на Java и обнаруживают, что это компромисс того стоит.
Вопрос: Становятся ли языки легче или сложнее в изучении и использовании? Наблюдаете ли вы какие-либо прогрессивные тенденции в удобстве использования C, C ++ и Java по мере появления этих языков и / или добавления функций с течением времени?
Страуструп: Языки становятся проще в использовании. Однако может показаться, что это не так, потому что в наши дни мы пытаемся достичь гораздо более сложных целей. Например, C ++ со средствами стандартной библиотеки (такими как строка, вектор и алгоритмы) намного проще в использовании, чем C ++, использующий строки в стиле C, массивы и функции стандартной библиотеки C для решения тех же проблем.
Я вижу явную тенденцию в простоте использования и выразительности от C к C ++. В конце концов, за небольшими исключениями, C ++ — это надмножество C. Однако я не вижу такой строчки от C ++ к Java. Java пытается ограничить программистов одним стилем программирования. Это упрощает использование Java в этой области, но приводит к некрасивым обходным путям, когда приближаются к границам этого стиля. Очевидный пример — необходимость приведения типов при использовании контейнеров Java.
Мне кажется, что C ++ и Java проходят разные курсы в том, что касается эволюции стиля и языка.Можно было бы ожидать, что интенсивное использование библиотек сведет к минимуму это расхождение, но с современными библиотеками C ++, делающими упор на сложное использование шаблонов, и современными библиотеками Java, делающими упор на внутренние классы, этого не происходит.
Часто обсуждения «простоты использования», «кривой обучения» и «сложности» путают, потому что часто концепция может быть представлена на языке, в стандартной библиотеке, в библиотеке, которая не является частью стандарта, или в коде, написанном прикладным программистом.Как правило, я предпочитаю решать сложные вопросы на языке или в стандартной библиотеке. Помещая здесь «сложность», многие программисты могут извлечь выгоду из солидной работы экспертов, а мы минимизируем необходимость «изобретать велосипед». Однако язык воспринимается как сложный, если он обеспечивает такую поддержку, и простой, если он оставляет проблемы на усмотрение разработчика отдельных приложений.
Gosling: Я определенно вижу тенденцию в том, что люди обеспокоены удобством использования.В какой степени они на самом деле достигают удобства использования — это совсем другой вопрос. На самом деле, я не думаю, что удобство использования — действительно хорошее слово, потому что оно имеет коннотацию чего-то тривиального, в том смысле, что это что-то не нужно, это то, что вы делаете, просто чтобы чувствовать себя более комфортно, например добавление подушки к стулу.
Для меня важнее всего то, что сложность систем, которые мы все создаем, становится все больше и больше с каждым днем.Безусловно, все оборудование, на котором мы строим эти вещи, управляется каким-то видом или производным от закона Мура. Создаваемые нами программные системы не имеют ничего подобного, но они определенно становятся более сложными — и довольно быстро. Как вы строите большие сложные системы? Есть много вещей, которые мы не очень хорошо понимаем, и я думаю, что на самом деле многие из них выходят за рамки того, что люди обычно считают языком программирования.
Один из моих любимых примеров в наши дни — алгоритм рисования линий Брезенхема.Вы берете любую книгу по графике для первого года обучения, и в ней описывается алгоритм Брезенхэма для рисования линии, и он состоит примерно из пяти утверждений, делает то, что делает, и это довольно просто. Вы идете и смотрите на любую промышленную реализацию алгоритма Брезенхема, и это тысячи, если не десятки тысяч строк. Почему он такой большой? Почему вся эта сложность заключается в том, что на самом деле очень простой алгоритм? Многое связано с различными частными случаями, пониманием того, что происходит под машиной, такими вещами, как размер строки кэша; у этой машины есть строки кэша шириной 16 байт? Шириной 8 байт? 32 байта в ширину? В конечном итоге вы захотите по-другому оптимизировать внутренний цикл.Какая разрядность пикселя? Вы говорите об 1-битных пикселях? 8-битные пиксели? 16-битные пиксели? 15-битные пиксели? Вы рисуете пиксель? XOR для пикселя? альфа-смешивание пикселя? Многие из этих вещей на самом деле могут быть выражены в терминах преобразований алгоритмов, и около 10 лет назад я выполнил проект, построив систему, которая была своего рода макро-препроцессором для C, но больше походила на средство доказательства теорем. Это был своего рода препроцессор макросов на семантическом графе, и вы могли писать макросы на семантическом графе.Вы могли написать преобразования алгоритмов, и поэтому вы действительно могли написать алгоритм Брезенхэма в пять строк, выразить преобразования и довести его до промышленной версии. Одним из больших преимуществ такого подхода является то, что вы лучше понимаете, правильно это или нет, и вся проблема тестирования и настройки становится намного проще. И все же, это вопрос языка программирования или среды программирования? В каком-то смысле вы вообще не изменили семантику языка с точки зрения того, что вы можете делать.Вы изменили то, как вы это говорите, и манипулируете не столько текстом программы, сколько семантическим графом. В подобных вещах просто огромная территория. Эта система, которую я построил, использовалась для многих графических алгоритмов Sun, но у меня была огромная проблема, заключающаяся в том, что я не мог заставить людей понять, что она делает. Это было очень странно, и с его помощью можно было написать несколько очень крутых программ, но заставить людей понять, что значит проводить доказательство теорем как часть построения нового алгоритма, было довольно сложно.При разработке многих языков программирования речь идет не столько о том, «Что такое классная функция? Что соответствует каким-то модным академическим критериям?»). Это действительно вопрос: «Что подходит разработчикам?»
Персональные настройки
В: У всех нас есть разные причины, по которым мы решили работать в индустрии программного обеспечения. Что привлекло вас в области программного обеспечения? Что делает его крутым?
Ritchie: Я начал интересоваться физикой, но до сих пор сохраняю любительский интерес в том, чтобы не отставать от того, что происходит на ее краях.Когда-то в колледже и аспирантуре я много времени уделял теоретической информатике (машины Тьюринга, теория сложности). Тем временем меня больше увлекли настоящие компьютеры и, я полагаю, непосредственность получаемого ими опыта: когда вы пишете программу, вы сразу видите, что она делает. Все эти вещи интересным образом связаны друг с другом. Меня мотивировала деятельность такого рода. Почему-то я не думал о том, что делаю, как о присоединении к индустрии программного обеспечения, хотя даже в 1968 году, я думаю, это было так.
Страуструп: Я не совсем уверен, что привело меня к компьютерам. Я рассматривал компьютеры как практичный и полезный выход для научных интересов. Мне очень нравится строить. При сборке вы получаете обратную связь от инструментов, от программы / системы и от пользователей. Это то, что выталкивает воображение за пределы очевидного и предвзятого мнения и доктрины отдельного человека, академической области или организации. Мне нравится идея Кристен Найгаард о программировании как о средстве понимания чего-либо.
Gosling: Я не знаю, что такое моя генетическая структура, но мне просто нравится строить вещи. В каком-то смысле, создаю ли я программное обеспечение, создаю стул или готовлю обед — также известный как кулинария — я получаю удовольствие от простого создания вещей. Одна из приятных особенностей программного обеспечения заключается в том, что вы можете создавать самые удивительно сложные сложные вещи, и вы можете делать это довольно быстро. Если бы я был часовщиком, уверен, я бы разочаровался в том, насколько сложно было создавать вещи с большим количеством шестерен и шкивов; И все же, просто глядя на хорошие часы, снимаешь заднюю часть, и это так здорово.Я не знаю, почему это круто, мне просто кажется, что это круто. С помощью программного обеспечения вы можете поместить туда столько шестерен, кулачков и всего, что захотите, и все становится просто сложным. В некотором смысле то, что мне больше всего нравится в программном обеспечении, — это то, с чем я в конечном итоге трачу большую часть своего времени на борьбу, а это сложность.
В: Какой язык программирования вы впервые использовали?
Ричи: Я не могу точно определить время. Более или менее одновременно, примерно в 1962 году, я пошел на лекцию о Коболе (написанную Джин Саммет) и прошел курс, который включал программирование аналоговых компьютеров с использованием коммутационной панели и написание машинного языка Univac I (без ассемблера).Примерно в это же время я посетил офис IBM в Кембридже (Массачусетс), и они дали мне руководства по Фортрану, которые я с удовольствием прочитал.
Страуструп: Моим первым языком программирования был Algol60 на компьютере GIER. GIER был датским компьютером 1960-х годов с 1K 42-битными (я думаю, плюс несколько дополнительных битов для тестирования оборудования) словами.
Gosling: Первым языком программирования, который я когда-либо использовал, был язык под названием Focal 5. Focal расшифровывалось как «исчисление формул». Это был язык сценариев для PDP-8.Я писал большинство своих первых программ, используя Focal 5. Это язык, полный компилятор и исполняющая система которого могут быть реализованы менее чем за 24 часа. На самом деле это красивый маленький язык, намного проще, чем Basic.
В: Какие языки или особенности языков вдохновили вас?
Страуструп: Помимо Simula67, моим любимым языком в то время был Algol68. Я думаю, что «Алгол68 с классами» был бы лучшим языком, чем «Си с классами».«Тем не менее, это было бы мертворожденным.
Gosling: Они повсюду. При использовании Lisp на меня больше всего повлияла невероятная разница в сборке мусора. Используя Simula и будучи местным сопровождающим Компилятор Simula действительно познакомил меня с объектами и заставил задуматься об объектах. Использование таких языков, как Паскаль, заставило меня серьезно задуматься о моделировании. Такие языки, как Modula-3, действительно подтолкнули меня к таким вещам, как механизмы исключений. Я использовал много языков, и многие из них оказали влияние.Вы можете просмотреть все на Java и сказать: «это пришло оттуда, а это пришло оттуда».
Q: Какую программу вы написали первой? На каком железе?
Ritchie: Как и выше, первой на реальном компьютере была программа Univac I. (Как я узнал через год или около того, на самом деле упражнения заключались в реализации некоторых операторов APL — примерно тогда был Иверсон).
Страуструп: Я не помню, но это должно быть какое-то 101 упражнение по информатике в Algol60 на компьютере GIER.Первые программы, которые я сделал по-настоящему, то есть для использования другими, были бизнес-программами, написанными на ассемблере для офисных компьютеров Burroughs. Таким образом я профинансировал большую часть своей датской степени магистра.
Q: Есть ли язык программирования, который лучше всего подходит для разработки всех (или почти всех) приложений? Если да, то на каком это языке и что лучше всего? Если нет, что нужно для создания такого языка?
Ричи: Нет, это глупо.
Страуструп: No.Люди слишком различаются для этого, и их приложения слишком разнятся. Идея идеального и почти идеального языка — мечта незрелых программистов и маркетологов. Естественно, каждый разработчик языков пытается как укрепить свой язык, чтобы лучше служить основному сообществу, так и расширить его привлекательность, но быть всем для всех — не разумный идеал. Есть подлинный выбор дизайна и компромиссы, которые необходимо сделать.
Q: Программисты часто говорят о преимуществах и недостатках программирования на «простом языке».«Что эта фраза означает для вас, и является ли [C / C ++ / Java] простым языком, с вашей точки зрения?
Ritchie: C (и другие в этом отношении) в некотором смысле просты, хотя они также тонкий; другие, несколько похожие языки, такие как Паскаль, возможно, проще. Стало ясно, что аспекты среды, такие как библиотеки, которые не являются частью основного языка, намного больше и сложнее. часть библиотеки, чем в языке; C ++ STL и другие вещи большие; AWT и другие вещи, связанные с Java, тоже.
Страуструп: Я вижу три очевидных понятия «простой»: быть легким для изучения, облегчить выражение идей и иметь однозначное соответствие некоторой форме математики. С этой точки зрения ни один из трех языков не является простым. Однако после освоения C и C ++ можно легко выражать довольно сложные и продвинутые идеи, особенно когда эти идеи должны быть выражены в условиях реальных ограничений ресурсов.
Вопрос: Какие темы, по вашему мнению, отсутствуют в университетских программах по информатике и инженерии по всему миру, которые помогли бы улучшить качество программного обеспечения?
Страуструп: На некоторых уважаемых факультетах информатики вы можете получить высшее образование, не написав никакого кода.Это невозможно. Никто не должен получать диплом по информатике или компьютерной инженерии, не выполнив значительного проекта по программированию. Код — это основа вычислений, и люди, не «разбирающиеся» в коде, склонны серьезно неверно оценивать, какие навыки, инструменты и время необходимы для создания хороших систем.
У многих некачественный дизайн и программирование есть коренные причины в неправильных представлениях о том, что представляет собой хороший код. Я думаю, что чтение и написание кода должны быть важной частью обучения каждого компьютерного профессионала — даже в обучении лиц, принимающих решения, которые не зарабатывают программированием на жизнь.Как бы много мы ни говорили о «компьютерных науках» и «программной инженерии», создание систем по-прежнему имеет большой практический компонент, связанный с чтением, написанием и сопровождением кода, и это не изменится в обозримом будущем.
Нет, я не утверждаю, что надо просто учить взлому. Я выступаю за баланс между теоретическими и практическими навыками. Другая часть образовательного учреждения сталкивается с противоположной проблемой. Они обучают людей (только) практическим навыкам, а не обучают их.
В: Какие языки, помимо семейства C, вам нравятся больше всего? Что, в частности, делает их интересными для вас?
Ричи: Я восхищаюсь языками вроде Лиспа. Но, как и в предыдущем вопросе о «простом» языке, удивительно простой язык на практике превращается во что-то, что может быть устрашающим.
Stroustrup: На ум приходят Algol68, CLOS и ML. В каждом случае меня привлекает гибкость и несколько очень элегантных примеров кода.
Q: Какие ваши любимые книги по программному обеспечению?
Ritchie: Это подержанное самообслуживание, но работы Кернигана и Пайка (по отдельности или вместе) хороши. [7] [8] В некотором смысле мне нравится старый Керниган и Плаугер по стилю программирования [9] лучше всего, хотя бы по той простой причине, что взять программы, опубликованные в других местах, и показать, насколько они плохи.Больше всего мне понравилась книга Бена Росса Шнайдера «Путешествие в компьютерную страну» , [10] , которая тоже старая, и сейчас ее трудно достать.
Страуструп: Брукс Месяц мифического человека , [11] Объектно-ориентированный дизайн Booch , [12] и шаблоны дизайна Gamma et.al. [13]
Q: Если бы вы могли порекомендовать две книги по [C / C ++ / Java] помимо вашей, какими бы они были и почему?
Страуструп: Шаблоны проектирования снова, для людей, стремящихся к гибкости.В качестве дополнения я хотел бы порекомендовать книгу, посвященную эффективности, но я не знаю той, которая меня полностью устраивает. Для многих людей Ruminations on C ++ [16] Кенига и Му окажут ценную услугу, поколебав их предубеждения о том, что такое C ++ и чем может быть.
Стандарты языков программирования
В: Важно ли иметь формальный стандарт (например, ISO / ANSI) для языка программирования? Каковы преимущества? Недостатки?
Ritchie: В какой-то момент становится необходим формальный стандарт, особенно для языков, которые развились неформально (конечно, C, но также C ++ и Java).Процесс действительно имеет тенденцию несколько уточнить, а также вносит в таблицу некоторые изменения или расширения, которые могли бы предвидеть другие, помимо дизайнеров. Письменный стандарт также дает организациям (во всех секторах) определенную уверенность в том, что их технический персонал, который может быть увлечен языком или другим программным обеспечением, не просто следует какой-то блуждающей воле. Этот процесс имеет определенную серьезность.
В то же время есть недостатки, заключающиеся в том, что какое бы ясное (или туманное) видение, которое могло быть у первоначальных дизайнеров, в конечном итоге окрашивалось какими-либо странными предложениями, выдвигаемыми участниками процесса.Сложность неизменно возникает в результате компромиссов.
Страуструп: В сегодняшней перегретой коммерческой атмосфере очень важно иметь официальный стандарт. Без формального стандарта нет защиты от хищных продавцов. Естественно, стандарт ISO не является полной защитой, и не все наши языки, библиотеки или инструменты можно стандартизировать. Однако без стандарта пользователи полностью зависят от своих поставщиков.
Основным преимуществом является наличие стандарта, которым не манипулируют в коммерческих интересах компании или небольшой группы компаний.Стандарт ISO является результатом процесса консенсуса, который дает право голоса отдельным лицам, компаниям и странам.
Основные недостатки заключаются в том, что для существенного достижения консенсуса требуется время, что комитет имеет ограниченные ресурсы и что трудно достичь консенсуса в отношении чего-то новаторского. Однако это можно сделать: помните о STL.
В: Важно ли иметь фактический стандарт для языка программирования? Каковы преимущества? Недостатки?
Stroustrup: Стандарт де-факто является большим преимуществом для его владельца и его друзей / союзников.Это также может принести пользу третьим сторонам, таким как профессора, студенты и небольшие компании. Пока корпорация, владеющая «стандартом» де-факто, находится в процессе устранения альтернатив, инструменты и поддержка, как правило, дешевы, а влияние маркетинга влияет на интеллектуальную и деловую атмосферу. Позже цена повышается.
Q: Что вы узнали, изучая стандарты для [C / C ++ / Java]?
Страуструп: Достижение консенсуса утомительно и необходимо.Люди и организации действительно хотят поступать «правильно», учитывая половину шанса. Политические проблемы решить невозможно. Способ решения политической проблемы состоит в том, чтобы найти техническую проблему в ее основе и вместо этого решить ее. Тогда политическая проблема исчезнет.
Программная индустрия «Century 21»
Q: Прогнозирование сложно, но ценно, даже если оно никогда не может быть точным на 100%. На ваш взгляд, каковы основные движущие силы того программного обеспечения, которое мы будем писать в будущем? и как мы будем писать это программное обеспечение?
Ritchie: Наиболее очевидное изменение, которое произошло в последнее время, — это рост использования «языков сценариев», которые обычно интерпретируются.Они варьируются от базовых, таких как HTML, до Perl, Tcl / Tk и Javascript, а затем до пакетов презентационной графики для создания WWW-страниц или слайдов.
Число людей, занимающихся вычислениями в традиционном смысле, несколько увеличивается, но число людей, создающих вещи, на которые будут смотреть другие, чрезвычайно увеличивается.
Страуструп: Будущее? в наши дни почти невозможно даже описать настоящее.
Мы должны уделять больше внимания правильности, качеству и безопасности.Наша цивилизация критически зависит от программного обеспечения, и у нас опасно низкий уровень профессионализма в компьютерных областях.
Страуструп: Слишком часто мы просто бросаем больше людей на решение проблемы. Я думаю, что в долгосрочной перспективе нам просто нужно применить более систематический подход к разработке, развертыванию и обслуживанию нашей системы. Потребуется повышение профессионализма, что позволит нам использовать более совершенные инструменты и методы. Существует тенденция упрощать языки и инструменты, чтобы «программисты» с несколькими неделями «образования» и «опыта» могли начать их использовать.Я считаю, что эту тенденцию нужно переломить. Нам нужны инструменты для профессионалов.
Что касается языков, я думаю, это будет означать переход к языкам, которые лучше специфицированы, более гибки и лучше подходят для анализа. Может быть, наконец-то произойдет синтез объектно-ориентированных и функциональных техник.
Я не думаю, что языки будут интерпретироваться или компилироваться. Решение о компиляции и интерпретации будет приниматься для отдельных программ и частей программ в соответствии с практическими потребностями.
Я думаю, что у нас будет что-то узнаваемое в программировании в том виде, в каком мы его знаем сегодня. Будут профессиональные программисты, которые борются с кодом в различных представлениях и используют инструменты для чтения, анализа и написания такого кода. Однако я подозреваю, что подавляющее большинство программного обеспечения будет создано людьми, которые являются экспертами в других областях или просто реорганизуют свою личную среду. Я понятия не имею, что будут использовать такие непрофессионалы, но он будет во многом полагаться на очень поддерживающую инфраструктуру, предоставляемую профессиональными сборщиками систем, и не будет восприниматься пользователями как что-то вроде кода.Я подозреваю, что это будет в высшей степени декларативным и основанным на правилах.
Я действительно надеюсь, что программное обеспечение и системы 2050-х годов будут слишком продвинутыми, чтобы я мог представить себе их сегодня, точно так же, как у эксперта 1950-х годов было мало шансов предсказывать сегодняшние системы с какой-либо точностью или деталями.
Примечания
1. Б. Керниган и Д. Ричи. Язык программирования C, 2-е издание (Прентис Холл, 1998) ISBN 0131103709.
2. Б. Страуструп. Дизайн и развитие C ++ (Аддисон-Уэсли, 1994) ISBN 0201543303.
3. Б. Страуструп. Язык программирования C ++, специальный выпуск (Addison-Wesley, 2000) ISBN 0201700735.
4. http://www.research.att.com/~bs.
5. Б. Страуструп. «Обертка вызовов функций-членов C ++» (отчет C ++ , 12 (6), июнь 2000 г.).
6. Б. Страуструп. «Изучение стандартного C ++ как нового языка» ( C / C ++ Users Journal , май 1999; также в CVu 12 (1) январь 2000).
7.Б. Керниган и Р. Пайк. Практика программирования (Аддисон-Уэсли, 1999) ISBN 020161586X.
8. Б. Керниган и Р. Пайк. Среда программирования UNIX (Прентис Холл, 1984) ISBN 013937681X.
9. Б. Керниган и П. Дж. Плаугер. Элементы стиля программирования (МакГроу-Хилл, 1988) ISBN 0070342075.
10. Б. Шнайдер. Путешествия в компьютерной сфере: или несовместимости и интерфейсы: полный и достоверный отчет о реализации лондонского информационного банка Stage , ASIN 0201067374.
11. Ф. Брукс. Мифический человеко-месяц: Очерки программной инженерии (Аддисон-Уэсли, 1995) ISBN 0201835959.
12. Г. Буч. Объектно-ориентированный анализ и дизайн с приложениями (Аддисон-Уэсли, 1994) ISBN 0805353402.
13. Э. Гамма, Р. Хелм, Р. Джонсон и Дж. Влиссидес. Шаблоны проектирования: элементы объектно-ориентированного программного обеспечения многократного использования (Аддисон-Уэсли, 1995) ISBN 0201633612.
14. Дж. Бентли. Programming Pearls, Second Edition (Addison-Wesley, 1999) ISBN 0201657880.
15. Р. Седжвик. Алгоритмы на C, 3-е издание (Addison-Wesley, 2000) ISBN 0201849372. (Седжвик выпустил не менее десяти книг «Алгоритмы», охватывающих различные области применения или специализированных для разных языков программирования. Это одна из недавно написанных / обновлено.)
16. А. Кениг и Б. Му. Размышления о C ++ (Addison-Wesley, 1996) ISBN 0201423391.
Изобретатель C ++ размышляет о 25-летнем возрасте языка программирования
Wired обращается к Бьярну Страуступу — изобретателю языка программирования C ++ — через 25 лет после его изобретения
1985: Опубликован первый официальный справочник по языку программирования C ++.Автор, Бьярн Страуструп, также является создателем языка.
Страуструп взламывал свою замену языку программирования C в лабораториях AT&T Bell с 1979 года, где ему и его коллегам из исследовательского отдела была предоставлена полная свобода экспериментов с новыми способами создания программного обеспечения.
C ++ стал одним из самых популярных языков программирования, когда-либо созданных. Он был разработан как язык «общего пользования»: его можно запускать практически на любой платформе, и он встречается почти везде, особенно в видеоиграх и встроенных системах.
«Если бы я подумал об этом и имел хоть какое-то маркетинговое чутье, — говорит Страуструп, — на каждом компьютере и практически любом гаджете была бы наклейка« C ++ Inside »».
После публикации The C ++ Programming Language , Страуструп продолжал оставаться активным в сообществе C ++, работая над дизайном языка, написав компиляторы и помогая сделать язык стандартом ISO в 1998 году. В настоящее время он является заслуженным профессором и обладателем Кафедра инженерных наук в области компьютерных наук Техасского университета A&M.
В ознаменование серебряной годовщины публикации его окончательного текста мы попросили Страуструпа поразмышлять о последних 25 годах, в том числе о наследии C ++ и его влиянии на сегодняшние вычислительные приложения. Страуструп также рассказывает нам, какую музыку он слушает во время кодирования — смесь классики и музыки Клэптона. Он ответил на наши вопросы по электронной почте.
Проводной: Для кого вы создавали C ++? Себя или имел в виду более широкую аудиторию?
Бьярне Страуструп: Это было сделано для меня, моих друзей и коллег.У нас был широкий спектр проблем, и C казался излишне примитивным инструментом для проектирования и реализации того, что мы могли делать с более быстрыми компьютерами и большей памятью. С другой стороны, по стандартам 2010 года машины все еще были до смехотворно маленькими и медленными. Один МГц и 1 Мбайт — это роскошь. Таким образом, было важно свести к минимуму накладные расходы по сравнению с тем, что было логически необходимым.
В то время AT&T Bell Labs была просто самым интересным местом в мире для инженера или компьютерного ученого с практическими наклонностями.Не было конца разнообразию интересных задач и такому количеству интересных людей, с которыми можно было бы сотрудничать.
«Иногда важнее иметь правильную проблему, чем лучшее решение».
Проводной: В какой момент вы поняли, что ваше творение будет «большим событием»?
Страуструп: Меня постепенно осенило. Я был слишком занят работой, чтобы размышлять философски, но с первого дня я стремился к общности и знал, что выжить могут только сформулированные идеи.Я знал, что объектно-ориентированное программирование (ООП) — это «большое дело», но я был слишком близок к процессу, чтобы по-настоящему оценить то, что я делаю.
Я просто хотел сделать методы программирования, основанные на безопасности статических типов и абстракции, доступными, доступными для обучения и применимыми к системному программированию. Помимо разработки и реализации языка, я помогал в десятках проектов, чтобы разобраться в различных проблемных областях.
С 1979 по 1991 год сообщество пользователей C ++ удваивалось каждые 7.5 месяцев. Это оставило мне немного времени для тихих размышлений. Следует отметить, что это было время брожения в сообществе программистов: Ada, Smalltalk, Eiffel, Objective C, предшественники CLOS и другие языки энергично боролись за разделение разума. В этом контексте C ++ был единственным «продвинутым языком» без маркетинговой организации.
Обратите внимание, что я претендую на известность не изобрел ООП. Я не сделал этого — эта честь принадлежит дизайнерам Simula: Оле-Йохану Далю и Кристен Найгаард, — но я приложил немало усилий, чтобы сделать его популярным.Кроме того, моей целью в C ++ всегда было выходить за рамки узких определений ООП. Даже в моей первой статье был представлен пример общего программирования (и все было неправильно). Иногда более важна правильная проблема, чем лучшее решение.
Проводной: На ваш взгляд, какое самое значительное влияние C ++ оказал на культуру в целом — не на программистов, а на обычных людей?
Stroustrup: Конечной мерой успеха любого языка программирования должно быть влияние его приложений.
«Когда все сделано хорошо, программное обеспечение невидимо».
Мера — , а не — красота индивидуального утверждения о том, насколько элегантный пример вы можете вписать в академическую статью в формате POPL с двумя столбцами. Так что для меня главное удовлетворение — это интересные и сложные приложения, которые просто невозможно было бы реализовать без C ++ или, возможно, откладывать на много лет из-за отсутствия языка, подходящего для требовательных реальных приложений.
Марсоходы, сопоставление строк ДНК проекта генома человека, Google, Amazon, системы бронирования авиабилетов (Amadeus), анализ кода (Coverity), анимация (Maya), автомобили, самолеты, Photoshop, телекоммуникационные системы.Такие видеоигры, как Doom , Warcraft , Age of Empires , Halo . Ветровые турбины, разведка нефти. Большая часть программного обеспечения Microsoft и большая часть программного обеспечения Apple. Виртуальные машины Java. Thunderbird и Firefox, MySQL, множество финансовых программ, OpenOffice и т. Д.
Когда все сделано хорошо, программное обеспечение становится невидимым. В моей маленькой камере несколько процессоров, но я не считаю свою камеру компьютером. В современной машине есть десятки компьютеров, но мы все еще думаем о ней как об автомобиле.
Люди видят приложения, но я имею дело в первую очередь с основами и инфраструктурой, которые поддерживают эти приложения. Думаю, если бы я подумал об этом и имел какое-то маркетинговое чутье, на каждом компьютере и практически любом гаджете была бы наклейка «C ++ внутри».
«Мы зависим от программного обеспечения. Без него большинство людей умерло бы с голоду. Мы также остались бы без электричества, тепла и телефонов ».
В целом, я не думаю, что люди понимают, насколько мы зависим от программного обеспечения.Учитывая сложность современного общества и современных транспортных систем, справедливо будет сказать, что без программного обеспечения большинство людей просто умерло бы от голода. Также остались бы без электричества, тепла и телефонов.
Проводной: Сколько времени вы сейчас тратите на программирование?
Страуструп: Конечно, мало. Бывают дни, когда я не пишу никакого кода, и в большинстве случаев я пишу только небольшие фрагменты кода и экспериментальные программы. Я трачу больше времени на размышления о программировании, пытаюсь учить программированию, пытаюсь писать о программировании и пытаюсь придумать принципиально лучшие способы разработки программного обеспечения.
Мне это непросто. Написание кода проще и легче, но само по себе это обычно так же бесплодно и неважно, как разгадывать кроссворды.
Однако на самом деле бывает всего несколько дней, когда я не завершаю код и никогда не выступаю без кода.
Проводной: Какое оборудование и программное обеспечение вы используете в настоящее время?
Страуструп: У меня небольшой (весом менее 3 фунтов) ноутбук с кучей компиляторов C ++.Это коробка для Windows. Мой рабочий стол — Linux с большим количеством компиляторов и инструментов для разработки программного обеспечения.
«Если кто-то утверждает, что владеет идеальным языком программирования, он либо дурак, либо продавец, либо и то и другое».
Проводной: Что вам нравится в новых системах, фреймворках, протоколах и приложениях?
Stroustrup: Замечу, что я считаю идею одного языка, одного инструмента программирования единственным и лучшим инструментом для всех и для каждой младенческой проблемы.Если кто-то утверждает, что владеет прекрасным языком, он либо дурак, либо продавец, либо и то, и другое.
Проводное соединение: Большинство программистов уделяют особое внимание музыке, которую они слушают, когда пишут или пишут код. Что ты слушаешь?
Страуструп: Чайковский Пятый , Вагнер Кольцо без слов , Григ Пэр Гюнт Люкс , Сибелиус, Нильсена Неугасимый , различные концерты Моцарта Хэнбеделя 907, Диксати Хэнбедель , Диксати Хэнбедель Мессия и Water Music , Эрик Клэптон, Бетховен Пятый и Седьмой .Я посмотрел, во что играл мой ноутбук в последнее время.
Проводное: Каким образом ультрапортативные устройства с сенсорным экраном — iPhone, телефоны Android, iPad — меняют то, как компьютеры вписываются в нашу жизнь?
Страуструп: Я подозреваю, что они настолько же разрушительны, насколько и полезны. Приятно иметь возможность получать маршруты и отзывы о ресторанах прямо у вас в руках, но постоянная связь, доступность или прерывание, а также большая часть времени звучит музыка — это мешает думать.Мне нужно время для тихих размышлений, поэтому я, вероятно, не ценю эти гаджеты так, как другие.
Проводной: Как насчет магазинов приложений, которые обслуживают эти аппаратные платформы? Какое влияние они оказывают на пользователей, программистов, творчество и торговлю программным обеспечением?
Страуструп: Не знаю. Я думаю, что вопрос в том, что становится важным в долгосрочной перспективе: использование разработчиком огромных проприетарных библиотек и сред выполнения или возможности для инновационных приложений, предлагаемые повсеместным присутствием гаджетов.Первый направляет усилия в условное, а второй открывает новые просторы для воображения.
Проводной: Вы читаете электронные книги?
Страуструп: Нечасто и в основном очень легкая литература. Я считаю, что экраны слишком малы для технической работы, а средства для рисования и аннотации все еще слишком слабые.
Wired: Что можно посоветовать молодым программистам?
Страуструп: Думаю, дать совет легче, чем принять его.Знайте свои основы (алгоритмы, структуры данных, машинную архитектуру, системы) и несколько языков программирования до такой степени, что вы можете использовать их идиоматически.
Хорошо знаю некоторые области, не связанные с компьютером — математику, биологию, историю, оптику, что угодно. Научитесь эффективно общаться устно и письменно. Потратьте неразумное количество времени на какую-нибудь сложную тему, чтобы по-настоящему овладеть ею. Попробуйте сделать что-нибудь, что может изменить мир к лучшему.
История C ++ — Информация о C ++
История языка программирования C ++ восходит к 1979 году, когда Бьярн Страуструп работал над своей докторской диссертацией.Докторская диссертация. Одним из языков, с которым Страуструп имел возможность работать, был язык под названием Simula, который, как следует из названия, в первую очередь предназначен для моделирования. Язык Simula 67 — вариант, с которым работал Страуструп — считается первым языком, поддерживающим парадигму объектно-ориентированного программирования. Страуструп обнаружил, что эта парадигма очень полезна для разработки программного обеспечения, однако язык Simula был слишком медленным для практического использования.
Вскоре после этого он начал работу над «C с классами», который, как следует из названия, должен был стать надмножеством языка C.Его целью было добавить объектно-ориентированное программирование в язык C, который был и остается языком, пользующимся уважением за его переносимость, без ущерба для скорости или низкоуровневой функциональности. Его язык включал классы, базовое наследование, встраивание, аргументы функций по умолчанию и строгую проверку типов в дополнение ко всем функциям языка C.
Первый компилятор C с классами назывался Cfront, он был производным от компилятора C под названием CPre. Это была программа, предназначенная для перевода C с кодом классов в обычный C.Стоит отметить довольно интересный момент: Cfront был написан в основном на C с классами, что сделало его компилятором с самостоятельным размещением (компилятором, который может компилировать себя). Позднее в 1993 году от Cfront отказались, так как стало трудно интегрировать в него новые функции, а именно исключения C ++. Тем не менее, Cfront оказал огромное влияние на реализации будущих компиляторов и на операционную систему Unix.
В 1983 году название языка было изменено с C с классами на C ++. Оператор ++ в языке C — это оператор для увеличения переменной, который дает некоторое представление о том, как Страуструп относился к языку.Примерно в это время было добавлено много новых функций, наиболее заметными из которых являются виртуальные функции, перегрузка функций, ссылки с символом &, ключевое слово const и однострочные комментарии с использованием двух косых черт (это функция, взятая из языка BCPL ).
В 1985 г. была опубликована ссылка Страуструпа на язык под названием The C ++ Programming Language . В том же году C ++ был реализован как коммерческий продукт. Язык еще не был официально стандартизирован, что делает книгу очень важной справочной информацией.В 1989 году язык был снова обновлен, чтобы включить защищенные и статические члены, а также наследование от нескольких классов.
В 1990 г. было выпущено Справочное руководство по C ++ с аннотациями . В том же году компилятор Borland Turbo C ++ будет выпущен как коммерческий продукт. Turbo C ++ добавил множество дополнительных библиотек, которые окажут значительное влияние на развитие C ++. Хотя последний стабильный выпуск Turbo C ++ был выпущен в 2006 году, компилятор все еще широко используется.
В 1998 году комитет по стандартам C ++ опубликовал первый международный стандарт C ++ ISO / IEC 14882: 1998, который будет неофициально известен как C ++ 98. Справочное руководство по C ++ с аннотациями , как было сказано, сильно повлияло на разработку стандарта. Также была включена стандартная библиотека шаблонов, концептуальная разработка которой началась в 1979 году. В 2003 году комитет отреагировал на многочисленные проблемы, о которых сообщалось в их стандарте 1998 года, и внес в него соответствующие изменения. Измененный язык получил название C ++ 03.
В 2005 году комитет по стандартам C ++ выпустил технический отчет (получивший название TR1) с подробным описанием различных функций, которые они планировали добавить в последний стандарт C ++.Новый стандарт был неофициально назван C ++ 0x, поскольку ожидалось, что он будет выпущен где-то до конца первого десятилетия. Однако по иронии судьбы новый стандарт не будет выпущен до середины 2011 года. К тому времени было выпущено несколько технических отчетов, и некоторые компиляторы начали добавлять экспериментальную поддержку новых функций.
В середине 2011 года был завершен новый стандарт C ++ (получивший название C ++ 11). Проект библиотеки Boost оказал значительное влияние на новый стандарт, и некоторые из новых модулей были получены непосредственно из соответствующих библиотек Boost.Некоторые из новых функций включали поддержку регулярных выражений (подробности о регулярных выражениях можно найти здесь), всеобъемлющую библиотеку рандомизации, новую временную библиотеку C ++, поддержку атомики, стандартную библиотеку потоковой передачи (которая до 2011 года отсутствовала как в C, так и в C ++). , новый синтаксис цикла for, обеспечивающий функциональность, аналогичную циклам foreach на некоторых других языках, ключевое слово auto, новые классы контейнеров, улучшенную поддержку объединений и списков инициализации массивов, а также вариативные шаблоны.
Автор Albatross.
Технический доклад Бьярна Страуструпа по C ++ 0x Standard
Просматривая свой любимый сайт новостей программирования programming.reddit.com, я наткнулся на эту ссылку на видеолекцию Бьярна Страуструпа о грядущем стандарте C ++ 0x.
Вы можете начать просмотр прямо сейчас или можете загрузить его в формате DivX или MPEG и посмотреть позже.
Я очень интересуюсь семейством языков программирования C и C ++ и их историей, и я прочитал две книги Бьярна — «Язык программирования C ++» и «Дизайн и эволюция C ++».Мне понравилась каждая страница этих книг, и они сделали меня не только достойным программистом на C ++, но и помогли мне понять, как был сформирован язык, каковы его цели, куда он шел и как в языке появились различные конструкции, которые он имеет сейчас. Если вы когда-нибудь задумаетесь о том, чтобы стать великим программистом на C ++, эти книги обязательно нужно прочитать.
Самое фундаментальное, чему меня научили эти книги, — это думать о различных уровнях абстракции и подходить к данной проблеме программирования с разных парадигм программирования.
Когда я нашел ссылку, я отложил все, над чем работал, и начал смотреть видеолекцию. Я так люблю C ++!
Примечание для людей, желающих изучить C ++. Я вижу, как люди спорят на сайте programming.reddit.com и других сайтах, что C ++ не стоит изучать, что это мертвый язык, а X лучше, чем C ++ и т. Д. Не слушайте эту чушь! Если вы когда-нибудь смотрели презентацию Гая Кавасаки «Искусство старта», 11-й момент успеха — это «Не позволяйте бозо перемалывать вас.»Это то, что пытаются сделать все эти болваны на Reddit. Не слушайте их; просто начните изучать C ++, и у вас все получится.
А теперь вернемся к лекции. Здесь я цитирую то, что лектор говорит о своей лекции:
Хороший язык программирования — это гораздо больше, чем просто набор функций. Мой идеал — предоставить набор средств, которые беспрепятственно работают вместе, чтобы поддерживать стили дизайна и программирования, в общем, за пределами моего воображения. Здесь я кратко изложу практические правила (руководящие принципы, принципы), которые применяются при разработке C ++ 0x.Затем я представляю состояние процесса стандартизации (мы стремимся к C ++ 09) и привожу примеры некоторых предложений, таких как концепции, обобщенная инициализация, которые рассматриваются в комитете стандартов ISO C ++. Поскольку предложений гораздо больше, чем можно было бы представить за час, я отвечу на вопросы.
Так же, как я делал, изучая JavaScript по видеолекциям, я собираюсь добавить в блог с отметками времени о самых интересных вещах, которые привлекли мое внимание.
Вот вещи, которые привлекли мое внимание в видеопрезентации Бьярна по C ++.В скобках указано время, когда оно появилось на видео. Знак «+» перед скобками означает, что я это уже знал, а знак «-» — что я не знал (только для личных примечаний). Я запишу некоторые очевидные факты о языке, хотя я их знаю, чтобы вы поняли, о чем была лекция.
- + (03:25) C ++ используется как в марсоходах, так и в Spirit и Opportunity. Расчетный ресурс гребцов составил 6 месяцев.
- + (05:30) C ++ лучше C в том смысле, что он может делать примерно то же самое, что и C, но также имеет много новых функций.
- +/- (06:55) Цели самого высокого уровня C ++ — сделать его лучшим языком для системного программирования и создания библиотек и упростить обучение и изучение .
- (08:46) Шутка: следующие Intel будут выполнять бесконечный цикл за пять минут, поэтому вам не нужна производительность.
- +/- (10:00) Основная проблема новой ревизии стандарта — популярность C ++. Существующие и новые пользователи хотят бесчисленных улучшений. Добавление новой функции должно сделать существующий код абсолютно стабильным. Каждая новая функция усложняет изучение языка.
- + (15:46) Текущий стандарт C ++ ISO с 1998 года с пересмотром в 2003 году.
- (15:50) Шутка: Если вы можете отличить C ++ 1998 от C ++ 03, значит, вы только что прочитали слишком много руководств.
- (16:36) Шутка: Некоторые разработчики языка C ++, работающие над C ++ 0x, очень и очень хотят, чтобы x был десятичным числом.
- + (17:20) Голосование по стандартным функциям C ++ проводится по всей стране. Каждая нация дает один голос.
- +/- (19:14) Стандартизация имеет значение, потому что она напрямую затрагивает миллионы людей, новые методы должны получить широкое распространение, это защита от привязки к поставщику.
- +/- (22:10) Практические правила для стандарта:
- Поддержание стабильности и совместимости,
- Предпочитать библиотеки языковым расширениям,
- Предпочитаю универсальность специализации,
- Поддержка как экспертов, так и новичков,
- Повышенная безопасность типа,
- Повышение производительности и возможности работы напрямую с оборудованием,
- Подходит для реального мира,
- Вносите только те изменения, которые меняют образ мышления людей.
- — (30:28) Есть около 100 новых предложений по языковым функциям.
- — (33:22) Предложений библиотек гораздо меньше. Всего 11 новых предложений по библиотеке TR1!
- — (35:47) Области изменения языка — это модель машины и параллелизм, модули и библиотеки DLL, поддержка общего программирования.
- + (38:01) Пример задачи инициализации вектора.
- (40:50) Даже Бьярн допустил ошибку при использовании подробного синтаксиса для инициализации вектора со списком значений из массива:
«Если у вас утомительный, подробный и косвенный код, вы делаете ошибки!»
- — (41:09) Косвенная инициализация векторов из массивов нарушает принцип проектирования языка Страуструпа (из «Проектирования и эволюции C ++») — « Поддерживает определяемые пользователем и встроенные типы одинаково хорошо .«
- — (41:56) Решение проблемы инициализации C ++ 0x — это инициализированных списков , std :: initializer_list
. - — (43:43) В C ++ слишком много способов инициализации, и они работают в различных контекстах. C ++ 0x вводит унифицированный синтаксис инициализации , который можно использовать при любой инициализации.
- — (46:50) Основная причина множества проблем в C ++ с универсальным программированием заключается в том, что компилятор не знает, какие типы аргументов шаблона должны делать.
- +/- (49:30) C ++ 98 получил шаблоны таким образом, что параметризация не требовала иерархий, параметризация могла выполняться с помощью нетипов, сгенерированный код имел бескомпромиссную эффективность, и оказалось, что создание экземпляров шаблона было по Тьюрингу. полный!
- — (54:42) Концептуальные цели C ++ 0x — прямое выражение намерений ( лекция здесь сокращена (они вышли из строя или что-то в этом роде) 🙁 и следующий момент был где-то в будущем), без производительности деградация по сравнению с текущим кодом, относительно простая реализация в текущих компиляторах и текущий код шаблона должен оставаться действующим.
- — (55:33) Лекция продолжается с того места, где она была вырезана. Это что-то о системе типов, как она обеспечивает правильные типы данных, используя только объявления, и о контрактах типов во время компиляции с помощью шаблонов.
- — (1:06:14) Краткое резюме: псевдонимы шаблонов, списки инициализаторов, перегрузка на основе концепций, вывод типа из инициализаторов, новый цикл for для диапазонов.
После лекции были заданы следующие вопросы:
- (01:09:40) Что вы думаете о реализации C ++ Microsoft?
- A: Реализация Microsoft — лучшая из всех, они довольно хорошо соответствуют стандартам, и сгенерированный код также хорош.GNU gcc тоже хорош. Хотя они хотят, чтобы вы использовали их «Управляемый C ++» под названием C ++ / CLI, который совершенно непереносим. Apple делает то же самое со своей версией C ++, которая является Objective C / C ++, и GNU тоже. Все они играют в эту игру, пытаясь заставить пользователей просто использовать их продукт, а не переключаться на продукты конкурентов.
- (01:11:56) Как вы думаете, вы когда-нибудь создадите новый язык с нуля?
- A: Конечно, не на пустом месте. Вы должны ответить на вопрос, зачем вы разрабатываете язык? Вы разрабатываете язык для решения определенной проблемы.Если я когда-нибудь создам новый язык, это произойдет потому, что я чувствую, что некоторая проблема требует решения.
- (01:13:39) Вы упомянули потоки, есть ли другие вещи, такие как транзакции и управление кешем?
- A: Параллелизм становится очень важным. Вопрос в том, как это сделать? Мое решение — предоставить языковые примитивы, из которых вы создаете библиотеки, которые используют эти примитивы и предоставляют различные модели параллелизма. Сделать это напрямую с помощью языковых примитивов слишком сложно.
- (01:16:25) Через какое время после выхода стандарта вы ожидаете увидеть производственный компилятор?
- A: После утверждения и выпуска стандарта C ++ 0x поставщики сразу же начнут выпускать компиляторы.Некоторые из них уже встроены в некоторые из предстоящих функций.
- (01:17:55) Является ли auto выводом типа?
- A: auto — это своего рода вывод типа, но он очень простой. Вы просто смотрите на тип инициализатора и используете его.
- (01:18:47) Было бы полезно иметь переключатель в каждом компиляторе для устаревания функций?
- A: Да, это было бы полезно, потому что компиляторы должны поддерживать старые функции, от которых мы хотели бы когда-либо избавиться.Мне не удалось убедить компилятор сделать это.
- (01:19:16) Можно ли чисто и эффективно выполнять сборку мусора (GC) на C ++?
- A: Да, сборку мусора можно делать на C ++. Реализация уже существует, и завтра я буду обсуждать, стоит ли включать ее в стандарт. Однако есть две проблемы. Во-первых, люди начнут писать плохой код, не заботясь об освобождении используемой памяти, что приведет к снижению производительности. Во-вторых, сборщик мусора может быть вирусом производительности.
- (01:24:39) Многие академические учреждения отказались от преподавания C ++. В результате от людей поступает множество неэффективных методов кодирования и некачественных решений для кодирования. Есть ли планы иметь некоторую документацию о том, как это было бы более обучаемым?
- A: Я стал академиком за последние пару лет, и кто-то уговорил меня преподавать в старших классах. Я больше привык к серьезным кандидатам в хороших университетах с 10-летним опытом, а это не совсем то! Я опробовал идеи и написал учебник, который выйдет в следующем году.
- (01:26:24) Как скоро после того, как вы создали C ++, вы заметили, что он начал захватывать индустрию?
- A: Первый коммерческий релиз был в 1985 году. У меня был доступ к данным о количестве пользователей C ++, и я отслеживал их в течение 80-х годов. С 1979 по 1991 год коэффициент удвоения составил 7,5 месяцев. А сейчас у нас 3 миллиона пользователей.
- (01:28:25) Многие классы шаблонов в настоящее время используют подъем шаблонов, чтобы сделать их более эффективными с точки зрения размера кода во время компиляции. Делается ли что-нибудь для решения проблем, которые делают это необходимым?
- A: Есть уловка, позволяющая избежать множества отдельных экземпляров шаблонов, основанных на указателе void.Я не вижу в этом никаких изменений. Это портативный способ сделать это.
- (01:29:50) Что вы думаете об общем программировании на уровне выполнения?
- A: Это было бы хорошей идеей, но то, что в основном называется универсальным программированием на уровне выполнения, имеет либо столько косвенных указаний, что оно выполняется на 1/10 скорости неуниверсального кода, либо не слишком универсальное, и вы не можете этого сделать. любой интересный материал.
- (01:31:33) Вы говорили о том, что типы, определяемые пользователем, действуют так же, как встроенные типы.Указатели используются для различных оптимизаций, таких как перегрузка функций и интеллектуальные указатели. Вы видите здесь проблему? Решается?
- A: Во-первых, я думаю, что умные указатели используются слишком часто. Во-вторых, мы можем эмулировать наследование с помощью умных указателей. Теперь вы можете создать идеальный умный указатель. Меня беспокоят интеллектуальные указатели, потому что если вы используете интеллектуальный указатель, и я дам вам его, и у нас нет соглашения о том, как мой работает, мы получим состояние гонки. У нас нет блокировки этого кода, и у нас есть два фрагмента кода, которые находятся в одной и той же области.Вы должны быть очень осторожны с семантикой этого умного указателя.
- (01:33:38) Есть интересные параллели между шаблонами и утиной печатью, используемой в динамических языках. Смогут ли шаблоны превзойти классы по написанию кода и оформлению контрактов?
- A: Да, шаблоны примерно такие же, как утиная печать в языках сценариев, выполняемая динамически. Я думаю, что интерфейсы будут намного лучше описываться концепциями, и все еще есть большие компоненты утиной печати. Шаблоны становятся все более важными.Помните, что шаблоны сами по себе — ничто! Они помогают вам отвлечься от чего-то.
- (01:37:14) Были ли у вас когда-нибудь смертельные нити из-за изменений в языке?
- A: Я никогда не получал смертельных сообщений ни по какой причине. И пусть так и будет!
- (01:37:28) Есть ли какое-то конкретное соглашение об именах, на которое вы подписались?
- A: Да, я люблю подчеркивания. Мне не нравится верблюжья фигня, она менее читаема.
- (01:37:57) Новые языковые функции, которые вы придумываете.Сейчас так много языков в ближайшее время? Вы пытаетесь повторно использовать что-нибудь из того, что они сделали?
- A: Я стараюсь учиться на новых языках, в частности, на тех, кто использует новый язык. Но переходить с одного языка на другой намного сложнее, чем думает большинство людей. Когда вы видите, что что-то работает на одном языке, тогда вы видите, какую проблему они решают, можем ли мы решить так же элегантно на C ++? Если ответ отрицательный, то мы увидим, как это можно решить, и посмотрим, как это было сделано на другом языке. Но простая прививка — очень сложное упражнение.
- (01:38:52) Когда вы изначально разрабатывали язык, вы исходили из строгих спецификаций или как это началось?
- A: Я стараюсь быть строгим, но это все еще неформально в том смысле, что оно написано на английском языке. Я начал со спецификации C, написанной Деннисом Ричи. Некоторые вещи улучшились, некоторые стали менее понятными из-за того, что люди используют больше слов. Мы несколько раз пытались увидеть, сможем ли мы сделать это еще и формальным. Было бы неплохо иметь формальную сематику либо для всего этого, либо для его части.На протяжении многих лет это не было таким успешным. Но я очень рад сообщить, что группе из IBM в этом году удалось доказать, что система наследования C ++ формально работает. Это доказано. Итак, 20 лет спустя они доказали, что я не облажался.
- (01:40:18) Учитывая, что Sun выпускает оборудование, которое запускает байт-код Java, не боитесь ли вы, что это может лишить C ++ встроенной позиции?
- A: Java полностью убьет C ++ через 2 года, — сказал Сан в 1996 году. Они как бы повторяют эту историю снова и снова.Есть много Java, много C ++, и это большой мир.
- (01:41:05) Как вы балансируете во время компиляции и во время выполнения, например, исключения?
- A: Если вам нужно иметь баланс, что-то во время выполнения, вы должны иметь это во время выполнения. Например, большинство полезных применений виртуальных функций невозможно выполнить во время выполнения, потому что у вас нет информации. Говоря об исключениях, есть компиляторы, которые не добавляют накладных расходов, если исключения не генерируются. Есть компромиссы и некоторые вещи, которые вам просто нужно делать во время выполнения.
Вы можете посмотреть лекцию прямо здесь в виде встроенного flash-видео или скачать эту лекцию.
Загрузить Лекцию Бьярна Страуструпа по C ++ 0x
Увидимся в следующий раз!
Интервью с Бьярном Страуструпом о C ++
1 января 1998 года Бьярн Страуструп дал интервью журналу IEEE «Computer».
Естественно, редакторы думали, что он даст ретроспективный взгляд на семилетний объектно-ориентированный дизайн, используя созданный им язык.
К концу интервью интервьюер получил больше, чем он ожидал, и впоследствии редактор решил скрыть его содержание «на благо индустрии», но, как и во многих других случаях, произошла утечка. .
Вот полная стенограмма того, что было сказано, неотредактированное и неотрепетированное, так что это не так аккуратно, как запланированные интервью.
Опрашивающий: Прошло несколько лет с тех пор, как вы изменили мир дизайна программного обеспечения, как вы себя чувствуете, оглядываясь назад?
Страуструп: На самом деле, я думал о тех днях, как раз перед твоим приездом.Ты помнишь? Все писали на букву «C», и проблема была в том, что они чертовски хорошо это делали … Университеты тоже неплохо научились этому. Они с феноменальной скоростью выдавали компетентных — я подчеркиваю слово «компетентные» — выпускников. Вот в чем проблема.
Опрашивающий: Проблема?
Страуструп: Да, проблема. Помните, когда все писали COBOL?
Опрашивающий: Конечно. Я тоже.
Страуструп: Ну, вначале эти парни были как полубоги.Их зарплаты были высокими, и с ними обращались как с членами королевской семьи.
Интервьюер: Это были дни, а?
Страуструп: Верно. Итак, что случилось? IBM это надоело, и она инвестировала миллионы в обучение программистов, пока они не превратились в пруд пруди.
Опрашивающий: Вот почему я ушел. Заработная плата упала в течение года до такой степени, что журналистам платили больше.
Страуструп: Совершенно верно. То же самое произошло и с программистами на «Си».
Опрашивающий: Понятно, но в чем смысл?
Страуструп: Ну, однажды, когда я сидел в своем офисе, я подумал об этой маленькой схеме, которая немного поправила бы баланс.Я подумал: «Интересно, что бы произошло, если бы существовал язык настолько сложный, такой трудный для изучения, что никто никогда не смог бы завалить рынок программистами? Собственно, некоторые идеи я почерпнул из X10, ну знаете, X windows. Это была такая сука с графической системой, что она работала только на этих штуках Sun 3/60 … У них были все ингредиенты для того, что я хотел. Действительно смехотворно сложный синтаксис, непонятные функции и псевдо-объектно-ориентированная структура. Даже сейчас никто не пишет сырой код для X-windows.Motif — единственный выход, если вы хотите сохранить рассудок.
Опрашивающий: Вы шутите?
Страуструп: Ничего подобного. На самом деле была еще одна проблема. Unix была написана на «C», а это означало, что любой программист на «C» мог очень легко стать системным программистом. Помните, на чем раньше зарабатывал программист мэйнфреймов?
Опрашивающий: Готов поспорить, что я делаю, я так и делал.
Страуструп: Хорошо, значит, этому новому языку пришлось отделиться от Unix, скрыв все системные вызовы, которые так хорошо связывали их вместе.Это позволило бы парням, которые знали только о DOS, тоже неплохо зарабатывать.
Интервьюер: Я не верю, что вы сказали, что…
Страуструп: Ну, сейчас прошло достаточно времени, и я считаю, что большинство людей поняли для себя, что C ++ — пустая трата времени, но, должен сказать, им потребовалось гораздо больше времени, чем я ожидал.
Интервьюер: Так как именно вы это сделали?
Страуструп: Это должно было быть шуткой, я никогда не думал, что люди воспримут книгу всерьез.Любой, у кого есть половина мозга, может увидеть, что объектно-ориентированное программирование противоречит интуиции, нелогично и неэффективно.
Опрашивающий: Что?
Страуструп: А что касается «повторно используемого кода» — когда вы когда-нибудь слышали о компании, повторно использующей свой код?
Интервьюер: Ну, вообще-то никогда, но…
Страуструп: Ну вот. Имейте в виду, некоторые пытались это сделать в первые дни. Одна компания из Орегона — я думаю, их называли Mentor Graphics — действительно простудилась, пытаясь переписать все на C ++ примерно в ’90 или ’91.Мне было их очень жаль, но я думал, что люди будут учиться на их ошибках ..
Опрашивающий: Очевидно, нет?
Страуструп: Ни в малейшей степени. Проблема в том, что большинство компаний замалчивают все свои крупные промахи, и объяснить акционерам убыток в 30 миллионов долларов было бы непросто … Надо отдать им должное, но в конце концов они заставили это сработать.
Опрашивающий: Да? Что ж, вот и вы, это доказывает, что O-O работает.
Страуструп: Ну, почти.Исполняемый файл был настолько огромен, что его загрузка заняла пять минут на рабочей станции HP со 128 МБ ОЗУ. Потом оно побежало, как патока. На самом деле, я думал, что это будет серьезным камнем преткновения, и обо мне узнают в течение недели, но никого это не волновало. Sun и HP были только рады продавать невероятно мощные устройства с огромными ресурсами только для запуска тривиальных программ. Вы знаете, когда у нас был наш первый компилятор C ++, в AT&T, я скомпилировал «Hello World» и не мог поверить в размер исполняемого файла. 2,1 МБ
Опрашивающий: Что? Что ж, с тех пор компиляторы прошли долгий путь.
Страуструп: Есть? Попробуйте его на последней версии g ++ — пол мегабайта мало что изменит. Кроме того, для вас есть несколько совсем недавних примеров со всего мира. У British Telecom случилась крупная катастрофа, но, к счастью, им удалось все отбросить и начать заново. Им повезло больше, чем Australian Telecom. Теперь я слышу, что Siemens строит динозавра, и все больше и больше беспокоюсь о том, что размер оборудования становится больше, чтобы вместить исполняемые файлы.Разве множественное наследование не радует?
Опрашивающий: Да, но C ++ — это, по сути, звуковой язык.
Страуструп: Вы действительно в это верите, не так ли? Вы когда-нибудь садились и работали над проектом на C ++? Вот что происходит: во-первых, я сделал достаточно ловушек, чтобы с первого раза сработать только самые тривиальные проекты. Возьмите перегрузку оператора. В конце проекта он есть почти в каждом модуле, обычно потому, что ребята чувствуют, что действительно должны это делать, как это было в их учебном курсе.Таким образом, один и тот же оператор означает что-то совершенно другое в каждом модуле. Попробуйте собрать все это вместе, когда у вас будет около сотни модулей. А насчет сокрытия данных. Боже, иногда я не могу удержаться от смеха, когда слышу о проблемах компаний, заставляющих их модули общаться друг с другом. Я думаю, что слово «синергетический» было придумано специально, чтобы ввернуть нож менеджеру проекта в ребра.
Интервьюер: Должен сказать, я начинаю ужасно приходить в ужас от всего этого. Вы говорите, что сделали это для повышения зарплаты программистам? Это непристойно.
Страуструп: Не совсем. У каждого есть выбор. Я не ожидал, что эта вещь выйдет из-под контроля. Как бы то ни было, мне в основном это удалось. C ++ сейчас вымирает, но программисты по-прежнему получают высокие зарплаты — особенно те бедняги, которым приходится поддерживать всю эту чушь. Вы понимаете, что невозможно поддерживать большой программный модуль C ++, если вы на самом деле не написали его?
Опрашивающий: Как так?
Страуструп: Вы ведь не в курсе? Помните typedef?
Опрашивающий: Да, конечно..
Страуструп: Помните, сколько времени потребовалось, чтобы нащупать файлы заголовков, чтобы обнаружить, что «RoofRaised» было числом двойной точности? Что ж, представьте, сколько времени потребуется, чтобы найти все неявные определения типов во всех классах в большом проекте.
Интервьюер: Так как вы считаете, что добились успеха?
Страуструп: Помните длительность среднего проекта «С»? Около 6 месяцев. Недостаточно, чтобы парень с женой и детьми заработал достаточно, чтобы иметь достойный уровень жизни.Возьмите тот же проект, спроектируйте его на C ++ и что вы получите? Я вам скажу. От одного до двух лет. Разве это не здорово? Вся эта гарантия работы, всего лишь из-за одной ошибки суждения. И еще кое-что. В университетах так долго не преподавали «С», теперь не хватает достойных программистов на «С». Особенно тем, кто хоть что-нибудь знает о программировании Unix-систем. Сколько парней будет знать, что делать с malloc, если они все эти годы использовали слово new и никогда не удосужились проверить код возврата.Фактически, большинство программистов на C ++ выбрасывают свои коды возврата. Что случилось со старым добрым «-1»? По крайней мере, вы знали, что у вас ошибка, не увязая во всей этой ерунде типа «бросить», «поймать», «попробовать».
Опрашивающий: Но ведь наследование действительно экономит много времени?
Страуструп: А? Вы когда-нибудь замечали разницу между планом проекта «C» и планом проекта C ++? Стадия планирования для C ++ проекта в три раза длиннее. Именно для того, чтобы убедиться, что все, что должно быть унаследовано, есть, а что не должно — нет.Тогда они все равно ошибаются. Кто нибудь слышал об утечках памяти в программе на «C»? Теперь их поиск — основная отрасль. Большинство компаний сдаются и отправляют продукт, зная, что он просачивается, как решето, просто чтобы избежать расходов на отслеживание их всех.
Опрашивающий: Есть инструменты…
Страуструп: большинство из них были написаны на C ++.
Интервьюер: Если мы опубликуем это, вас, вероятно, линчуют, вы это понимаете?
Страуструп: Сомневаюсь. Как я уже сказал, C ++ уже прошел свой пик, и ни одна компания в здравом уме не стала бы начинать проект C ++ без экспериментального испытания.Это должно убедить их, что это путь к катастрофе. Если нет, они заслуживают все, что получают .. Вы знаете, я пытался убедить Денниса Ричи переписать Unix на C ++ ..
Интервьюер: Боже мой. Что он сказал?
Страуструп: К счастью, у него хорошее чувство юмора. Я думаю, что и он, и Брайан с самого начала поняли, чем я занимаюсь, но так и не заметили. Он сказал, что поможет мне написать версию DOS на C ++, если мне будет интересно ..
Интервьюер: Были?
Страуструп: На самом деле, я написал DOS на C ++, я дам вам демо, когда мы закончим.У меня он работает на Sparc 20 в компьютерном зале. Работает как ракета на 4 процессорах и занимает всего 70 мегабайт на диске.
Опрашивающий: Как это на ПК?
Страуструп: Да вы шутите. Вы никогда не видели Windows 95? Я считаю это своим самым большим успехом. Я чуть не провалил игру, прежде чем был готов ..
Опрашивающий: Вы знаете, эта идея Unix ++ действительно заставила меня задуматься. Где-то там парень собирается это попробовать.
Страуструп: После того, как они прочитали это интервью..
Интервьюер: Прошу прощения, но я не вижу, чтобы мы могли опубликовать что-либо из этого.
Страуструп: Но это история века. Я хочу, чтобы мои товарищи-программисты помнили меня только за то, что я для них сделал. Вы знаете, сколько в наши дни может получить специалист по C ++?
Интервьюер: Последнее, что я слышал, действительно лучший парень стоит от 70 до 80 долларов в час.
Страуструп: Видите? И держу пари, он это зарабатывает. Отслеживать все ошибки, которые я вложил в C ++, — непростая задача. И, как я уже говорил, каждый программист на C ++ чувствует себя связанным каким-то мистическим обещанием использовать каждый чертов элемент языка в каждом проекте.На самом деле, это меня иногда действительно раздражает, Ева. Мне почти нравится язык после всего этого времени.
Интервьюер: Вы имеете в виду, что не делали этого раньше?
Страуструп: Ненавидел. Это даже выглядит неуклюже, согласны? Но когда начали поступать гонорары за книги… ну, вы понимаете.
Опрашивающий: Минутку. А как насчет ссылок? Согласитесь, вы улучшили указатели «C».
Страуструп: Хм. Меня всегда это интересовало. Изначально я думал, что да.Однажды я обсуждал это с парнем, который с самого начала писал на C ++.