Это проект курса по языкам и системам программирования. Превоначально планировалось подготовить сборник заметок по функциональному и логическому программированию, написанных автором в разное время и по разным поводам, однако со временем стало понятно, что спектр рассматриваемых вопросов явно шире и затрагивает иные парадигмы программирования.
На основе данного курса можно составить более специализированные, такие как:
- Основы теории языков программирования.
- Парадигмы языков программирования.
- Основные концепции языков программирования.
- Функциональное программирование
- Логическое программирование
- Функциональное и логическое программирование
Курс расчитан на 72 часов лекций и 70 часов практикума. В курсы с более узкой тематикой можно добавить также темы, относящиеся к продвинутым возможностям рассматриваемых языков программирования и их стандартных библиотек. Часть тем лекций в специализированных курсах будут неактуальны и их можно смело изъять.
Курс состоит из четырёх разделов:
- Основы теория языков программирования.
- Функциональное программирование.
- Логическое программирование.
- Функционально-реактивное программирование.
- Историческое введение в теорию языков программирования:
- Программа.
- Транслятор.
- Первые языки программирования.
- Основные вехи развития языков программирования.
- Эпохальные языки программирования.
- Инструментальное программное обеспечение:
- Системы программирования.
- Интегрированные среды разработки.
- Компиляторы.
- Интерпретаторы.
- Сборщики.
- Ассемблеры.
- Отладчики.
- Профилировщики.
- Обзор критериев оценки и выбора языков программирования:
- лёгкость чтения программ;
- лёгкость создания программ;
- надёжность;
- эффективность исполняемого кода;
- стоимость разработки программ.
- Обзор классификаций языков программирования (слайды:
PDF | LaTeX):
- По областям применения.
- По способу представления программ.
- Императивный и декларативный подходы.
- Компилируемые и интерпретируемые языки.
- Низкоуровневые и высокоуровневые языки.
- Объекты и конструкции языков программирования:
- Переменные.
- Константы.
- Простые типы данных.
- Составные типы данных.
- Инструкции.
- Выражения.
- Области видимости имён.
- Процедуры и модули.
- Функции.
- Гомоиконность.
- Типизация в языках программирования:
- Статическая и динамическая типизация.
- Сильная и слабая типизации.
- Вывод типов. Алгоритм Хиндли-Милнера.
- Утиная типизация. Структурное приведение типов.
- Синонимы типов.
- Типобезопасность.
- Парадигмы вычислений в языках программирования:
- Строгие и ленивые вычисления.
- Чистые и грязные вычисления.
- Рекурсивные и циклические вычисления.
- Неизменяемость и состояние.
- Деструктурирование и разрушающее присваивание.
- Интроспекция и рефлексия.
- Управления памятью в языках программирования:
- Переменные и константы.
- Указатели и ссылки.
- Массивы и индексация.
- Статическое выделение памяти.
- Динамическое выделение памяти.
- Ограничение доступа к объектам данных.
- Мемоизация.
- Сборка мусора.
- Обработка ошибочных ситуаций в процессе выполнения программ:
- Исключения.
- Возврат специальных значений.
- Механизмы предотвращения возможных ошибок.
- Абстрактные типы данных в языках программирования:
- Списковый тип данных.
- Функции обработки списков.
- Опциональный тип данных.
- Составные типы данных.
- Типы-перечисления.
- Сопоставление с образцом.
- Мапирование.
- Глубокое и поверхностное копирование.
- Неизменяемые (персистентные) и модифицируемые коллекции.
- Параллелизм и асинхронность в языках программирования:
- Виды параллелизма.
- Поддержка параллелизма.
- Конкурентность.
- Асинхронность.
- Виртуальные машины:
- Байт-код.
- Эмуляция целевой архитектуры.
- Обзор распространённых виртуальных машин.
- Языки программирования для виртуальных машин.
- Семантика программ:
- Операционная семантика.
- Аксиоматическая семантика.
- Денотационная семантика.
- Интерпретационная семантика.
- Трансляционная семантика.
- Трансформационная семантика.
- Логика в программировании:
- Логика Хоара.
- Теория типов.
- Теория категорий.
- Лямбда-исчисление.
- Комбинаторная логика.
- Формальная верификация и доказательство программ:
- Понятие и методы формальной верификации.
- Доказательное программирование.
- Автоматическая проверка доказательства.
- Функциональная парадигма языков программирования:
- Применение, композиция и каррирование функций.
- Операции изменения порядка вычислений.
- Анонимные функции.
- Списки.
- Катаморфизм и анаморфизм.
- Логическая парадигма языков программирования:
- Пердикаты, факты и правила.
- Свободные переменные и унификация.
- Поиск с возвратами.
- Соответствие Карри-Ховарда.
- Объектно-ориентированная парадигма языков программирования:
- Объекты и их взаимодействие и взаимоотношение.
- Передача сообщений и жизненный цикл объектов.
- Реактивная парадигма языков программирования:
- Состояние и его обновление.
- Функционально-реактивная парадигма.
- Обзор языка программирования Haskell:
- Мотивация.
- История.
- Особенности.
- Инструменты.
- Основные конструкции языка Haskell:
- Функции. Частичное определение функций и охранные выражения.
- Стандартные типы, определение новых типов.
- Параметрический полиморфизм.
- Модули.
- Списки в языке Haskell:
- Способы определения списков.
- Стандартные функции обработки списков.
- Составные типы данных в языке Haskell:
- Стандартные составные типы данных.
- Определение новых составных типов.
- Классы типов в языке Haskell:
- Стандартные классы типов.
- Определение новых классов типов.
- Моноиды.
- Монады.
- Функторы. Апликативные функторы.
- Обзор языка программирования Prolog:
- Мотивация.
- История.
- Особенности.
- Инструменты.
- Основные конструкции языка Prolog:
- Предикаты
- Стандартные типы
- Списки
- Функции.
- Списки в языке Prolog:
- Способы определения списков.
- Стандартные функции обработки списков.
- Обзор языка программирования Elm:
- Мотивация.
- История.
- Особенности.
- Инструменты.
- Основные конструкции языка Elm:
- Стандартные типы
- Списки
- Функции.
- Типы.
- Сопоставление с образцом.
- Функционально-реактивная модель программы на языке Elm.
- Модель.
- Обновление модели.
- Формирование представления.
- Разработка веб-интерфейсов на языке Elm
- Формирование DOM браузера.
- Обработка событий.
- Кодирование и декодирование JSON на языке Elm
- Кодирование JSON.
- Декодирование JSON.
- Сетевое взаимодействие браузера и сервера на языке Elm
- GET-запросы.
- POST-запросы.
- Загрузка данных с сервера.
Каждая тема рассчитана на 4 академических часа аудиторной работы плюс самостоятельное выполнение заданий и ответы на контрольные вопросы.
- Инструментальное программное обеспечение.
- Основы работы с текстовым редактором GNU Emacs.
- Основы программирования на языке Emacs Lisp.
- Программное управление редактором GNU Emacs.
- Средства разработки на языке Haskell.
- Основы программирования на языке Haskell.
- Обработка списков на языке Haskell.
- Разработка структур данных на языке Haskell.
- Разработка алгоритмов на языке Haskell.
- Средства разработки на языке Prolog.
- Основы программирования на языке Prolog.
- Обработка списков на языке Prolog.
- Разработка алгоритмов на языке Prolog.
- Средства разработки на языке Elm.
- Основы программирования на языке Elm.
- Разработка веб-интерфейсов на языке Elm
- Разработка веб-приложений на языке Elm.
- Функциональное программирование
- Логическое программирование (сокращённый вариант)
- Логическое программирование (расширенный вариант)
- Функциональное и логическое программирование
- На русском языке.
- На английском языке.
- Обзор языка Elm
- Инструменты разработчика на языке Elm (по состоянию на 2018 год).
- Инструментальные средства разработки на языке Elm (по состоянию на 2016 год).
- Лексический анализатор Alex.
Произведение Курс «Языки и системы программирования», созданное автором по имени Симоненко Евгений Анатольевич, публикуется на условиях лицензии Creative Commons «Attribution-NoDerivatives» («С указанием авторства — Без производных») 4.0 Всемирная.
(c) 2017, 2018, 2019 Симоненко Евгений Анатольевич, [email protected]