Interfaçage C et Python

Il est possible d’utiliser du code C dans un programme Python (et inversement). Cela permet de réutiliser des bibliothèques existantes, mais aussi d’obtenir de bien meilleures performances, en implémentant les calculs complexes en langage C. Les questions ci-dessous visent à comparer les temps de calcul en langages C et Python, ainsi que la mise en oeuvre en langage C, d’un module Python. L’exercice s’appuie sur le calcul de la suite de Fibonacci:

\[\begin{align*} F_0 & = 0\\ F_1 & = 1\\ F_n & = F_{n-1} + F_{n-2} \text{ si } n\ge 2\\ \end{align*}\]
  1. Écrire un script Python fibonacci.py qui prend un entier n en ligne de commande et affiche $F_n$.
  2. Écrire un programme C fibonacci.c qui prend également un entier n en ligne de commande et affiche $F_n$.
  3. Comparer les temps d’exécution des deux programmes pour des valeurs croissantes de n (débuter avec n=10, puis des valeurs de 5 en 5).
  4. En suivant ce tutoriel, programmer:
    • dans le fichier fibmodule.c, la fonction C définie dans le fichier fibonacci.c, ainsi que les fonctions et structures de données nécessaires à la définition du module fib
    • dans le fichier setup.py, les définitions nécessaires à la compilation du module avec distutils.
  5. Importer le module fib dans l’interface REPL python, et vérifier son bon fonctionnement. Comparer les temps de calcul du module fib avec votre programme C et votre script python.