Skip to content

Course "Programming Languages and Systems" (in Russian language).

License

Unknown, Unknown licenses found

Licenses found

Unknown
LICENSE.html
Unknown
LICENSE.md
Notifications You must be signed in to change notification settings

easimonenko/programming-languages-and-systems-course

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

36 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Курс "Языки и системы программирования"

Это проект курса по языкам и системам программирования. Превоначально планировалось подготовить сборник заметок по функциональному и логическому программированию, написанных автором в разное время и по разным поводам, однако со временем стало понятно, что спектр рассматриваемых вопросов явно шире и затрагивает иные парадигмы программирования.

На основе данного курса можно составить более специализированные, такие как:

  • Основы теории языков программирования.
  • Парадигмы языков программирования.
  • Основные концепции языков программирования.
  • Функциональное программирование
  • Логическое программирование
  • Функциональное и логическое программирование

Курс расчитан на 72 часов лекций и 70 часов практикума. В курсы с более узкой тематикой можно добавить также темы, относящиеся к продвинутым возможностям рассматриваемых языков программирования и их стандартных библиотек. Часть тем лекций в специализированных курсах будут неактуальны и их можно смело изъять.

Курс состоит из четырёх разделов:

  • Основы теория языков программирования.
  • Функциональное программирование.
  • Логическое программирование.
  • Функционально-реактивное программирование.

Теоретические вопросы

Основы теории языков программирования

  • Историческое введение в теорию языков программирования:
    • Программа.
    • Транслятор.
    • Первые языки программирования.
    • Основные вехи развития языков программирования.
    • Эпохальные языки программирования.
  • Инструментальное программное обеспечение:
    • Системы программирования.
    • Интегрированные среды разработки.
    • Компиляторы.
    • Интерпретаторы.
    • Сборщики.
    • Ассемблеры.
    • Отладчики.
    • Профилировщики.
  • Обзор критериев оценки и выбора языков программирования:
    • лёгкость чтения программ;
    • лёгкость создания программ;
    • надёжность;
    • эффективность исполняемого кода;
    • стоимость разработки программ.
  • Обзор классификаций языков программирования (слайды: PDF | LaTeX):
    • По областям применения.
    • По способу представления программ.
    • Императивный и декларативный подходы.
    • Компилируемые и интерпретируемые языки.
    • Низкоуровневые и высокоуровневые языки.
  • Объекты и конструкции языков программирования:
    • Переменные.
    • Константы.
    • Простые типы данных.
    • Составные типы данных.
    • Инструкции.
    • Выражения.
    • Области видимости имён.
    • Процедуры и модули.
    • Функции.
    • Гомоиконность.
  • Типизация в языках программирования:
  • Парадигмы вычислений в языках программирования:
    • Строгие и ленивые вычисления.
    • Чистые и грязные вычисления.
    • Рекурсивные и циклические вычисления.
    • Неизменяемость и состояние.
    • Деструктурирование и разрушающее присваивание.
    • Интроспекция и рефлексия.
  • Управления памятью в языках программирования:
    • Переменные и константы.
    • Указатели и ссылки.
    • Массивы и индексация.
    • Статическое выделение памяти.
    • Динамическое выделение памяти.
    • Ограничение доступа к объектам данных.
    • Мемоизация.
    • Сборка мусора.
  • Обработка ошибочных ситуаций в процессе выполнения программ:
    • Исключения.
    • Возврат специальных значений.
    • Механизмы предотвращения возможных ошибок.
  • Абстрактные типы данных в языках программирования:
    • Списковый тип данных.
    • Функции обработки списков.
    • Опциональный тип данных.
    • Составные типы данных.
    • Типы-перечисления.
    • Сопоставление с образцом.
    • Мапирование.
    • Глубокое и поверхностное копирование.
    • Неизменяемые (персистентные) и модифицируемые коллекции.
  • Параллелизм и асинхронность в языках программирования:
    • Виды параллелизма.
    • Поддержка параллелизма.
    • Конкурентность.
    • Асинхронность.
  • Виртуальные машины:
    • Байт-код.
    • Эмуляция целевой архитектуры.
    • Обзор распространённых виртуальных машин.
    • Языки программирования для виртуальных машин.
  • Семантика программ:
    • Операционная семантика.
    • Аксиоматическая семантика.
    • Денотационная семантика.
    • Интерпретационная семантика.
    • Трансляционная семантика.
    • Трансформационная семантика.
  • Логика в программировании:
    • Логика Хоара.
    • Теория типов.
    • Теория категорий.
    • Лямбда-исчисление.
    • Комбинаторная логика.
  • Формальная верификация и доказательство программ:
    • Понятие и методы формальной верификации.
    • Доказательное программирование.
    • Автоматическая проверка доказательства.
  • Функциональная парадигма языков программирования:
    • Применение, композиция и каррирование функций.
    • Операции изменения порядка вычислений.
    • Анонимные функции.
    • Списки.
    • Катаморфизм и анаморфизм.
  • Логическая парадигма языков программирования:
    • Пердикаты, факты и правила.
    • Свободные переменные и унификация.
    • Поиск с возвратами.
    • Соответствие Карри-Ховарда.
  • Объектно-ориентированная парадигма языков программирования:
    • Объекты и их взаимодействие и взаимоотношение.
    • Передача сообщений и жизненный цикл объектов.
  • Реактивная парадигма языков программирования:
    • Состояние и его обновление.
    • Функционально-реактивная парадигма.

