This is the mail archive of the kawa@sourceware.org mailing list for the Kawa project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Questions regarding modules


On 03/01/2014 07:52 AM, Marius Kjeldahl wrote:
Question 1 - The line that does require HelloKawa; Unless I list the
filename "HelloKawa.scm" as the second parameter, I will get a kawa
compiler error; invalid specifier for 'require'. I have no idea why.
I've experienced with setting the working dir prior to calling the
kawa compiler, but it does not seem to matter much. It looks like kawa
has it's own idea about the proper path for start searching for the
source file for the module.

IIRC the filename "HelloKawa.scm" is needed in a require if
the file is not already-compiled *and* it is not currently being
compiled (i.e. on the kawa -C command line).

This may change if/when we implement R7RS define-library, or
we implement some kind of Scheme packaging mechanism, as has been discussed.

Question 2 - When invoking (HelloKawa:hello), how come kawa knows
about my HelloKawa class without the full class name? I haven't done
any define-alias on it, so it's a bit unexpected.

When you (require MODULE) what happens is that all the public (exported)
names in MODULE are added to the current lexical scope.  The class HelloKawa
is a public exported Scheme name in the HelloKawa module - since they happen
to have the same name - and they happen to get compiled to the same class.

A (define-simple-class HelloKawa () ...) creates a definition of the
identifier HelloKawa in the current Scheme scope - and that binding
is by default exported.  This action is in addition and distinct from
the action of create a JCM class net.kjeldahl.kawatest.app.HelloKawa.

Conceptually the "module class" net.kjeldahl.kawatest.app.HelloKawa
is different from the define-simple-class HelloKawa.  They're just
implemented using a single class, with module-level functionality being
static, and define-simple-class-level stuff being (usually) non-static.

Question 3 - The file defining HelloKawa uses define-simple-class, but
I've also tried it with a straight up define instead (you'll see that
commented out in the source file above). If I do that, I get two
errors from kawa; no known slot hello in java.lang.Object, and no
declaration seen for HelloKawa.

Hopefully the previous answers will explain this.

Based on what I've read, this second
method of defining a module should work as long as we stay within the
kawa domain, but I may have interpreted that wrong.

There is no special magic for the "kawa" domain.  They is some special
magic for "kawa.lib" when using R7RS-style import.
--
	--Per Bothner
per@bothner.com   http://per.bothner.com/


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]