> I think Guile could report a warning if a nonexistent variable is
> exported as the cause of this kind of errors may be difficult to find in
> a large program.


you are exporting _symbols_ (unique identities) from modules, not variables (or 
bindings).

there are various use-cases where one wants to export a symbol from a module 
without binding any value to it in the module where it is being exported from.


> WARNING: (guile-user): `myproc' imported from both (mod1) and (mod2)


this^ is key, never ignore such warnings! i'd go as far as to suggest that this 
warning should be turned into an error. that would force the author to fix his 
package definitions to explicitly resolve such collisions.

sidenote: any serious codebase should compile with zero warnings, otherwise 
people start to ignore such warnings, they accummulate, and then waste precious 
programmer attention in debugging sessions.

our (Common Lisp) team used to have a running joke that if a situation just 
doesn't make any sense, then it must be a package (module) issue: `foo` and 
`foo` may print the same, but can be different identities.


> Backtrace:
> In ice-9/boot-9.scm:
> 1762:12 4 (with-exception-handler _ _ #:unwind? _ # _)
> In unknown file:
> 3 (apply-smob/0 #<thunk 7f3e3cd10300>)
> 
> In ice-9/boot-9.scm:
> 731:2 2 (call-with-prompt ("prompt") #<procedure 7f3e3cd22b00 …> …)
> 
> In ice-9/eval.scm:
> 619:8 1 (_ #(#(#<directory (guile-user) 7f3e3cd13c80>)))
> 
> In program.scm:
> 6:3 0 (main _)
> 
> program.scm:6:3: In procedure main:
> Unbound variable: myproc


there are two `myproc` symbols at play here, and you're trying to dereference 
the one that has no value bound to. you've been warned prior to this.

-- 
• attila lendvai
• PGP: 963F 5D5F 45C7 DFCD 0A39
--
You cannot wake up someone who is only pretending to be asleep.
        — Indian proverb


Reply via email to