On Tue, Oct 12, 2010 at 3:41 PM, Luke Kanies <[email protected]> wrote:

> On Oct 12, 2010, at 2:22 PM, Nigel Kersten wrote:
>
> > On Tue, Oct 12, 2010 at 2:17 PM, Markus Roberts <[email protected]>
> wrote:
> >>
> >>>> Hmm, the number of people chiming in on this topic is making me wonder
> >>>> whether we are barking up the wrong tree with lexical scoping.  If
> people
> >>>> don't need for variables and resource defaults defined in a class to
> take
> >>>> effect in contained classes, then there's no sense in our going to
> extra
> >>>> work to support it.
> >>>>
> >>>
> >>> Can we drop both lexical and dynamic scoping and still keep this
> property:
> >>>
> >>>>>> 1. Variables defined at toplevel can be seen inside classes.  For
> >>>>>> example:
> >>>>>> $var = "value"
> >>>>>> class foo { notify { $var: } }
> >>>>>> include foo
> >>>>>>
> >>>> This is a good idea and should stay, short and long term.
> >>
> >> Q: Can we drop both lexical and dynamic scoping and still keep the
> property
> >> "Variables defined at toplevel can be seen inside classes"?
> >>
> >> A: Yes.  Globals don't require scoping.  :P
> >
> > Do we need scoping for inherited classes to inherit resource defaults
> > and variables?
>
> Yes, but would it be acceptable to remove that and rely on the mixin-like
> behaviour I mentioned earlier instead?
>

I think the discussion is boiling down to four fundamental questions that
we're achieving consensus on.  Let me try to state what I think those
questions are, and the consensus I'm hearing:

(a) Do we want to remove dynamic scoping from Puppet (variables and resource
defaults defined in class A also take effect in classes that A includes)?
 Yes.  But we should remove it carefully and with appropriate warnings, so
that users have time to adapt their manifests to use parameterized classes
etc.  And we may need to add Luke's proposed "extend" concept to address
some of the use cases of resource defaults.  (Personally, I think we have
enough of a consensus that we could move forward with this, and consider the
"extend" concept something to be elaborated during the timeframe of 2.7
development.)

(b) Do we want to add lexical scoping to Puppet (variables and resource
defaults defined in class A also take effect in classes nested inside class
A, e.g. A::B)?  No.  I thought we did when we began this discussion, but I
think this was because I initially misunderstood the decision as "lexical
scoping or dynamic scoping?"  What I'm hearing today is that we don't need
either of them.

(c) Do we want to remove inherited scoping from Puppet (variables and
resource defaults defined in class A also take effect in classes derived
from A)?  No.  This is a useful feature and should be kept.

(d) Do we want to remove globals from Puppet (variables and resource
defaults defined at toplevel also take effect inside classes)?  No.  This is
a useful feature and should be kept.

-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Developers" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/puppet-dev?hl=en.

Reply via email to