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.
Benutzeravatar
jens
Moderator
Beiträge: 8483
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Sonntag 12. März 2006, 15:20

Clython hat geschrieben:
jens hat geschrieben:Das man mit Python selber keine DLLs schreiben kann, dürfte wohl klar sein.
Das Problem dürfte sich eigentlich mit Ironpython auch erledigt haben, oder :?:
Oder evtl. mit http://wiki.python.de/PyPy :D

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
alohahe
User
Beiträge: 2
Registriert: Sonntag 22. Mai 2005, 13:50

Dienstag 11. April 2006, 10:49

Python Master 47 hat geschrieben:So Leute,

Dieser Test sagt dann wohl alles! :wink:
Der Test sagt gar nichts.

Eine sprache ist nicht dann besser wenn sie mehr features hat. Sonst könnte ich auch ein Auto entwickeln das eine fritöse, eine microwelle eine Waschmaschiene und einen Trockner mit einbaut und es auf einer "Vergleichsseite" mit Mercedes vergleichen und mein Auto als besser darstehen lassen ;)

*ich liebe einfach die autovergleiche :D *

Wenn ich weiter hinein gehe sehe ich z.b: http://www.digitalmars.com/d/declaration.html#alias

Nun sie sehen es als Vorteil das D typ aliase zu erstellen. Ich sehe das als kompletten nachteil. Code wird komplett unleserlich wenn mann es erlaubt das ein int datentyp ein alias auf etwas komplexeres ist.


Resizeable arrays
Part of the standard library for C++ implements resizeable arrays, however, they are not part of the core language. A conforming freestanding implementation of C++ (C++98 17.4.1.3) does not need to provide these libraries.

Nun C#, C++, Java bringen alle Dinge wie java.util.ArrayList mit. C# nennt die Klasse ebenso ArrayList, bei C++ finden sich die Listen ebenso in der std.
Um beim beispiel in Java zu bleiben. Ich habe die Möglichkeit mir eine
ArrayList<MyClass> x; zu erstellen welche dynamisch ist. Oder aber ich kann mir ein MyClass[] x; Array erstellen.
Ganz klar ist das ein Array performanter ist, da dem Programmierer obliegt sich darum zu kümmern das noch platz da ist. Sprich mit dem Array kann ich sehr lowlevel arbeiten. Wenn ich der meinung bin ich bräuchte ein Array das sich dynamisch vergrössert, und bin gewillt die geringere Performance zu akzeptieren nehm ich die ArrayList.
Was mach ich unter D?
Ich nehme immer ein dynamisches Array und muss immer mit den performance einbußen leben, auch wenn ich weiss das ich nur max 10 Objecte darin speichern werde und nie die dynamic ausnutze.

Nach deiner Logic dürfte es auch kein Python geben, da mann bei viel mehr "Features" ein Grünen Kasten unter Perl machen könnte ;)
Die vielen Möglichkeiten in Perl etwas zu tun sind aber nach der meinung vieler genau der Grund weshalb sie sich nie auf Perl einlassen wollen.
Ich bin sogar der Meinung das mann sowenige Möglichkeiten in eine Sprache einbauen sollte wie möglich ohne die Funktionalität einer Sprache einzuschränken.
Die Komplexität in der Programmierung wird schon jetzt durch viele Formate, Protokolle, Systeme hochgetrieben, eine Sprache mit verschiedenen Arten zu programmieren soll da einen nicht noch weitere Steine in den Weg werfen.
Ich mag Python gerade deshalb weil ich schnell auch fremden Code lesen kann da sich die Art und Weise wie er geschrieben wurde nicht von meiner Unterscheidet.
Benutzeravatar
Toni83
User
Beiträge: 125
Registriert: Donnerstag 28. Juli 2005, 10:53

Dienstag 11. April 2006, 20:14

Eine interessante Gegenüberstellung von gängigen Programmiersprachen wie Python, Perl, Java und C++ findet man auf folgender Seite:

http://furryland.org/~mikec/bench/

