Язык программирования c четвертое издание

Существует ли перевод книги Страуструпа C++ programming language, 4th edition?

Меня интересует следующий вопрос:
Кто-то видел полностью переведенную книгу от Страуструпа «c++ programming language 4th edition», существует ли вобще переведенный вариант и если нет, то когда планируется его появление?

Спасибо за внимание

Изучение Stroustrup «The C++ Programming Language» (4th Edition)
Обнаружил, что тем по 4-ому изданию никто не создавал, это скорее упущение для нашего форума. Речь.

Язык программирования c четвертое издание. Смотреть фото Язык программирования c четвертое издание. Смотреть картинку Язык программирования c четвертое издание. Картинка про Язык программирования c четвертое издание. Фото Язык программирования c четвертое изданиеПеревод старых команд с книги Бьерна Страуструпа Принципы и практика использования С++
#include “std_lib_facilities.h” следует заменить #include Но следует заметить что они.

Algorithms (4th Edition) Роберт Седжвик
Помогите найти в сети пожалуйста русскую версию этого издания. Или если нет, то помогите.

Беглый поиск результатов не дает, почти наверняка перевода и нет.
Судя по отзывам (и вспоминая свой личный опыт), предыдущие издания были переведены очень некачественно: искажения смысла, опечатки, трудночитаемые формулировки, поэтому перевода ждать не стоит.

PS В оригинале книга написана очень простым языком, легко читалась даже при моем невысоком уровне знания английского.

Несвязанные вещи. При нынешнем катастрофическом падении грамотности трудно даже найти перевод без грубых орфографических ошибок, не говоря уже о стиле и знании тематики.

Ex. Из старого торрента.

Новичкам впереди паровоза бежать предлагаем?)
Толку-то бегать за каждым новым стандартом?

А до 17 еще дожить надо.

А 17 дождемся, там уже какой-нибудь 21 будет «допекаться в духовке».
Стандарт не для учебы. Для базы сойдут учебники по последним существующим стандартам, а там если пойдет, то уже сам стандарт будет иметь действительно большой вес.

Знаем обучающие книжки, в которых учат С++14 или С++17. нет проблем, но только если они обучающие. Чтобы научиться пользоваться стандартом, надо научиться использовать элементарные приемы, которым стандарт не научит.

И вообще с этими темпами стандартов С++ как бы форум делить не пришлось на части С++03, С++11, С++17, С++ dos, C++98 и, блин, как пить дать выдаваемые ответы будут провоцировать сначала ответ: «у меня не работает», а контрответ на этот ответ: «качай компилятор». А контрответ на контрответ: «у меня в институте такой, мне туда нельзя» или: «перпод в другом не примет» (хнык, хнык, хнык) Ну, короче Вы поняли.

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

D Programming Language
Вообщем вот, что мне удалось найти для работы с языком D. Список IDE* *Ссылка на D-IDE.

HTML-as-programming-language
Не подскажите, для чего это используется? https://pypi.org/project/HTML-as-programming-language/

L++ is a programming language with Lisp-like syntax
The L++ Programming Language, обсуждение: https://news.ycombinator.com/item?id=7711755

Перевод OpenGL Programming Guide: The Official Guide to Learning OpenGL, Version 4.3, 8th Edition
Уважаемые форумчане! У вас есть возможность выразить свою активную позицию по вопросу о переводе.

Источник

Подбор книг по C#

Язык программирования c четвертое издание. Смотреть фото Язык программирования c четвертое издание. Смотреть картинку Язык программирования c четвертое издание. Картинка про Язык программирования c четвертое издание. Фото Язык программирования c четвертое издание

Мы решили собрать в одну подборку самые, по нашему мнению, интересные книги нашего издательства, посвященные языку программирования C#. В посте собраны хорошие книги от пособий для начинающих (например, примелькавшаяся книга серии Head First) до изданий Джеффри Рихтера и Чарли Петцольда для практикующих программистов, в общем – на любой вкус по самым лучшим ценам в интернете.

Программирование для Microsoft Windows 8. 6-е изд.

Шестое издание этой легендарной книги пришлось ждать почти 15 лет! В своем новом труде Чарльз Петцольд, известный автор и один из пионеров Windows-программирования, рассказывает о разработке приложений для Windows Store с использованием C# и XAML в среде Windows Runtime. Первая часть книги «Основы» посвящена приемам, которые особенно важны для большинства рядовых программистов: сборке готовых элементов управления в приложении и их связыванию с кодом и данными. Здесь полностью объясняется весь программный код и разметка, генерируемая Visual Studio для разных шаблонов проектов. Во второй части книги «Специальные возможности» описываются низкоуровневые и нестандартные задачи — сенсорный ввод, растровая графика, расширенное форматирование текста, печать, работа с датчиками ориентации и GPS. Книга адресуется разработчикам, уверенно владеющим языком C#, которые хотят изучить API для разработки приложений для Windows 8.

Язык программирования C#. Классика Computers Science. 4-е изд.

Авторы: А. Хейлсберг, М. Торгерсен, С. Вилтамут, П. Голд

Приложения для Windows 8 на C# и XAML

Это первое практическое руководство по созданию приложений для Windows 8 охватывает весь жизненный цикл: от разработки шаблона проекта до публикации в Windows Store. Автор книги Джереми Ликнесс, ведущий специалист компании Microsoft, поможет использовать ваши навыки разработчика в работе с новыми инструментами Visual Studio 2012 для создания полезных и инновационных приложений. В книге рассмотрены и бизнес-приложения, и пользовательские приложения. При помощи тщательно отработанных загружаемых примеров кода и демонстрационных проектов автор показывает, как максимально использовать новые функции платформы, включая встраивание в социальные сети, поиск, расширения, контракты и мозаичное размещение.

Изучаем C#. 3-е изд.

Авторы: Э. Стиллмен, Дж. Грин

Источник

Книги по языку Си для начинающих и не только

Язык программирования c четвертое издание. Смотреть фото Язык программирования c четвертое издание. Смотреть картинку Язык программирования c четвертое издание. Картинка про Язык программирования c четвертое издание. Фото Язык программирования c четвертое издание

Язык Си — это очень мощный язык программирования, и к тому же один из самых популярных. Он очень гибок и не накладывает на программиста никаких ограничений, но именно это и может стать проблемой при изучении. Поэтому мы подобрали для вас несколько книг, которые помогут разобраться с основами языка, не отстрелив себе пару конечностей 😉

Язык программирования c четвертое издание. Смотреть фото Язык программирования c четвертое издание. Смотреть картинку Язык программирования c четвертое издание. Картинка про Язык программирования c четвертое издание. Фото Язык программирования c четвертое издание

The C Book

Книга «The C Book» предназначена для тех, кто уже имеет опыт программирования на высокоуровневых языках. Она посвящена моментам, характерным именно для Си.

Язык программирования c четвертое издание. Смотреть фото Язык программирования c четвертое издание. Смотреть картинку Язык программирования c четвертое издание. Картинка про Язык программирования c четвертое издание. Фото Язык программирования c четвертое издание

Программирование на С для начинающих

«Программирование на С для начинающих» — учебник для максимально быстрого освоения языка, содержащий в себе много практического материала. Изложение четкое и простое, вы узнаете, как организовать программу, хранить и отображать данные, работать с переменными, операторами, вводом/выводом, указателями, массивами, функциями и многими другими вещами.

Пособие содержит всё самое важное, что вам нужно знать для программирования на C:

Язык программирования c четвертое издание. Смотреть фото Язык программирования c четвертое издание. Смотреть картинку Язык программирования c четвертое издание. Картинка про Язык программирования c четвертое издание. Фото Язык программирования c четвертое издание

C Elements of Style

