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
swig? Boost::Python? Cython? Wann nimmt man was?
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.
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.
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.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.
@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?
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Davon hängt aber ab, *welche* Technologie man für die Integration in Python nutzen kann oder sollteglocke hat geschrieben: Dass ich mich da nicht festlegen will, aber zu C++ tendiere.

encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert