Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

xardias

Community-Fossil

Beiträge: 2 731

Wohnort: Santa Clara, CA

Beruf: Software Engineer

  • Private Nachricht senden

11

26.07.2008, 21:33

Zitat von »"Nexus"«

Zitat von »"Sicaine"«

Wenn ich mir Sprachen wie Java oder C# ansehe, seh ich neben allgemeinen Vorteilen im Umfang der _Sprachen_(stndardlibs die Bilder manipulieren koennen etc.) wie auch diese Sicherheitsvorteile.

Wenn du damit leben kannst, dass die beiden Sprachen, die du genannt hast, einige Features von C++ nicht so anbieten, ist das deine Sache. Die Programmierung mit Zeigern oder Templates ist eben nicht für alle etwas, aber sie bietet einem auch gewisse Möglichkeiten. Und wenn man sich für C++ entscheidet, sollte man die Sprache eben auch lernen, dann muss man sich auch nicht über Anfängerfehler aufregen.

Und was den Umfang der Sprachen betrifft: Was bringt es, wenn die Standardlib durch irgendwelche Dinge wie Bildmanipulationsroutinen aufgebläht wird? So etwas ist in meinen Augen keine "Standardbibliothek" mehr, für das gibts externe Libs. Und zum Thema Sicherheit kann man sagen, dass die STL und Dinge wie std::string genügend Möglichkeiten geben, relativ einfach und bequem zu programmieren. Aber wenn man sich lieber mit char* rumschlägt, muss man sich eben nicht über Fehler wundern...

Sagen wir so.. warum sollte es nicht in der Standardbibliothek enthalten sein? Die Standardbibliothek soll Lösungen für immer wiederkehrende Aufgaben bieten. Das Bearbeiten von Bildern, Aufbauen von Netzwerkverbindungen, etc sind solche Aufgaben. Letztenendes macht es das nur einfacher, sowohl für den Nutzer als auch für den Entwickler.

C++ bietet natürlich auch Möglichkeiten sicher zu Programmieren, doch ist es in anderen Sprachen schlichtweg einfacher. C++ hat ganz gewiss eine Menge stärken, doch Robustheit gegenüber Fehlern und Sicherheit gehören mit Sicherheit nicht dazu.

Wenn du C++ für alle deine Programme nutzen willst.. es hindert dich niemand daran. Aber wenn man statt der Nachteile an anderen Sprachen einfach mal deren Vorteile erkennt merkt man, dass man damit wunderbar, sicher und sehr schnell Probleme Lösen kann, die in C++ wesentlich umständlicher und fehleranfälliger sind.

Man sollte Sprachen nicht vergleichen, daher ist es auch schwachsinnig davon zu Sprechen, dass Sprache X ein Feature hat welches Sprache Y nicht hat. Jede Sprache hat ihre eigenen Methoden Probleme zu lösen, und darauf sollte man sich konzentrieren.

Wenn man nur noch mit den C++ Features arbeiten kann sollte man sich Gedanken um seinen geistigen Horizont machen und nicht andere Sprachen verteufeln.

12

26.07.2008, 21:52

Zitat von »"Sicaine"«

@nexus du scheinst wohl nicht verstanden zu haben auf was der Author hinauswill. Sicher nicht auf char* sondern allgemein auf das Problem mit pointern.

Ich hab ja geschrieben: "Die Programmierung mit Zeigern oder Templates ist eben nicht für alle etwas, aber sie bietet einem auch gewisse Möglichkeiten." Anscheinend hast du das überlesen.

Zitat von »"Sicaine"«

Templates hat Java quasi mit generics. Zeiger naja in Java sind eh alle objects autopointer.

Autopointer != Pointer. Dadurch erhält man vielleicht mehr Sicherheit, aber ist auch in der Freiheit eingeschränkt. Ausserdem gibts in C++ auch Autopointer.

Zitat von »"Sicaine"«

Und Anfaengerfehler sind fuer mich keine Dinge die man zwar versteht aber an die man staendig denken und aufpassen muss wie auch zu schreiben sind. Die ganze Pointer Null Ueberpruefung muss normalerweise in guten Code vorhanden sein.