«C Elements of Style» — это полезное руководство, описывающее основы хорошего стиля программирования. Оно научит вас писать код, который будет легко читать, понимать и поддерживать.

В книге вы найдёте советы по написанию комментариев, именованию переменных, форматированию, организации каталогов, созданию сборочных файлов и другим темам.

Язык программирования c четвертое издание. Смотреть фото Язык программирования c четвертое издание. Смотреть картинку Язык программирования c четвертое издание. Картинка про Язык программирования c четвертое издание. Фото Язык программирования c четвертое издание

Изучаем программирование на C

Книга из серии Head First, которая использует те же подходы, что и другие книги цикла. Материал подается в достаточно игровой форме и с использованием огромного количества иллюстраций. В книге рассматриваются:

Если вы не можете осилить классические учебники по Си, то не отчаивайтесь и попробуйте эту книгу. Она подойдет даже для новичков, не изучавших никогда программирование вообще.

Язык программирования c четвертое издание. Смотреть фото Язык программирования c четвертое издание. Смотреть картинку Язык программирования c четвертое издание. Картинка про Язык программирования c четвертое издание. Фото Язык программирования c четвертое издание

Программирование на C для начинающих

Еще один хороший учебник по Си. Рассчитан на читателей, никогда не писавших кода и стремящихся начать свое знакомство с программированием именно с Си. Написан доступным языком. Из-за нацеленности на новичков книга охватывает не все аспекты языка. Из минусов можно выделить опечатки в тексте и программном коде. Но для настоящих кодеров такое никогда не было проблемой!

Язык программирования c четвертое издание. Смотреть фото Язык программирования c четвертое издание. Смотреть картинку Язык программирования c четвертое издание. Картинка про Язык программирования c четвертое издание. Фото Язык программирования c четвертое издание

Build Your Own Lisp

Изучайте язык Си и одновременно пишите свой язык программирования — минималистскую версию Lisp — меньше чем за 1000 строк кода.

Эта книга предназначена для тех, кто хочет изучить Си и / или написать свой язык программирования. Однако вам явно потребуется какой-то опыт написания кода, поэтому в качестве первой книги мы её не рекомендуем.

The GNU C Reference Manual

«The GNU C Reference Manual» — это шпаргалка по языку Си стандартов C89 ANSI, C99 ISO и расширениям GNU. Она точно не нужна начинающим программистам.

The GNU C Programming Tutorial

Руководство «The GNU C Programming Tutorial» понятным образом объясняет читателю основы языка. Оно подробно описывает все основные элементы Си и рассказывает, как писать на нём программы, делая акцент на компиляторе GNU/Linux.

Рассматриваются такие темы, как функции, переменные и их объявление, области видимости, операторы, указатели, циклы, массивы, строки, а также многие другие.

Essential C

Эта книга — небольшая методичка, составленная в Стэнфорде. Она вкратце описывает все основы языка Си. Из-за сжатых объяснений рекомендуется, чтобы у читателя уже был опыт программирования.

Затрагиваются такие темы: переменные, операторы, циклы, функции, ссылки, указатели, структуры, препроцессор и стандартная библиотека.

Beej’s Guide to C Programming

Книга «Beej’s Guide to C Programming» пытается вывести читателя из состояния полного непонимания Си и дать ему понять, что Си — это лучший язык программирования.

Modern C

«Modern C» стремится мотивировать читателя повысить свой уровень знания языка. Книга разделена на 5 уровней:

Язык программирования c четвертое издание. Смотреть фото Язык программирования c четвертое издание. Смотреть картинку Язык программирования c четвертое издание. Картинка про Язык программирования c четвертое издание. Фото Язык программирования c четвертое издание

An Introduction to GCC

Руководство «An Introduction to GCC» рассказывает о C и C++ компиляторах GNU, gcc and g++, являющихся частью GNU Compiler Collection (GCC).

Вот ещё несколько бесплатных книг по языку Си:

