Как проверить представление значений OCaml в памяти? - PullRequest
1 голос
/ 03 апреля 2020

Есть ли способ проверить представление в памяти значений OCaml в OCaml , не используя что-то вроде gdb? В идеале выходные данные дают либо шестнадцатеричные байты, либо двоичные биты, аналогично тому, что вы можете получить через gdb.

Модуль Obj выглядит многообещающе, а Real World OCaml имеет раздел об этом , но предлагает ли он единственный способ получить представление в памяти, без необходимости знать, как каждое значение OCaml размещается в памяти?

1 Ответ

3 голосов
/ 03 апреля 2020

Я искал net и обнаружил пакет OCaml с именем «inspect», который, похоже, выполняет то, что вы хотите. Вот что он показывает для значений true и [1; 2; 3]:

# Sexpr.dump true;;
(DUMP 1)- : unit = ()
# Sexpr.dump [1;2;3];;
(DUMP
   (BLK/0
      :TAG 0
      :VALUES
      1
      (BLK/1 :TAG 0 :VALUES 2 (BLK/2 :TAG 0 :VALUES 3 0))))- : unit = ()

Он доступен в виде пакета opam с именем «inspect». Страница Github для хранилища пакетов: https://github.com/krohrer/caml-inspect.

Вывод не будет иметь смысла без некоторого знакомства с компоновкой значений OCaml. Я думаю, это неизбежно. Информация на странице Github и в руководстве по OCaml.

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