Как правильно загрузить модули в Guile Scheme? - PullRequest
0 голосов
/ 06 марта 2020

World. У меня есть следующая проблема, пытаясь понять, как работает система модулей Guile.

  1. Я написал простой код
; check.scm
(setlocale LC_ALL "")

(let* ((fn (current-filename))                                               
       (dir (if (string? fn) (dirname fn) "."))                              
       (lib (if (string? fn) (string-append (dirname dir) "/lib") "../lib")))
  (add-to-load-path lib)                
  (add-to-load-path dir))

(display %load-path)
(newline)

(use-modules (json))

(scm->json #("hello" "world"))
(newline)
У меня есть следующая древовидная структура
$ find
.
./bin
./bin/check.scm
./lib
./lib/json
./lib/json/parser.scm
./lib/json/builder.scm
./lib/json.scm

json файлы из https://github.com/aconchillo/guile-json, без изменений

У меня есть Guile 2.2.6

В этой среде я запускаю

$ guile bin/check.scm 
;;; note: auto-compilation is enabled, set GUILE_AUTO_COMPILE=0
;;;       or pass the --no-auto-compile argument to disable.
;;; compiling /tmp/news/bin/check.scm
;;; WARNING: compilation of /tmp/news/bin/check.scm failed:
;;; no code for module (json)
;;; compiling /tmp/news/lib/json.scm
;;; compiling /tmp/news/lib/json/builder.scm
;;; compiled /home/mob/.cache/guile/ccache/2.2-LE-8-3.A/tmp/news/lib/json/builder.scm.go
;;; compiling /tmp/news/lib/json/parser.scm
;;; compiled /home/mob/.cache/guile/ccache/2.2-LE-8-3.A/tmp/news/lib/json/parser.scm.go
;;; compiled /home/mob/.cache/guile/ccache/2.2-LE-8-3.A/tmp/news/lib/json.scm.go
(/tmp/news/bin /tmp/news/lib /usr/share/guile/2.2 /usr/share/guile/site/2.2 /usr/share/guile/site /usr/share/guile)
["hello","world"]

Мои вопросы:

  1. Что означает сообщение «нет кода для модуля»? Кажется, что Guile может найти модуль и скомпилировать его.

  2. Почему программа работает на одних Linux (Arch, Debian) и не работает на других (Ubuntu)? В чем разница, учитывая, что версии Guile одинаковы?

  3. Что я делаю не так? Мое намерение состоит в том, чтобы иметь некоторую свободу в размещении библиотеки, я не хочу использовать autoconf и automake для фиксированных путей. Можно ли решить эту задачу только с add-to-load-path?

- МБ, с уважением

...