Ich habe schon selber in C/C++ programmiert und ich kann nur sagen, dass Python wirklich Balsam auf der Seele eines Programmierers ist. Besonders die Klammersetzung und die Setzung des Semikolon ... ein Grauen bei C/C++. :? Da bleib ich doch lieber bei Python...
Wenn du von Python aus, C oder C++ lernen willst, rate ich Dir mit C++ anzufangen, allein der Möglichkeiten wegen. So bietet C++ mehere Datentypen, sowie auch die Möglichkeit der objektorientierten Programmierung (Klassen, Vererbungen, Assoziationen, Kompositionen,...). Außerdem die Möglichkeit von virtuellen Funktionen, Überladen von Operatoren,...

Gruss,
Toni
Python 47
User
Beiträge: 574
Registriert: Samstag 17. September 2005, 21:04

Dienstag 11. April 2006, 20:44

Ja werd ich auch so machen!

Ehrlich gesagt, gefällt mir Python auch besser, hab mir mal n paar C/C++ Codes angeschaut und die Syntax ist im Vergleich zu Python grausam!
mfg

Thomas :-)
Benutzeravatar
jens
Moderator
Beiträge: 8483
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Mittwoch 12. April 2006, 06:24

Toni83 hat geschrieben:Besonders die Klammersetzung und die Setzung des Semikolon ... ein Grauen bei C/C++. :?
Das hab ja auch einige andere Sprachen... Was ich aber nicht verstehen kann ist warum? Für mich sind das uralte Relikte aus vergangenen Zeiten ;) Wobei Basic das auch nicht hatte. Python mit seiner Einrückung ist IMHO die beste Lösung zur bildung von Blöcken :lol:

Es wäre doch auch denkbar, eine Zwischenschicht in C++ und Co. einzufügen! So das man Blöcke, wie bei Python einrücken kann und man Semikolon nur dann braucht, wenn man mehrere Befehle in einer Zeile haben will. Die Zwischenschicht übersetzt das dann wieder in die dolle Klammersetzung der original Sprache, bevor der Compiler angeworfen wird... Sowas wie ein precompile ;) Das alles könnte man wahrcheinlich recht schnell in Python implementieren, denke ich... Warum ist da noch keine auf die Idee gekommen? Oder gibt es sowas schon?

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

Mittwoch 12. April 2006, 07:23

Humm... Das was Du vorschlägst ist durchaus möglich, bloß hat Klammersetzung als Block-Delimiter auch noch andere Konsequenzen, wie zum Beispiel dass Blöcke sehr einfach geschachtelt werden können, auch in Ausdrücken, siehe da in Python das lambda-"Krüppelkonstrukt."

