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 Nachteil: Läuft nur auf Linux/x86 (wegen tcc).
Weiterentwicklung je nach Zeit und Lust (und Bedarf).
Jörg