C++ 1MIT осень 1 2020 — различия между версиями

Материал из CSC Wiki
Перейти к:навигация, поиск
(Общее развитие)
(Практика 1: Алфёров)
(не показаны 4 промежуточные версии 2 участников)
Строка 37: Строка 37:
 
* Про зарезервированные имена в Си и C++ (нижние подчёркивания и не только): [https://stackoverflow.com/a/228797/767632 stackoverflow.com/a/228797/767632]
 
* Про зарезервированные имена в Си и C++ (нижние подчёркивания и не только): [https://stackoverflow.com/a/228797/767632 stackoverflow.com/a/228797/767632]
 
* [https://en.cppreference.com/w/cpp Детальный справочник по C++]. Содержит сильно больше, чем надо в курсе. Лучше искать и читать понятные подмножества по конкретным темам вроде [https://en.cppreference.com/w/cpp/algorithm/sort <code>std::sort</code>] или [https://en.cppreference.com/w/cpp/language/member_functions member functions]).
 
* [https://en.cppreference.com/w/cpp Детальный справочник по C++]. Содержит сильно больше, чем надо в курсе. Лучше искать и читать понятные подмножества по конкретным темам вроде [https://en.cppreference.com/w/cpp/algorithm/sort <code>std::sort</code>] или [https://en.cppreference.com/w/cpp/language/member_functions member functions]).
 +
 +
==== Просто хорошие учебники ====
 +
Тут может быть другое изложение, другие примеры, не хватать большого количества деталей. Но ''базовая'' картинка должна сложиться такая же: язык один и тот же, стараемся использовать только общепринятые термины и явно подчёркивать отсебятину.
 +
 +
* [https://www.stroustrup.com/programming.html Книга "Programming -- Principles and Practice Using C++" (2 издание) за авторством Bjarne Stroustroup] (исходный создатель языка C++)
 +
* Видеокурсы по C++ из Computer Science Center: [https://compscicenter.ru/courses/cpp-1/2018-autumn/ первый семестр], [https://compscicenter.ru/courses/cpp-2/2019-spring/ второй семестр]
  
 
=== Общее развитие ===
 
=== Общее развитие ===
Строка 46: Строка 52:
 
* [https://abseil.io/tips/ TotW] (Tips of the Week by Google)
 
* [https://abseil.io/tips/ TotW] (Tips of the Week by Google)
 
* Что угодно от [https://www.aristeia.com/books.html Scott Meyers]
 
* Что угодно от [https://www.aristeia.com/books.html Scott Meyers]
 +
* Что угодно от Andrei Alexandrescu (скорее доклады, книги выходили до 2010 года)
 
* [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1705r0.html P1705R0 Enumerating Core Undefined Behavior] — попытка перечислить хоть какие-то UB.
 
* [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1705r0.html P1705R0 Enumerating Core Undefined Behavior] — попытка перечислить хоть какие-то UB.
 
* [https://en.wikibooks.org/wiki/More_C%2B%2B_Idioms More C++ Idioms Wikibook]
 
* [https://en.wikibooks.org/wiki/More_C%2B%2B_Idioms More C++ Idioms Wikibook]
Строка 75: Строка 82:
 
* [https://github.com/hse-spb-2020-cpp/practice-alferov/tree/master/pract04 Материалы с практики №4 (Дроби)]
 
* [https://github.com/hse-spb-2020-cpp/practice-alferov/tree/master/pract04 Материалы с практики №4 (Дроби)]
 
* [https://github.com/hse-spb-2020-cpp/practice-alferov/tree/master/pract05 Материалы с практики №5 (array)]
 
* [https://github.com/hse-spb-2020-cpp/practice-alferov/tree/master/pract05 Материалы с практики №5 (array)]
 +
* [https://github.com/hse-spb-2020-cpp/practice-alferov/tree/master/pract09 Материалы с практики №9 (CMake)]
 +
* [https://github.com/hse-spb-2020-cpp/practice-alferov/tree/master/pract11 Материалы с практики №11 (unique_ptr)]
  
 
== Практика 2: Лапшин ==
 
== Практика 2: Лапшин ==

Версия 09:50, 26 ноября 2020

Общее

Организация курса: https://github.com/hse-spb-2020-cpp

  • Дз 0: Lab 0: Hello, World! (попробовать классрум, необязательное, не на баллы)
  • Дз 1: Lab 1: BigInt
    • Общее для всех групп, обязательное.
    • Дедлайн: 1 октября (четверг) 23:59.

Софт

  • Основной компилятор: gcc со стандартной библиотекой libstdc++ под Linux. С добавлением Address Sanitizer, Memory Sanitizer, UB Sanitizer, Valgrind.
  • Также должно собираться clang со стандартной библиотекой libc++ под Linux.
  • По-хорошему должно собираться gcc/clang/visual studio на Windows, но не у всех есть, поэтому не требуем жёстко.

На Windows можно использовать Visual Studio, но в любом случае требуется поставить GCC/Clang. Для этого можно либо поставить WSL 1 + Ubuntu (и внутри будет обычная линуксовая консоль), либо msys2] с пакетом mingw-w64-x86_64-gcc (это будет gcc, который компилирует под Windows). Егор использует оба варианта, чтобы показывать поведение и под Windows, и под Linux.

Установка clang и stdc++ на Ubuntu

  1. До Ubuntu 20.04: добавляем в конец /etc/apt/sources.list две строчки, соответствующие вашей версии Ubuntu (смотри /etc/lsb-release). Например, для Ubuntu 16.04.1 LTS:
deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-10 main
deb-src http://apt.llvm.org/xenial/ llvm-toolchain-xenial-10 main
  1. sudo apt update
  2. sudo apt install clang-10 libc++-10-dev libc++abi-10-dev

Можно установить на Ubuntu 18.04 после этих шагов.

Потом можно компилировать при помощи команды clang++-10 -stdlib=libc++ main.cpp -o main. Почти все флаги как у GCC, включая warnings.

Лекции

Лектор: Суворов Егор Федорович (egor_suvorov@mail.ru]), в теме письма обязательно указывать [hse] [cpp] и слово "вопрос", если там вопрос.

Также есть Telegram: yeputons

Базовые материалы

Материалы с лекций: https://github.com/hse-spb-2020-cpp/lectures

Просто хорошие учебники

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

Общее развитие

Обращайте внимание, для какого стандарта вы читаете рекомендации. Минимальный — C++11, C++03 — это совсем другой язык. Следующие огромные изменения ожидаются в C++20.

Дополнительные материалы

C++20 и метапрограммирование

Практика 1: Алфёров

Василий Алфёров.

Почта: vasily.v.alferov@gmail.com

Телега: vasiliyalferov

GitHub: vasalf

Практика 2: Лапшин

Дмитрий Лапшин.

Контакт: au-cpp@ldvsoft.net

GitHub: LDVSOFT

Материалы: Github repo

Практика 3-4: Суворов

Егор Суворов.

Почта: egor_suvorov@mail.ru], в теме письма обязательно указывать [hse] [cpp] и слово "вопрос", если там вопрос.

Telegram: yeputons

GitHub: yeputons

Материалы: https://github.com/hse-spb-2020-cpp/practice-suvorov

Проверяющий: Малышева

Мария Малышева.

Telegram: isomethane

GitHub: isomethane

Проверяющий: Прокопцев

Дмитрий Прокопцев.