Санкт-Петербургский Государственный Университет Математико-Механический факультет Кафедра системного программирования

advertisement
Санкт-Петербургский Государственный Университет
Математико-Механический факультет
Кафедра системного программирования
Межъязыковое взаимодействие
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++
Download