И, разумеется, не стоит забывать про каноничную книгу Кернигана и Ритчи: The C Programming Language. Сложная, не для начинающих, но по праву признана шедевром.

Источник

Страуструп c 4 издание pdf

AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Язык программирования c четвертое издание. Смотреть фото Язык программирования c четвертое издание. Смотреть картинку Язык программирования c четвертое издание. Картинка про Язык программирования c четвертое издание. Фото Язык программирования c четвертое издание

Библиотека программиста запись закреплена

Третье издание на русском, четвёртое(наиболее современное) — пока что на английском.

Бьёрн Страуструп «Язык программирования C++»

Примечание к четвёртому изданию:
Книга написана Бьерном Страуструпом – автором языка программирования C++ – и является каноническим изложением возможностей этого языка. Помимо подробного описания собственно языка, на страницах книги вы найдете доказавшие свою эффективность подходы к решению разнообразных задач проектирования и программирования. Многочисленные примеры демонстрируют как хороший стиль программирования на С-совместимом ядре C++, так и современный объектно-ориентированный подход к созданию программных продуктов.

Please note that GitHub no longer supports your web browser.

We recommend upgrading to the latest Google Chrome or Firefox.

All your code in one place

GitHub makes it easy to scale back on context switching. Read rendered documentation, see the history of any file, and collaborate with contributors on projects across GitHub.

books / seeing / stalled / 2013 Stroustrup – The C++ Programming Language 4th Edition.pdf

Users who have contributed to this file

Язык программирования c четвертое издание. Смотреть фото Язык программирования c четвертое издание. Смотреть картинку Язык программирования c четвертое издание. Картинка про Язык программирования c четвертое издание. Фото Язык программирования c четвертое издание

You can’t perform that action at this time.

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.

Сейчас проходит конференция CppCon 2017, и на их youtube-канале уже стали появляться видео оттуда. И я подумал, почему бы не попробовать сделать конспекты интересных лекций. Конечно, не очень уверен, надолго ли меня хватит, зависит от того насколько вам это понравится.

Это первое вступительное видео. Оно не такое интересное для меня, но пропустить тоже не мог, это же Страуструп. Далее, текст от его лица. Заголовки взяты из слайдов.

Disclaimer: весь дальнейший текст — достаточно краткий пересказ, являющийся результатом работы моего восприятия, и то, что я посчитал «водой» и проигнорировал, могло оказаться важным для вас. Иногда выступление было таким: «(важная мысль 1)(минута воды)(важная мысль 2)». Эти две мысли плавно перетекали друг в друга, а у меня получались довольно резкие скачки. Где можно сгладил, но посчитал нецелесообразным полностью причесывать текст, на это бы потребовалось много времени.

Вступление

Когда меня попросили выступить на открытии конференции, я задумался, о чем же я могу рассказать такого, что важно для вас, и чего вы не слышали миллион раз. И я решил рассказать про обучение языку C++.

Мы все учителя и мы все ученики

Зададимся вопросом кого мы учим, чему, зачем и как. Нужно делать это лучше. Я не критикую кого-то в частности, но чувствую, что мы должны делать это лучше. Не все из нас преподаватели, но тем не менее постоянно возникают случаи, когда мы занимаемся обучением. Например, рассказываем коллегам о последних фичах или даем советы. Общаемся на StackOverflow, Reddit, ведем блоги и т.д. Но нужно давать хорошие советы. Советы, которые двигают мир вперед.

Есть одна вещь, которая сильно беспокоит меня — зачастую у людей бывают очень странные представления о том, что собой представляет C++. Чуть позже я вернусь к этой проблеме.

Когда учите, задумайтесь, чего вы хотите достичь. И от от этого и начинайте. Не отталкивайтесь от «что мы уже сделали» и «что проще, чтобы начать», а если вы преподаватель, то от «что проще проверить».

Обучение программированию

