Outils pour utilisateurs

Outils du site


perl:integration_avec_les_autres_langages_xs

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
perl:integration_avec_les_autres_langages_xs [2009/03/15 01:14] rootperl:integration_avec_les_autres_langages_xs [2013/03/13 11:14] (Version actuelle) – [h2xs] root
Ligne 1: Ligne 1:
 +====== Intégration avec divers langages ======
 +
 +
 Références : Références :
   * //man perlxstut//   * //man perlxstut//
Ligne 26: Ligne 29:
 **XS** désigne une suite d'outils et d'interfaces permettant d'étendre l'interpréteur Perl avec des bibliothèques existantes en C (ou langage "compatible" comme le C++). Le principe est le suivant : **XS** désigne une suite d'outils et d'interfaces permettant d'étendre l'interpréteur Perl avec des bibliothèques existantes en C (ou langage "compatible" comme le C++). Le principe est le suivant :
   * vous possédez une interface C, normalement sous la forme d'un ou plusieurs fichiers //.h// contenant des prototypes de fonctions, ex :   * vous possédez une interface C, normalement sous la forme d'un ou plusieurs fichiers //.h// contenant des prototypes de fonctions, ex :
 +<code c>
   void hello();   void hello();
   int somme(int a, int b);   int somme(int a, int b);
   float moyenne(int nb, int* valeurs);   float moyenne(int nb, int* valeurs);
 +</code>
  
   * vous désirez produire une interface Perl équivalente. Perl n'ayant pas de prototypes de fonctions à proprement parler, nous imaginons que les fonctions se comporteraient comme si elles avaient été déclarées ainsi :   * vous désirez produire une interface Perl équivalente. Perl n'ayant pas de prototypes de fonctions à proprement parler, nous imaginons que les fonctions se comporteraient comme si elles avaient été déclarées ainsi :
 +<code perl>
   sub hello { ... };   sub hello { ... };
   sub somme { my($a, $b) = @_; ...; return $val; }   sub somme { my($a, $b) = @_; ...; return $val; }
   sub moyenne { my(@valeurs) = @_; ...; return $val; }   sub moyenne { my(@valeurs) = @_; ...; return $val; }
 +</code>
   * vous voulez vous assurer que le passage de Perl à C (pour l'appel de la fonction), puis de C à Perl (retour de la fonction) se passe comme vous l'attendez   * vous voulez vous assurer que le passage de Perl à C (pour l'appel de la fonction), puis de C à Perl (retour de la fonction) se passe comme vous l'attendez
   * enfin vous voulez produire un module Perl qui se charge d'intégrer votre extension dans l'interpréteur de la manière la plus transparente possible, comme pour un module Perl: //use MyModule;//   * enfin vous voulez produire un module Perl qui se charge d'intégrer votre extension dans l'interpréteur de la manière la plus transparente possible, comme pour un module Perl: //use MyModule;//
- 
 ===== h2xs ===== ===== h2xs =====
  
 L'outil principal qui va nous aider à mener à bien cette tâche est //h2xs//. Comme son nom l'indique, il consomme des fichiers d'interface C (extension //.h//) et produit - entre autres - un fichier d'interfaçage //.xs//. Celui-ci ressemble beaucoup à un fichier C, mais avec des macros particulières : L'outil principal qui va nous aider à mener à bien cette tâche est //h2xs//. Comme son nom l'indique, il consomme des fichiers d'interface C (extension //.h//) et produit - entre autres - un fichier d'interfaçage //.xs//. Celui-ci ressemble beaucoup à un fichier C, mais avec des macros particulières :
 +<code c>
   #include "EXTERN.h"   #include "EXTERN.h"
   #include "perl.h"   #include "perl.h"
Ligne 54: Ligne 59:
   CODE:   CODE:
   printf("Hello world !\n");   printf("Hello world !\n");
 +</code>
  
 De fait, il peut être compilé via la procédure standard de distribution des modules Perl : De fait, il peut être compilé via la procédure standard de distribution des modules Perl :
Ligne 62: Ligne 68:
   * un module Perl qui déclare les symboles (fonctions, variables, etc) fournis par le module natif   * un module Perl qui déclare les symboles (fonctions, variables, etc) fournis par le module natif
   * un module **natif** qui est une DLL qui sera chargée dynamiquement et étendra l'interpréteur Perl au moment où le module sera utilisé par le programme   * un module **natif** qui est une DLL qui sera chargée dynamiquement et étendra l'interpréteur Perl au moment où le module sera utilisé par le programme
- 
 ====== 3. In bed with Perl ====== ====== 3. In bed with Perl ======
  
perl/integration_avec_les_autres_langages_xs.1237079680.txt.gz · Dernière modification : 2009/03/15 01:14 de root