09.04.04, Программная инженерия
Осторожно! У вас ведёт занятие преподаватель Кафедры системного программирования СПбГУ, но ваша группа возможно ещё не заполняла опрос «Давайте познакомимся»? Это очень опасная ситуация.
Не ждите, пока (и если) преподаватель скажет. Заполняйте!
+ Пока что общий групповой чатик в Telegram
История и назначение языка Си в разные эпохи.
Командные оболочки: интерактивный и пакетный режимы, основные возможности.
Управление вводом и выводом в командных оболочках и в компилируемых языках на примере Си.
Системы управления версиями. Git Workflow, GitHub Workflow.
Язык Си: примитивные типы данных, управляющие конструкции, функции.
Язык Си: указатели и массивы.
Язык Си: пользовательские типы — структуры, объединения, битовые поля.
Язык Си: модель единиц сборки, препроцессор. Сборка с использованием откомпилированных библиотек, сокрытие реализации библиотеки, минимизация её интерфейса.
Автоматизация пакетных задач: Make.
Генераторы и современные системы сборки: CMake, Meson.
Отладка откомпилированных программ при помощи GDB, LLDB и графических оболочек над ними (например, VS Code).
Модульное тестирование: назначение, реализация, примеры.
Непрерывная интеграция. GitHub Actions.
Общее описание архитектуры и функционирования простейшего симулятора RISC-процессора.
Вдумчивые и конструктивные замечания по содержанию курса.
«Про Git» (английская версия актуальнее)
Руководство по командной оболочке
Любое общее руководство, например это
Курс «Пропущенный семестр»: в оригинале и в переводе на русский
Про C и системное программирование
Материалы по «второй части курса» 🧔🏻
Make: «Метапрограммирование» «Пропущенного семестра», GNU Make Manual, промер методики использования Make, наконец наш пример
CMake, Meson: Неплохое вводное описание CMake от коллег из ИТМО, Meson Quickstart Guide, «Meson как собрать и пользоваться», наконец наши примеры (1) (2)
GDB, LLDB, отладка в «человеческом» отладчике: LLDB Tutorial, справочник по GDB наконец наш пример отладки и сборки
CI: «Что такое CI (Continuous Integration)», «Что такое непрерывная интеграция (CI)?» уже в исполнении JB, Github Actions. Простой пример для уверенного знакомства
Наши примеры на тему:
программы, просто состоящей из нескольких юнитов (Фрактал), но с аккуратной сборкой
симулятора RISC-Z — цикл выборки команд, другие системы сборки, опять же разделение на юниты по принципу того, что в них делается
простенького интерпретатора — тут важно, что синтаксический анализатор генерируется при сборке программы
Введение
Почему, для кого и зачем этот курс
Общая историческая справка
Основной инструментарий продвинутого пользователя и программиста
Введение: Задачи, решаемые с помощью ЭВМ, понятия алгоритма и данных
Среды исполнения программ: Unix-подобные системы, командные оболочки, сборка простой программы на C
Основы конфигурационного управления: версионирование: система Git; сервисы GitHub/GitLab/BitBucket
Язык программирования C: программирование, структура и сборка проектов
Основы C: функции, операторы, примитивные типы данных; стиль кодирования. Aлгоритмизация и программирование простых задач на практике.
Основы C: массивы, указатели, строки, структуры и объединения. Алгоритмизация и программирование простых задач на практике.
Основы C: препроцессор, система юнитов. Алгоритмизация и программирование простых задач на практике.
Конфигурационное управление: сборка проектов. Инструменты Make, CMake.
Опционально: язык прогарммирования C++
История, мотивация, основные возможности
Стандарты языка
Актуальные возможности С++11, 14, 17 и 20
Библиотеки, инструментальные средства и продвинутое конфигурационное управление
Инструментальные средства разработки, отладки и профилирования. Инструменты GDB/LLDB, gprof, VS Code.
Использование внешних библиотек. Pkgconfig, Conan.
Тестирование. Автоматизация тестирования, модульные тесты.
Конфигурационное управление: непрерывная интеграция. GitHub Actions.
Опционально: элементы архитектуры вычислительных систем
Виды архитектур
Основы схемотехники
Современные семейства процессоров
Опционально: Решение вычислительных задач с использованием различных аппаратных платформ.
Решение простых вычислительных задач. Суммирования рядов Тейлора, решение СЛАУ методом Гаусса, реализация длинной арифметики, хэш-функций и простых функций симетричного шифрования.
Кросс-разработка: кросс-компиляция для аппаратных платформ RISC-V и ARM; запуск и отладка на симуляторах.
Операционная система и окружение
Универсальные средства разработки
Любой хороший текстовый редактор
Для пользователей GNU/Linux
Git and VS Code as system packages
GCC or CLang, recent versions
Make, CMake
DGB & LLDB
Valgrind
Qemu
Для пользователей OS X
Инсталлируйте то же самое при помощи Homwbrew
Для пользователей Windows:
Unix-подобные подсистемы и указанные выше пакеты (GCC и т.д.)
C++ support for Visual Studio (и немного несвежие инструкции)
Керниган, Б. В. Язык программирования C : учебник / Б. В. Керниган, Д. М. Ричи. — 2-е изд. — Москва : ИНТУИТ, 2016. — 313 с. — Текст : электронный // Лань : электронно-библиотечная система. — URL: https://e.lanbook.com/book/100543
Довек, Ж. Введение в теорию языков программирования / Ж. Довек, Ж. -. Леви. — Москва : ДМК Пресс, 2013. — 134 с. — ISBN 978-5-94074-913-4. — Текст : электронный // Лань : электронно-библиотечная система (доступно по подписке СПбГУ). — URL: https://e.lanbook.com/book/82826
Сартасов С.Ю. Практикум на ЭВМ. [Электронный ресурс] http://hdl.handle.net/11701/15461