Не нужно фокусироваться на языковых фичах. Например, вы встречали примеры в которых объясняется проблема приведения signed short к unsigned int [рассказывается о преподавании языка в общем, а не об особенностях C++]. Это неинтересно и можно увидеть в отладчике или прочитать в руководстве. Учите так, чтобы такая проблема не появлялась.

Не пытайтесь учить всему, вы не сможете. Внимательно выберите подмножество языка.

Одна из встечающихся проблем обучения C++ — то что язык изучается сам по себе, отдельно от библиотек. Вектор на 697 странице, sort через 100 страниц. Это учит, что stl скучная, сложная фигня. И в то же время: свой Linked List или Hash table это круто, круче чем stl.

Не будьте слишком умными

[в выступлении автор использует слово clever с негативным оттенком, что-то вроде человека, который пытается казаться быть умным]

Люди которые хотят и требуют «самое последнее» часто не знают основ. Пересмотрите основы.

Будьте проще. Не бросайтесь в самое сложное и изощренное. Не используйте самый продвинутый алгоритм, который только можно найти. Я бы не выбрал пузырьковую сортировку, но также не выбрал бы и «полный общий алгоритм для всего». Предлагайте самый простой пример, который иллюстрирует технику или фичу.

Фокусируйтесь на общих случаях. Будьте рациональными. Не говорите ученикам «Делай только так, это правильно, это закаляет характер. И можете получить пятерку, если ответите именно так». Нужно объяснить, почему нужно следовать правилам, дать ученикам хорошие идеалы, идеи, техники.

Конечно, обучая, очень заманчиво, стоять перед коллегами, группой людей и всем своим видом показывать: «Смотрите, эта сложная вещь, которую вы не поняли. Это означает, что я умный». Это не очень хорошее обучение.

Обучение программированию

Если изучать только сам язык, то попав в реальность можно просто «утонуть».
Используйте различные инструменты. Не только компилятор и учебник, но и IDE, отладчики, системы контроля версий, профилировщики, модульное тестирование, статические анализаторы, онлайн компиляторы. Инструменты должны быть современными (иногда получаю вопросы по Turbo C++ 4.0 🙁 )

Нужно изучать принципы и закреплять на практике. Используйте графику, сети, интернет, Raspberry Pi, робототехнику и т. д. Это очевидно для вас, но не очевидно для университетов. Не говорите что это просто и быстро. И помните, что никто не умеет делать все.

Язык это не только синтаксис

Как мы часто учим? Объясняем язык плюс немного стандартную библиотеку. Без всякой графики, пользовательского интерфейса, веба, электронной почты, баз данных… И многие ученики считают, что C++ скучный бесполезный язык. Но это же не так, ведь такие вещи как браузеры, СУБД, САПР и прочие пишутся на C++. Перед началом лекции потратьте 5 минут о практическом применении.

Мы должны сделать лучше

Нам, сообществу C++, очень важно упростить начало работы, возможность пользоваться «прямо сейчас».

Как программирование похоже на занятие фотографией?

Как пользователи в различных отраслях разделяются на группы? Приведем пример с фотографией. Результат зависит от оборудования и от пользователя. Лично я новичок в фотографии. Большинство возможностей профессиональной фотокамеры будут для меня бесполезными. Она много весит, дорого стоит. Для нее существует множество аксессуаров в которых можно утонуть. Но с ее помощью можно делать превосходные фотографии, если потратить много времени на обучение. Аналогично существует много людей, которые не могут использовать разнообразные фичи языка и библиотеки.

Массовый рынок

С другой стороны, у нас есть устройства, которыми можно пользоваться сразу. Такое устройство дешевое, простое, «милое». Прощает ошибки, не требует много усилий для освоения. Является «вещью в себе». Мало расширений и дополнений, если таковые вообще есть. Отсутствуют взаимозаменяемые части.

Как-то во время преподавания мне было нужно, чтобы у студентов была установлена библиотека GUI. Оказалось, что установить одну и ту же библиотеку на студенческие Mac, Linux, Windows, весьма болезненно.

