Seite 1 von 1

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

Verfasst: Samstag 13. September 2014, 09:25
von glocke
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

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

Verfasst: Samstag 13. September 2014, 10:23
von MagBen
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.

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

Verfasst: Samstag 13. September 2014, 10:27
von MagBen
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.

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

Verfasst: Samstag 13. September 2014, 11:57
von 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?

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

Verfasst: Samstag 13. September 2014, 14:06
von glocke
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.

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

Verfasst: Samstag 13. September 2014, 14:42
von Hyperion
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 ;-)