C/C++ vs Python

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
jana79
User
Beiträge: 10
Registriert: Dienstag 28. Februar 2006, 10:28

Hhm, naja, wenn er meint.
Ich hab mir einmal die Sache mit dem Einwickeln von Code mit Swig angesehen und da schon die Krise an einem kleinen Beispiel gekriegt.
Wenn ich richtig proggen koennte, wuerd ich mir aber auch die Zeit nehmen, den Prototypen wegschmeissen und alles neu machen.
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

Wenn ich richtig proggen koennte, wuerd ich mir aber auch die Zeit nehmen, den Prototypen wegschmeissen und alles neu machen.
Was Blödsinn ist.

Wenn Du ein funktionierendes Programm in Python hast, warum willst Du das Programm neu schreiben? Die Idee hinter der Auslagerung von Teilen nach C ist eben dass man für einige/manche Dinge auf Python verzichtet um Geschwindigkeit zu bekommen, für den meißten Rest aber bei der VHL-Sprache Python bleibt um die Entwicklungsvorteile (sowohl in Entwicklungsgeschwindigkeit als auch in Debugbarkeit) und alles was damit verbunden ist zu bekommen.

Du mußt bedenken was passiert wenn Du prinzipiell alles neu implementierst:

1) Einen Python-Prototyp schreiben
2) Den debuggen
3) Ein C-Programm schreiben
4) Das Debuggen

4 >> 2, und 3 >> 1, im Normalfall, sprich die Zeit die Du in diesem Fall für das Programm brauchst ist durch 4+3 determiniert.

Jetzt überleg Dir das Du folgendes machst:

1) Einen Python-Prototyp schreiben
2) Den debuggen
5) Performancekritische Dinge nach C auslagern
6) die Debuggen

Da Du nicht ein vollständiges Programm nach C auslagerst, sondern nur Programmteile (einzelne Algorithmen die in C schneller sind), ist die Zeit im Endeffekt bei dieser Art der Entwicklung durch 1+2 determiniert.

Wie ich bereits schon vorher gesagt hab ist 4 >> 2, 3 >> 1, also ist vor allen Dingen auch 4+3 >> 2+1, sprich wenn Du so entwickelst wie ich im zweiten Beispiel angegeben hab wirst Du schneller Resultate sehen als wenn Du einfach alles neu entwickelst, und hast gleichzeitig noch die Vorteile die eine VHL-Sprache bei der Entwicklung im allgemeinen bringt.
--- Heiko.
BlackJack

jana79 hat geschrieben:Warum ich allerdings persoenlich auch der Meinung bin, mein weniges :cry: cpp-wissen trotzdem weiter zu pflegen is nicht nur, dass dazu ein ganzes framework auf Arbeit existiert,
- sondern va. dass die Fehlerausschriften genauer sind
Hm? Was meinst Du damit denn? Das Du Template-Fehlermeldungen verständlicher findest als Python-Tracebacks?
- krieg schneller bei Typfehlern Antwort
Die bekommst Du in Python auch sofort wenn Du die Tests laufen lässt. Andererseits schweigt ein C(++) Übersetzer wenn alle Typen stimmen, was aber nichts darüber aussagt ob die auch korrekt implementiert sind. Testen musst Du also sowieso.
- gcc/gdb sind einstellbar
Es gibt den `pdb` und die meisten Python-IDEs haben einen graphischen Debugger. Braucht man aber nicht unbedingt weil die Tracebacks und ein paar ``print`` Befehle einen Debugger fast überflüssig machen.
Python 47
User
Beiträge: 574
Registriert: Samstag 17. September 2005, 21:04

So Leute,

ich hab mich nochmal kundig gemacht und werde wahrscheinlich D lernen!

Vergleich von D zu C und C++:

http://www.digitalmars.com/d/comparison.html

Dieser Test sagt dann wohl alles! :wink:
mfg

Thomas :-)
BlackJack