Языку нужна «система»

Каждый производитель фототехники предлагает «систему», которая предполагает, что вы можете постепенно обновлять оборудование и переходить на следующий уровень по мере обучения.

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

Какими должны быть основные дистрибутивы?

Язык должен быть представлен тремя дистрибутивами. Для новичков, любителей и профессионалов.

Модули помогут

Расширения (которые не входят в базу):

Нужны хорошие пакетные менеджеры и системы сборки

Как ученик на вторую неделю после начала обучения может установить библиотеку графического интерфейса и работы с базами данных? Различные библиотеки и системы собираются по разному. Различные библиотеки могут быть плохо совместимыми. Десяток несовместимых пакетных менеджеров — это не решение. Нужно сделать простым выполнение простых задач

Или эквивалентным способом, например в IDE:

Современный C++

Мое видение современного C++ (как обычно):

Меняться трудно

Современный C++ это не C, Java, C++98 и не тот язык, на которым вы программировали 10 лет назад. Инерция — враг хорошего кода. Преподаватели, оправдывая неиспользование современных стандартов, говорят, что «мы так не делаем», «это не вставить в мою учебную программу», «может быть через 5 лет». У студентов появляется большее доверие к интернету, чем к преподавателям. Некоторые считают, что они умнее преподавателей, и иногда они правы. У меня стабильно каждый год на курсе были студенты, абсолютно убежденные, что они умнее меня в программировании. В этих частных случаях, я обоснованно уверен, что оне не правы [смех в зале].

Что такое современный С++?

Для реализации этого 2 года назад был открыт проект C++ Core Guidelines. Он дает конкретные ответы на вопросы. У него много много участников, включая Microsoft и Red Hat.

Примеры кода

Не отделяйте примеры от объяснения. 5 страниц голой теории это лишняя трата. Давайте примеры и объяснения к ним. Без объяснения люди не обобщают. Они просто копипастят и сами изобретают трактовку, причем иногда очень странную.

Улучшение кода

Всегда объясняйте причины. Например:

Почему 2 лучше чем 1? Пример 2 явно показывает намерение, v может быть изменен без переписывания цикла, и менее подвержен ошибкам. Следует заметить, что 1 предоставляет более гибкие возможности. Но ведь goto еще более универсален, и поэтому мы избегаем его.

[I.4 означает пункт из Core Guidelines]

[Здесь milliseconds какой-то простой тип не из библиотеки Chrono, поэтому последняя строчка приводит к ошибке. Ниже по тексту описано обобщение типа для единицы измерения, взятого из Chrono. Если интересно, можете почитать мое описание этой библиотеки]

А должен ли этот код использовать возврат двух параметров?

Лучше? Да, если неуспешное открытие было предусмотрено в программе.

Улучшение кода: не будьте слишком умными

Слово «умный» в контексте использования C++ — ругательное. Найдите баг:

Комментирование

Philosophy rules

Я рекомендую вам отправиться на github и почитать раздел Philosophy rules, содержащий основные концепции.

Core guidelines

Моя цель очень проста. Мы можем писать типо- и ресурсобезопасный код без утечек, повреждения памяти, сборщика мусора, ограничений в выразительности, ухудшения производительности.

Сейчас разрабатываются 2 открытых проекта: анализатор, для проверки правил Core Guidelines, и библиотека GSL — guidelines support library (реализация от Microsoft).

Язык программирования c четвертое издание. Смотреть фото Язык программирования c четвертое издание. Смотреть картинку Язык программирования c четвертое издание. Картинка про Язык программирования c четвертое издание. Фото Язык программирования c четвертое издание

Вопросы? Комментарии?

Нет, я рассказал далеко не все про обучение. Лишь едва царапнул поверхность.

Вопросы из зала

[У Страуструпа есть сверхспособность отвечать по 5 минут на простые вопросы, поэтому я очень сильно сократил его ответы да и сами вопросы тоже]

