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.