Klar muss man ständig daran denken, jedoch ist die Tendenz gross, dass man weniger Fehler begeht, wenn man die Sprache beherrscht. Abgesehen davon ist man in C++ nicht gezwungen, immer Pointer zu verwenden (Stichwort std::string). Guter Code zeichnet sich auch nicht durch möglichst extensive Nutzung von Zeigern aus.

Zitat von »"Sicaine"«

Zumal mir Java und C# nur in den wenigsten Faellen Features nicht anbieten die C++ hat.

Ich kenn die beiden Sprachen nicht gut, aber sie sind wohl weniger für systemnahe und zeitkritische Programmierung geeignet. C++ hat da seine Stärken, kann aber auch gut mithalten, was Objektorientierung betrifft. Dafür hat C++ andere Schwachpunkte.

Zitat von »"xardias"«

Wenn du C++ für alle deine Programme nutzen willst.. es hindert dich niemand daran. Aber wenn man statt der Nachteile an anderen Sprachen einfach mal deren Vorteile erkennt merkt man, dass man damit wunderbar, sicher und sehr schnell Probleme Lösen kann, die in C++ wesentlich umständlicher und fehleranfälliger sind.
[...]
Wenn man nur noch mit den C++ Features arbeiten kann sollte man sich Gedanken um seinen geistigen Horizont machen und nicht andere Sprachen verteufeln.

Ihr habt mich wohl falsch verstanden. Ich sehe weder C++ als die einzig wahre Sprache an, noch hab ich etwas gegen andere Programmiersprachen.
Ich stimme auch gern zu, dass C++ nicht gerade die einfachste bzw. sicherste Sprache ist. Dafür bietet sie andere Vorteile. Wenn man auf solche Dinge nicht angewiesen ist, spricht auch nichts dagegen, Java oder C# zu verwenden. Ich kann jedoch nicht verstehen, warum man über C++ jammert, wenn man die Möglichkeit, andere Sprachen zu verwenden, nicht wirklich nutzt.

Zitat von »"xardias"«

Man sollte Sprachen nicht vergleichen, daher ist es auch schwachsinnig davon zu Sprechen, dass Sprache X ein Feature hat welches Sprache Y nicht hat. Jede Sprache hat ihre eigenen Methoden Probleme zu lösen, und darauf sollte man sich konzentrieren.

Zum Punkt "Vergleich von Programmiersprachen": Ist das einfach eine moralische Grundhaltung, die Vergleiche generell als schlecht darstellt, oder wie hab ich das zu verstehen? "Man sollte ..., daher ..." scheint mir nicht gerade ein gutes Argument. Wenn man Sprachen nicht vergleichen darf, kann man sich wohl auch nicht für eine entscheiden bzw. kennt deren unterschiedliche Anwendungsgebiete nicht. In diesem Punkt widersprichst du dir selber.

xardias

Community-Fossil

Beiträge: 2 731

Wohnort: Santa Clara, CA

Beruf: Software Engineer

  • Private Nachricht senden

13

26.07.2008, 21:59

Zitat von »"Nexus"«

Zum Punkt "Vergleich von Programmiersprachen": Ist das einfach eine moralische Grundhaltung, die Vergleiche generell als schlecht darstellt, oder wie hab ich das zu verstehen? "Man sollte ..., daher ..." scheint mir nicht gerade ein gutes Argument. Wenn man Sprachen nicht vergleichen darf, kann man sich wohl auch nicht für eine entscheiden bzw. kennt deren unterschiedliche Anwendungsgebiete nicht. In diesem Punkt widersprichst du dir selber.

Du hast recht das habe ich sehr unglücklich Formuliert. Natürlich muss man Sprachen irgendwo vergleichen. Was ich sagen wollte ist, dass man Sprachen nicht rein an ihren Features Vergleichen sollte, sondern an ihrer Fähigkeit bestimmte Probleme zu lösen.

