"Zur C/C++/Java/Python-Diskussion"

Alles, was nicht direkt mit Python-Problemen zu tun hat. Dies ist auch der perfekte Platz für Jobangebote.
webspider
User
Beiträge: 485
Registriert: Sonntag 19. Juni 2011, 13:41

EyDu hat geschrieben: Zur C/C++/Java/Python-Diskussion: Wenn man vernünftiges C++ programmiert, also unter starker Verwendung von std und boost, dann kommt der Code Python bereits recht nahe.
Irgendwie klingt das für mich zu schön um wahr zu sein. Zugegebenerweise ist meine letzte Programmiererfahrung mit C++ sehr lange her (war da noch jung und fragte mich wie schwierig Spiele-Programmierung eigentlich sein kann), aber ich erinnere mich definitiv dadran, wie ich Zeiger partout nicht verstehen konnte und die meiste Zeit damit verbrachte Recht viel Code für recht wenig Funktionialität anderswoher abzuschreiben (wie zum Beispiel zwei Seiten für ein gähnend leeres, schwarzes Fenster unter Windows).

Wenn möglich würde ich gerne Vergleiche oder anderweitige Demonstrationen sehen wie gut man C++ im Vergleich zu Python effizient nutzen kann. Sollten diese ermutigend ausfallen, wären Hinweise zu guter (Online-)Lektüre und Foren nett. Vielen Dank schonmal :)

Falls ihr ein gutes Java-Forum kennt, auch gerne.
deets

@webspider

Es ist auch denke ich in dem urspruenglichen Kontext von der Prozessierung von Listen gemeint. Und da bedingt richtig finde ich. Aber im allgemeinen ganz bestimmt nicht. Alleine der Zwang, vorwaerts-Deklarationen verwenden zu muessen, macht einen riesen Unterschied. Das explizite Speichermanagement ebenso. Und und und.
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

webspider hat geschrieben:Wenn möglich würde ich gerne Vergleiche oder anderweitige Demonstrationen sehen wie gut man C++ im Vergleich zu Python effizient nutzen kann.
Ich denke, Dinge wie `boost` sollte man in erster Linie als Unterstützung für eine an sich recht komplexe Sprache sehen. Wenn es sonst keine Gründe gibt, Code in C++ zu schreiben, würde ich an deiner Stelle lieber bei Python bleiben. Da hast du `boost` quasi inklusive und viele weitere Annehmlichkeiten. Warum also sich das Leben schwerer machen, als unbedingt nötigt?
webspider
User
Beiträge: 485
Registriert: Sonntag 19. Juni 2011, 13:41

Irgendwann kommt der Tag wo ich was anderes als Python beherrschen muss. Oder mal keinen Python-Interpreter zur Verfügung hab (sei es auf einer PSP oder im Browser). Ich möchte mich schon gern dadrauf vorbereiten bevor mich C++ erneut erschlägt. Diesbezüglich waren eben die Hinweise zu std und boost schon sehr interessant gewesen.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

webspider hat geschrieben:Diesbezüglich waren eben die Hinweise zu std und boost schon sehr interessant gewesen.
Dann werfe ich noch mal Qt in die Schale ;-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

webspider hat geschrieben:Irgendwann kommt der Tag wo ich was anderes als Python beherrschen muss. Oder mal keinen Python-Interpreter zur Verfügung hab (sei es auf einer PSP oder im Browser). Ich möchte mich schon gern dadrauf vorbereiten bevor mich C++ erneut erschlägt. Diesbezüglich waren eben die Hinweise zu std und boost schon sehr interessant gewesen.
Kommt an dem Tag denn wirklich C++ auf dich zu? Denn ansonsten, wenn es diese Richtung gehen soll (weiß gerade kein gutes umschreibendes Wort dafür), dann würde ich eher zu Java raten. C++ kann man sich nach Java ggf immer noch angucken. Ich mein nur, wenn man wirklich gutes C++ beherrschen will, dann gehört da schon einiges zu. Zumindest von dem, was ich bisher gehört hab. Ich selbst kann da auch nur mit Halbwissen glänzen...
webspider
User
Beiträge: 485
Registriert: Sonntag 19. Juni 2011, 13:41

