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 достаточно просто. По мере редактирования кода в окне редактора кода программа будет периодически перестраиваться и выполняться. Вы увидите вывод компиляции (ошибки, предупреждения) и вывод выполнения в окне вывода.
Мы также воспользуемся преимуществами настройки аргументов запуска и ввода в некоторых примерах.
VSCode
Хотя Compiler Explorer отлично подходит для работы с небольшими примерами, нам нужно что-то более надежное для домашней работы, поэтому я подготовил установку на основе VSCode.
К каждому уроку прилагается репозиторий домашних заданий. Он будет содержать код скаффолдинга и предварительно написанные тесты. В этом примере мы будем использовать https://github.com/HappyCerberus/daily-bite-course-01.
Кроме того, каждый репозиторий также настроен как шаблон. Если вам нужна ваша копия, перейдите в репозиторий и выберите «Использовать этот шаблон» (кнопка может быть скрыта в узких окнах). С этого момента используйте свой URL.
- Откройте VSCode и нажмите Ctrl+Shift+P / Shift+Command+P (или View›Command Palette)
- Напишите «Clone» и выберите «Git: Clone».
- Вставьте 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, заключается в том, что вы можете экспериментировать. Проверьте свое понимание, предсказав, что произойдет, если вы измените код, а затем проверите.
Старайтесь делать домашнее задание и только потом смотрите решения. Хотя я буду приводить примеры решений домашнего задания, всегда старайтесь сначала решить его самостоятельно, а только потом смотрите на решение. Если вам не удалось решить проблему, попробуйте повторно реализовать пример решения, так как это поможет укрепить мышечную память.
Пожалуйста, дайте мне знать, если что-то не работает или вы застряли. Одна из вещей, которую я пытаюсь получить от публикации этого курса в Интернете, — это получить представление о том, насколько хорош темп, и сгладить любые перегибы. Я буду изо всех сил стараться не отставать от комментариев (пока они по теме).
Как вы можете помочь
Такие большие сериалы требуют много работы для подготовки. Поделитесь, если знаете кого-то, кому может быть полезен курс.