guter Stil bei C-Erweiterungen

18/09/2008 - 20:16 von Thomas Rachel | Report spam
Hallo,

ich beschàftige mich derzeit mit der Erstellungen für C-Erweiterungen
für Python. Jetzt gibt es da zwei Ansàtze:


1. Die nachzumodellierende C-Bibliothek wird 1:1 in Modulmethoden
umgesetzt. Dieses .so-Modul wird aber irgendwo in ein Package
eingebuddelt, eventuelle Pointer werden in ein CObject eingepackt. Um
das "pythonmàßige" Verpacken in Klassen etc. kümmert sich ein anderes
Modul, das dann verwendet werden soll. Die Konstanten werden ebenfalls
in ein Python-Modul verpackt.

Beispiel: MySQLdb, bindet _mysql.so ein.
Vorteil: weiger Implementierungsaufwand auf C-Seite
Nachteil: ein "böswilliger" Python-Programmierer kann mir u.U. meinen
Prozeß mit einem Segfault abschmieren lassen, indem er z.B. verschiedene
CObjects mischt oder so.


2. Das Modul wird gleich "richtig" gebaut, jedes Handle der zu
modellierenden Bibliothek wird direkt in ein Objekt reingebaut, welches
dann auch gleich Methoden mitbringt, mit denen auf die Resource
zugegriffen werden kann.

Vorteil: alles in einem, kompakter
Nachteil: mehr Aufwand C-seitig

Beispiel: fàllt mir grad keins ein. Doch, halt: dl.so.


Was ist besserer Stil?

TIA, Thomas
 

Lesen sie die antworten

#1 Diez B. Roggisch
18/09/2008 - 21:08 | Warnen spam
Thomas Rachel schrieb:
Hallo,

ich beschàftige mich derzeit mit der Erstellungen für C-Erweiterungen
für Python. Jetzt gibt es da zwei Ansàtze:


1. Die nachzumodellierende C-Bibliothek wird 1:1 in Modulmethoden
umgesetzt. Dieses .so-Modul wird aber irgendwo in ein Package
eingebuddelt, eventuelle Pointer werden in ein CObject eingepackt. Um
das "pythonmàßige" Verpacken in Klassen etc. kümmert sich ein anderes
Modul, das dann verwendet werden soll. Die Konstanten werden ebenfalls
in ein Python-Modul verpackt.

Beispiel: MySQLdb, bindet _mysql.so ein.
Vorteil: weiger Implementierungsaufwand auf C-Seite
Nachteil: ein "böswilliger" Python-Programmierer kann mir u.U. meinen
Prozeß mit einem Segfault abschmieren lassen, indem er z.B. verschiedene
CObjects mischt oder so.


2. Das Modul wird gleich "richtig" gebaut, jedes Handle der zu
modellierenden Bibliothek wird direkt in ein Objekt reingebaut, welches
dann auch gleich Methoden mitbringt, mit denen auf die Resource
zugegriffen werden kann.

Vorteil: alles in einem, kompakter
Nachteil: mehr Aufwand C-seitig

Beispiel: fàllt mir grad keins ein. Doch, halt: dl.so.



Was heisst "dl.so"?

Ich wuerde etwas anderes machen: ctypes verwenden, die bibliothek
wrappen, und dann bei Bedarf Python-OO-modellierung darueber legen.

Diez

Ähnliche fragen