[an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] (none) [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] (none) [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive]
 
[an error occurred while processing this directive] [an error occurred while processing this directive]
Skåne Sjælland Linux User Group - http://www.sslug.dk Home   Subscribe   Mail Archive   Forum   Calendar   Search
MhonArc Date: [Date Prev] [Date Index] [Date Next]   Thread: [Date Prev] [Thread Index] [Date Next]   MhonArc
 

Re: [CPROG] c++ og java eller python på mange platforme med autoconf og automake???



"Marc Cromme" <sslug@sslug> writes:

> Jeg har erfaring med C++ og automake/autoconf, det virker jo som en drøm,
> også på Windows (Hurra for Cygwin - gør din windoze tålelig!). Nu har jeg 
> set at der er også autotools understyttelse til Python og Java, men det 
> har jeg ikke prøvet endnu.

Python's distributionsmekanisme er "distutils". Med disse kan man
skrive et Python script som kan kompilere/installere ens Python modul
på en fremmed maskine med de rigtige flag/compiler etc. osv. Denne
information gemmes i en "setup.py" fil og brugeren kører "python 
setup.py install" for at compilere/installere pakken. Et trivielt
eksempel:

from distutils.core import setup, Extension
setup(name = "results", version = "1.0",
    ext_modules = [Extension("results", ["results.c"])])

Denne kompilerer og installerer en resultsmodule.so med kode fra
results.c. Dette kan naturligvis også bruges hvis dit Python modul er
faktisk Python kode og ikke en udvidelse, eller en blanding.


> Ideen er at skrive det meste i Java eller Python for udvilingshastighedens
> skyld, og kun at skrive de kritiske dele i C++. Mulighederne er , som jeg
> ser det:

Jeg har brugt boost::python til at interface noget C++ kode (~1000
linier) med eksisterende ~10,000 linier Python kode. De ~1000 linier
var en omskrivning af 100 liniers Python kode som er for
beregningsmæssigt tungt til at køre effektivt under Python (det gav en
ca. 50x hastighedsforbedring).

boost::python er IMHO simplere end de andre systemet til embedding af
C/C++ kode i Python. Fx ser min kode ud således:

BOOST_PYTHON_MODULE(cResults)
{
    class_<Question,boost::noncopyable>("Question", no_init)
        .def("getData", &Question::getData)
        .def("getSV", &Question::getSVC)
        ;
    
    class_<Results>("Results")
        .def("init", &Results::init)
        .def("load", &Results::load)
        .def("__getitem__", &Results::get, return_value_policy<reference_existing_object>());
}


som erklærer C++ klasser Question og Results som tilgængelige fir
Python. boost::python tager sig at at generere wrapper funktioner til
dem, så en funktion som denne:

Question* Results::get(int qn) {
    return itsQuestions[qn];
}


kan kaldes fra Python med et heltals-objekt som omformes til en C++
int, og returnerer en pointer til en C++ klasse som omformes til et
Python object (return_value_policy fortæller boost::python at den er
stadig C++ modulet der ejer objektet).

Der er naturligvis også andre måde at interface C/C++ kode med Python
på: SWIG, SIP, Pyrex og ctypes er vist de mest populære af dem.


-- 
===============================================================
<sslug@sslug>                           Herlev, Denmark     
<URL:http://www.andreasen.org/>                             <*>   
===============================================================



 
Home   Subscribe   Mail Archive   Index   Calendar   Search

 
 
Questions about the web-pages to <www_admin>. Last modified 2005-08-10, 20:09 CEST [an error occurred while processing this directive]
This page is maintained by [an error occurred while processing this directive]MHonArc [an error occurred while processing this directive] # [an error occurred while processing this directive] *