C++/Python interfacing

Contributors

Thanks to all the people that have contributed patches, bug reports and suggestions:

  • My wife - Yulia
  • John Pallister
  • Matthias Baas
  • Allen Bierbaum
  • Lakin Wecker
  • Georgiy Dernovoy
  • Gottfried Ganssauge
  • Andy Miller
  • Martin Preisler
  • Meghana Haridev

Project name

In version 0.8.1 project has been renamed from "pyplusplus" to "Py++". There were few reasons to this:

  1. I like "Py++" more then "pyplusplus".
  2. "Py++" was the original name of the project: http://mail.python.org/pipermail/c++-sig/2005-July/009280.html
  3. Users always changed the name of the projects. I saw at least 6 different names.

Version 0.9.5

  1. Bug fixes:
    • Py++ will not expose free operators, if at least one of the classes, it works on, is not exposed. Many thanks to Meghana Haridev for reporting the bug.
  2. Added ability to completely disable warnings reporting.
  3. All logging is now done to stderr instead of stdout.
  4. Generated code improvements:
    • default_call_policies is not generated
    • return_internal_reference call policies - default arguments are not generated
    • STD containers are generated without default arguments. For example instead of std::vector< int, std::allocator< int > >, in many cases Py++ will generate std::vector< int >.
  5. create_with_signature algorithm was improved. Py++ will generate correct code in one more use case.
  1. Added ability to exclude declarations from being exposed, if they will cause compilation to fail.
  2. Starting from this version, Py++ provides a complete solution for multi-module development.
  1. Classes, which expose C arrays will be registered only once.
  2. Starting from this version, Py++ supports a code generation with different encodings.
  3. There is a new strategy to split code into files. It is IDE friendly. Be sure to read the updated documentation.

Version 0.9.0

  1. Bug fixes:
    • Declaration of virtual functions that have an exception specification with an empty throw was fixed. Now the exception specification is generated properly. Many thanks to Martin Preisler for reporting the bug.
  1. Added exposing of copy constructor, operator= and operator<<.
    • operator= is exposed under "assign" name
    • operator<< is exposed under "__str__" name
  1. Added new call policies:
  1. Added an initial support for multi-module development. Now you can mark your declarations as already_exposed and Py++ will do the rest. For more information read multi-module development guide.
  1. input_c_buffer - new functions transformation, which allows to pass a Python sequence to function, instead of pair of arguments: pointer to buffer and size.
  1. Added ability to control generated "include" directives. Now you can ask Py++ to include a header file, when it generates code for some declaration. For more information refers to inserting code guide.
  1. Code generation improvements: system header files ( Boost.Python or Py++ defined ) will be included from the generated files only in case the generated code depends on them.
  1. Performance improvements: Py++ runs 1.5 - 2 times faster, than the previous one.
  1. Added ability to add code before overridden and default function calls. For more information refer to member function API documentation.
  1. Py++ will generate documentation for automatically constructed properties. For more information refer to properties guide
  1. Added iteration functionality to Boost.Python Indexing Suite V2 std::map and std::multimap containers.

Version 0.8.5

  1. Added Function Transformation feature.
  1. "Py++" introduces new functionality, which allows you to control messages and warnings: how to disable warnings? .
  1. Added new algorithm, which controls the registration order of the functions. See registration order document
  1. New "Py++" defined return_pointee_value call policy was introduced.
  1. Support for opaque types was added. Read more about this feature here.
  1. It is possible to configure "Py++" to generate faster ( compilation time ) code for indexing suite version 2. See API documentation.
  2. The algorithm, which finds all class properties was improved. It provides user with a better way to control properties creation. A property that would hide another exposed declaration will not be registered\created.
  3. Work around for "custom smart pointer as member variable" Boost.Python bug was introduced.
  4. Bugs fixes and documentation improvement.

Version 0.8.2

  1. Interface changes:
    • module_builder.module_builder_t.build_code_creator method: argument create_casting_constructor was removed and deprecation warning was introduced.
  2. Performance improvements. In some cases you can get x10 performance boost. Many thanks to Allen Bierbaum! Saving and reusing results of different pygccxml algorithms and type traits functions achieved this.
  3. Convenience API for registering exception translator was introduced.
  4. Py++ can generate code that uses BOOST_PYTHON_FUNCTION_OVERLOADS and BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS macros.
  5. Treatment to previously generated and no more in-use files was added. By default Py++ will delete these files, but of course you can redefine this behaviour.
  6. Generated code changes:
    • default_call_policies should not be generated any more.
    • For functions that have return_value_policy< return_opaque_pointer > call policy, Py++ will automatically generate BOOST_PYTHON_OPAQUE_SPECIALIZED_TYPE_ID macro. Thank you very much for Gottfried Ganssauge for this idea.
  7. Support for Boost.Python properties was introduced. Py++ implements small algorithm, that will automatically discover properties, base on naming conventions.
  8. decl_wrappers.class_t has new function: is_wrapper_needed. This function explains why Py++ creates class wrapper for exposed class.
  9. Python type traits module was introduce. Today it contains only single function:
    • is_immutable - returns True if exposed type is Python immutable type