Python hat eigene Wege entwickelt um mit den Limitierungen die eine einrückungsbasierte Grammatik mit sich bringt umzugehen (siehe zum Beispiel Guido's vorschlag keine unbenannten Blöcke mehr zuzulassen, sondern nur noch def()s), und ich wage zu bezweifeln dass man so eine Grammatik ohne Einschränkungen für den gängigen C++-Funktionsumfang aufstellen könnte. Sprich: wenn man probiert die Python Grammatik auf C++ abzubilden ginge das schon, bloß verliert man dann sehr viel von dem was C++ auszeichnet.
--- Heiko.
BlackJack

Mittwoch 12. April 2006, 07:50

Die Syntax von C++ ist einfach zu "verworren". Zum Beispiel kann die Platzierung eines Semikolons darüber entscheiden ob etwas eine Deklaration oder eine Definition ist.

Nur um nochmal eine andere Meinung in den Ring zu werfen: Ich würde von Python ausgehend erst einmal C lernen. C++ kann durch seine Komplexität sehr schnell frustrierend werden, während C, genau wie Python, eine syntaktisch und semantisch eher schlichte und einfache Programmiersprache ist.
abgdf

Sonntag 16. April 2006, 20:02

Jetzt wollte ich wissen, was ich mit C/C++ machen kann, was in Python nicht geht!
Alles, wofür man in Python externe systemnahe Module benötigt, die aber noch nicht geschrieben sind.

Die Vorteile von C/C++ sehe ich darin, daß man nicht überall einen Interpreter oder Teile davon rumschleppen muß, sondern Standalone-Anwendungen produziert, die auch noch schön schnell sind.
Außerdem sind Windows und Linux in C/C++, meist wohl nur in C, geschrieben, ebenso die meisten Standardanwendungen.
C/C++ ist also die Sprache der Profis, die jedenfalls der zahlende Anwender erwartet.
Wenn es nur nicht so elendig schwer / unpraktisch wäre.
Hier schon mal ein gutes Buch zu C (vom Autor online gestellt, kostet auf Papier 44,95 EUR):

http://courses.iicm.edu/the_c_book/CD-ROM/

Also, ich versuche mit C weiterzukommen, das Problem ist nur, für die kleinen Sachen, die ich so programmiere (z.B. Berechnungen zur Buchführung), genügen Python, bzw. Perl und liefern schnell sehr brauchbare Ergebnisse.
Python/Perl sind in C geschrieben. Es handelt sich also gewissermaßen um Aufsätze auf C/C++, die einem um den Preis geringerer Geschwindigkeit und Systemnähe, die Programmierung erleichtern.
Bitte sieh Dir einmal diesen Artikel über Perl an, der entsprechend auch für Python gelten dürfte:

http://www.perl.com/pub/a/2001/06/27/ctoperl.html

Im Prinzip verführen Perl und Python einen also, seiner Bequemlichkeit nachzugeben.
Leider machen sie das sehr gekonnt und mit guten Ergebnissen.
Aber C/C++ sind trotz allem eigentlich "the real thing".

Viele Grüße
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

Sonntag 16. April 2006, 20:43

Aber C/C++ sind trotz allem eigentlich "the real thing".
Das ist eine (ziemlich undifferenzierte) Meinung, keine Tatsache.

Ich könnte, wenn ich wollte, mal wieder einen Beitrag dazu schreiben warum das (nicht nur) aus meiner Sicht höchstgradiger Unsinn ist eine Sprache als "the real thing" zu bezeichnen (und dazu noch zu sagen dass ein Anwender C/C++ erwartet, dem ist das völlig schnurz worin sein Programm geschrieben ist, hauptsache es tut das was er will), aber ich hab heute abend keinen Bock mehr dazu. Vielleicht kann ja der Poster mal nach Beiträgen von mir in diesem Thread suchen, und dann seine Meinung etwas differenzierter darlegen.
--- Heiko.
abgdf

Montag 17. April 2006, 01:38

und dazu noch zu sagen dass ein Anwender C/C++ erwartet, dem ist das völlig schnurz worin sein Programm geschrieben ist, hauptsache es tut das was er will
Das dürfte interessant werden, wenn man dann mal eine Anwendung schreibt, die man verkaufen möchte:

Anwender: "Wo ist setup.exe ?"
Entwickler: "Das Programm ist in Python geschrieben. Du mußt den Python-Interpreter installieren, das sind nur > 20 MB."
Anwender: "Interpreter ? Für ein 200 K-Skript ? Mach ich nicht. Gib mir setup.exe !"
Entwickler: "Na gut. Ich pack Dir das in einer ausführbaren Datei zusammen."
ActiveState: "Moment. Da habe ich auch noch ein Wörtchen mitzureden."
Py2exe-Entwickler: "Ich auch." (So jedenfalls bei Perl (Perl2exe ist nicht frei)).
Python-Entwickler: "Soso, Du willst Geld auf der Grundlage unserer jahrelangen freien Interpreter-Entwicklung machen ? Schäm Dich was."
Anwender: "Wieso sehen die Fenster so komisch aus ?"
Entwickler: "Ich hab Tk benutzt."
Anwender: "Tk ? Kenn ich nicht. Braucht man nicht. Windows liefert doch Fenster mit."
Entwickler: "Ja schon. Aber wirklich flexibel könnte man die nur über die Windows-C-API ansprechen."
Anwender: "Programmfunktion xy funktioniert nicht immer richtig."
Entwickler: "Ähh, das liegt an Zusatzmodul z. Über das habe ich nicht wirklich die Kontrolle. Ich spreche es nur an."
Anwender: "Und warum reagiert das alles so langsam. Warum benutzt du kein C ?"
Entwickler: "Weil ich meinen Speicher nicht selbst verwalten kann, bzw. will."
Anwender: "Dann lern das erstmal, bevor ich Geld bezahle."

So ähnlich erging es mir jedenfalls mit meinen kleinen Perl-Entwicklungen, die unter anderem aus diesen Gründen frei sind.

Gruß
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Montag 17. April 2006, 07:39

Hi abgdf!

Alles was ich jetzt schreibe, gilt nur für Windows. Unter Linux sieht die Sache teilweise anders aus.
abgdf hat geschrieben:Anwender: "Wo ist setup.exe ?"
Das stimmt. Die Anwender wollen ein Setup. Ist ja auch verständlich, da nicht jeder weiß wie man ins Startmenü eine Verknüpfung legt oder einfach nur zu faul dafür ist. Ich liefere schon lange kein Programm mehr ohne Setup aus. Alleine schon weil ein Setup professioneller aussieht. Das Setup ist zum Glück keine große Hexerei mehr. Mit InnoSetup ist das in wenigen Minuten erledigt.
abgdf hat geschrieben:Entwickler: "Du mußt den Python-Interpreter installieren, das sind nur > 20 MB." [...] "Na gut. Ich pack Dir das in einer ausführbaren Datei zusammen."
Entweder man erledigt das mit dem Setup oder man macht das Skript direkt ausführbar. Das Installieren des Interpreters und eventuell noch zusätzlicher Module -- das sieht der Anwender nicht ein. Einzig mit der Begründung, dass ansonsten das Programm viel teurer werden würde, da sich der Programmieraufwand erhöht, kommt man weiter. Aber wer will sich denn ständig verteidigen müssen... Also wie schon geschrieben --> ein Setup muss sein, wenn man professionell wirken möchte.
abgdf hat geschrieben:Entwickler: "Ich hab Tk benutzt."
Das kann man aber wirklich keinem Windows-Benutzer zumuten. Ich verwende Tkinter-Programme unter Windows nur dann, wenn es wirklich nicht anders geht. Tk sieht einfach nur sch.... aus.
abgdf hat geschrieben:Anwender: "Programmfunktion xy funktioniert nicht immer richtig." [...] "Ähh, das liegt an Zusatzmodul z. Über das habe ich nicht wirklich die Kontrolle. Ich spreche es nur an."
Dein Fehler. Das Programm muss funktionieren und es lag in deiner Verantwortung, ob du dieses Zusatzmodul verwendest oder nicht. Einzige Außnahme: Wenn der Kunde dich zu diesem Zusatzmodul gedrängt hat. Aber auch dann musst du den Kunden noch vor oder während der Entwicklung auf etwaige Fehler aufmerksam machen. Wenn ein Kunde zum Tischler geht und einen Kasten haben möchte, der aus 5 mm Fichtenholz gefertigt sein soll, dann **muß** der Tischler dem Kunden mitteilen, dass dieser Kasten nicht stabil sein wird. Hinweispflicht! Erst wenn der Kunde trotzdem 5 mm Fichtenholz verlangt, dann kann der Tischler ohne mögliche rechtliche Folgen den Auftrag annehmen. So ist es auch in der Softwareentwicklung.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
BlackJack

Montag 17. April 2006, 07:44

abgdf hat geschrieben:
und dazu noch zu sagen dass ein Anwender C/C++ erwartet, dem ist das völlig schnurz worin sein Programm geschrieben ist, hauptsache es tut das was er will
Das dürfte interessant werden, wenn man dann mal eine Anwendung schreibt, die man verkaufen möchte:

Anwender: "Wo ist setup.exe ?"
Entwickler: "Das Programm ist in Python geschrieben. Du mußt den Python-Interpreter installieren, das sind nur > 20 MB."
Anwender: "Interpreter ? Für ein 200 K-Skript ? Mach ich nicht. Gib mir setup.exe !"
Entwickler: "Na gut. Ich pack Dir das in einer ausführbaren Datei zusammen."
ActiveState: "Moment. Da habe ich auch noch ein Wörtchen mitzureden."
Py2exe-Entwickler: "Ich auch." (So jedenfalls bei Perl (Perl2exe ist nicht frei)).
Python-Entwickler: "Soso, Du willst Geld auf der Grundlage unserer jahrelangen freien Interpreter-Entwicklung machen ? Schäm Dich was."
Es ging nicht um Perl sondern um Python. Informier Dich doch bitte vorher über die entsprechenden Python-Tools und deren Lizenzbedingungen, bevor Du so etwas in den Raum stellst.
Anwender: "Wieso sehen die Fenster so komisch aus ?"
Entwickler: "Ich hab Tk benutzt."
Anwender: "Tk ? Kenn ich nicht. Braucht man nicht. Windows liefert doch Fenster mit."
Entwickler: "Ja schon. Aber wirklich flexibel könnte man die nur über die Windows-C-API ansprechen."
Oder mit einem Python-Wrapper um diese API oder einem anderen GUI-Toolkit.
Anwender: "Programmfunktion xy funktioniert nicht immer richtig."
Entwickler: "Ähh, das liegt an Zusatzmodul z. Über das habe ich nicht wirklich die Kontrolle. Ich spreche es nur an."
Das Problem hast Du in C und jeder anderen Sprache auch. Es sei denn Du implementierst alles selbst. Das wird aber wahrscheinlich in noch mehr Fehlern enden.
Anwender: "Und warum reagiert das alles so langsam. Warum benutzt du kein C ?"
Entwickler: "Weil ich meinen Speicher nicht selbst verwalten kann, bzw. will."
Weil es in C nicht schneller laufen würde!? Bei den meisten Programmen ist die CPU damit beschäftigt auf die Eingabe vom Benutzer zu warten. Und man kann kritische Programmteile, und nur die, dann auch in C oder Pyrex implementieren. Das Gegenszenario wäre:

Anwender: "Warum dauert die Entwicklung so lange und ist deshalb so teuer?"
Entwickler: "Weil ich in C programmiere und mich um jedes Detail selbst kümmern muss."
Anwender: "Dann lern das erstmal, bevor ich Geld bezahle."
Genau, lerne erstmal die Möglichkeiten von Python. ;-)

Du hast dem Zitat von modelnine übrigens überhaupt nicht widersprochen: Dem Anwender ist es schnurz in welcher Sprache das Programm geschrieben ist, hauptsache es tut was es soll. Wenn es in einer `setup.exe` kommt, "native windows look" hat und ausreichend schnell ist, dann interessiert es ihn höchstwahrscheinlich wirklich nicht ob es in Python geschrieben ist, oder in Scheme, oder Nemerle, oder Io oder Lua oder was auch immer.
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Montag 17. April 2006, 09:33

:shock: :shock: :shock:

Ich hab schon viel gelesen aber das ist mir noch nie untergekommen.

Ich geb auf sowas auch kein weiteres Kommentar ab, möchte nurmal anmerken, dass ich immer froh bin, wenn ich ein Python Programm sehe, weil die Installation sehr schnell abläuft, die Programme klein sind und sie platform unabhängig laufen.
TUFKAB – the user formerly known as blackbird
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Montag 17. April 2006, 12:26

Hi!

Dieses Thema wurde zwischenzeitlich kurz gesperrt, aber auch sofort wieder geöffnet...

Ich bitte weiterhin um produktive Beiträge, ohne andere zu beleidigen.

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Montag 17. April 2006, 14:02

gerold hat geschrieben:Dieses Thema wurde zwischenzeitlich kurz gesperrt, aber auch sofort wieder geöffnet...
Danke. Wollte schon Hand anlegen :wink:
TUFKAB – the user formerly known as blackbird
Antworten