Aber Java ist so schrecklich bürokratisch :(
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

webspider hat geschrieben:Aber Java ist so schrecklich bürokratisch :(
Du meinst Bondage and Discipline?
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
deets

@webspider

Wenn dir Java schon nicht gefaellt - dann wird dir C++ erst recht keine Freude machen...
BlackJack

@webspider: Dafür ist es nicht so kompliziert wie C++ und eine gute IDE hilft einem mit der Bürokratie umzugehen.
webspider
User
Beiträge: 485
Registriert: Sonntag 19. Juni 2011, 13:41

@Hyperion: Nein, es fängt ja damit an, dass ich zur Objektorientierung gezwungen werde (bisher halte ich sie noch so lange aus meinem Geschreibsel raus wie ich nichts größeres baue). Wenn man das mit der gewissen Umständlichkeit kombiniert, dem Fakt, dass man ohne IDE wahnsinnig werden kann beim Entwickeln und dass man die meiste Zeit aufgrund uneinheitlicher Benennungen und Vorgehensweisen viel eigentlich unnötigen Code schreiben muss. Wenn so Objektorientierung generell aussieht, na dann gute Nacht. Ich nutze es bisher nur wegen der Uni.
Zuletzt geändert von webspider am Freitag 13. Januar 2012, 12:55, insgesamt 1-mal geändert.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Zumal es in Java weniger Konzepte zu verstehen gibt - wieso muss es in C++ Referenzen und Zeiger geben? Hier wäre es imho sinnvoller gewesen, sich auf eines von beiden festzulegen... naja, Java (und C# afaik) macht das ja so. Ist vielleicht nur ein Puzzle-Stein in einer Pro / Contra-Liste, aber imho ein gewaltiger.

@webspider: Java ist nicht der Prototyp einer OO-Sprache; es hat einen Klassen zentrierten OO-Ansatz. In Python ist OO doch reichlich anders, in JavaScript umso mehr. Smalltalk - wohl der Urvater von OO? - ist da noch einmal verschieden... ich vermute da wird es von sma einen Artikel hier geben, der darauf eingeht? Mal suchen...

Wie BlackJack schon sagte, ist Java nur mit einer IDE beherrschbar - aber die gibt es ja. Insofern ist das kein grundsätzliches Argument gegen eine Technologie. Du wirst zu Hause ja auch eine Küche haben, auch wenn Du die selber nicht aufbauen kannst, sondern einen Handwerker dafür brauchst ;-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
webspider
User
Beiträge: 485
Registriert: Sonntag 19. Juni 2011, 13:41

Gut, dass in Python Objektorientierung anders angegangen wird, hab ich mit Freude bemerkt, sonst würde ich das Thema nie wieder anrühren. Javascript habe ich für eine HTML5-Demo angetestet, schon sehr gewöhnungsbedürftig alles in Funktionen zu packen, insbesondere bei der Syntax. Smalltalk? Nie versucht, nur mal Scheme als Lisp-Dialekt. Den würde ich durchaus Javascript vorziehen :mrgreen:
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

webspider hat geschrieben:[...] Oder mal keinen Python-Interpreter zur Verfügung hab (sei es auf einer PSP oder im Browser).
Na, dann würde ich doch speziell das lernen, was auf der PSP bzw im Browser genutzt wird und nicht einfach C++. Ich hab den Eindruck, dass du dich da irgendwie festgefahren hast. Vielleicht musst du C++ auch einfach besser kennen lernen, um das abschätzen zu können. Ausreden kann man dir's wahrscheinlich eh nicht mehr. ;)

Ich kann nur sagen: Es gibt soviele andere Sprachen, die bestimmt weitaus mehr Spass machen als C++ und Java. Mindestens eins der beiden letztgenannten ist häufig ein notwendiges Übel, um nach dem Studium nen Programmier-Job zu ergattern, aber hobbymäßig würd ich keins von beiden freiwillig anfassen.
BlackJack

@webspider: Du wirst in Java nicht zu OOP gezwungen, sondern dazu Klassen zu verwenden. Das muss nicht zwangsläufig das selbe sein. Man kann in Java auch prima traditionell prozedural programmieren, solange man nur alles in Klassen steckt und ein ``static`` vor die Prozeduren schreibt. :-)

Und wie schon erwähnt wurde, kann OOP auch ganz anders aussehen. Sogar komplett ohne einen eigenen Typ oder ein eigenes Sprachkonstrukt für Klassen. Beispiele dafür wären Self und Io, die nur Objekte kennen. Oder auch JavaScript, das im Grunde gar kein OOP fertig mitbringt. Denn egal ob man damit Prototyp-basierte, „Klassen”-basierte, oder funktionale Vererbung praktiziert, muss man sich eigentlich immer ein bisschen Hilfscode schreiben, oder aus einer Bibliothek verwenden, um OOP durch zu ziehen. Dafür kann man in JavaScript aber auch so ziemlich jedes Objektmodell umsetzen, was einem gefällt.
webspider
User
Beiträge: 485
Registriert: Sonntag 19. Juni 2011, 13:41

Na, dann würde ich doch speziell das lernen, was auf der PSP bzw im Browser genutzt wird und nicht einfach C++. Ich hab den Eindruck, dass du dich da irgendwie festgefahren hast. Vielleicht musst du C++ auch einfach besser kennen lernen, um das abschätzen zu können. Ausreden kann man dir's wahrscheinlich eh nicht mehr.
PSP: C++, Assembler (Gerüchten zufolge), Lua (weniger berauschende Performance, bzw. liegengelassene Interpreter-Projekte).
Browser: auf der Client-Seite kenne ich nur Javascript, Actionscript, sowie diverse Projekte Javascript attraktiver zu machen für die Entwicklung.

Wirklich viel Entscheidungsraum lässt mir das nicht. Aber gut, ich bräuchte mehr Ressourcen und Einarbeitung um herauszufinden was mir nun wirklich liegt. Eine Sprache zurechtbearbeiten mit an Workarounds erinnernden Mustern gehört wohl eher nicht dazu, sonst hätte ich mit Javascript keinerlei Probleme.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

deets hat geschrieben:Es ist auch denke ich in dem urspruenglichen Kontext von der Prozessierung von Listen gemeint. Und da bedingt richtig finde ich. Aber im allgemeinen ganz bestimmt nicht. Alleine der Zwang, vorwaerts-Deklarationen verwenden zu muessen, macht einen riesen Unterschied. Das explizite Speichermanagement ebenso. Und und und.
Nein, ich meine das schon so allgemein wie es dort steht. Mittels der Standardbibliothek, boost und, wie weiter oben schon erwähnt, mit Qt, hat man hervoragende Werkzeuge zur Hand. Natürlich ist es im Allgemeinen mehr Schreibarbeit, aber das bringen die Typsicherheit und die Aufteilung in Deklaration und Defnition (welches bei großen Projekten einen riesigen Vorteil bringt) eben mit sich.

Auch kommt einem bei C++ eigentlich kein explizites Speichermanagement mehr unter. In den meisten Fällen werden boost oder die Standardbibliothek verwendet, die stellen entsprechende Typen für eine automatische Verwaltung bereit. Ohne, dass man groß zusätzlichen Code schreiben müsste.
Hyperion hat geschrieben:Zumal es in Java weniger Konzepte zu verstehen gibt - wieso muss es in C++ Referenzen und Zeiger geben? Hier wäre es imho sinnvoller gewesen, sich auf eines von beiden festzulegen... naja,
Weil Zeiger und Referenzen für ganz Unterschiedliche Dinge da sind. Da C++ doch recht hardwarenah ist, ist über Zeiger jede Adresse explizit zu erreichen. Referenzen hingegen werden genutzt, wenn auf existierenden Objekten gearbeitet wird. Eine Referenz ist niemals uninitialisiert, bei einem Pointer ist das durchaus möglich.

Natürlich verwende ich lieber, wenn möglich, Python als C++. Ich habe aber irgendwie das Gefühl, dass einige C++ noch nie wirklich in einem vernünftigen Projekt eingesetzt haben und sich einfach mal über die Sprache aufregen.
Das Leben ist wie ein Tennisball.
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

EyDu hat geschrieben:Natürlich verwende ich lieber, wenn möglich, Python als C++. Ich habe aber irgendwie das Gefühl, dass einige C++ noch nie wirklich in einem vernünftigen Projekt eingesetzt haben und sich einfach mal über die Sprache aufregen.
Regt sich doch keiner drüber auf. Es wird häufig nur gesagt, dass die Sprache ziemlich komplex ist und für viele Fälle vielleicht ne Hausnummer zu hoch für einen ist. Nur weil man es auch in C++ machen *könnte*, muss man es ja nicht zwangsläufig auch wirklich *tun*, wenn's denn auch einfacher geht.

Ich will nicht sagen: "Nimm bloß kein C++", sondern eher: "Warum denn gerade C++?"

Wenn einer unbedingt mal was in C++ machen will, dann soll er's halt tun...
BlackJack

@EyDu: Ich habe in der Tat C++ noch nicht in einem vernünftigen Projekt eingesetzt, weil ich das mit der Sprache einfach nicht hin bekomme. Und darüber rege ich mich einfach mal auf. :-)

Das man nicht explizit Quelltextzeilen zur Speicherverwaltung schreiben muss, heisst im übrigen nicht, dass man sich über Speicherverwaltung keine Gedanken machen muss, denn man muss ja trotzdem im Auge behalten was wo angelegt wird, wann freigegeben wird, und wann welche Teile eines Objekts unter welchen Umständen kopiert werden.
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

BlackJack hat geschrieben:Das man nicht explizit Quelltextzeilen zur Speicherverwaltung schreiben muss, heisst im übrigen nicht, dass man sich über Speicherverwaltung keine Gedanken machen muss, denn man muss ja trotzdem im Auge behalten was wo angelegt wird, wann freigegeben wird, und wann welche Teile eines Objekts unter welchen Umständen kopiert werden.
Muss man das nicht letzlich in jeder Sprache, also auch in Python? Gerade in "Extremsituationen", wo mit sehr großen Datenmengen hantiert wird, versuche ich doch auch, meine Objekte nicht länger zu referenzieren als unbedingt nötig, damit sie auch möglichst früh wieder vom GC abgeräumt werden können. Oder war jetzt etwas anderes gemeint?

Im Übrigen soll das oben Gesagte jetzt nicht etwa als Einwand verstanden werden, sondern eher als "Ausweitung" deiner Aussage. Nicht, dass da Missverständnisse aufkommen...
Antworten