Санкт-Петербургский Государственный Университет Математико-Механический факультет Кафедра системного программирования Межъязыковое взаимодействие OCaml и C++ со статическим контролем типов Дипломная работа студента 544 группы Дубчука Николая Павловича Научный руководитель – Я.А. Кириленко Рецензент – В.С. Полозов
Постановка задачи Разработать средство для использования OCaml-программ из приложений на C++ со статической проверкой типов Разработать средство для использования OCaml-программ из приложений на C++ со статической проверкой типов
Существующие средства CamlIDL CamlIDL Взаимодействие C и OCaml при помощи COM Взаимодействие C и OCaml при помощи COM SWIG SWIG Взаимодействие программ на C и C++ с большинством высокоуровневых языков программирования Взаимодействие программ на C и C++ с большинством высокоуровневых языков программирования
Пример алгебраических типов (1) type t1 = string * int type t2 = string * int typedef type_wrapper t1, t2 typedef type_wrapper t1, t2 type a t3 = a * int template template struct t3 { typedef type_wrapper > type; typedef type_wrapper > type;}; tuple tuple
Пример алгебраических типов (2) type bin_t = Leaf of t1 | Tree of bin_t * bin_t data; > data; recursive_wrapper recursive_wrapper recursive_wrapper struct bin_t }; { … tuple< tuple< t1 t1, >
Детали реализации Синтаксический разбор описаний типов интерфейса модуля, их анализ Синтаксический разбор описаний типов интерфейса модуля, их анализ и генерация соответствующих C++-структур и генерация соответствующих C++-структур Механизм трансляции Механизм трансляции Передача управления из C++-приложения программе на OCaml Передача управления из C++-приложения программе на OCaml Трансляция полученного результата работы OCaml-программы в структуру языка C++ Трансляция полученного результата работы OCaml-программы в структуру языка C++
Результаты работы Выполнен обзор существующих средств взаимодействия OCaml и C++ Выполнен обзор существующих средств взаимодействия OCaml и C++ Предложено отображение из алгебраических типов OCaml в структуры языка C++ Предложено отображение из алгебраических типов OCaml в структуры языка C++ c использованием Boost c использованием Boost Реализован инструмент, выполняющий трансляцию структур данных из OCaml в C++ Реализован инструмент, выполняющий трансляцию структур данных из OCaml в C++ Реализовано межъязыковое взаимодействие программы-калькулятора, сгенерированной YARD-ом, Реализовано межъязыковое взаимодействие программы-калькулятора, сгенерированной YARD-ом, с приложением на C++ с приложением на C++