Proposed Design of the Heron Module System
I show here the design of the module system under consideration for Heron.
I am considering a design for the Heron module system that allows modules to be instantiated just like classes. While this system isn;t as powerful as that used inNewspeak andScala , it does seem to address some of the problems that I am aware of with other languages with weak or non-existent module systems:
1. No global mutable state.
2. Explicit programmer controlled initialization of modules
3. Parameters can be passed to module during construction
The Heron module bears a resemblance to the Scala approach of treating objects as modules, but is not as expressive (or complex). In fact that Heron module would be a class, that allows nesting of other classes in it, which ordinary classes don;t allow.
Here is an example of how the syntax might look in action:
module M {
fields {
// State associated with particular module instances.
x : int
}
methods {
// A module initializer
Constructor(n : Int) {
x = n;
}
}
classes {
class C {
methods {
Get() : Int { return M.x; }
Set(n : Int) { M.x = n; }
}
}
}
}
module N {
imports {
M as module1;
M as module2;
Console; // Console as Console is implied here
}
methods {
Constructor() {
// Construct the module instances
// Order is specified.
// We could even do conditional module instantiation.
m1 = new M();
m2 = new M();
Console = new Console();
// Construct two different instances of class C,
// Both have the same type "M.C", but are associated
// with different instances of the module M
M.C c1 = new M1.C(0);
M.C c2 = new M2.C(1);
Console.WriteLine(c1.Get()); // 0
Console.WriteLine(c2.Get()); // 1
c2.Set(42);
Console.WriteLine(c1.Get()); // 0
Console.WriteLine(c2.Get()); // 42
}
}
}

