[nem-en] Scala: what you say about it?
NoiseEHC
NoiseEHC at freemail.hu
Sun Nov 19 13:52:19 CET 2006
Forgot examples... :)
context Hosted {
Log(line: string);
}
context VehiclePartsModify : Hosted {
// there should be a variable with the type if Vehicle
Parent: Vehicle;
// forces the caller to lock Parent
locked Parent;
}
class VehiclePart {
[VehiclePartsModify]
def Remove() {
// forces Vehicle to implement RemoveChild method
Parent.RemoveChild(this); // we can call it since it is locked
// it is just something which is the reason Remove was called in
the first place (and not Parent.RemoveChild)...
this.Cleanup();
}
}
def SomeMethod() {
context.Log = LogImpl();
foreach(v in VehicleList) {
lock(v) {
foreach(p in v.Parts) {
// v is captured since it is the only Vehicle here
// locking checked
p.Remove();
}
}
}
}
NoiseEHC wrote:
> Ok, another question:
>
> It is one of my old ideas that there should be support for some kind
> of context oriented programming (in any language, it is older than I
> know Nemerle). So the problem it would solve that normally if you
> write components you have to pass around a lot of stuff from the
> caller to the component, and it is really frustrating to type all
> those parameters for every fucking function. The example here is that
> in the compiler you have to pass around this "ManagerClass.Instance"
> thing. Note that object oriented programming is just a subset of
> context oriented programming where "this" is the context. It should
> (in my opinion, never used anything like this) provide an alternative
> to variable capture when in LISP you can use a variable name and it is
> captured from the caller's scope (not sure about this since as I said
> never used LISP). Another use would be to define methods which could
> act on parent-child collections. Where the child does not have a
> reference to its parent, every fucking function have to have a
> "Parent" parameter. It should also solve the problem of hosting (for
> example logging), what I normally handle by every component defining
> an interface which must be implemented by the caller (host). This
> problem is directly addressed in the Scala video so maybe it is
> important enough to have a language supported solution. Finally, this
> context thing should have some support to explicitly define contracts
> which are not variables but just compile time verifiable expressions,
> for example locking, so one function could define that some lock
> must/must not be held.
>
> You are probably know enough about language design that you can point
> to other languages which address those requirements so it should not
> reinvent the wheel. Is it a practical thing or just stupid? Will we
> have support for it or we may already have it?
>
> ps:
> I am aware that this email is not too clear so if you need some more
> descriptions/examples say so.
>
>
> _______________________________________________
> https://nemerle.org/mailman/listinfo/devel-en
>
>
More information about the devel-en
mailing list