As promised, this a summary of the language/server roadmap to get to Puppet
4. Below is the summary, but don't feel like everything here is set in
stone. Also, if you are interested in helping out, there are quite a few
places to jump in and contribute (design, code, functionality testing,
performance testing, documentation). None of the new stuff is set in stone
until Puppet 4 ships :)

I've said for a while that what I want is for Puppet 4 to be a "flip some
switches and take out the rubbish" release and that is still the case. This
means that we'll just be changing defaults for some settings, switching to
the new code paths for some feature flags, and removing deprecated and
unused code. All of this is to make the transition to Puppet 4 as easy as
possible for users and so that we can get as much feedback on the new
functionality as possible before it is made non-optional. That is the
reason that, if you take a look in Jira, there isn't that much actually
targeted at Puppet 4. Instead almost all of the interesting stuff is
targeted at Puppet 3.6.

In addition to any bug fixes and small features (the new environments),
Henrik, Joshua and I are going to be working on polishing the new
evaluator. As part of this we are taking a critical eye to a lot of the
language semantics and features that we know cause problems. Some of the
more impactful (is that a word?) ones are:

  * PUP-480: undef/nil handling
  * PUP-121: deprecate and remove relative name spacing
  * PUP-474: make puppet data types immutable
  * PUP-516: fix up node matching...remove node inheritance (probably need to
clarify that issue)
  * PUP-1799: new function API

There are a few guidelines we are going by for the new evaluator: it has to
be mostly compatible with existing manifests (I gave the semi-arbitrary
number of 90% of manifests) and it has to be faster than the current system.

In addition to the new evaluator/parser/lexer, we are also going to be
reworking the "compiler" (yep, we are being pretty ambitious).

Now let me take a moment to clarify something. What is currently called the
compiler isn't a compiler. It is partly a major piece of the evaluator and
partly a component that pieces together and validates catalogs. I think
there has been a lot of confusion about how puppet works by calling it a
compiler and so in puppet 4 we are, at least inside the code, going to
start moving away from that terminology.

By reworking the existing compiler we are going to end up having to deal
with several different things. The evaluator is going to need to track
variable scopes and thereby cause us to rewrite scopes. The catalog model
is going to be reworked and made anemic (the classes that make it up won't
have much behavior at all). How resource types are dealt with in the master
will need to be reworked so that we can create a separation between the new
catalog system and the existing types (this paves the way for some much
needed rework of the puppet resource type system). And finally,
environments will have to be handled differently internally to the code.

The exact details for how all of that is going to work out hasn't been
finalized, but we have come to the general agreement that there are 2 or 3
different pieces:

  * Pops: the lexer/parser/evaluator executes puppet manifests, handles
variables, and provides hooks to tie into the evaluation
  * Biff: the catalog builder handles piecing together a catalog, making
relationships, validating properties, and transformation of the catalog
  * ??? (don't have a name for this): another component is responsible for
tying Pops and Biff together. This would involve configuring them to look
at the appropriate files (manifests, types, etc) and plumbing together
resource declarations/dependencies/etc during evaluation in Pops into calls
into Biff.

What we've put together so far is in PUP-1789, which is full of some pretty
gigantic tickets that we need to break apart as we start working through
things.

In addition to what I've outlined above, there is also some concrete,
forward looking ideas that we have. Those are all targeted at 4.x since the
idea is that all of this other work should get us on a footing for doing
those things during the Puppet 4 series.

If you follow me on twitter you might have seen a post about our plans for
Puppet 4 that had a picture of a whiteboard with a mind-map on it (
https://twitter.com/aparker42/status/441634045420511232). That picture was
a joke :) But there is a real mind map that is sitting in it, which you
might be able to see through all of the nonsense we added:
https://dl.dropboxusercontent.com/u/27950908/20140228_101324.jpg


-- 
Andrew Parker
a...@puppetlabs.com
Freenode: zaphod42
Twitter: @aparker42
Software Developer

*Join us at PuppetConf 2014, September 23-24 in San Francisco - *
http://bit.ly/pupconf14

-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to puppet-dev+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/puppet-dev/CANhgQXv7MKJA0_NRHRNs3sLnez9cNu9Ki0khb43cwWPN98j%2BOA%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to