[Ns-developers] NS-3 PyBindGen again
Mathieu Lacage
mathieu.lacage at sophia.inria.fr
Sun Jan 6 23:57:10 PST 2008
On Sun, 2008-01-06 at 23:51 +0000, Gustavo Carneiro wrote:
> Hello again.
>
> Good news: I have finally wrapped NS-3 Simulator::Schedule* and most
> concrete callbacks (Callback<T1,T2, ...>). It is not uploaded yet because
A really cool extension to this would be something like what I
implemented in yans: a way to avoid going c++ -> python -> c++ when c++
calls a callback which happens to be a c++ callback but wrapped in
python. The way I implemented this was through the following function:
def make_callback(function, *args):
try:
if inspect.ismethod (function):
name = "_yans." + function.im_class.__name__ + "_" +
function.__name__ + "_callback_tag"
command = name + '(args[0])';
else:
name = "_yans." + method.__name__ + "_callback_tag"
command = name + '()'
holder = eval (command)
except:
if len(args) == 0:
holder = MyPyFunctionHolder (function)
elif len(args) > 1:
holder = MyPyFunctionHolder (function, *args)
else:
holder = _yans.FunctionHolder (function, args[0])
return holder
which attempted to delegate the creation of the callback first to a c++
function whose name was based on the name of the function to create a
callback for. If the delegation failed, it would use a simpler
python-based functor.
The result was c++ -> c++ rather than the more expensive c++ -> python
-> c++.
> of transient mercurial server problems, but if anyone is impatient just
> checkout the normal gjc/ns-3-pybindgen branch and apply this bundle:
> http://telecom.inescporto.pt/~gjc/ns-3-pybindgen.bundle
>
> Notably missing is the support for parameters of type CallbackBase. This
> is used mainly for tracing. But I do not find it that much useful for
> Python (tracing with Python callbacks will surely slow down simulations
> considerably), so I'd rather not work on it for now. I'm sure there are
> many APIs still missing; they will require more manual work, but I belive
> most methods are being supported, at least for scritping kind of work. For
> protocol implementation I am not so sure.
Do you have an idea on how this could be implemented ? If so, could you
outline briefly how you think it could be done ?
> The Python API is very similar to the C++ one. For example, the script
> below is a port of samples/main-simple.cc to Python.
>
> The generated source file is currently about 2.4MB, 68k lines. Although I
> would love to be able to split this single source file into several smaller
> files, some day.
>
> So what are the next steps? First I think the NS-3 team needs to decide
> whether to adopt this solution. I certainly hope so, or else I wasted a ton
> of effort :P
>
> Next, how would it be best integrated with NS-3? I can see several
> degrees of integration:
>
> 1. Make python bindings generation mandatory, require gccxml (currently
> from CVS only, unfortunately), pygccxml, and pybindgen, from everybody;
how about detecting automatically if these tools are available and
attempt to build the bindings if they are. If the tools are not there,
do nothing ?
> 2. Ship with NS-3 a pregenerated ns3module.cc file;
This makes sense for release tarballs so, it would be nice to integrate
this in the distcheck target.
>
> a) And add a --pybindgen waf option to re-generate the file (just in
> case someone decides to modify the API and make the bindings stop compiling)
> ?
let's make this automatic and rebuild the bindings if the tools to do so
are available.
>
> b) Add the ns3module.cc to the repository also, for developers? I
> would adivse against it, though, as the file is rather large...
I don't care very much about the size of the file but I think that if
you are an ns-3 developer, and you need to use the bindings, it is
pretty reasonable to ask you to install the tools to re-generate the
ns3module.cc file. i.e., don't push the ns3module.cc file into the repo.
> If no major problems are found, I would envision start of python bindings
> since the NS-3 release in mid February.
I think that this would be pretty cool.
regards,
Mathieu
More information about the Ns-developers
mailing list