C++ 1MIT осень 1 2019

Материал из CSC Wiki
Перейти к:навигация, поиск

Лекции

Лекторы: Суворов Егор Федорович (egor_suvorov@mail.ru), Линский Евгений Михайлович (evgeny.linsky@gmail.com)

Презентации первого семестра:

Книги

  • С нуля
    • С. Дэвис, C++ для чайников
    • Г. Шилдт, С++ базовый курс
  • Язык С
    • Б. Керниган, Д. Ритчи, Язык программирования C
    • Б. Керниган, Р. Пайк, Практика программирования
  • Язык C++
    • Б. Страуструп, Язык программирования С++
    • Б. Эккель, Философия C++
  • Дополнительно
    • Б. Страуструп, Дизайн и эволюция языка C++
    • С. Майерс, Эффективное использование С++/Эффективное использование STL
    • Г. Сеттер, Решение сложных задач на C++/Новые сложные задачи на C++
    • Р. Седжвик, Алгоритмы на C++
  • На английском

[Текст заголовка]

Лабораторные и домашние

  • GitHub — гит-репозиторий с описаниями лабораторных (обновляется каждую неделю).
  • Trac — trac для лабораторных.
  • http://trac.compscicenter.ru/hse-svn/cpp19/lastname.firstname — svn для лабораторных (замените lastname.firstname на ваш логин - имя-фамилия транслитом).

Сдача и оценивание

Подробная инструкция по сдаче расположена на главной странице Trac.

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

Практика Соколов

Преподаватель: Вячеслав Соколов (vi.soksok@gmail.com, +7 921 780 11 12)

Trac: sokolov

deadline первой попытки первой лабораторной: среда 09.11 21:00

Письма просьба идентифицировать префиксом в теме [HSE][CPP]

Linux

  • Минимальный набор для работы из консоли (для Ubuntu):
    • man manual
    • ls list
    • pwd print working directory
    • mkdir make (create) directory
    • cd change directory
    • cp copy
    • rm remove
    • touch "потрогать" объект на файловой системе
    • mv move
    • gcc gnu C compiler
    • make make
    • svn subversion
    • apt aptitude
  • Исследование бинарных артефактов
    • nm list symbols from object files
    • readelf displays information about ELF files
    • c++filt demangle symbols

Для тех, кому хочется поэкспериментировать с консолью

  • Эмуляторы терминала
    • terminator
    • tilix
    • а также много других, легко ищутся
  • Shell
    • bash по умолчанию, но есть кое-что поудобнее, например
    • fish - interactive shell, создан, чтобы быть удобным
    • zsh - для любителей писать скрипты

Системы сборки

Для наших нужд достаточно Make

Если проект становится большим, нужно что-то посложнее, например (альтернативы):

Полезные сайты

  • cppreference - консультация со стандартом языка Си
  • godbolt - compiler explorer (удобно делиться примерами)
  • ideone - возможность делиться кодом, поддержка разных ЯП, исполнение кода online
  • stackoverflow - огромное количество ответов на разные вопросы. Прежде чем самому задавать вопрос, будет полезно ознакомиться с текстом https://habr.com/ru/post/339038/
  • cdecl - поможет ответить на вопрос, что есть int (*(*foo)(void ))[3]

Практика Свиридкин

Преподаватель: Дмитрий Свиридкин (dmisvrl1@gmail.com) Префикс [C++Practice]

Договоренности со студентами:

1. Бинарники складывать в каталог bin, объектники -- в каталог obj

2. Разобравшиеся с make, при желании, могут использовать cmake


Полезные ссылки:

Кратко про make: habr

Дополнительно про mangling

Минимальный набор команд для работы с консолью (bash)

Примеры UB c cppreference

UB c вызовом невызываемой функции [1]

Репозиторий с минимальным примером cmake-проекта с настроенным vscode

Практика Лапшин Дмитрий

Преподаватель: Дмитрий Лапшин, по вопросам курса писать сюда: au-cpp@ldvsoft.net.

Ссылочки выше и ниже тоже полезны!

Практика Гулецкий

Преподаватель: Артур Гулецкий (hatless.fox@gmail.com)

Префикс в теме письма: [C++TA]

Еще один вариант книги с нуля: C++ Primer, 5th

Makefile

Почитать (opt):

GDB

  • GDB intro + мини-ликбез по ассемблеру/C Hacking tAoE, 2nd, sect. 0x250-0x270
  • (opt) DWARF - формат для хранения отладочной информации

C-string utils

Почитать:

Intrusive lists

Практика Суворов

Преподаватель: Егор Суворов (egor_suvorov@mail.ru)

Префикс в теме письма: [C++TA]

Полезная информация

  • Ключ GCC для включения отладочной информации при компиляции (номера строк, имена исходных файлов): -g
  • Ключ GCC для включения address sanitizer (попытка поймать обращения не к той памяти, в том числе выходы за границу массивов: -fsanitize=address (надо добавлять и на этапе компиляции, и на этапе линковки)
    • Также можно пробовать -fsanitize=undefined (пробует ловить UB)
  • Ключи на все случаи жизни для предупреждений: -Wall -Wextra -Werror
  • Видео с демо отладчика GDB на английском на 15 минут (интерфейс, путешествия во времени): https://www.youtube.com/watch?v=PorfLSr3DDI

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

Преподаватель: Василий Алфёров (vasily.v.alferov@gmail.com)

Telegram: @vasiliyalferov

Договорённость со студентами: дедлайн лабораторных работ — начало следующей пары.

Дедлайн по исправлениям лабораторных работ, если они разрешены: неделя после проверки.


Обещанные ссылки: