[Ns-developers] Status of Python bindings
Gustavo Carneiro
gjcarneiro at gmail.com
Thu Jun 5 06:36:38 PDT 2008
2008/6/5 Tom Henderson <tomh at tomh.org>:
> Gustavo Carneiro wrote:
>
>> 2008/5/19 Gustavo Carneiro <gjcarneiro at gmail.com>:
>>
>> The PyBindGen API changes are more or less complete:
>>>
>>> https://code.launchpad.net/~gjc/pybindgen/trunk<https://code.launchpad.net/%7Egjc/pybindgen/trunk>
>>> <https://code.launchpad.net/%7Egjc/pybindgen/trunk>
>>>
>>>
>>> If nothing else comes up API-wise, next steps are:
>>>
>>> 1. Generate NS-3 API definitions as a single Python file and make it
>>> work;
>>>
>>> 2. Split the above file into several files, and support local
>>> modification
>>> files;
>>>
>>> 3. Figure out issues related to splitting python bindings into a
>>> separate
>>> repository;
>>>
>>
>>
>> === Facts ===
>>
>> We should come to a decision regarding how to deploy python bindings after
>> 3.1.
>>
>> Looking at the obtained result, I see that the ns-3-pybindgen-notracing
>> dist
>> tarball is 748 KiB, versus the no-python normal tarball which is 720 KiB.
>> That is, only 4% increase. If I also add the pybindgen source tree, the
>> total goes to 800KiB, or 11% increase. In any case, API definitions in
>> this
>> new format are much smaller than I had expected.
>>
>> === Proposal ===
>>
>> That being said, I think it will be vastly simpler and less painful if:
>>
>> 1. Python API definitions are kept in the main ns-3-dev branch;
>>
>> 2. For logistic reasons, and because pybindgen is an independent project
>> useful to other people, I would prefer to pull the pybindgen source tree
>> from a bzr branch hosted in code.launchpad.net, the same way regression
>> traces are pulled from another branch;
>>
>> 3. The released ns-3 tarballs would ship both a pybindgen tree and API
>> definitions. This means that whoever receives the tarball can:
>>
>> a) Build the python bindings easily, only needing Python (>= 2.3) with
>> Python headers as external dependency;
>>
>> b) Add extra API definitions using the simplified pybindgen API (I
>> already added support for this and an example, missing documentation
>> only).
>>
>> === Problems Likely To Occur ===
>>
>> Problems that may occur regarding python bindings are:
>>
>> 1. A user that receives the tarball hacks NS-3 away, changing APIs in the
>> process. The user will then see a compiler error message in the Python
>> bindings, which may be blocking her work;
>>
>> a) I don't see any magical solution here. Needs documentation
>> explaining to the user she needs to update the API definition or disable
>> python bindings;
>>
>> 2. A NS-3 developer changes the API (I hope this will become rare!). If
>> Python bindings are enabled, they will stop compiling and block further
>> work
>> until they are fixed. New we can decide whether Python bindings are
>> enabled
>> by default in development trees (read: branch checkout):
>>
>> a) Python bindings are enabled by default. This means that developers
>> that change existing APIs will have to fix the corresponding pybindgen API
>> definition or comment it out;
>>
>> b) Python bindings are disabled by default. This means that Python
>> bindings will often not be compilable during development periods, but most
>> developers are free from worrying about bindings. Some other developers
>> will have to do the extra work.
>> i) In this case we would need to discuss how to detect developer
>> trees vs release trees...
>>
>> Please comment.
>>
>
> I would favor 2a), and also a regression environment to find these faults
> as they occur (to the extent that we have API coverage in examples).
Sounds good.
I am thinking a combination of (additional?) regression tests coded in
python, and python unit tests, should do the trick.
>
>
> I'm guessing you will add some flag during the ./waf configure process to
> disable bindings, if needed.
Yes. The option --python-disable is already there for that. Works with waf
configure and also on a per build basis (waf configure --python-disable
remembers the option, while ./waf --python-disable only takes effect for
that build run).
>
>
> I think the rest of your proposal sounds reasonable.
I should also warn that pybindgen is emitting tons of warnings and
incomprehensible warnings, at the moment. In time, and with feedback, I can
fix the warnings to make them more useful. But this is an evolutionary
process and takes time to get right, much like ns-3 logging keeps
evolving...
--
Gustavo J. A. M. Carneiro
INESC Porto, Telecommunications and Multimedia Unit
"The universe is always one step beyond logic." -- Frank Herbert
More information about the Ns-developers
mailing list