Daily bit(e) of C++ #83 , Современный курс C++ (включая C++23), часть 1 из N

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

В этой серии я подробно проведу вас по языку C++, чтобы вы могли с комфортом приступить к разработке C++ на уровне приложений. Для этого курс будет насыщен примерами и содержать домашние задания.

В этой статье я рассмотрю предпосылки и цель курса. Затем я расскажу о настройке и о том, как эффективно использовать этот курс.

Предпосылки

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

Вам понадобится Docker (Desktop) и Visual Studio Code, установленные на вашем компьютере, чтобы работать над домашним заданием.

Из-за компонентов, используемых в программном стеке курса, вам потребуется 64-разрядная система, но стек должен нормально работать как в системах x86–64, так и в системах arm64 (дайте мне знать, если у вас возникнут проблемы).

Цель

Моя ежедневная серия статей о бит(е) уже охватывает язык C++; тем не менее, в то время как основная серия приближается к обучению путем изучения небольших фрагментов языка под микроскопом, этот курс призван стать экскурсией по обширным землям C++.

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

Основная цель состоит в том, чтобы дать вам знания, которые позволят вам работать над проектами на уровне приложений (со временем я создам еще один курс, который поднимет вас до уровня разработки библиотек).

Следовательно, этот курс ни в коем случае не претендует на полноту. Вместо этого он будет поверхностным и сфокусированным, охватывая только основные части языка.

Установка

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

Например:

Открыть в Compiler Explorer.

Примеры в тексте иногда пропускают шаблонный код для краткости, но настройка Compiler Explorer всегда будет завершена.

Использование Compiler Explorer достаточно просто. По мере редактирования кода в окне редактора кода программа будет периодически перестраиваться и выполняться. Вы увидите вывод компиляции (ошибки, предупреждения) и вывод выполнения в окне вывода.

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

VSCode

Хотя Compiler Explorer отлично подходит для работы с небольшими примерами, нам нужно что-то более надежное для домашней работы, поэтому я подготовил установку на основе VSCode.

К каждому уроку прилагается репозиторий домашних заданий. Он будет содержать код скаффолдинга и предварительно написанные тесты. В этом примере мы будем использовать https://github.com/HappyCerberus/daily-bite-course-01.

Кроме того, каждый репозиторий также настроен как шаблон. Если вам нужна ваша копия, перейдите в репозиторий и выберите «Использовать этот шаблон» (кнопка может быть скрыта в узких окнах). С этого момента используйте свой URL.

  1. Откройте VSCode и нажмите Ctrl+Shift+P / Shift+Command+P (или View›Command Palette)
  2. Напишите «Clone» и выберите «Git: Clone».
  3. Вставьте URL (https://github.com/HappyCerberus/daily-bite-course-01) и нажмите Enter.

Вам будет предложено выбрать местоположение (что не имеет значения), и после того, как репозиторий будет клонирован, вы должны получить запрос на повторное открытие репозитория в DevContainer:

Подтвердите приглашение, и репозиторий будет повторно открыт в пользовательском образе Docker с GCC 12.2. Зеленая кнопка в левом нижнем углу теперь должна отображать «Контейнер разработки».

Если вы закрыли приглашение или вам нужно сделать это вручную, нажмите зеленую кнопку и выберите «Повторно открыть в контейнере». Оказавшись внутри контейнера, вы можете просмотреть код и открыть терминал (Вид>Терминал).

Цель каждого урока, как правило, состоит в том, чтобы пройти все тесты, но сначала давайте запустим программу hello world «helloworld/main.cc». Для этого мы можем использовать команду «bazel run»:

Первый запуск может быть медленным, поскольку Bazelisk (инструмент для установки Bazel) потребуется загрузить правильную версию Bazel, а затем Bazel потребуется получить все необходимые зависимости.

Теперь, когда основы работают, вы можете попытаться достичь цели, состоящей в том, чтобы пройти все тесты:

bazel test //...
bazel test --config=ubsan //...
bazel test --config=addrsan //...

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

Отладка

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

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

Окно редактора позволит вам установить точки останова; однако вы должны предоставить конфигурацию того, что именно должен делать VSCode, когда вы запрашиваете сеанс отладки.

Я подготовил конфигурацию для примера теста в «.vscode/launch.json». Вы должны иметь возможность повторно использовать эту конфигурацию, изменяя путь к двоичному файлу по желанию.

Чтобы начать сеанс отладки:

  • скомпилировать с отладочными символами, используя bazel build --config=debug //debugging:example_test
  • установите точку останова в файле debugging/example_test.cc, щелкнув рядом с номерами строк
  • запустить сеанс отладки: Выполнить›Начать отладку

Как использовать этот курс

Напоследок хочу дать несколько рекомендаций, как наиболее эффективно использовать этот курс.

Если вы приходите с предварительными знаниями (или знаниями C), самое главное — придерживаться инструментов, представленных в курсе. Возможно, вы уже знаете несколько способов достижения определенной цели, но изучение материала курса позволит вам заново изучить подход Modern C++.

Поиграйте с примерами. Причина, по которой каждый пример кода ссылается на Compiler Explorer, заключается в том, что вы можете экспериментировать. Проверьте свое понимание, предсказав, что произойдет, если вы измените код, а затем проверите.

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

Пожалуйста, дайте мне знать, если что-то не работает или вы застряли. Одна из вещей, которую я пытаюсь получить от публикации этого курса в Интернете, — это получить представление о том, насколько хорош темп, и сгладить любые перегибы. Я буду изо всех сил стараться не отставать от комментариев (пока они по теме).

Как вы можете помочь

Такие большие сериалы требуют много работы для подготовки. Поделитесь, если знаете кого-то, кому может быть полезен курс.