Imiter Boost.Python pour OCaml
Boost.Python permet d'exporter � l'aide d'une chaine de caract�res et de l'adresse d'une fonction une fonction C++ vers Python.
Je voudrais faire pareil pour OCaml, et l� je bute justement sur cette partie.
Pour OCaml, si je veux exporter une fonction, il faut d�finir explicitement une fonction en extern "C".
Je me demandais si Boost.Python avait eu le m�me probl�me, et comment il l'avait r�solu.
Je me dis qu'avec un peu de m�ta-programmation + des macros c'est possible d'arriver � ses fins, mais en m�me temps l'�valuation des macros � lieu avant celle des classes templates, donc je me dis que c'est vou� � l'�chec.
J'ai fouill� un peu le code de Boost.Python et l'exportation d'une fonction se fait effectivement � l'aide d'une vraie fonction C++.
De m�me, j'ai cru comprendre que l'API C de Python permet de cr�er les fonctions de mani�re dynamique � l'aide fonctions libres qui prendraient en argument une structure, mais j'suis pas s�r...
-----
Comment vous auriez fait, vous ?
Il faut savoir que du c�t� d'OCaml, on importe du C uniquement des fonctions , de mani�re explicite dans le code source, en indiquant la signature, ainsi que le nom de la fonction C, et ensuite on compile en fournissant le code objet.
L� je vois que deux possibilit�s pour ne pas avoir � recourir � des choses manuelles :
- le plus facile � impl�menter : �crire un type abstrait du cot� de OCaml pour repr�senter les fonctions sous forme de n-uplets fonction * donn�e... Le truc c'est qu'il faudrait pr�voir plusieurs version de ces types en fonction de l'arit� des fonctions consid�r�es.
Plus besoin de macros, mais je crains pour les performances c�t� OCaml, et de plus il faudrait pr�voir beaucoup de fonctions auxiliaires pour rendre la manipulation facile.
- faire plut�t faire des macros qui g�n�re un extern "C" avec le code correspondant, plus toutes les classes templates n�cessaires � la surcharge du code. Pour v�rifier que le nombre d'arguments correspond bien et d'autres choses, des BOOST_STATIC_ASSERT plac�s strat�giquement peuvent largement suffire.
Ou alors vous arrivez � faire de la magie avec Boost.Preprocessor et vous me d�tes comment :mouarf:
Je remercie d'avance ceux qui m'auront lu attentivement jusqu'au bout.