Wenn diese Features dabei helfen ein Problem zu lösen, dann ist das eindeutig ein Pluspunkt.
Wenn eine andere Sprache diese bestimmten Features nicht hat, so heißt das aber nicht, dass sie schlechter geeignet ist. Sie kann durchaus andere Möglichkeiten zum Lösen der Probleme haben, die sie vielleicht wieder noch geeigneter macht.

14

26.07.2008, 22:08

Okay, in diesem Falle stimme ich dir zu.

15

28.07.2008, 12:31

Ich habe den Artikel kurz ueberflogen. Er hat keine Ahnung. Wenn man nicht weiss, wie man C++ benutzt, sollte man solche Artikel nicht schreiben. Wer das Konzept von Pointern nicht versteht und welche Konsequenzen das hat, ist fuer den Beruf Programmierer ungeeignet. Das Problem ist vor dem Bildschirm zu suchen. Zum Thema Bibliotheken: Es gibt fuer alle erdenklichen Probleme vorgefertigte Bibliotheken. Gut, sie sind nicht gleich beim Compiler mit dabei, da muss man dann eben selbst im Netz suchen. Desweiteren finde ich es sehr bequem in C++ zu programmieren, ich tue es gern.

16

28.07.2008, 14:02

Zitat von »"knivil"«

Wer das Konzept von Pointern nicht versteht und welche Konsequenzen das hat, ist fuer den Beruf Programmierer ungeeignet.

Das finde ich etwas zu generalisierend. So einer ist möglicherweise als C++-Programmierer ungeeignet, in anderen Sprachen kommt man jedoch auch ohne Zeiger aus und kann trotzdem gut programmieren.

Zitat von »"knivil"«

Zum Thema Bibliotheken: Es gibt fuer alle erdenklichen Probleme vorgefertigte Bibliotheken. Gut, sie sind nicht gleich beim Compiler mit dabei, da muss man dann eben selbst im Netz suchen.

Ja, ich kann auch nicht nachvollziehen, warum es so schlimm sein soll, wenn nicht alles im Standard enthalten ist und man stattdessen externe Bibliotheken nutzen muss.

Zitat von »"knivil"«

Desweiteren finde ich es sehr bequem in C++ zu programmieren, ich tue es gern.

Ja, das finde ich auch, aber das ist wohl Geschmackssache. ;)

Mirlix

Supermoderator

Beiträge: 451

Beruf: Developer Advocate

  • Private Nachricht senden

17

28.07.2008, 14:22

Zitat

Das finde ich etwas zu generalisierend. So einer ist möglicherweise als C++-Programmierer ungeeignet, in anderen Sprachen kommt man jedoch auch ohne Zeiger aus und kann trotzdem gut programmieren.


Man muss nicht C++ Zeiger benutzen können, aber man sollte das Konzept von Zeigern verstanden und auch nutzen können und die darunterliegende Idee von Speicheradressierung/verwaltung und jeder Programmierer der davon keine Ahnung hat kann auch nicht gut sein, da er sein Handwerkzeug nicht beherrscht. Ein Programmierer muss einfach wie wissen wie Speicher funktioniert und wie er vom genutzt werden kann. Das man in anderen Sprachen nicht auf das aufräumen von Speicher achten muss heisst nicht das man sich keine Gedanken um den Verbrauch-Nutzung machen sollte, sonst enstehen am Ende Programme die für die einfachsten Aufaben hunderte MB Speicher ohne Sinn und Verstand verbrauchen.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

18

28.07.2008, 16:15

Ich denke der Autor hat durchaus Ahnung von dem Thema, über das er schreibt. Er verweist ja sogar auf das Standard-String Template

Zitat


One solution is to do a lot more stuff with things like STL string objects and generally try to hide the heap allocation. The auto_ptr<> and similar classes help here, too. But they only help. The fundamental problem still remains -- it is too easy to write subtly wrong code and the language is littered with booby-traps.


