Темы проектов для курсовых/дипломов

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), Это позволит по грамматикам получать не только парсер, как это происходит сейчас, но и принтер, обладающий выразительностью ФО.

Back