Version 0.8.1

  1. Georgiy Dernovoy contributed a patch, which allows Py++ GUI to save\load last used header file.
  2. Py++ improved a lot functionality related to providing feedback to user:
    • every package has its own logger
    • only important user messages are written to stdout
    • user messages are clear
  3. Support for Boost.Python indexing suite version 2 was implemented.
  4. Every code creator class took parent argument in __init__ method. This argument was removed. adopt_creator and remove_creator will setunset reference to parent.
  5. Generated code for member and free functions was changed. This changed was introduced to fix compilation errors on msvc 7.1 compiler.
  6. Py++ generates "stable" code. If header files were not changed, Py++ will not change any file.
  7. Support for huge classes was added. Py++ is able to split registration code for the class to multiple cpp files.
  8. User code could be added almost anywhere, without use of low level API.
  9. Generated source files include only header files you passes as an argument to module builder.
  10. Bug fixes.
  11. Documentation was improved..

Version 0.8.0

  1. Py++ "user guide" functionality has been improved. Now Py++ can answer few questions:
    • why this declaration could not be exported
    • why this function could not be overridden from Python
  2. Py++ can suggest an alias for exported classes.
  3. Small redesign has been done - now it is much easier to understand and maintain code creators, which creates code for C++ functions.
  4. Exception specification is taken into account, when Py++ exports member functions.
  5. Member variables, that are pointers exported correctly.
  6. Added experimental support for vector_indexing_suite.
  7. Bug fixes.

Version 0.7.0

Many thanks to Matthias Baas and Allen Bierbaum! They contributed so much to Py++, especially Matthias:

  • New high-level API: Py++ has simple and powerful API
  • Documentation: Matthias and Allen added a lot of documentation strings
  • Bug fixes and performance improvements
  1. New GUI features:

    • It is possible now to see XML generated by GCC-XML.
    • It is possible to use GUI as wizard. It will help you to start with Py++, by generating Py++ code.
  2. Attention - non backward compatible change.

    module_creator.creator_t.__init__ method has been changed. decls argument could be interpreted as

    • list of all declaration to be exported
    • list of top-level declarations. creator_t should export all declarations recursively.

    In order to clarify the use of decls argument new argument recursive has been added. By default new value of recursive is False.

    Guide for users/upgraders: if use are exporting all declaration without filtering, you should set recursive argument to True. If you use pygccxml.declarations.filtering.* functions, you have nothing to do.

    Sorry for the inconvenience :-(.

  3. Better split of extension module to files. From now next declarations will have dedicated file:

    • named enumerations, defined within namespace
    • unnamed enumerations and global variables
    • free functions

    This functionality will keep the number of instantiated templates within one file, main.cpp, to be very low. Also it is possible to implement solution, where main.cpp file does not contain templates instantiations at all.

  4. Only constant casting operators could be used with implicitly_convertible. This bug has been fixed.

  5. Bug exporting non copyable class has been fixed.

  6. Small bug fix - from now file with identical content will not be overwritten.

  7. Boost.Python optional is now supported and used when a constructor has a a default argument.

  8. Py++ now generates correct code for hierarchy of abstract classes:

    struct abstract1{
        virtual void do_smth() = 0;
    }
    
    struct abstract2 : public abstract1{
        virtual void do_smth_else() = 0;
    }
    
    struct concrete : public abstract2{
        virtual void do_smth(){};
        virtual void do_smth_else(){};
    }
    
  9. Logging functionality has been added

  10. New packages module_builder, decl_wrappers and _logging_ has been added.

  11. ...

http://boost.org/libs/python/doc/v2/init.html#optional-spec

Version 0.6.0

  1. Code repository has been introduced. This repository contains classes and functions that will help users to export different C++ classes and declarations. Right now this repository contains two classes:

    • array_1_t
    • const_array_1_t

    Those classes helps to export static, single dimension arrays.

  2. Code generation has been improved.

  3. Code generation speed has been improved.

  4. If you have Niall Douglas void* patch, then you can enjoy from automatically set call policies.

  5. Bit fields can be accessed from Python

  6. Creating custom code creator example has been added.

  7. Comparison to Pyste has been wrote.

  8. Using this version it is possible to export most of TnFOX Python bindings.

Version 0.5.1

  1. operator() is now supported.
  2. Special casting operators are renamed( __int__, __str__, ... ).
  3. Few bug fixes


Valid HTML 4.01 Transitional Valid CSS! SourceForge.net Logo