From: Klaus K. <kk...@su...> - 2014-01-27 09:49:22
|
* Bob Algiers <bob...@ya...> [Jan 23. 2014 19:34]: > Swig is great. I use it at work (nvidia) to speed up perl programs. > > Swig would be even more powerful if it could call the scripting languages from c/c++. If you could normalize to c++, then you could call any of your scripting languages from any other. I would use this to provide python bindings to perl modules. Bob, Swig gives you the necessary mapping of data structures from c/c++ to the respective target language. You need to add code to load and initialize the respective target language environment. I have done this a couple of times in the past. One has to provide some additional wrapper code, but it works pretty nicely in general. https://github.com/kkaempf/cmpi-bindings implements a dynamically loadable component for a CIMOM (http://en.wikipedia.org/wiki/Web-Based_Enterprise_Management) https://github.com/kkaempf/cmpi-bindings/blob/master/src/cmpi_provider.c is the generic 'C' interface, calling language-specific functions in the respective target_xxx.c files. You can find examples for Perl, Python, and Ruby at https://github.com/kkaempf/cmpi-bindings/tree/master/src Another example is at https://github.com/Openwsman/openwsman/tree/master/src/plugins/swig implementing a dynamically loadable Ruby or Python plugin to a WS-Management server. The 'C' interface is implemented in https://github.com/Openwsman/openwsman/blob/master/src/plugins/swig/src/swig-plugin.c The Ruby interface in https://github.com/Openwsman/openwsman/blob/master/src/plugins/swig/src/target_ruby.c (Respective Ruby code in https://github.com/Openwsman/openwsman/tree/master/src/plugins/swig/ruby) and the Python interface in https://github.com/Openwsman/openwsman/blob/master/src/plugins/swig/src/target_python.c (Respective Python code in https://github.com/Openwsman/openwsman/tree/master/src/plugins/swig/python) Enjoy, Klaus -- SUSE LINUX Products GmbH, GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer, HRB 16746 (AG Nürnberg) Maxfeldstraße 5, 90409 Nürnberg, Germany |