Wednesday, June 19, 2013

Coding Begins...

Although coding begins officially this week, I've been doing some coding already the last couple of weeks already.  I've been writing mockups the generated bindings and working on the library code.  The library code what will provide functionality such as mapping C++ pointers to Python objects and overloading methods to the bindings.

Here's a screenshot of the first demo running on PyPy:
























The agenda for the next week is to get a second demo working that makes use of Python functions as event handlers.  Once have that demo working, I'll start on writing the generator itself.

Thursday, June 6, 2013

Introduction

So, this introduction is a little belated, but better late than never, right?

About Me

My name is Tyler Wade.  I'm a computer science major at Washburn University in Topeka, Kansas.  I will be a senior when classes start again in August and, baring any extraordinary circumstances, will graduate next Spring.  As far as I know, I'm the first student from my university to be chosen for GSoC, which is kind of cool.

About the project

Right now there isn't much support among GUI toolkits for PyPy.  Using cpyext, TKinter and (classic) wxPython work, but because of the complexity involved in emulating CPython's extension API they are buggy and the performance isn't what it could be.  So to improve this situation, this summer I will be extending wxPython Phoenix to create a set of bindings that use CFFI.

wxPython Phoenix

wxPython Phoenix is a work-in-progress rewrite of wxPython that seeks to clean up the API and, more importantly to this project improve maintainability.  It achieves this latter goal by partially automating the creation of the bindings via a set of 'etg' scripts.   The first set of scripts, called 'extractors,' collect API data from the Doxygen XML files generated from wxWidgets' header files.  This data is then processed through a set 'tweaker' scripts to make the API more pythonic.  Finally, the API information is fed to a 'generator' script that creates the actual bindings.  Currently, the only genreator script in place creates sip files.

CFFI

CFFI is a library for exposing C code to Python.  Its similar to ctypes in terms of functionality, but is higher level and has a much nicer API.  PyPy has specific optimizations for CFFI and recommends it as the preferred way to call native code from Python.

What I will be doing

I will be creating a generator script that will create the CFFI bindings.  Unfortunately, it not as simple as that sounds: more than just Python code needs to be generated.  First of all, CFFI is not meant to wrap C++ code directly, so the generator will have to create a C-callable wrapper around the C++ API.  Second, some of the functionality that is provided by sip, for example deriving Python types from C++ types, will have to be replicated.  Lastly, the tweaker scripts contain a bunch of sip and CPython specific code that will have to be modified too.

You can follow my coding progress throughout the summer at https://bitbucket.org/waedt/wxpython_cffi, though there's nothing there just yet.