<div dir="ltr">Hello All, <div><br></div><div>I am pleased to announce the latest the latest and greatest release of xdress, which incorporates a lot of feedback received at SciPy 2013. Please see the release notes below for more information.</div>
<div><br></div><div>And a HUGE congratulations to the IPython team on their v1.0 release today! Please continue taking over the world ;).</div><div><br></div><div>Be Well</div><div>Anthony</div><div><br></div><div><div>
<font face="courier new, monospace">========================</font></div>
<div><font face="courier new, monospace">XDress 0.3 Release Notes</font></div><div><font face="courier new, monospace">========================</font></div><div><font face="courier new, monospace">XDress is an automatic wrapper generator for C/C++ written in pure Python. Currently,</font></div>
<div><font face="courier new, monospace">xdress may generate Python bindings (via Cython) for C++ classes, functions, and</font></div><div><font face="courier new, monospace">certain variable types. It also contains idiomatic wrappers for C++ standard library</font></div>
<div><font face="courier new, monospace">containers (sets, vectors, maps). In the future, other tools and bindings will be</font></div><div><font face="courier new, monospace">supported.</font></div><div><font face="courier new, monospace"><br>
</font></div><div><font face="courier new, monospace">The main enabling feature of xdress is a dynamic type system that was designed with</font></div><div><font face="courier new, monospace">the purpose of API generation in mind.</font></div>
<div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">Release highlights:</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace"> - C++ template class & function support</font></div>
<div><font face="courier new, monospace"> - Automatic docstring generation via dOxygen</font></div><div><font face="courier new, monospace"> - A complete type system implementation refactor</font></div><div><font face="courier new, monospace"> - Wrapped names may be different than source names,</font></div>
<div><font face="courier new, monospace"> allowing automatic PEP-8-ification</font></div><div><font face="courier new, monospace"> - A plethora of useful bug fixes</font></div><div><font face="courier new, monospace"><br>
</font></div><div><font face="courier new, monospace">Please visit the website for more information: <a href="http://xdress.org/">http://xdress.org/</a></font></div><div><font face="courier new, monospace"><br></font></div>
<div><font face="courier new, monospace">Ask questions on the mailing list: <a href="mailto:xdress@googlegroups.com">xdress@googlegroups.com</a></font></div><div><font face="courier new, monospace"><br></font></div><div>
<font face="courier new, monospace">Download the code from GitHub: <a href="http://github.com/xdress/xdress">http://github.com/xdress/xdress</a></font></div>
<div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">XDress is free & open source (BSD 2-clause license) and requires Python 2.7,</font></div><div><font face="courier new, monospace">NumPy 1.5+, Cython 0.19+, and optionally GCC-XML, pycparser, dOxygen, and lxml.</font></div>
<div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">New Features</font></div><div><font face="courier new, monospace">============</font></div><div><font face="courier new, monospace"><br>
</font></div><div><font face="courier new, monospace">C++ Template Support</font></div><div><font face="courier new, monospace">---------------------</font></div><div><font face="courier new, monospace">The most requested feature following SciPy 2013 was full and complete support</font></div>
<div><font face="courier new, monospace">for C++ templates. It is here! Template instantiations are now automatically</font></div><div><font face="courier new, monospace">discovered, described, and wrapped. The only exception to this is that</font></div>
<div><font face="courier new, monospace">template member functions are *not* automatically discovered due to a defect in</font></div><div><font face="courier new, monospace">GCC-XML. Template methods must, therefore, be added by hand in a sidecar file.</font></div>
<div><font face="courier new, monospace">See the FAQ for more details.</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">dOxygen Docstrings</font></div><div><font face="courier new, monospace">------------------</font></div>
<div><font face="courier new, monospace">A new plugin called ``xdress.doxygen`` has been added which automatically</font></div><div><font face="courier new, monospace">scrapes the source code for documentation using dOxygen. These are then</font></div>
<div><font face="courier new, monospace">automatically inserted as docstrings into the wrappers that are generated. These</font></div><div><font face="courier new, monospace">docstrings follow the numpydoc convention.</font></div>
<div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">Type System Refactor</font></div><div><font face="courier new, monospace">--------------------</font></div><div><font face="courier new, monospace">The type system has undergone a complete reactor to make it more user-friendly</font></div>
<div><font face="courier new, monospace">and expose a lot of its internals. Previously, the type system was a collection</font></div><div><font face="courier new, monospace">of functions and module-level private containers. All of this has been moved into</font></div>
<div><font face="courier new, monospace">a new ``TypeSystem`` class whose attributes and methods are almost all public.</font></div><div><font face="courier new, monospace">This enables a number of potentially useful features.</font></div>
<div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">* Type systems may be customized in the xdressrc.py file.</font></div><div><font face="courier new, monospace">* Type systems may be customized in side car files.</font></div>
<div><font face="courier new, monospace">* Type systems can now persist and load themselves. This enables saving</font></div><div><font face="courier new, monospace"> a type system when wrapping one project and loading it in as a dependency</font></div>
<div><font face="courier new, monospace"> in future projects.</font></div><div><font face="courier new, monospace">* Easier testing</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">As a consequence, most other parts of xdress must now hold a reference to a type</font></div>
<div><font face="courier new, monospace">system object. Before, it was sufficient to import the type system module.</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">API Named Tuple</font></div>
<div><font face="courier new, monospace">---------------</font></div><div><font face="courier new, monospace">A new named tuple class ``apiname`` has been added. This allows for a broader</font></div><div><font face="courier new, monospace">selection of how users can choose to write names in the classes, functions, and</font></div>
<div><font face="courier new, monospace">variables list in the run control file. Possible options now include::</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace"> from xdress.utils import apiname</font></div>
<div><font face="courier new, monospace"> classes = [</font></div><div><font face="courier new, monospace"> (srcname, srcfile,),</font></div><div><font face="courier new, monospace"> (srcname, srcfile, tarfile,),</font></div>
<div><font face="courier new, monospace"> (srcname, srcfile, tarfile, tarname),</font></div><div><font face="courier new, monospace"> [srcname, srcfile, tarfile, tarname],</font></div><div><font face="courier new, monospace"> {'srcname': a, 'srcfile': b, 'tarfile': c, 'tarname': d},</font></div>
<div><font face="courier new, monospace"> apiname(srcname, srcfile, tarfile, tarname),</font></div><div><font face="courier new, monospace"> ]</font></div><div><font face="courier new, monospace"><br></font></div>
<div><font face="courier new, monospace">This allows the target name (ie the name in the wrapper) to be distinct from</font></div><div><font face="courier new, monospace">the name that is in the C/C++ source code (ie the source name). This is very</font></div>
<div><font face="courier new, monospace">useful for customizing APIs because xdress takes care of the mapping for you!</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">PEP-8 Compliance Plugin</font></div>
<div><font face="courier new, monospace">-----------------------</font></div><div><font face="courier new, monospace">A new plugin called ``xdress.pep8names`` has been added which ensures that</font></div><div><font face="courier new, monospace">all target names for API elements are PEP-8 compliant for that type. If the</font></div>
<div><font face="courier new, monospace">target name is not PEP-8 complaint then it converts it to a compliant version</font></div><div><font face="courier new, monospace">for you. Subversive? That's the point! Functions and variables are converted</font></div>
<div><font face="courier new, monospace">to lowercase_with_underscores while classes are converted to CapCase.</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">Description Filtering Plugin</font></div>
<div><font face="courier new, monospace">----------------------------</font></div><div><font face="courier new, monospace">Sometimes autoall will expose too much. To avoid certain API elements while</font></div><div><font face="courier new, monospace">still automatically finding other names, the ``xdress.descfilter`` plugin allows</font></div>
<div><font face="courier new, monospace">you to skip methods, attributes, and types that the you doesn't feel are appropriate</font></div><div><font face="courier new, monospace">to expose. This is also a useful stop-gap for data types that have not yet been</font></div>
<div><font face="courier new, monospace">implemented into the xdress type system.</font></div><div><font face="courier new, monospace">Tab Completion in BASH</font></div><div><font face="courier new, monospace">----------------------</font></div>
<div><font face="courier new, monospace">Through the power and magic of the argcomplete package, all arguments and options</font></div><div><font face="courier new, monospace">for all plugins now have tab-completion enabled in BASH. Install argcomplete</font></div>
<div><font face="courier new, monospace">and then add the following lines to your ``~/.bashrc`` file::</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace"> # Enable completion for xdress</font></div>
<div><font face="courier new, monospace"> eval "$(register-python-argcomplete xdress)"</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">Major Bug Fixes</font></div>
<div><font face="courier new, monospace">===============</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">* Enums and functions pointers were noticeably absent from the GCC-XML describer.</font></div>
<div><font face="courier new, monospace"> This has been rectified.</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">* Classes and structs are now registered into the type system earlier. This allows</font></div>
<div><font face="courier new, monospace"> them to be used in other plugins. This includes stlwrap. It is now possible</font></div><div><font face="courier new, monospace"> and easy to create custom numpy dtypes for any struct or C++ class.</font></div>
<div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">* Fixed segfaults with custom dtypes</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">* Fixed build issue when only vectors were present in stlcontainers.</font></div>
<div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">* The global namespace is now correctly represented by None, rather than '::',</font></div><div><font face="courier new, monospace"> when using GCC-XML.</font></div>
<div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">Join in the Fun!</font></div><div><font face="courier new, monospace">================</font></div><div><font face="courier new, monospace">If you are interested in using xdress on your project (and need help), contributing</font></div>
<div><font face="courier new, monospace">back to xdress, starting up a development team, or writing your own code generation</font></div><div><font face="courier new, monospace">plugin tool, please let us know. Participation is very welcome!</font></div>
<div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">Authors</font></div><div><font face="courier new, monospace">=======</font></div><div><font face="courier new, monospace">- [Anthony Scopatz](<a href="http://scopatz.com/">http://scopatz.com/</a>)</font></div>
<div><font face="courier new, monospace">- Spencer Lyon</font></div><div><font face="courier new, monospace">- John Wiggins *</font></div><div><font face="courier new, monospace">- Matt McCormick *</font></div><div><font face="courier new, monospace">- Brad Buran</font></div>
<div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">An * indicates a first time contributor.</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">Links</font></div>
<div><font face="courier new, monospace">=====</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">1. Homepage - <a href="http://xdress.org/">http://xdress.org/</a></font></div>
<div><font face="courier new, monospace">2. Mailing List - <a href="mailto:xdress@googlegroups.com">xdress@googlegroups.com</a></font></div><div><font face="courier new, monospace">3. GitHub Organization - <a href="https://github.com/xdress">https://github.com/xdress</a></font></div>
<div><font face="courier new, monospace">4. numpydoc - <a href="https://pypi.python.org/pypi/numpydoc">https://pypi.python.org/pypi/numpydoc</a></font></div><div><font face="courier new, monospace">5. argcomplete - <a href="https://argcomplete.readthedocs.org/en/latest/">https://argcomplete.readthedocs.org/en/latest/</a></font></div>
</div></div>