Sophie

Sophie

distrib > Fedora > 14 > i386 > by-pkgid > 623999701586b0ea103ff2ccad7954a6 > files > 9508

boost-doc-1.44.0-1.fc14.noarch.rpm

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <meta http-equiv="Content-Type" content=
    "text/html; charset=iso-8859-1">
    <link rel="stylesheet" type="text/css" href="../boost.css">

    <title>Boost.Python - February 2002 Progress Report</title>
<style type="text/css">
 :link { color: #0000ff }
 :visited { color: #800080 }
 p.c3 {font-style: italic}
 h2.c2 {text-align: center}
 h1.c1 {text-align: center}
</style>

    <table border="0" cellpadding="7" cellspacing="0" width=
    "100%" summary="header">
      <tr>
        <td valign="top" width="300">
          <h3><a href="../../../../index.htm"><img height="86" width="277" alt=
          "C++ Boost" src="../../../../boost.png" border="0"></a></h3>

        <td valign="top">
          <h1 class="c1"><a href="../index.html">Boost.Python</a></h1>

          <h2 class="c2">February 2002 Progress Report</h2>
    </table>
    <hr>

    <h2>Contents</h2>

    <dl class="index">
      <dt><a href="#Python10">Python10 Conference Report</a>

      <dt><a href="#progress">Boost.Python v2 Progress</a>

      <dd>
        <dl class="index">
          <dt><a href="#documentation">Documentation</a>

          <dt><a href="#conversion">Overhaul of
          <code>to_python</code>/<code>from_python</code>
          conversion mechanism</a>

          <dt><a href="#miscellaneous">Miscellaneous</a>
        </dl>
    </dl>

    <h2><a name="Python10">Python10 Conference Report</a></h2>
    I spent the first week of February at the Python10 conference
    in Alexandria, VA. I&#39;m including this experience report
    for two reasons: firstly, it documents where my time was
    used. Secondly, a public presence for Boost.Python and
    interaction between the Python and C++ communities is
    important to the future of Boost.Python, which in turn is
    important to the Kull Project. 

    <p>Andy Koenig, of all people, was the keynote speaker of
    this year&#39;s opening plenary session. He presented his
    &quot;impressions of a polyglot outsider&quot;, which
    studiously avoided any mention of C++ until the end of his
    talk, when he was asked about standardization. I was
    surprised to learn that the C++ community at large wanted a
    few more years before beginning but when ANSI accepted
    HP&#39;s request for a standard, the process was forced to
    start: it was a matter of participating or having
    standardization proceed without one&#39;s input. Andy managed
    to highlight very effectively the balance of strengths in
    Python, one of the most important being its support for
    extension via libraries. In many ways that makes Python a
    good analogue for C++ in the interpreted world

    <p>There were several kind mentions of the Boost.Python
    library from people who found it indispensable. I was
    particularly happy that Karl MacMillan, Michael Droettboom,
    and Ichiro Fujinaga from Johns Hopkins is using it to do OCR
    on a vast library of music notation, since in a previous life
    I was an author of music notation software. These guys are
    also drawing on Ullrich Koethe&#39;s VIGRA library for image
    manipulation (Ullrich has been a major contributor to
    Boost.Python). They also have a system for writing the
    Boost.Python wrapper code in C++ comments, which allows them
    to keep all of the code in one place. I&#39;ve asked them to
    send me some information on that.

    <p>The development of Swig has been gaining momentum again
    (the basic description at
    www.boost.org/libs/python/doc/comparisons.html still
    applies). The talk given about it by David Beazly was very
    well-attended, and they appear to have quite a few users.
    Swig&#39;s strengths (coverage of many langauages) and
    weaknesses (incomplete C++ language support) haven&#39;t
    changed, although the C++ support seems to have improved
    considerably - they now claim to have a complete model of the
    C++ type system. It seems to be mostly geared at wrapping
    what Walter Landry calls &quot;C-Tran&quot;: C++ code which
    traffics in built-in types with little use of abstraction.
    I&#39;m not knocking that, either: I&#39;m sure a lot of that
    code exists, so it&#39;s a valuable service. One feature Swig
    has which I&#39;d like to steal is the ability to unwrap a
    single Python argument into multiple C++ arguments, for
    example, by converting a Python string into a pointer and
    length. When his talk was over, David approached me about a
    possible joint workshop on language binding, which sounds
    like a fun idea to me.

    <p>I spent some considerable time talking with Steven Knight,
    the leader of the Scons build tool effort. We had a lot to
    share with one another, and I gained a much better
    appreciation for many of the Scons design decisions. Scons
    seems to be concentrating on being the ultimate build system
    substrate, and Steve seemed to think that we were on the
    right track with our high-level design. We both hope that the
    Boost.Build V2 high-level architecture can eventually be
    ported to run on top of Scons.

    <p>They also have a highly-refined and successful development
    procedure which I&#39;d like to emulate for Boost.Build V2.
    Among many other things they do, their source-control system
    automatically ensures that when you check in a new test, it
    is automatically run on the currently checked-in state of the
    code, and is expected to fail -- a relatively obvious good
    idea which I&#39;ve never heard before.

    <p>Guido Van Rossum&#39;s &quot;State of the Python
    Union&quot; address was full of questions for the community
    about what should be done next, but the one idea Guido seemed
    to stress was that core language stability and continuing
    library development would be a good idea (sound familiar?) I
    mentioned the Boost model as a counterpoint to the idea of
    something like CPAN (the massive Perl library archives), and
    it seemed to generate some significant interest. I&#39;ve
    offered to work with anyone from the Python community who
    wants to set up something like Boost.

    <p>There was some discussion of &quot;string
    interpolation&quot; (variable substitution in strings), and
    Guido mentioned that he had some thoughts about the
    strengths/weaknesses of Python&#39;s formatting interface. It
    might be useful for those working on formatting for boost to
    contact him and find out what he has to say.

    <p>Ka-Ping Yee demoed a Mailman discussion thread weaver.
    This tool weaves the various messages in a discussion thread
    into a single document so you can follow the entire
    conversation. Since we&#39;re looking very seriously at
    moving Boost to Mailman, this could be a really useful thing
    for us to have. If we do this, we&#39;ll move the yahoogroups
    discussions into the mailman archive so old discussions can
    be easily accessed in the same fashion.

    <p>And, just because it&#39;s cool, though perhaps not
    relevant: http://homepages.ulb.ac.be/~arigo/psyco/ is a
    promising effort to accelerate the execution of Python code
    to speeds approaching those of compiled languages. It
    reminded me a lot of Todd Veldhuizen&#39;s research into
    moving parts of C++ template compilation to runtime, only
    coming from the opposite end of things.

    <h2><a name="progress">Boost.Python v2 Progress</a></h2>
    Here&#39;s what actually got accomplished. 

    <h3><a name="documentation">Documentation</a></h3>

    <p>My first priority upon returning from Python10 was to get
    some documentation in place. After wasting an unfortunate
    amount of time looking at automatic documentation tools which
    don&#39;t quite work, I settled down to use Bill Kempf&#39;s
    HTML templates designed to be a boost standard. While they
    are working well, it is highly labor-intensive.

    <p>I decided to begin with the high-level reference material,
    as opposed to tutorial, narrative, or nitty-gritty details of
    the framework. It seemed more important to have a precise
    description of the way the commonly-used components work than
    to have examples in HTML (since we already have some test
    modules), and since the low-level details are much
    less-frequently needed by users it made sense for me to
    simply respond to support requests for the time being.

    <p>After completing approximately 60% of the high-level docs
    (currently checked in to libs/python/doc/v2), I found myself
    ready to start documenting the mechanisms for creating
    to-/from-python converters. This caused a dilemma: I had
    realized during the previous week that a much simpler,
    more-efficient, and easier-to-use implementation was
    possible, but I hadn&#39;t planned on implementing it right
    away, since what was already in place worked adequately. I
    had also received my first query on the C++-sig about how to
    write such a converter

    <p>Given the labor-intensive nature of documentation writing,
    I decided it would be a bad idea to document the conversion
    mechanism if I was just going to rewrite it. Often the best
    impetus for simplifying a design is the realization that
    understandably documenting its current state would be too
    difficult, and this was no exception.

    <h3><a name="conversion">Overhaul of
    <code>to_python</code>/<code>from_python</code> conversion
    mechanism</a></h3>

    <p>There were two basic realizations involved here:

    <ol>
      <li><code>to_python</code> conversion could be a one-step
      process, once an appropriate conversion function is found.
      This allows elimination of the separate indirect
      convertibility check

      <li>There are basically two categories of from_python
      conversions: those which lvalues stored within or held by
      the Python object (essentially extractions), like what
      happens when an instance of a C++ class exposed with class_
      is used as the target of a wrapped member function), and
      those in which a new rvalue gets created, as when a Python
      Float is converted to a C++
      <code>complex&lt;double&gt;</code> or a Python tuple is
      converted to a C++ <code>std::vector&lt;&gt;</code>. From
      the client side, there are two corresponding categories of
      conversion: those which demand an lvalue conversion and
      those which can accept an lvalue or an rvalue conversion.
    </ol>
    The latter realization allowed the following collapse, which
    considerably simplified things: 

    <blockquote>
      <table border="1" summary="Conversion protocol">
        <tr>
          <th>Target Type

          <th>Eligible Converters

        <tr>
          <td><code>T</code> 

          <td rowspan="5"><code>T</code> rvalue or lvalue

        <tr>
          <td><code>T const</code> 

        <tr>
          <td><code>T volatile</code> 

        <tr>
          <td><code>T const volatile</code> 

        <tr>
          <td><code>T const&amp;</code> 

        <tr>
          <td><code>T const*</code> 

          <td rowspan="9"><code>T</code> lvalue

        <tr>
          <td><code>T volatile*</code> 

        <tr>
          <td><code>T const volatile*</code> 

        <tr>
          <td><code>T&amp;</code> 

        <tr>
          <td><code>T volatile&amp;</code> 

        <tr>
          <td><code>T const volatile&amp;</code> 

        <tr>
          <td><code>T* const&amp;</code> 

        <tr>
          <td><code>T const* const&amp;</code> 

        <tr>
          <td><code>T volatile*const&amp;</code> 

        <tr>
          <td><code>T const volatile*const&amp;</code> 
      </table>
    </blockquote>
    This job included the following additional enhancements: 

    <ul>
      <li>Elimination of virtual functions, which cause object
      code bloat

      <li>Registration of a single converter function for all
      lvalue conversions, two for all rvalue conversions

      <li>Killed lots of unneeded code

      <li>Increased opacity of registry interface

      <li>Eliminated all need for decorated runtime type
      identifiers

      <li>Updated test modules to reflect new interface

      <li>Eliminated the need for users to worry about converter
      lifetime issues Additional Builtin Conversion Enhancements

      <li>Support for complex&lt;float&gt;,
      complex&lt;double&gt;, and complex&lt;long double&gt;
      conversions

      <li>Support for bool conversions

      <li>NULL pointers representable by None in Python

      <li>Support for conversion of Python classic classes to
      numeric types
    </ul>

    <h3><a name="miscellaneous">Miscellaneous</a></h3>
    These don&#39;t fit easily under a large heading: 

    <ul>
      <li>Support CallPolicies for class member functions

      <li>from_python_data.hpp: revamped type alignment
      metaprogram so that it&#39;s fast enough for KCC

      <li>classfwd.hpp header forward-declares class_&lt;T&gt;

      <li>indirect_traits.hpp:

      <li>added is_pointer_to_reference

      <li>fixed bugs

      <li>Reduced recompilation dependencies

      <li>msvc_typeinfo works around broken MS/Intel typeid()
      implementation

      <li>Many fixes and improvements to the type_traits library
      in order to work around compiler bugs and suppress warnings

      <li>Eliminated the need for explicit acquisition of
      converter registrations

      <li>Expanded constructor support to 6 arguments

      <li>Implemented generalized pointer lifetime support

      <li>Updated code generation for returning.hpp

      <li>Tracked down and fixed cycle GC bugs

      <li>Added comprehensive unit tests for destroy_reference,
      pointer_type_id, select_from_python, complex&lt;T&gt;,
      bool, and classic class instance conversions
    </ul>

    <p>Revised 
    <!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->
  13 November, 2002
  <!--webbot bot="Timestamp" endspan i-checksum="39359" -->


  <p class="c3">&copy; Copyright <a href=
  "http://www.boost.org/people/dave_abrahams.htm">Dave Abrahams</a> 2002. Distributed
  under the Boost Software License, Version 1.0. (See accompanying file
  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)</p>