swig? Boost::Python? Cython? Wann nimmt man was?

Python in C/C++ embedden, C-Module, ctypes, Cython, SWIG, SIP etc sind hier richtig.
Antworten
glocke
User
Beiträge: 66
Registriert: Mittwoch 23. Februar 2011, 21:18

Hi,

in den letzten Tagen habe ich begonnen mich mit den Möglichkeiten, C/C++ Code in Python zu verwenden, zu beschäftigen. Dabei bin ich auf swig, Boost::Python und Cython gestoßen. Nun frage ich mich, wann ich was verwenden sollte - oder wo die Vor- und Nachteile einzelner Möglichkeiten liegen.
Was ich bisher weiß: mit swig kann ich auch Bindings für andere Sprachen als Python erzeugen. Vllt. könnt ihr mir helfen insgesamt einen besseren Durchblick zu bekommen.

Hintergrund: Ich überlege ein einfaches 2D Spiel zu schreiben. Dazu hatte ich überlegt kritische Programmteile der Engine (Rendering, Pathfinding etc.) in C/C++ (konkret: mittels swig/Boost::Python/Cython) zu schreiben und mit Python-Code schließlich die Teile "zusammenzukleben" und damit die eigentliche Logik zu schreiben.

LG Glocke
Benutzeravatar
MagBen
User
Beiträge: 799
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

Ich arbeite sehr viel mit swig. swig macht sehr wenig Probleme. Du programmierst Deine Klassen in C++ und brauchst swig nur zu sagen welche Klassen gewrappt werden sollen und das wars. Wenn swig irgendetwas nicht versteht, dann wird es einfach weggelassen oder durchgereicht, d.h. Du brauchst den C++ Code nicht extra für swig aufzubereiten.
Bei Templates und Vererbungshierarchien musst Du noch jeweils eine extra Zeile in der Konfigurationsdatei spendieren.

Cython ist gut für Leute die nur Python aber kein C++ können.

Boost::Python macht das von Hand Programmieren der Python C++ Verbindung komfortabel. Aber im Gegensatz zu swig programmierst Du die Verbindung selbst und es von swig machen zu lassen ist noch komfortabler.

Wenn Du Python, PyQt zusammen mit C++, Qt einsetzen möchtest (z.B. wegen der OSG-3D Grafik), dann geht das nur mit sip. Das Tool ist extrem anstrengend.
a fool with a tool is still a fool, www.magben.de, YouTube
Benutzeravatar
MagBen
User
Beiträge: 799
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

glocke hat geschrieben:Dazu hatte ich überlegt kritische Programmteile der Engine (Rendering, Pathfinding etc.) in C/C++ (konkret: mittels swig/Boost::Python/Cython) zu schreiben und mit Python-Code schließlich die Teile "zusammenzukleben" und damit die eigentliche Logik zu schreiben.
Genau diese Infrastruktur ist übrigens in Blender schon fertig implementiert. Du konstruierst Deine 3D Welt in Blender und programmierst die Logik mit Python. Es geht sogar rein grafisch mit Aktionsdiagrammen ohne Python-Code.
a fool with a tool is still a fool, www.magben.de, YouTube
BlackJack

@glocke: Die übliche Anmerkung an der Stelle: C und C++ sind zwei verschiedene Sprachen. Was meinst Du also wenn Du sagst Du willst etwas in C/C++ schreiben?
glocke
User
Beiträge: 66
Registriert: Mittwoch 23. Februar 2011, 21:18

BlackJack hat geschrieben:Was meinst Du also wenn Du sagst Du willst etwas in C/C++ schreiben?
Dass ich mich da nicht festlegen will, aber zu C++ tendiere.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

glocke hat geschrieben: Dass ich mich da nicht festlegen will, aber zu C++ tendiere.
Davon hängt aber ab, *welche* Technologie man für die Integration in Python nutzen kann oder sollte ;-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Antworten