Современные инструменты и
технологии программирования
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