Функциональное программирование на языке Haskell

  • Обзор языка программирования Haskell:
    • Мотивация.
    • История.
    • Особенности.
    • Инструменты.
  • Основные конструкции языка Haskell:
    • Функции. Частичное определение функций и охранные выражения.
    • Стандартные типы, определение новых типов.
    • Параметрический полиморфизм.
    • Модули.
  • Списки в языке Haskell:
    • Способы определения списков.
    • Стандартные функции обработки списков.
  • Составные типы данных в языке Haskell:
    • Стандартные составные типы данных.
    • Определение новых составных типов.
  • Классы типов в языке Haskell:
    • Стандартные классы типов.
    • Определение новых классов типов.
    • Моноиды.
    • Монады.
    • Функторы. Апликативные функторы.

Логическое программирование на языке Prolog

  • Обзор языка программирования Prolog:
    • Мотивация.
    • История.
    • Особенности.
    • Инструменты.
  • Основные конструкции языка Prolog:
    • Предикаты
    • Стандартные типы
    • Списки
    • Функции.
  • Списки в языке Prolog:
    • Способы определения списков.
    • Стандартные функции обработки списков.

Функционально-реактивное программирование на языке Elm

  • Обзор языка программирования Elm:
    • Мотивация.
    • История.
    • Особенности.
    • Инструменты.
  • Основные конструкции языка Elm:
    • Стандартные типы
    • Списки
    • Функции.
    • Типы.
    • Сопоставление с образцом.
  • Функционально-реактивная модель программы на языке Elm.
    • Модель.
    • Обновление модели.
    • Формирование представления.
  • Разработка веб-интерфейсов на языке Elm
    • Формирование DOM браузера.
    • Обработка событий.
  • Кодирование и декодирование JSON на языке Elm
    • Кодирование JSON.
    • Декодирование JSON.
  • Сетевое взаимодействие браузера и сервера на языке Elm
    • GET-запросы.
    • POST-запросы.
    • Загрузка данных с сервера.

Практикум

Каждая тема рассчитана на 4 академических часа аудиторной работы плюс самостоятельное выполнение заданий и ответы на контрольные вопросы.

  1. Инструментальное программное обеспечение.
  2. Основы работы с текстовым редактором GNU Emacs.
  3. Основы программирования на языке Emacs Lisp.
  4. Программное управление редактором GNU Emacs.
  5. Средства разработки на языке Haskell.
  6. Основы программирования на языке Haskell.
  7. Обработка списков на языке Haskell.
  8. Разработка структур данных на языке Haskell.
  9. Разработка алгоритмов на языке Haskell.
  10. Средства разработки на языке Prolog.
  11. Основы программирования на языке Prolog.
  12. Обработка списков на языке Prolog.
  13. Разработка алгоритмов на языке Prolog.
  14. Средства разработки на языке Elm.
  15. Основы программирования на языке Elm.
  16. Разработка веб-интерфейсов на языке Elm
  17. Разработка веб-приложений на языке Elm.

Примеры курсов

Библиография

Дополнительные темы

Лицензия

Лицензия Creative Commons «Attribution-NoDerivatives»

Произведение Курс «Языки и системы программирования», созданное автором по имени Симоненко Евгений Анатольевич, публикуется на условиях лицензии Creative Commons «Attribution-NoDerivatives» («С указанием авторства — Без производных») 4.0 Всемирная.


(c) 2017, 2018, 2019 Симоненко Евгений Анатольевич, easimonenko@mail.ru

About

Course "Programming Languages and Systems" (in Russian language).

Topics

Resources

License

Unknown, Unknown licenses found

Licenses found

Unknown
LICENSE.html
Unknown
LICENSE.md

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published