<div dir="ltr">Hello All, <div><br></div><div style>I am spamming the lists which may be interested in a C/C++ automatic </div><div style>API wrapper / code generator / type system / thing I wrote.  I&#39;ll keep </div><div style>

future updates more discrete.  I&#39;d love to help folks get started with this</div><div style>and more participation is always welcome!  Release notes are below.</div><div style><br></div>Please visit the docs: <a href="http://bit.ly/xdress-code">http://bit.ly/xdress-code</a><br>

<br><div>Or just grab the repo: <a href="http://github.com/scopatz/xdress">http://github.com/scopatz/xdress</a><br><div style><br></div><div style>Be Well</div><div style>Anthony</div><div style><br></div><div style><div>

<font face="courier new, monospace">========================</font></div><div><font face="courier new, monospace">XDress 0.1 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 &amp; functions</font></div>

<div><font face="courier new, monospace">and in-memory wrappers for C++ standard library containers (sets, vectors, maps).</font></div><div><font face="courier new, monospace">In the future, other tools and bindings will be 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">  - Dynamic system for specifying types</font></div>

<div><font face="courier new, monospace">  - Automatically describes C/C++ APIs from source code with no modifications.</font></div><div><font face="courier new, monospace">  - Python extension module generation (via Cython) from C++ API descriptions</font></div>

<div><font face="courier new, monospace">  - Python views into C++ STL containers.  Vectors are NumPy arrays while maps</font></div><div><font face="courier new, monospace">    and sets have custom collections.MutableMapping and collections.MutableSet</font></div>

<div><font face="courier new, monospace">    subclasses.</font></div><div><font face="courier new, monospace">  - Command line interface to the above tools.</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://bit.ly/xdress-code">http://bit.ly/xdress-code</a></font></div><div><font face="courier new, monospace"><br></font></div>

<div><font face="courier new, monospace">Or grab the code from GitHub: <a href="http://github.com/scopatz/xdress">http://github.com/scopatz/xdress</a></font></div><div><font face="courier new, monospace"><br></font></div>

<div><font face="courier new, monospace">XDress is free &amp; open source (BSD 2-clause license) and requires Python 2.7,</font></div><div><font face="courier new, monospace">NumPy 1.5+, PyTables 2.1+, Cython 0.18+, GCC-XML, 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">Type System</font></div><div><font face="courier new, monospace">-----------</font></div><div><font face="courier new, monospace">This module provides a suite of tools for denoting, describing, and converting</font></div>

<div><font face="courier new, monospace">between various data types and the types coming from various systems.  This is</font></div><div><font face="courier new, monospace">achieved by providing canonical abstractions of various kinds of types:</font></div>

<div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">* Base types (int, str, float, non-templated classes)</font></div><div><font face="courier new, monospace">* Refined types (even or odd ints, strings containing the letter &#39;a&#39;)</font></div>

<div><font face="courier new, monospace">* Dependent types (templates such arrays, maps, sets, vectors)</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">All types are known by their name (a string identifier) and may be aliased with</font></div>

<div><font face="courier new, monospace">other names.  However, the string id of a type is not sufficient to fully describe</font></div><div><font face="courier new, monospace">most types.  The system here implements a canonical form for all kinds of types.</font></div>

<div><font face="courier new, monospace">This canonical form is itself hashable, being comprised only of strings, ints,</font></div><div><font face="courier new, monospace">and tuples.</font></div><div><font face="courier new, monospace"><br>

</font></div><div><div><font face="courier new, monospace">Descriptions</font></div><div><font face="courier new, monospace">------------</font></div><div><font face="courier new, monospace">A key component of API wrapper generation is having a a top-level, abstract</font></div>

<div><font face="courier new, monospace">representation of the software that is being wrapped.  In C++ there are three</font></div><div><font face="courier new, monospace">basic constructs which may be wrapped: variables, functions, and classes.</font></div>

<div><font face="courier new, monospace">Here we restrict ourselves to wrapping classes and functions, though variables</font></div><div><font face="courier new, monospace">may be added in the future.</font></div><div><font face="courier new, monospace"><br>

</font></div><div><font face="courier new, monospace">The abstract representation of a C++ class is known as a description (abbr. desc).</font></div><div><font face="courier new, monospace">This description is simply a Python dictionary with a specific structure.</font></div>

<div><font face="courier new, monospace">This structure makes heavy use of the type system to declare the types of all needed</font></div><div><font face="courier new, monospace">parameters.</font></div><div><font face="courier new, monospace"><br>

</font></div><div><font face="courier new, monospace">Mini-FAQ</font></div><div><font face="courier new, monospace">========</font></div><div><font face="courier new, monospace">* Why not use an existing solution (eg, SWIG)?</font></div>

<div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">    Their type systems don&#39;t support run-time, user provided refinement types,</font></div><div><font face="courier new, monospace">    and thus are unsuited for verification &amp; validation use cases that often</font></div>

<div><font face="courier new, monospace">    arise in computational science.</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">    Furthermore, they tend to not handle C++ dependent types well (i.e. vector&lt;T&gt;</font></div>

<div><font face="courier new, monospace">    does not come back as a np.view(..., dtype=T)).</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">* Why GCC-XML and not Clang&#39;s AST?</font></div>

<div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">    I tried using Clang&#39;s AST (and the remnants of a broken visitor class remain</font></div><div><font face="courier new, monospace">    in the code base).  However, the official Clang AST Python bindings lack</font></div>

<div><font face="courier new, monospace">    support for template argument types.  This is a really big deal. Other C++ ASTs</font></div><div><font face="courier new, monospace">    may be supported in the future -- including Clang&#39;s.</font></div>

<div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">* I run xdress and it creates these files, now what?!</font></div><div><font face="courier new, monospace"><br></font></div>

<div><font face="courier new, monospace">    It is your job to integrate the files created by xdress into your build system.</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">front end tool on top of the type system and autodescriber, please let me know.</font></div><div><font face="courier new, monospace">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">XDress was written by `Anthony Scopatz &lt;<a href="http://scopatz.com/">http://scopatz.com/</a>&gt;`_, who had many</font></div>

<div><font face="courier new, monospace">type system discussions with John Bachan over coffee at the Div school, and was</font></div><div><font face="courier new, monospace">polished up and released under the encouragement of Christopher Jordan-Squire at</font></div>

<div><font face="courier new, monospace">`PyCon 2013 &lt;<a href="https://us.pycon.org/2013/">https://us.pycon.org/2013/</a>&gt;`_.</font></div></div><div><br></div></div></div></div>