un gioco di parole tra il nome dell' ideatore del linguaggio C++ Bjarne Stroustrup ed il fumetto Sturmtruppen.
Poi ho scoperto l'esistenza di un una libreria C++ che rende il confronto tra i due linguaggi una pura speculazione filosofica.
Sto parlando di Boost.Python, che e' una delle componenti che appartengono alla collezione di librerie C++ Boost :
tramite Boost.Python e' possibile realizzare in maniera quasi immediata dei moduli di estensione Python scritti in C++.
Rispetto ad altri metodi per la realizzazione di moduli di estensione di Pyhon, come ad esempio SWIG o SIP, Boost.Python ha una serie di vantaggi:
- permette in modo molto semplice e veloce l' implementazione di estensioni Python generando automaticamente i necessari wrapper per del codice C++ a partire da una descrizione (apparentemente) sommaria dei metodi e degli attributi delle classi wrappate;
- tale descrizione, pur essendo del codice C++ perfettamente valido, risulta essere estremamente leggibile (e quindi facilmente generabile e modificabile anche manualmente) oltre ad essere stilisticamente simile piu' ad un frammento di programma Python che non C++;
- la tipica realizzazione della descrizione di una classe e' sostanzialmente identica all' interfaccia della classe C++;
- consente di wrappare in maniera semplice librerie C++ le cui API sono basate sull'utilizzo di smart pointers (in particolare l' integrazione con quelli messi a disposizione da Boost e' praticamente banale).
Boost.Python puo' essere anche considerato come una valida alternativa all' uso di CTypes, che spesso si rivela una libreria il cui utilizzo e' piu' complicato di quello che puo' sembrare in un primo momento, nella creazione di classi wrapper di DLL che espongono API in C/C++.
Il segreto che sta alla base della semplicita' di utilizzo di Boost.Python sta nell'utilizzo di una tecnica avanzata di programmazione C++ che va' sotto il nome di Template Metaprogramming, che consiste, sostanzialmente, nello sfruttare le funzionalita' messe a disposizione dai Template, ovvero il mezzo con cui il C++ supporta la programmazione generica, per ottenere un interprete funzionale che opera a tempo di compilazione.
La cosa e' talmente interessante che ho deciso di approfondire l'argomento comprandomi il libro C++ Template Metaprogramming , anche perche' uno dei due autori, David Abrahams, e' il programmatore che ha realizzato Boost.Python.
L' unico problema di Boost.Python che mi sembra degno di nota e' quello di una scarsa integrazione tra le eccezioni del C++ e quelle del Python:
ogni volta che una eccezione viene generata da un modulo di espansione scritto in C++, se non si e' provveduto a creare un handler specifico, il programma Python riceve un generico messaggio di "Unidentifiable C++ Exception" generato dall' handler di default.
Post a comment