Python *zur Laufzeit* mit C-Code erweitern

Stellt hier eure Projekte vor.
Internetseiten, Skripte, und alles andere bzgl. Python.
joerg
User
Beiträge: 188
Registriert: Samstag 17. August 2002, 17:48
Wohnort: Berlin
Kontaktdaten:

Python *zur Laufzeit* mit C-Code erweitern

Beitragvon joerg » Donnerstag 19. Juni 2003, 16:20

Hallo,
ich habe gerade angefangen, Python und
tcc (Tiny C Compiler - http://fabrice.bellard.free.fr/tcc/ ) zu verheiraten.
Konkret gibt es ein (rudimentäres) Modul, um den Compiler anzusteuern.

Es ist schon möglich, einen Python-String direkt im Arbeitsspeicher kompilieren, zum laufenden Interpreter linken zu lassen, und Funktionen daraus aufzurufen, und das alles wahnsinnig schnell. ;-)

Ein Beispiel:

Code: Alles auswählen

import tcc

cCode = """
#include "Python.h"
PyObject *mySum(PyObject *seq) {
  double s = 0.0;
  int i, j = PySequence_Length(seq);
  for (i = 0; i < j; i++)
    s += PyFloat_AsDouble(PySequence_GetItem(seq, i));
  return Py_BuildValue("d", s);
}

PyObject *myProd(PyObject *seq) {
  double s = 1.0;
  int i, j = PySequence_Length(seq);
  for (i = 0; i < j; i++)
    s *= PyFloat_AsDouble(PySequence_GetItem(seq, i));
  return Py_BuildValue("d", s);
}
"""

s = tcc.TccState()
s.addIncludePath('/usr/include/python2.2')
s.compileString(cCode)
s.relocate()

x = [float(i) for i in range(1, 10)]

# Gibt 45 und 3628800 :-)
print s.runSimpleFunction('mySum', x), s.runSimpleFunction('myProd', x)

(Der C-Code dient nur zur Anschauung, da fehlt z.B. die Fehlerbehandlung).

Der Nachteil: Läuft nur auf Linux/x86 (wegen tcc).

Weiterentwicklung je nach Zeit und Lust (und Bedarf).

Jörg
Benutzeravatar
Beyond
User
Beiträge: 227
Registriert: Freitag 6. September 2002, 19:06
Kontaktdaten:

Beitragvon Beyond » Donnerstag 19. Juni 2003, 22:49

Cool

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder