Темы проектов для курсовых/дипломов
1) A Redex-like framework for OCaml
При создании и тестировании операционной семантики языка программирования крайне полезно иметь запускаемую модель, или интерпретатор, этой семантики. PLT/Redex является одним из самых удобных средств для разработки таких моделей. Этот framework разработан поверх диалекта LISP — Racket. Как следствие, при работе с PLT/Redex приходится писать большое количество скобок (LISP!) и довольствоваться run-time проверкой типов.
В рамках данного проекта предлагается разработать DSL в OCaml (camlp5), обладающий схожей функциональностью, но имеющий преимущества языка с богатой системой типов, а также способный работать в браузере (js_of_ocaml).
2) An Operational Semantics for C/C++11 Concurrency and MiniKanren
В 2011 стандарте C/C++ появилось описание семантики параллельных программ с data-races, или модель памяти. Она очень сложная и контринтуитивная. Однако она соответствует тому, как ведут себя параллельные программы на реальных процессорах после компиляции настоящими компиляторами. Также понимание этой модели необходимо для реализации параллельных lock-free алгоритмов на C/C++.
MiniKanren — это язык реляционного программирования. С помощью него можно писать обратимые функции. Например, по результату работы функции append
, понять с какими аргументами она была вызвана.
В рамках данного проекта мы используем MiniKanren, а точнее его OCaml реализацию, для того, чтобы написать обратимый интерпретатор операционной семантики языка с моделью памяти близкой C/C++11, что позволит нам по поведению программы получать её код.
Релевантная, но немножко устаревшая презентация проекта: PDF.
3) Ostap, Kisa, and Sample-Based Formatting
Создание синтаксических анализаторов и систем форматирования достаточно трудоёмко. Классическим подходом к решению этих задач в функциональном программировании являются библиотеки парсер- и принтер-комбинаторов. Например, библиотеки ostap и kisa.
Также существует подход форматирования по образцу (ФO), который позволяет пользователю отформатировать целевой код в соответствии со стилем некоторого проекта без ручного задания десятков настроек форматирования (как это происходит в современных IDE), а просто передав системе эталонный проект.
В рамках данной темы планируется провести слияние ФО и способа задания парсер-комбинаторов в виде грамматики, как в ostap, и реализовать это всё как DSL в OCaml (camlp5), Это позволит по грамматикам получать не только парсер, как это происходит сейчас, но и принтер, обладающий выразительностью ФО.