Создать библиотеку, доступную из CSI

Допустим, у меня есть библиотека Foo в foo.scm вот так:

(module foo (bar)
  (import scheme)

  (define (bar arg)
    (+ 5 arg)))

И у меня есть программа program.scm:

(use foo)

(display (bar 2))

Теперь я компилирую foo и генерирую библиотеку импорта, используя csc -J -library foo.scm, а затем скомпилировать программу с csc program.scm, Запущенная программа отображает "7", как и ожидалось, и все денди. Однако я хочу загрузить программу интерактивно в интерпретаторе (csi), но теперь по какой-то причине каждый вызов функции в foo должен начинаться с префикса foo#в переводчике (foo#bar 2) работает, но (bar 2) даже не работает, когда используется в исходном файле.

Почему это? Это не только немного раздражает, но я также боюсь, что у меня может быть неправильное понимание того, как работает модульная система в Chicken, поэтому любые разъяснения будут высоко оценены.

1 ответ

Я не уверен, что вы подразумеваете под "загрузить программу в интерпретатор", но обычно (use foo) следует загрузить и импортировать библиотеку, поэтому выполнение (load "program.scm") должен сделать именно это, и все вещи, экспортируемые foo должен быть доступен на верхнем уровне.

Похоже, что вы каким-то образом оказались в ситуации, когда библиотека была загружена в работающую систему, но не была импортирована для использования на верхнем уровне. Просто печатать (use foo) (или даже (import foo)) при REPL следует исправить эту проблему.

Модульная система CHICKEN разработана для раздельной компиляции, что делает возможной кросс-компиляцию. Для этого библиотека импорта и фактическая реализация были разделены, но, как вы обнаружили, это немного усложняет ситуацию. Это необходимо, поскольку библиотека импорта может определять макросы, необходимые во время компиляции, поэтому она должна работать на хосте кросс-компиляции, тогда как сама библиотека должна быть доступна в архитектуре цели кросс-компиляции. Мы обсуждаем, как упростить это для CHICKEN 5, так как это то, что сбивает с толку многих новичков (а иногда и продвинутых пользователей).

Другие вопросы по тегам