Core Guidelines слишком всеобъемлющие. как учить?

Не нужно читать всё. Прочитать введение, затем раздел с философией. Не нужно искать правило, правило само найдет вас.

Нужны ли стандартной библиотеке нужны простые функции? Например random [я полагаю, что имеется в виду функция без необходимости установки начального значения и возможностью задания закона распределения]?

Вы говорили про 3 дистрибутива C++. Кто должен этим заниматься?

Вряд этим будет заниматься комитет, поэтому, я думаю, это нужно делать силами сообщества. Это будет проще с развитием единого пакетного менеджера и модулей

Моя дочь учится в колледже и мы вместе делали проект термостата. Так вот, для того, чтобы получить температуру и отобразить на экране, потребовался целый семестр изучения C++. Что вы думаете по этому поводу?

Да, есть такая проблема. С модулями будет лучше.

Нужно ли преподавать программирование как общий предмет, так же как математику

Я не компетентен в этом вопросе.

mmatrosov: вы говорили о том, что в обучении нужно пользоваться библиотеками. Не будет ли такого, что новое поколение программистов не будет знать основ?

Зависит от цели. Я учу студентов как реализовать вектор, они должны знать об указателях, но не каждому нужно реализовывать lock-free код.

Ой, у вас баннер убежал!

Похожие публикации

Удивительная производительность параллельных алгоритмов C++17. Миф или Реальность?

Шесть бесплатных автоматизированных платформ для изучения программирования

Как мы перевели 10 миллионов строк кода C++ на стандарт C++14 (а потом и на C++17)

3 книги по C++ 17 (на английском)

[CppCon 2018] Herb Sutter: На пути к более простому и мощному C++

[CppCon 2017] Herb Sutter: Метапрограммирование и кодогенерация в C++

Язык программирования c четвертое издание. Смотреть фото Язык программирования c четвертое издание. Смотреть картинку Язык программирования c четвертое издание. Картинка про Язык программирования c четвертое издание. Фото Язык программирования c четвертое издание

Читают сейчас

Вакансии

AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Комментарии 24

И сейчас можно чекать UB через UndefinedBehaviorSanitizer

А если бы компилятор умел читать мысли и делал бы не то, что вы написали, а что вы задумали — было б вообще великолепно, да?

В том-то и дело, что почти любая строка в C++ потенциально может стать источником UB — а равно и какой-нибудь другой проблемой.

И, как верно заметили, у студентов UB не вызывает никаких особенных проблем.

Проблемы с UB — это всегда «горе от ума»: написано, что разименовывать nullptr нельзя… но я-то знаю, что произойдёт GPF!

Нет, не знаете. Сегодня произойдёт, завтра — нет. Написано UB — значит так делать нельзя. Точка. Конец истории.

Прекратите считать, что вы умнее разработчиков стандартов и компиляторов и вдруг, внезапно UB перестанет быть проблемой и станет помощником.

Вы пишите, что «почти любая строка в C++ потенциально может стать источником UB» — сомневаюсь, что это правда. Если же это так, то это ошибка дизайна языка.

Проблема С++ это то, что компилятор считает, что программист очень умный и его программа без UB и поэтому ее можно агрессивно оптимизировать. Поэтому перед изучением С++ стоит реально оценить, достаточно ли ты умный для этого языка и в случае сомнений выбрать другой язык.

Вы пишите, что «почти любая строка в C++ потенциально может стать источником UB» — сомневаюсь, что это правда.

Почти любая арифметика может привести к переполнению. Переполнение — это UB.

Если же это так, то это ошибка дизайна языка.

Проблема С++ это то, что компилятор считает, что программист очень умный и его программа без UB и поэтому ее можно агрессивно оптимизировать.

Нет. Компилятор в Java так не считает, но бинарный поиск всё равно частенько не работает. «Тупой» и «предсказуемый» компилятор — вовсе не гарантия того, что ваша программа будет работать без ошибок…

