C++ 1MIT осень 1 2020 — различия между версиями
(→Общее) |
(→Практика 1: Алфёров) |
||
(не показаны 23 промежуточные версии 4 участников) | |||
Строка 2: | Строка 2: | ||
Организация курса: https://github.com/hse-spb-2020-cpp | Организация курса: https://github.com/hse-spb-2020-cpp | ||
− | * | + | * Дз 0: [https://classroom.github.com/a/SUH4ybiX Lab 0: Hello, World!] (попробовать классрум, необязательное, не на баллы) |
− | * | + | * Дз 1: [https://classroom.github.com/a/Iizc55i_ Lab 1: BigInt] |
** Общее для всех групп, обязательное. | ** Общее для всех групп, обязательное. | ||
** Дедлайн: 1 октября (четверг) 23:59. | ** Дедлайн: 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. Для этого можно либо поставить [https://docs.microsoft.com/ru-ru/windows/wsl/install-win10 WSL 1] + Ubuntu (и внутри будет обычная линуксовая консоль), либо [https://msys2.org msys2]] с пакетом [https://packages.msys2.org/package/mingw-w64-x86_64-gcc <code>mingw-w64-x86_64-gcc</code>] (это будет gcc, который компилирует под Windows). Егор использует оба варианта, чтобы показывать поведение и под Windows, и под Linux. | ||
+ | |||
+ | ==== Установка clang и stdc++ на Ubuntu ==== | ||
+ | # До Ubuntu 20.04: добавляем в конец <code>/etc/apt/sources.list</code> две строчки, соответствующие вашей версии Ubuntu (смотри <code>/etc/lsb-release</code>). Например, для 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 | ||
+ | # <code>sudo apt update</code> | ||
+ | # <code>sudo apt install clang-10 libc++-10-dev libc++abi-10-dev</code> | ||
+ | |||
+ | Можно установить на Ubuntu 18.04 после [http://robs-got-a-blog.blogspot.com/2019/10/installing-clang-9-on-ubuntu-1804-lts.html этих] шагов. | ||
+ | |||
+ | Потом можно компилировать при помощи команды <code>clang++-10 -stdlib=libc++ main.cpp -o main</code>. Почти все флаги как у GCC, включая warnings. | ||
== Лекции == | == Лекции == | ||
Лектор: Суворов Егор Федорович ([mailto:egor_suvorov@mail.ru?subject=%5bhse%5d%20%5bcpp%5d%20Вопрос '''egor_suvorov@mail.ru''']]), в теме письма обязательно указывать <code>[hse] [cpp]</code> и слово "вопрос", если там вопрос. | Лектор: Суворов Егор Федорович ([mailto:egor_suvorov@mail.ru?subject=%5bhse%5d%20%5bcpp%5d%20Вопрос '''egor_suvorov@mail.ru''']]), в теме письма обязательно указывать <code>[hse] [cpp]</code> и слово "вопрос", если там вопрос. | ||
+ | |||
+ | Также есть Telegram: [https://t.me/yeputons yeputons] | ||
+ | |||
+ | === Базовые материалы === | ||
+ | Материалы с лекций: https://github.com/hse-spb-2020-cpp/lectures | ||
+ | |||
+ | * [https://ru.coursera.org/specializations/c-plus-plus-modern-development#courses Специализация "Искусство разработки на современном C++"] на Coursera. Ближе всего идеологически, особенно в начале — начинается не с Си, а сразу с современного C++. | ||
+ | * Про зарезервированные имена в Си и 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://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/ второй семестр] | ||
+ | |||
+ | === Общее развитие === | ||
+ | Обращайте внимание, для какого стандарта вы читаете рекомендации. Минимальный — C++11, C++03 — это совсем другой язык. Следующие огромные изменения ожидаются в C++20. | ||
+ | |||
+ | * [https://isocpp.org/wiki/faq ISO C++ Wiki] | ||
+ | * [http://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines C++ Core Guidelines] | ||
+ | * [http://www.gotw.ca/gotw/ GotW] (Guru of the Week by Herb Sutter) | ||
+ | * [https://abseil.io/tips/ TotW] (Tips of the Week by Google) | ||
+ | * Что угодно от [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. | ||
+ | * [https://en.wikibooks.org/wiki/More_C%2B%2B_Idioms More C++ Idioms Wikibook] | ||
+ | * Серия докладов "Back to Basics" на CppCon: [https://cppcon2019.sched.com/overview/type/Back+to+Basics 2019], [https://cppcon2020.sched.com/overview/type/Back+to+Basics 2020] | ||
+ | |||
+ | === Дополнительные материалы === | ||
+ | * [https://habr.com/ru/post/495444/ Серия статей про детали базовых элементов C++ на русском] (перегрузки, массивы, операторы...) | ||
+ | * [https://www.youtube.com/watch?v=wQxj20X-tIU Scott Meyers "Type Deduction and Why You Care"] (видеодоклад) | ||
+ | * [https://godbolt.org/z/hH9H27 Получение доступа к приватным типам через друзей и шаблоны] (пример кода) | ||
+ | * [https://www.youtube.com/watch?v=St0MNEU5b0o Klaus Iglberger "Back to Basics: Move Semantics (part 1 of 2)"] | ||
+ | * [https://www.youtube.com/watch?v=pIzaZbKUw2s Klaus Iglberger "Back to Basics: Move Semantics (part 2 of 2)"] | ||
+ | * [http://eel.is/c++draft/ Черновик последней версии стандарта C++] (уже после C++20) | ||
+ | |||
+ | === C++20 и метапрограммирование === | ||
+ | * [https://habr.com/ru/company/jugru/blog/467299/ Концепты в C++20] | ||
+ | * [http://jguegant.github.io/blogs/tech/sfinae-introduction.html SFINAE и member detection] | ||
+ | * [https://2019.cppconf-piter.ru/2019/spb/talks/3iz1z0htlsvkb8a4kyitgd/ Доклад "Сериализация объектов с блэкджеком и метапрограммированием"] | ||
+ | * [https://www.boost.org/doc/libs/1_71_0/libs/hana/doc/html/index.html Библиотека Boost.Hana для метапрограммирования] | ||
== Практика 1: Алфёров == | == Практика 1: Алфёров == | ||
+ | Василий Алфёров. | ||
Почта: [mailto:vasily.v.alferov@gmail.com vasily.v.alferov@gmail.com] | Почта: [mailto:vasily.v.alferov@gmail.com vasily.v.alferov@gmail.com] | ||
Телега: [https://t.me/vasiliyalferov vasiliyalferov] | Телега: [https://t.me/vasiliyalferov vasiliyalferov] | ||
+ | |||
+ | GitHub: [https://github.com/vasalf/ vasalf] | ||
* [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/pract09 Материалы с практики №9 (CMake)] | ||
+ | * [https://github.com/hse-spb-2020-cpp/practice-alferov/tree/master/pract11 Материалы с практики №11 (unique_ptr)] | ||
== Практика 2: Лапшин == | == Практика 2: Лапшин == | ||
+ | Дмитрий Лапшин. | ||
+ | |||
+ | Контакт: [mailto:au-cpp@ldvsoft.net au-cpp@ldvsoft.net] | ||
+ | |||
+ | GitHub: [https://github.com/LDVSOFT/ LDVSOFT] | ||
+ | |||
+ | Материалы: [https://github.com/hse-spb-2020-cpp/practice-lapshin Github repo] | ||
== Практика 3-4: Суворов == | == Практика 3-4: Суворов == | ||
+ | Егор Суворов. | ||
+ | |||
+ | Почта: [mailto:egor_suvorov@mail.ru?subject=%5bhse%5d%20%5bcpp%5d%20Вопрос '''egor_suvorov@mail.ru''']], в теме письма обязательно указывать <code>[hse] [cpp]</code> и слово "вопрос", если там вопрос. | ||
+ | |||
+ | Telegram: [https://t.me/yeputons yeputons] | ||
+ | |||
+ | GitHub: [https://github.com/yeputons/ yeputons] | ||
+ | |||
Материалы: https://github.com/hse-spb-2020-cpp/practice-suvorov | Материалы: https://github.com/hse-spb-2020-cpp/practice-suvorov | ||
+ | |||
+ | == Проверяющий: Малышева == | ||
+ | Мария Малышева. | ||
+ | |||
+ | Telegram: [https://t.me/isomethane isomethane] | ||
+ | |||
+ | GitHub: [https://github.com/isomethane/ isomethane] | ||
+ | |||
+ | == Проверяющий: Прокопцев == | ||
+ | Дмитрий Прокопцев. |
Версия 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
- До 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
sudo apt update
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++" на Coursera. Ближе всего идеологически, особенно в начале — начинается не с Си, а сразу с современного C++.
- Про зарезервированные имена в Си и C++ (нижние подчёркивания и не только): stackoverflow.com/a/228797/767632
- Детальный справочник по C++. Содержит сильно больше, чем надо в курсе. Лучше искать и читать понятные подмножества по конкретным темам вроде
std::sort
или member functions).
Просто хорошие учебники
Тут может быть другое изложение, другие примеры, не хватать большого количества деталей. Но базовая картинка должна сложиться такая же: язык один и тот же, стараемся использовать только общепринятые термины и явно подчёркивать отсебятину.
- Книга "Programming -- Principles and Practice Using C++" (2 издание) за авторством Bjarne Stroustroup (исходный создатель языка C++)
- Видеокурсы по C++ из Computer Science Center: первый семестр, второй семестр
Общее развитие
Обращайте внимание, для какого стандарта вы читаете рекомендации. Минимальный — C++11, C++03 — это совсем другой язык. Следующие огромные изменения ожидаются в C++20.
- ISO C++ Wiki
- C++ Core Guidelines
- GotW (Guru of the Week by Herb Sutter)
- TotW (Tips of the Week by Google)
- Что угодно от Scott Meyers
- Что угодно от Andrei Alexandrescu (скорее доклады, книги выходили до 2010 года)
- P1705R0 Enumerating Core Undefined Behavior — попытка перечислить хоть какие-то UB.
- More C++ Idioms Wikibook
- Серия докладов "Back to Basics" на CppCon: 2019, 2020
Дополнительные материалы
- Серия статей про детали базовых элементов C++ на русском (перегрузки, массивы, операторы...)
- Scott Meyers "Type Deduction and Why You Care" (видеодоклад)
- Получение доступа к приватным типам через друзей и шаблоны (пример кода)
- Klaus Iglberger "Back to Basics: Move Semantics (part 1 of 2)"
- Klaus Iglberger "Back to Basics: Move Semantics (part 2 of 2)"
- Черновик последней версии стандарта C++ (уже после C++20)
C++20 и метапрограммирование
- Концепты в C++20
- SFINAE и member detection
- Доклад "Сериализация объектов с блэкджеком и метапрограммированием"
- Библиотека Boost.Hana для метапрограммирования
Практика 1: Алфёров
Василий Алфёров.
Почта: vasily.v.alferov@gmail.com
Телега: vasiliyalferov
GitHub: vasalf
- Материалы с практики №4 (Дроби)
- Материалы с практики №5 (array)
- Материалы с практики №9 (CMake)
- Материалы с практики №11 (unique_ptr)
Практика 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
Проверяющий: Прокопцев
Дмитрий Прокопцев.