[C++-sig] Re: BPL embedding tutorial updated.
Dirk Gerrits
dirk at gerrits.homeip.net
Sat Mar 1 20:51:11 CET 2003
Bjorn Pettersen wrote:
>>From: Dirk Gerrits [mailto:dirk at gerrits.homeip.net]
>>
>>I've made some changes to my Boost.Python tutorial on embedding.
>
> [...]
>
>>If you find any errors or have any suggestions, I'd love to hear from
>
> you.
>
> Great work! A minor nit though, embedding doesn't require static
> libraries (you can even mix and match), static libs does make
> distribution easier.
I was unaware. If you have some specific changes to suggest to the
tutorial, please do! They will probably be too late for the 1.30.0
release though, I'm afraid.
> Am I to assume that there will eventually be e.g. (apologies for the
> incorrect syntax, I assume you get the idea):
>
> object py::import::AddModule(std::string const& name);
> dict py::module::GetDict(object moduleObj);
> object py::RunExpr(std::string const& code, dict globals, dict
> locals);
> object py::RunStmt(std::string const& code, dict globals, dict
> locals);
> object py::RunStmts(std::string const& code, dict globals, dict
> locals);
>
> or is there even thought about wrapping more of the Python object types,
> like e.g.:
>
> module mainModule = py::import::AddModule("__main__");
> dict mainDict = mainModule.getDict();
> interpreter interp(mainDict, mainDict); // globals, locals
> object res = interp.runExpr(std::string const& code);
>
> etc.
>
> Either way would be quite cool IMHO :-) If you allready have a design
> in mind, you should make it available in case someone has time to help
> you <wink>.
There has been some discussion on a python::interpreter class. Nothing
has really been decided, but I think it would look something like this:
namespace boost { namespace python {
class interpreter
{
interpreter();
interpreter(int argc, char* argv[]);
~interpreter();
void exec(char const* statements);
void exec(char const* statements, dict& globals, dict& locals);
object eval(char const* expression);
object eval(char const* expression, dict& globals, dict& locals);
dict& main_namespace();
object* main_module();
};
}} // namespace boost::python
The call
i.exec/eval(statements)
would be the same as the call
i.exec/eval(statements, i.main_namespace(), i.main_namespace())
But I must stress here that this is 'email client code' not 'IDE source
editor code'. Also, as I said above, nothing has been agreed on, this is
still open for discussion.
Regards,
Dirk Gerrits
More information about the Cplusplus-sig
mailing list