Mal wieder ein paar grundlegende Fragen.
Ich wollte ein kleines Script schreiben, das mir Dateien erzeugt mit denen andere Programme Atom- und Molekülorbitale plotten können. Im Endeffekt heißt das, die Ergebnisse mehrerer Funktionen mit wechselnden Parametern für eine Anzahl von Punkten im Raum zu berechnen. Das ganze muss recht oft gemacht werden, realistische Werte sind dabei z.B. 1000 Funktionen * 10000 Molekülgeometrien * 100*100*100 Raumpunkte = 10.000.000.000.000 (verrückt - wenn man das so sieht, kann man sich gar nicht vorstellen, dass es überhaupt funktioniert^^) und ich dachte, vielleicht wäre das der richtige Punkt meine Perlkenntnisse dahingehend zu erweitern, mir anzugucken, wie ich C++ in meinem Code nutzen kann. Bevor ich jetzt aber anfang damit rumzuwerkeln: Lohnt es sich überhaupt? V.a. wenn man mit einbezieht, dass meine Programmierkenntnisse in C++ eher beschränkt sind (das ganze umzusetzen ginge sicher, aber was effizientes Programmieren angeht, müsste ich wohl oft raten, was gut und was schlecht ist - andererseits ist das jetzt auch nichts, wo man viel rumtricksen kann, sich über irgendwelche Speicherallokation und sonstiges Gedanken machen muss, sondern im Endeffekt nur ein paar verschachtelte for-Schleifen und stures Rechnen).
Generell gibt es, so weit ich das rausbekommen hab drei Möglichkeiten Perl und C++ zu kombinieren. Eine C++-Library einzubinden (XS, oder was ich grad irgendwo gelesen hab SWIG), Inline::C (da weiß ich nichtmal genau, ob C++ funktioniert), sowie Perl in C einzubetten, was aber für mich nicht richtig in Frage kommt, dazu ist der Unterschied in meiner Sprachbewandheit zu groß (womit ich sicher nichts absolutes sagen will!^^).
Wenn ich es richtig verstehe, gibt es wiederum drei Gründe, warum eine Scriptsprache wie Perl langsamer ist, als z.B. C:
- 1. Ich muss beim Programmstart den Code jedesmal erst interpretieren. - Wohl eher nur bei langem und/oder sehr oft ausgeführtem Code wichtig. Hier sicherlich nicht.
- 2. Die Compiler optimieren den Code besser. (Zum einen, weil sie wohl älter und selbst weiter optimiert sind, zum anderen, weil man beim Interpreter aus Zeitgründen vermutlich auf sehr starke Optimierung verzichtet.) - Ob der Interpreter allerdings bei eher einfachen Sachen, wie for-Schleifen wirklich schlechter ist, weiß ich nicht.
- 3. Ein bisschen mit 2. zusammenhängend, aber aus anderen Gründen: Man hat viel festere Vorgaben, was Variablen etc. zur Laufzeit angeht. D.h. der Compiler muss nicht erst schauen, ob da jetzt ein String, oder ein Integer steht und kann so von vorne herein wesentlich mehr optimieren. - Hier dürfte wohl der große Unterschied liegen, bei einem Beispiel wie dem meinen.
Bezogen auf die beiden verbleibenden Möglichkeiten heißt das doch, PerlXS böte mir alle drei Vorteile (zumindest, was den C++-Part angeht), während ein C::Inline nur den dritten hat (dafür aber etwas simpler einzubauen ist, so wie ich das gesehen hab).
Stimmt das alles so? Und würdet ihr mir dazu raten, oder meint ihr, dass das am Ende doch gar nicht so viel ausmacht?
Last edited: 2011-07-26 12:17:03 +0200 (CEST)