Python Master 47 hat geschrieben:C++ ist die Weiterentwicklung von C, d.h alles was C kann, kann C++ auch, aber C++ kann noch viel mehr als C.Ich würde also C++ lernen und dann hätte ich ja schon einen großen teil von C mit drin!Dann müsste ich nur noch einen kleinen Teil C lernen und könnte dann beides!Ist das so richtig?
IMHO nein. C++ unterscheidet sich in der Programmierung sehr stark von C. Man geht an die Umsetzung eines Programms sehr unterschiedlich heran. In "richtigem" C++ ist sehr wenig bis gar kein Code der von einem reinen C Compiler übersetzt werden kann, also kann man, wenn man C++ gelernt hat, nicht automatisch gut in C programmieren.
BlackJack

jana79 hat geschrieben:Hhm, naja, wenn er meint.
Ich hab mir einmal die Sache mit dem Einwickeln von Code mit Swig angesehen und da schon die Krise an einem kleinen Beispiel gekriegt.
Swig finde ich auch nicht so toll. Wenn etwas zu langsam ist dann würde ich erstmal psyco versuchen, also nichts Programmieren sondern einen JIT-Compiler auf die Problemzonen loslassen.

Wenn das nicht ausreicht, dann ist der nächste Schritt die kritischen Teile in Pyrex zu programmieren.

Sollte das immer noh nicht reichen dann würde ich eine dynamische Bibliothek in C schreiben und die mit ctypes anbinden.
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

Python Master 47 hat geschrieben:ich hab mich nochmal kundig gemacht und werde wahrscheinlich D lernen!

Vergleich von D zu C und C++:

http://www.digitalmars.com/d/comparison.html

Dieser Test sagt dann wohl alles! :wink:
Warum ist dieser Test für dich ausschlaggebend? Ich hab auch nicht Python gelernt weil es die und die Features hat, sondern weil es einfach Spass macht mit dieser zu programmieren.
Ich muss in der Schule mit Java programmieren, was mir überhaupt nicht gefällt, weil ich finde dass es einfach zu mühsam ist mit Java etwas zu programmieren.

Es kommt mir überhaupt nicht auf die Features an, welche eine Sprache bietet. Wenn es sein muss programmier ich auch C++, ist halt einfach ein wenig syntaktisch umdenken und sich wieder um alles zu kümmern müssen. :? (und C++ steht im nächsten Semester auf dem Stundenplan :( )

Aber wenn man das Programmierdenken mal drauf hat, kommt es nicht gross auf die Sprache an und mit Python steht einem die Sprache am wenigsten im wege dieses Denken anzueignen.

Gruss
Benutzeravatar
Gunnar
User
Beiträge: 68
Registriert: Samstag 23. Oktober 2004, 08:59

jana79 hat geschrieben:
Gunnar hat geschrieben:...und das Python-Prototyping wird nach der Portierung einiger Klassen nach C quasi sofort zu Productioncode :wink:
und was heisst das jetzt? ... sind irgendwie ziemlich viele Schlagwoerter dabei, also sags mal auf deutsch in verstaendlichen Saetzen, bitte ...
Hallo Jana,

so schlimme Schlagwörter sind es eigentlich nicht. Wenn du dich mehr mit Programmieren auseinandersetzen willst möchte ich dir "Code Complete 2" von Steve McConnell ans Herz legen. In dem Buch steht eine Menge ( ich behaupte sogar : fast alles ) was man dazu wissen will. Es ist sehr verständlich geschrieben, allerdings weiss ich nicht wie es da bei der deutschen Übersetzung aussieht. Ich habe es damals auf englisch gelesen.

Gruss,
Gunnar
Clython
User
Beiträge: 151
Registriert: Samstag 21. August 2004, 13:58
Wohnort: Schweiz, BE-2500

Also ich werde nächstens mal ANSI C lernen. Warum?

1. Ein Standard, der auf jeder Maschine laufen sollte, was man von C++ nicht gerade behaupten kann
2. Python ist in ANSI C programmiert
3. Der Linux Kernel auch?

Für alles andere kann man Python nehmen...
Kompottkin
User
Beiträge: 21
Registriert: Sonntag 26. Februar 2006, 03:09
Wohnort: Penzberg
Kontaktdaten:

Clython hat geschrieben:Für alles andere kann man Python nehmen...
Wenn Du ein wirklich guter Programmierer werden möchtest, dann solltest Du auch Sprachen lernen, die ganz andere Paradigmen unterstützen, als Du gewohnt bist. Man muß eine Sprache nicht unbedingt direkt praktisch nutzen können, um von ihr zu profitieren.

C zu können, ist sicherlich nicht schlecht. Dabei lernt man doch einiges über Speichermanagement. Wenn Du von C dann genug hast, kannst Du Dir mal solche Sprachen wie Smalltalk (Extrem-OOP), Scheme (minimalistisch-funktional, schönes Fundament zum Entwurf eigener Sprachen) und Haskell (rein funktional und für einen typischen C-/Python-/Java-Programmierer sehr gewöhnungsbedürftig) ansehen.

Ich habe mit diesen Sprachen (vor allem Haskell) jedenfalls eine Menge Spaß :)
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Clython hat geschrieben:1. Ein Standard, der auf jeder Maschine laufen sollte, was man von C++ nicht gerade behaupten kann
C++ wurde inzwischen auch standardisiert (ISO C++).

Und C++ gibt es eigentlich für alle moderenen Systeme.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Ich denke es war so gemeint, das C++ Programme nicht direkt unter Windows und Linux läuft, so wie es bei Python der Fall ist :D

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Buell
User
Beiträge: 90
Registriert: Samstag 29. Oktober 2005, 14:17

Also zu dem Thema muss ich auch mal meinen Senf loswerden.

1. Python ist eine Scriptsprache und überhaupt nicht mit C++ vergleichbar.
2. Python ist eine sehr gute Möglichkeit etwas schnell zu entwickeln, aber die Umsetzung erfolgt dann eben doch in C++ oder Java - warum wohl...
3. Ich habe hier des öfteren gelesen, dass Python alles kann was C oder C++ auch kann, halte ich für absolut falsch. Das Eventhandling und MessageSending zwischen verschiedenen Threads ist in Python fast unmöglich, wenn dies auch noch zwischen mehreren Modulen geschehen soll.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Buell hat geschrieben:2. Python ist eine sehr gute Möglichkeit etwas schnell zu entwickeln, aber die Umsetzung erfolgt dann eben doch in C++ oder Java - warum wohl...
Du hast wohl http://www.python-forum.de/viewtopic.php?p=32500#32500 nicht gelesen, oder?

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

Ich habe hier des öfteren gelesen, dass Python alles kann was C oder C++ auch kann, halte ich für absolut falsch. Das Eventhandling und MessageSending zwischen verschiedenen Threads ist in Python fast unmöglich, wenn dies auch noch zwischen mehreren Modulen geschehen soll.
Huh? Programmierst Du Python? Wenn ja, dann weißt Du eigentlich dass es eine ganze Menge Datentypen gibt die in Python hierfür geeignet sind...

Bevor Du solche inflammatorischen Aussagen machst ist es vielleicht einfach am besten wenn Du ganz explizit sagst dass Du Python nicht als vollwertige Sprache siehst, dann weiß jeder was von Deiner Meinung zu halten ist im Vergleich mit seiner (nämlich wenn er eben Python auch nicht als Vollwertige Sprache sieht, oder es eben doch tut).

Und nein, das letzte ist nicht böse gemeint.
--- Heiko.
Python 47
User
Beiträge: 574
Registriert: Samstag 17. September 2005, 21:04

Meinst du mit dem "er" zufällig mich?????

Wenn ja dann kann ich nur folgendes sagen:

Natürlich sehe ich Python als eine vollwertige Sprache an!Und es macht auch richtig spaß in Python zu programmieren, aber ich denke, dass es nicht schaden kann, wenn man mehr als eine Sprache kann!Du kannst ja auch viel
mehr Sprachen als Python!Auch wenn ich C/C++ kann, werde ich hauptsächlich noch in Python programmieren!
mfg

