================= Pop Release 6.0.0 ================= The Plugin Oriented Programming implementation has reached version 6.0.0! This version introduces many changes to the system and established a long researched baseline of functionality. Why Version 6? ============== Pop is the 5th major iteration on the concept of Plugin Oriented Programming. It started as the Salt Loader System, then a project called pack, then pack in Julia, followed by another implementation in Python and then, finally, `pop`. This release cleans up many of the concepts that were hold overs from earlier systems and starts to add some of the long aspirational features to the platform. It is therefore a worthy version "6". Dynamic Names ============= Version 6 introduces Dynamic Names to ``pop`` and implements a critical component of Plugin Oriented Programming. Dynamic Names is part of the concept around App Merging. App Merging was introduced in ``pop`` 5, in that multiple applications can be merged onto the hub and configuration for said apps can also be merged onto the hub via the `conf.integrate` system. But Dynamic Names allows for a plugin subsystem to be dynamically expanded by additional apps being installed. With Dynamic Names a plugin subsystem can be dynamically extended by simply installing an additional python package that defines additions to the used Dynamic Name. This makes extending a project via external repos and installs not only easy, but completely transparent. hub._ and hub.__ ================ One of the issues with the ``hub`` is that all references need to fully qualified. Pop 6 introduces `hub._` as a dynamic reference to the current module and `hub.__` as a dynamic reference to the current plugin subsystem. Move init.new and __mod_init__ to __init__ ========================================== To be more pythonic we have introduced the ``__init__`` function as a replacement for the `init.new` function and for the ``__mod_init__`` function. This helps to consolidate what these functions were used for into a single location. Contracts dir Autodetected ========================== In ``pop`` 5 it was suggested to make a ``mods`` and a ``contracts`` directory and statically direct the sub to both of them. In ``pop`` 6 this is still supported but now a ``sub`` can have a ``contracts`` directory inside and the contracts will be autoloaded. Add getattr to the hub ====================== Now getattr can look up nested refs on the hub: getattr(hub, 'pop.sub.add') Don't Need __init__.py files anymore ==================================== Python 3.3 deprecated the need to use *__init__.py* files. The old loading code was using these files to discern paths. Pop now uses the paths system introduced in Python 3.3.