Какие типы стандартных библиотек OCaml нельзя упорядочить? - PullRequest
8 голосов
/ 30 января 2011

У меня ошибка при маршалинге структуры данных (ошибка абстрактного типа (Custom)). Существует один известный абстрактный тип, а именно Big_int. Однако, что маршалы в порядке. Там нет никакого пользовательского кода C в приложении. Помимо Nums, также используется библиотека Unix (однако я не думаю, что есть какие-либо активные объекты такого типа). Мы маршал с затворами.

Используются две (только) сторонние библиотеки: схема OCS (интерпретатор схемы, чистый Ocaml) и Dypgen (расширяемый синтаксический анализатор GLR, также чистый Ocaml). Проблема в новой функции Dypgen, сохраняющей динамически расширенный синтаксический анализатор.

Сообщение об ошибке Ocaml почти бесполезно (оно не определяет, какой из абстрактных типов с пользовательским тегом является виновником).

Мы подозревали, что виновником является Lexbuf, потому что он содержит замыкание по каналу Ocaml и не может быть маршалом, но, похоже, это не проблема. Итак, мой вопрос:

Какие стандартные компоненты библиотеки не могут быть Marshall'd?

1 Ответ

7 голосов
/ 31 января 2011

Слабые массивы нельзя маршалировать.Я не знаком со Схемой OCS, но я ожидаю, что интерпретатор языка сборки мусора, написанный на OCaml, будет использовать слабые указатели (они позволяют вам использовать управление памятью OCaml).

В защиту OCaml,Я не думаю, что блок пользовательских методов содержит имя типа (ретроспективно, это, кажется, хорошо иметь).

РЕДАКТИРОВАТЬ: Yep:

$ grep Weak ~/Downloads/ocs-1.0.3/src/*.ml
/Users/pascal/Downloads/ocs-1.0.3/src/ocs_sym.ml:module SymTable = Weak.Make (HashSymbol)

РЕДАКТИРОВАТЬ 2: Asуказал ygrek, в блоке пользовательских методов есть место для имени.Я также должен уточнить, что слабые массивы не являются пользовательскими значениями, так как мой ответ, казалось, подразумевал это.Слабые массивы имеют тег Abstract и объединяются в цепочку, используя первое слово данных, так что сборщик мусора может проходить их в специальных фазах цикла, связанных со слабыми указателями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...