Thomas :-)
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

Hi

Fühl dich nicht immer angesprochen, ich glaube er bezieht sich einfach auf die Allgemeinheit und nicht eine bestimmte Person :)

Gruss
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Und ich glaube Buell war gemeint :wink:

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

Und ich glaube Buell war gemeint
Jo, allerdings. Zumal ich in meinem Post keinerlei Bezug auf einen "er" genommen habe, sondern nur auf das Zitat.

Es ging mir schlicht und ergreifend darum dass man sehr mit Vorsicht genießen muß wenn jemand sowas sagt wie Buell in
Ich habe hier des öfteren gelesen, dass Python alles kann was C oder C++ auch kann, halte ich für absolut falsch.
Das ist nämlich, egal aus welcher Sicht gesehen, eine Aussage die in dieser Form
  • 1) In Ihrer Allgemeinheit nicht stimmt
    2) Völlig unzureichend begründet ist
    3) Sehr inflammatorisch geschrieben, also eher einem Troll zuzuordnen als einem Menschen der jemanden anderes über die Vorzüge oder Nachteile einer Programmiersprache (besser gesagt, ihrer Implementierung) geben will
Darum gings mir im Endeffekt. Wenn jemand genau wie Buell der Meinung ist dass Python eine Sprache (nur) für das Prototyping ist, und eben nicht die "Vollständigkeit" hat die eine Programmiersprache (in der Allgemeinheit) seiner Meinung nach auszeichnet, ist es besser, wenn er genau diese Tatsache (nämlich dass es seine Meinung, und im besonderen seine Erfahrung, bzw. seine fehlende Erfahrung in der Python-Programmierung) zusammen mit seinem Post schreibt, so dass jeder weiß, was er von dieser Meinung zu halten hat. Zum Beispiel hätte es genügt wenn er anstatt seines Posts geschrieben hätte: "Ich habe in Python bisher zum Beispiel vergeblich probiert direktes Message-Passing zu benutzen wie man es in C++ meißtens mit Threads benutzt, aber ich weiß dass es auch andere Datentypen für den Austausch von Nachrichten zwischen Threads gibt, nur will ich die hier nicht verwenden, weil für mich blöd." Oder so was. Es ist nicht okay, wenn er eben eine solche Allgemeinaussage trifft, dann aber eben seinen Rahmen nicht einschränkt.

Das war im Endeffekt was ich mit der Aussage sagen wollte. Und warum das "nicht böse gemeint?" Buell hat in gewissen Dingen recht, nämlich gibts ja in Python das GIL, was einen anderen Programmierstil verlangt/benötigt als wenn ich in C/C++ mit Threads arbeite, das bedeutet eben auch soviel wie dass eben die Thread-Programmierung mit ganz anderen primitives auskommt als das zum Beispiel in C/C++ der Fall ist (nämlich zum Beispiel Queues zum Message-Passing zwischen Threads). Welches der beiden Modelle "toller" oder "besser", oder sogar nur "leicher zu verstehen" ist, ist eine philosophische Frage: in Python gibts aber sehr wohl ein Modell um das zu machen was Buell will, auch wenn's eben nicht direkt Nachrichten zwischen Threads sind sondern eine etwas allgemeinere Form des Datenaustauschs über einen geteilten Speicherbereich, nämlich die Queue.

Und: "Python Master 47," fühl Dich nicht angegriffen wegen etwas was ich erstens nicht zu Dir, und zweitens auch gar nicht mehr so wirklich im Rahmen dieses Threads gesagt habe. ;-)
--- Heiko.
Python 47
User
Beiträge: 574
Registriert: Samstag 17. September 2005, 21:04

modelnine hat geschrieben:Und: "Python Master 47," fühl Dich nicht angegriffen wegen etwas was ich erstens nicht zu Dir, und zweitens auch gar nicht mehr so wirklich im Rahmen dieses Threads gesagt habe. ;-)
Ok werd es mir merken! :wink:
mfg

Thomas :-)
Antworten