Итак, я пытаюсь зарегистрировать каталог 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?