und die Ganzen Kritikpunkte haben schon ihre Daseinsberechtigung. Diese "Eigenheiten" von C++ macht, vor allem natürlich Anfängern, aber auch erfahrenen Programmierern oft Sorgen. Natürlich bekommt man irgendwann Routine und sieht potentielle Fehlerquellen schnell. Aber leider kommt es trotzdem oft vor das man irgendwo etwas übersieht und dann nächtelange Debugsessions starten darf (und nächtelang ist wörtlich zu nehmen. Ich erinner mich an 12+ Stunden Arbeitstage, wo wir morgens um 3/4 noch im Büro saßen).

Meine Version (ohne std::string und anderen Optimierungen [allokation, smartpointer etcpp]):

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
class NamedPoint
{
private:
    float x, y;
    char* m_pName;

public:
    NamedPoint( float x_, float y_, const char* name )
        : x( x_ ), y( y_ ), m_pName( NULL )
    {
        Construct( name );
    }

    ~NamedPoint()
    {
        delete [] m_pName;
    }

    NamedPoint( const NamedPoint& other ) : m_pName( NULL )
    {
        x = other.x;
        y = other.y;
        Construct( other.m_pName );
    }

    NamedPoint& operator=( const NamedPoint& other )
    {
        NamedPoint( other ).Swap( *this );
        return *this;
    }

    float getX() const { return x; }
    float getY() const { return y; }
    const char* getName() const { return m_pName; }

    void setX( float x_ ) { x = x_; }
    void setY( float y_ ) { y = y_; }
    void setName( const char* name )
    {
        Construct( name );
    }

    void Swap( NamedPoint& other )
    {
        std::swap( x, other.x );
        std::swap( y, other.y );
        std::swap( m_pName, other.m_pName );
    }

private:
    void Construct( const char* name )
    {
        if ( !name )
            return;

        size_t len = strlen( name );
        char* buffer = NULL;

        if ( len > 0 )
        {
            buffer = new char[ len+1 ];
            strcpy( buffer, name );
        }

        delete [] m_pName;
        m_pName = buffer;
    }
};
@D13_Dreinig

Faule Socke

Community-Fossil

Beiträge: 1 915

Wohnort: Schreibtischstuhl

  • Private Nachricht senden

19

09.08.2008, 01:52

Lol ja das sind wirklich anfänger fragen/fehler.(ich weiss, wovon ich spreche^^). Naja er scheint das konzept der sprache nicht verstanden zu haben, denn c++ ist nun mal sehr niedrig angelegt und das ist auch gut so. Jedem erfahrenen Programmierer und auch jedem, der diese sprache wirklich beruflich einsetzt ist das klar, man kommt normal auch nicht auf die idee, hier den pointer zu kopieren, jedem sollte klar sein, dass man folgende möglichkeiten hat:
1) std::string verwenden - wird wohl die beste lösung sein
2) in der klasse ein array benutzen - eher subobtimal, hier muss man die länge prüfen
3) selber mit new speicher reservieren.

Ein wirkliches problem sehe ich nur in der 2. möglichkeit, da sie sehr statisch ist. warum er wegen so nem filefanz rummeckert, die sprache sei schuld, versteh ich nicht. Und wenn er std::string verwendet, kann er sich auch den müll mit dem zuweisungsoperator schenken, da ja automatisch einer generiert wird. Naja ich hab nicht fertig gelesen, nur geschmunzelt^^

Warscheinlich hat das alles sowieso schon jemand gesagt, er ist halt ein anfänger, der das system nicht verstanden hat.(das ist mir übrigens nie passiert, ich habe das system immer als gegeben und optimal betrachtet, was mir vieles erleichtert hat, was ich mir durch meine faulheit erschwert habe [einige wissen, wovon ich rede^^])

Socke

Das Gurke

Community-Fossil

  • »Das Gurke« ist der Autor dieses Themas

Beiträge: 1 996

Wohnort: Pinneberg

Beruf: Schüler

  • Private Nachricht senden

20

09.08.2008, 08:17

Rofl nein, er ist kein Anfänger. Er weist nur darauf hin, dass es in C++ relativ leicht ist, relativ undurchsichtige Fehler zu machen. Und dass der Markt nicht genügend versierte C++ Kräfte bietet, und er daher lieber andere Sprachen einsetzt.

Werbeanzeige