Проверка подписи типа OCaml от C - PullRequest
2 голосов
/ 08 августа 2011

Допустим, у меня есть функция OCaml

let _ = register "cbf_coh_insert" (fun k v -> print_endline ("Inserted key=" ^ k ^ " value=" ^ v))

Это функция, которая принимает два аргумента. На стороне C я бы назвал это с caml_callback2(*caml_named_value("cbf_coh_insert"), k, v);. Есть ли способ на стороне C, чтобы проверить, что количество аргументов (2 в этом случае) совпадают? Кроме того, я полагаю, что звоню и пытаюсь поймать SIGSEGV. Спасибо!

ОБНОВЛЕНИЕ : некоторый фон .

1 Ответ

2 голосов
/ 08 августа 2011

НЕТ WAI

Это должно быть обеспечено во время компиляции (либо вручную, либо путем генерации кода, либо путем анализа и проверки того, синхронизированы ли код C и OCaml)

UPDATE

Пример функции регистра:

let on_cbf_coh_insert (f : string -> string -> unit) = register "cbf_coh_insert" f

UPDATE

Хотелось бы, чтобы можно было передать замыкание / разрешить привязку прямо в C.

Почему вы думаете, что это невозможно? Посмотрите на существующие привязки, которые делают это все время.

Кстати, этот вопрос является прекрасной иллюстрацией для XY задачи .

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