Hi Michael,
On Tue, 14 Jun 2016 11:09:09 -0400 Michael Silver <
address@hidden> wrote:
I’m new to CHICKEN and I’m working on converting a large Guile
codebase to CHICKEN.
Welcome!
The codebase is a collection of shared libraries (each library in a
separate .scm file), collectively known as “lab-core”. So, I’ve
packaged it all as an egg called “lab-core” with each individual .scm
file as it’s own module (under different names). Does this seem like
a reasonable way to package such a project?
Sounds good to me.
As I go file by file converting to CHICKEN modules, I keep running
into “module unresolved” errors when attempting to install my egg via
chicken-install.
Usually you should see some warnings that may lead to "module
unresolved" errors.
When I try to compile your example, I get:
Warning: reference to possibly unbound identifier `string-chomp' in:
Warning: port-puts
Warning: suggesting: `(import data-structures)'
Warning: reference to possibly unbound identifier `with-output-to-string' in:
Warning: port-puts
Warning: suggesting: `(import ports)'
Error: module unresolved: loglevel
That means:
* in `port-puts' you are using `string-chomp', which is exported by the
data-structures module, but you are not importing it.
* in `port-puts' you are using `with-output-to-string', which is
exported by the ports module, but you are not importing it.
So, all you need to do is:
$ diff -u loglevel.scm.orig loglevel.scm
--- loglevel.scm.orig 2016-06-14 21:08:03.547764310 +0200
+++ loglevel.scm 2016-06-14 21:08:13.711763790 +0200
@@ -1,6 +1,6 @@
(module loglevel *
(import chicken scheme)
-(use srfi-1)
+(use data-structures ports srfi-1)
;; Expected behavior:
Unfortunately, the output gives no indication of which function is
causing the error or why, and the only way I’ve been able to figure
this out is by commenting out chunks of code and narrowing down until
I find the offending function. If I delete that function, the module
compiles perfectly and I can use the rest of the functions just as you
would expect. What does "module unresolved” mean and is there a better
way to figure out what is causing it?
Do you see the warnings in the compiler output?
I’ve attached a MWE where loglevel is a stripped-down version of one
such library causing the “module unresolved” error. Here are the steps
to reproduce:
$ cd lab-core
lab-core$ chicken-install -debug
(see attached output.txt for the debug output)
Compare this to:
$ csi
(load “loglevel-no-module.scm”)
(err-puts "foo" 42 "!”)
foo42!
“!"
which shows my functions working perfectly as long as I’m not using
module syntax.
Why would compiling into a module cause an error when my functions
work fine in the REPL? Any help would be appreciated.
That's because the interpreter implicitly loads some modules, and the
compiler doesn't do that.
All the best.
Mario
--
http://parenteses.org/mario