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
C-API, SWIG, Weave, Boost ????
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
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.Maple99 hat geschrieben:Was ist es eigentlich genau was Python so viel langsamer macht als ausgelagerter C-Code?
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.
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
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:was beispielsweise an SWIG schlecher ist als daran den kompletten C-Code umzumodeln damit ich ihn als Python Modul laden kann?
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:Geht es um die Flexibilität, das ich nicht mehr 100% in der Hand habe, welcher Code entsteht?
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 denn an Waeve bzw. PyInline schlecht? Schlechtere Laufzeit aus komplettes C-Modul?
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.Maple99 hat geschrieben:Was ist es eigentlich genau was Python so viel langsamer macht als ausgelagerter C-Code?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice