Как я могу зарегистрировать каталог коллекций, не нарушая настройки по умолчанию для Racket? - PullRequest
0 голосов
/ 06 мая 2018

Итак, я пытаюсь зарегистрировать каталог collects/ локальных коллекций, содержащий модули, которые я не хочу использовать глобальными (например, не в /usr/share/racket/collects) для использования интерпретатором.

Однако, делая это, я думаю, что столкнулся с проблемой, в которой я могу установить путь, используя что-то вроде: scheme_set_collects_path(scheme_make_path("/hardcoded/absolute/path/to/collects"));, но затем кажется, что он забивает общесистемные коллекции ракеток (ошибка возникает при попытке интерпретировать заголовок модуля #lang racket - думаю).

Я не могу дать точное краткое изложение, поскольку с тех пор я отбросил основные контекстные элементы этого, поэтому все, что я могу по-настоящему спросить, это: возможно ли даже встроить Racket так, чтобы вы могли интерпретировать локальные исходные файлы?

Я просмотрел заголовочные файлы и увидел scheme_init_collection_paths_post, который позволяет вам указать pre и post пути для коллекций. Однако я не знаю, полностью ли перекрывают эти пути какие-либо значения по умолчанию или как передать пустой путь в pre .

В настоящее время моя идея состоит в том, чтобы зарегистрировать путь к локальным коллекциям в той же папке, что и мой исполняемый файл, и для динамически требуются функции из локальных коллекций. Поэтому я должен зарегистрировать путь, не испуская значения по умолчанию (поскольку для создания краткой формы #lang racket требуется коллекция "racket").

Я пытаюсь добиться этого:

((dynamic-require ''mypackage/mymodule 'myfunction))

, где 'myfunction равно при условии по 'mymodule.

Я не совсем понял, как вы на самом деле используете функции scheme_*, поэтому я сделал это:

Scheme_Object* a[2];
a[0] = scheme_intern_symbol("mypackage/mymodule");
a[1] = scheme_intern_symbol("myfunction");
Scheme_Object* func = scheme_dynamic_require(2, a);
scheme_apply(func, 0, NULL);

Я не верю, что на самом деле вы бы правильно использовали динамические требования к функциям, но я смутно скопировал их из примера динамического требования Racket REPL.

Ошибка, которую я получаю сейчас:

standard-module-name-resolver: collection not found
  for module path: mypackage/mymodule
  collection: "mypackage"
  in collection directories:
  context...:
   show-collection-err
   standard-module-name-resolver
SIGSEGV MAPERR si_code 1 fault on addr 0xd8
[1]    7102 abort (core dumped)  ./main

Не обращайте внимания на тот факт, что я назвал коллекцию "mypackage". Эта ошибка является самой последней ошибкой. Раньше он мог разрешать локальные коллекции (я в основном делал raco pkg install --link mypackage, а затем копировал это в локальную папку collects/ - поскольку я знаю, что установка пакетов компилирует их), но он не смог бы загрузить любую "ракетку" "модули (например, тот, который требуется для #lang racket).

Итак, как зарегистрировать каталог extra - local - collection для интерпретатора Racket?

...