Проблема C/C++ в том, что «тупые» компиляторы стали «умными», а некоторые разработчики, считающие себя умнее компилятора (и бывшие, в прошлом, реально «умнее» какого-нибудь Turbo C), «нарываются на неприятности» — после чего поднимают «вселенский вой» на форумах.

Если же UB избегать и на пытаться «домыслить» за компилятор, то программировать на C/C++ не сильно сложнее, чем на Java или C#…

Для студента это как раз несложно: сказали обязательно выделять память перд использованием (обращение к неинициализированному указателю — первый UB, на который «нарываются» новички) — выделяем, сказали не допускать переполнения целых чисел — не допускаем. Правил много, но ничего особенно страшного в них нет. А вот для программиста с опытом, который «точно знает», что переполнение ничем, кроме получения отрицательного числа там, где оно должно быть положительным, «не грозит» — поведение компилятора может действительно оказаться неожиданным…

Все таки UB — специфика дизайна языка. В универсальном ассемблере нельзя сказать, как будет обрабатываться переполнение на конкретном процессоре. А при программировании на ассемблере для конкретного процессора — можно.

становиться после оптимизации компилятора

Мне кажется, это немного печальная оптимизация.
И такой быстрый код совсем не нужен.

В универсальном ассемблере нельзя сказать, как будет обрабатываться переполнение на конкретном процессоре.

И именно поэтому переполнение — это UB.

А при программировании на ассемблере для конкретного процессора — можно.

А это — уже неважно. С и C++ — это инструменты для написания переносимого кода. Если вы пытаетесь при программировании на них использовать ваше знание конкретного процессора — вас ждут сюрпризы.

Если даже предположить, что у нас «тупой», не оптимизирующий компилятор, то вряд ли первоначальный вариант будет быстрее (вам нужно будет куда-то скопировать «size», потом увеличить его на единицу, только после этого сравнить… вместо того, чтобы использовать одну инструкцию cmp ).

Код изначально было ужасен, так стоит ли удивляться, что после вмешательства компилятора он перестал работать? Ровно то, о чём я говорил:

Некоторые разработчики, считающие себя умнее компилятора (и бывшие, в прошлом, реально «умнее» какого-нибудь Turbo C), «нарываются на неприятности» — после чего поднимают «вселенский вой» на форумах.

А теперь давайте вернёмся всё-таки к Java. Заметьте, что код, о котором там говорится вызывает на C/C++ как раз UB — но ведь и в Java он тоже не работает, пусть и по другому!

И вот это — типичная ситуация. UB делает программирование на C/C++ сложнее только тогда, когда вы начинаете аппелировать вот к этим вот при программировании на ассемблере для конкретного процессора — можно. C/C++ — не ассемблер — это, по большому счёту, всё, что нужно знать про то, чтобы при его использовании не возникало проблем с UB.

Ещё раз: где-то 99% всех бед, которые я наблюдал от «оптимизаций, базирующихся на UB» происходят из-за того, что кто-то пытается быть «слишком умным». Так вот: «шибко умным» нужно было быть с каким-нибудь Borland C++ 2.0 или каким-нибудь Zortech C++ 3.1. В те времена реально можно было отиграть заметный процент перейдя от индексов к указателям в цикле, например. В XXI веке это не нужно, а в последнее время — становится вредным.

Всё, что вам нужно помнить об UB это одну фразу: «не выпендривайтесь» — и этого достаточно в 99% случаев. Я про это уже писал.

Именно поэтому вопрос UB — это достаточно болезненная тема в C/C++ сообществе, но… не при обучении программированию! Студенты, в большинстве своём, просто недостаточно продвинуты, чтобы UB их «укусил»: чтобы написать код, который на неоптимизирующем компиляторе будет работать, а на оптимизирующем «упрётся в UB» нужно весьма немало знать!

Источник

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *