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