C-API, SWIG, Weave, Boost ????

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Maple99
User
Beiträge: 44
Registriert: Montag 14. September 2009, 18:08

Hi,

kann mir jemand sagen was beispielsweise an SWIG schlecher ist als daran den kompletten C-Code umzumodeln damit ich ihn als Python Modul laden kann? Geht es um die Flexibilität, das ich nicht mehr 100% in der Hand habe, welcher Code entsteht? Was ist denn an Waeve bzw. PyInline schlecht? Schlechtere Laufzeit aus komplettes C-Modul?
Als zentrale Frage vielleicht. Was ist es eigentlich genau was Python so viel langsamer macht als ausgelagerter C-Code? Hat jemand da vielleicht ein paar Infos für mich oder einen Link mit Detailinfos? In der Python-Documentation bin ich nicht wirklich fündig geworden.

Gruß

Sascha
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Maple99 hat geschrieben:Was ist es eigentlich genau was Python so viel langsamer macht als ausgelagerter C-Code?
Naja ganz platt formuliert wird der C-Code eben direkt in Maschinencode kompiliert und kann dann vom Prozessor direkt verarbeitet werden. Schneller geht es also nicht.

Python-Code wird eben in einen speziellen Byte-Code umgewandelt, der von einem Programm interpretiert wird. Dieser Interpreter braucht natürlich wieder intern mehrere Schritte, bis eine Python-Byte-Code-Anweisung abgearbeitet ist. Das dauert natürlich länger als wenn der Prozessor direkt diese Anweisungen durchführen würde.

Für tiefere Infos gibts afaik im wiki etwas in den FAQs.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Maple99 hat geschrieben:was beispielsweise an SWIG schlecher ist als daran den kompletten C-Code umzumodeln damit ich ihn als Python Modul laden kann?
Du musst den Code nicht ummodeln, es reicht wenn du die API implementierst. An SWIG ist auch nichts per-se schlecht, außer dass es in der Vergangenheit damit öfter Probleme gab und dass es heutzutage niemand mehr nutzt.
Maple99 hat geschrieben:Geht es um die Flexibilität, das ich nicht mehr 100% in der Hand habe, welcher Code entsteht?
Nein, bei SWIG sehe ich eher die durch SWIG verursachten Limitierungen und Bugs als Hauptgrund. Ich würde auch wenn dann lieber Cython einsetzen, da viel besser Maintained und einfacher zu nutzen. So verfährt etwa lxml und das Binding zu libxml2/libxslt ist *richtig gut*, das muss man Martin Faassen und Stefan Behnel schon lassen.
Maple99 hat geschrieben:Was ist denn an Waeve bzw. PyInline schlecht? Schlechtere Laufzeit aus komplettes C-Modul?
Also ich hätte fürchterlich ungerne Inline-C in meinem Python-Code. Einfach weil es unsauber wirkt und wieder so eine "hacky"-Lösung ist.
Maple99 hat geschrieben:Was ist es eigentlich genau was Python so viel langsamer macht als ausgelagerter C-Code?
Neben dem was genannt wurde, macht auch C nichts hinter den Kollisen. Gar nichts. In Python gibt es hinter jeder Ecke einen Dict-Lookup, wo wieder Hashing verwendet wird etc. In C ist das oftmals ein Zugriff auf eine Speicheradresse, das geht natürlich wesentlich schneller.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten