Hi Brian --
Sorry it's taken us awhile to get back to you -- busy week somehow.
In Java we have packages and classes, and all of the library is in a
package "edu.princeton.cs.algs4" using Java's reverse URL package naming.
Say I want to name my package 'Algs", so that my implementation of a
LinkedStack would be a record Algs.LinkedStack.T (T is for type, more on
that later). The only way I can see to do that now is to have a module Algs
which contains all of my algorithms in one file. Is there any way that I
can have that behavior (all modules accessible by Algs.Modname) and be able
to split my implementation across files, like in Java, or like Ada package
subunits?
...
I think an example of how to organize multifile/multimodule libraries in
Chapel would be enlightening. Packing everything into one file, as I see in
the examples in the mason registry, is not a solution I'm comfortable with.
At present, I'm afraid there's no direct way to do this -- Chapel doesn't
have a means of splitting modules across multiple files. We've (or at
least, I've) long envisioned adding some sort of '#include'-like directive
or statement to Chapel (though more as part of the language as in LaTeX
than by relying on a pre-processor) with the goal of being able to split a
module's contents across multiple files as one of the design goals.
Unfortunately, we haven't gotten there yet, though I don't believe it
would be a particularly challenging effort to add.
Over on issue #7847, we've found ourselves having a somewhat similar
discussion though it started from a different perspective. Specifically
in this comment:
https://github.com/chapel-lang/chapel/issues/7847#issuecomment-365953440
you'll see that Michael Ferguson has proposed using directories to at
least support some degree of having the directory serve as a parent module
and the files within it acting as sub-modules within that module (you'll
also see that I'm not a huge fan of this proposal, as I don't really like
program semantics to be determined by source location within a file
system).
If you want to chime in on either / both of these proposals, that'd be
feedback we'd value.
I also noticed that Chapel doesn't seem to permit types and their
parent module to have the same name. Originally I had tried to have a
module Stack with a (record) type Stack like
module Stack {
class Node {
type ItemType; // type of item
...
}
record Stack {
}
}
but the Chapel compiler rejects that.
I'm surprised to hear you say this because we do this all the time (and
are not convinced we want to, style-wise) and the compiler doesn't
complain. I expanded your sketch of code slightly and found that it
worked:
---
module Stack {
class Node {
type ItemType; // type of item
}
record Stack {
}
proc main() {
var myStack = new Stack();
var myNode = new Node(ItemType=int);
writeln(myStack);
writeln(myNode);
}
}
---
$ chpl testit.chpl
$ ./Stack
()
{}
---
So am guessing that you're doing something more that's either tripping up
a compiler bug or limitation, or otherwise hitting some other issue in the
language. If you have a more complete example demonstrating what you're
seeing, that'd be helpful.
PS: Chapel could also do with some naming and formatting conventions. I'm
trying to stick with Java-ish conventions (well, Java packages are
typically lower cased and I haven't done that yet...) and "One True Brace
Style" with non-optional braces (like Rust) and the Chapel code I read
varies greatly in style.
We get this request fairly often and I don't necessarily disagree with it,
but it hasn't gotten to the top of anyone's priority stack yet. See issue
7417, for example:
https://github.com/chapel-lang/chapel/issues/7417
That said, I'll add that I'm personally reluctant to suggest people change
approaches for certain things that I think are more religious than deeply
valuable like braces styles. There are definitely lots of issues that I
have a personal stance on; there are a lot fewer of them that I'd be
inclined to foist on a respected colleague who felt similarly strongly in
an opposite direction. So if I'm in charge of the style guide, it's
likely to be soft-ish in many respects (and if I'm not in charge of it,
it'd better conform to my preferences, goldarnit!)
-Brad
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Chapel-users mailing list
Chapel-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/chapel-users