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

Beiträge: 721

Wohnort: /dev/null

Beruf: Software-Entwickler/Nerd

  • Private Nachricht senden

11

10.09.2011, 16:08

Prinzipiell stimmt es, dass man mit Java, C#, etc. einfacher ans Ziel kommt. Allerdings ist es nicht so, dass ich in C++ über einen gewissen Grad an Abstraktion nicht hinauskomme, im Gegenteil. Diese Sprachen erzwingen (natürlich aus gutem Grund) einfach einen gewisses Mindestmaß an Abstraktion, das viel weiter oben ansetzt als das von C++. Ich kann mit C++ aber genauso abstrakt arbeiten wie z.B. mit Java. Eigentlich sogar noch abstrakter, da ich in C++ nicht auf vorwiegend objektorientierte Konzepte beschränkt bin (ohne sprachliche Verrenkungen), sondern z.B. auch richtig generisch Programmieren oder sogar Metaprogrammierung betreiben kann. Das Problem mit C++ ist nicht die Ebene der Abstraktion, sondern dass die Sprache unnötig komplex und voller Fallstricke ist, sodass es vergleichsweise unglaublich viel Erfahrung braucht, um C++ wirklich einigermaßen zu beherrschen. Die Stärke von C++ ist genau die große Bandbreite der Sprache, was Abstraktion betrifft, dass ich sowohl absolut lowlevel als auch beliebig abstrakt arbeiten kann, je nachdem was gerade gefordert ist. Das macht C++ zu einem sehr sehr mächtigen Werkzeug. Mit all den Freiheiten richtig umzugehen, will allerdings gelernt sein. Denn das setzt natürlich voraus, dass mein Wissen und meine Erfahrung als Entwickler mindestens die selbe Bandbreite umfasst, die C++ abeckt. Und das ist eine ganze Menge. Am Ende ist es natürlich wie immer die Frage des richtigen Werkzeuges für den jeweiligen Job. Für den Hobbybereich ist sowieso jede der genannten Sprachen praktisch gut genug.

Die großen Entwickler, die heute noch in C++ entwickeln, nutzen bei weitem nicht das Potential, was einem C++ bietet. C++ ist sehr mächtig, aber nicht jeder Entwickler nutzt Metaprogrammierung. Mal ehrlich, in der Industrie verwendet man normale Klassen und ein paar einfachere Templates, von Sachen wie Expression Templates muss man da gar nicht erst reden. Über den Abstraktionsgrad von Haskell kann C++ aber nicht hinauskommen. ;)

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

12

10.09.2011, 16:22

Die großen Entwickler, die heute noch in C++ entwickeln, nutzen bei weitem nicht das Potential, was einem C++ bietet.

Man könnte auch sagen: Noch nicht. Wenn man sich mal ein wenig umschaut, bekommt man eigentlich den Eindruck, dass das gerade dabei ist, sich zu ändern. Abgesehen davon: Woher weißt du das so genau? Wenn ich mir z.B. Microsoft anschau, dann seh ich dort z.B. den Chairman des C++ Standardkommitees als Softwarearchitekt arbeiten. Und selbst wenn ist mir nicht ganz klar, was genau du eigentlich damit sagen willst. C++ wird also wohl von den meisten nicht voll genutzt. Eine Feststellung die ich so auch unterschreiben würde, aber im Kontext hier völlig irrelevant!?

Mal ehrlich, in der Industrie verwendet man normale Klassen und ein paar einfachere Templates, [...]

Um ja, d.h. man könnte in diesen Bereichen genausogut C# oder Java oder xyz verwenden, hat aber offenbar irgendwelche Gründe, das nicht zu tun. Und nun?

Über den Abstraktionsgrad von Haskell kann C++ aber nicht hinauskommen. ;)

Ich kenne Haskell nicht wirklich. Darum und vor allem auch, weil es als funktionale Sprache wohl nicht so leicht in den Vergleich hier passt, hab ich es in meinem Post bewusst ausgelassen.

Dieser Beitrag wurde bereits 7 mal editiert, zuletzt von »dot« (10.09.2011, 16:38)


drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

13

10.09.2011, 16:38

Leute reisst euch mal zusammen. Ihr führt ein und dieselbe Diskusssion in jedem Thread, wo mal Java und C++ genannt werden. Der TO hat ja komplett was anderes gefragt..
Das gilt auch für dich dot. ;)
Ich würde da jetzt grosszügig was abspalten, wenn ich Zuhause wäre. ^^

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

14

10.09.2011, 16:41

Ich hab hier doch bisher noch nichtmal ein böses Wort über Java verloren, mehr zusammenreißen geht doch fast gar nimmer :P

Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von »dot« (10.09.2011, 16:49)


Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

15

10.09.2011, 17:00

Wollte mich ja eig. raushalten, aber wenn der Thread schon gesplittet wird... :P
...

100% Zustimmung, bis auf den Punkt mit Operator Überladung. Klar, operator+= ist vllt etwas unschön/unleserlich, aber der Mehraufwand der durch das Fehlen dieses Features einher geht macht das ganze meiner Meinung nach nicht wieder wett. D macht das ganze imo sehr gut indem "unschönes" bzw "unleserliches" weggelassen wird und stattdessen so etwas wie opAdd benutzt wird.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

16

10.09.2011, 17:04

Lol ich hab bestimmt ne Minute versucht die Nachricht im alten Thread zu zitieren bevor ich gemerkt habe, dass sie verschwunden ist :D

Java-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
public class Test
{
    //Warum gibt diese Methode -1 zurück?
    public static int test1() {
        for(;;) {              
           try {
               return 1;
           } finally {
               break;      
           }           
       }           
       return -1;
    }
    
    //Warum ist das eine Endlosschleife?
    public static void test2() {
        while (true) {                
           try {                     
               return;               
           } finally {               
               continue;             
           }                         
       }
    }


Zweimal das gleiche sinnvolle Prinzip. finally würde ja sonst keinen Sinn machen, wenn sein "Inhalt" nicht vor Kontrollfluss-Kommandos, die den Block verlassen, ausgeführt werden würde. Mit Java 7 ist finally nicht mehr ganz so häufig nötig, da ein bisschen mehr was wie RAII in die Spezifikation Einuzg gehalten hat. Siehe http://java.dzone.com/articles/java-7-new-try-resources

Java-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
    //Warum wird bei String-Literaren automatisch intern aufgerufen?
    //Das führt häufig zur Verwirung von Anfängern 
    public static void test3()
    {
        String s1 = "abc";
        String s2 = "abc";
        String s3 = new String("abc");

        System.out.println(s1 == s2);//true
        System.out.println(s1 == s3);//false
        s3 = s3.intern();
        System.out.println(s1 == s3);//true
    }
}
Daher bei Strings immer equals... Das ist tatsächlich eine etwas verwirrende Angelegenheit.

Ich glaube: Hätte sich eine Sprache wie Java oder C# für Spieleentwicklung durchgesetzt, würden wahrscheinlich wesentlich weniger basale Probleme und eher Architektur-Fragen in Foren wie diesem hier besprochen werden und es würden wahrscheinlich auch wesentlich mehr Hobbyprojekte erfolgreich und nicht als unerfüllte Kindheitsträume enden.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Chromanoid« (10.09.2011, 17:13)


dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

17

10.09.2011, 17:07

Mir ist nicht klar, was daran

Quellcode

1
a = b.Add(c.Multiply(-0.5f));

leserlicher sein soll als

Quellcode

1
a = b - 0.5f * c;

Und das ist nur ein triviales Beispiel...

Beiträge: 721

Wohnort: /dev/null

Beruf: Software-Entwickler/Nerd

  • Private Nachricht senden

18

10.09.2011, 17:13

Meine Meinung:

C++ hat wie schon angesprochen in einigen Gebieten eine klare Existenz-Berechtigung, allerdings ist es meiner Meinung nach auch für viele Sachen ungeeignet. Das liegt in der Natur der Sprache, selbst so universelle Sprachen wie Java sind nicht universell einsetzbar und beschränken sich auf einen bestimmten Bereich. Low-Level Programmierung ist mit der JVM nicht hinzubekommen, auch hat Java viele andere Schwächen, wie zum Beispiel die Generics( mit den Google-Generic Libs geht das, da kann man sogar einfache Transformationen ausführen ). C++ ist aus meiner Sicht nichts mehr für die normale Anwendungsentwicklung und sollte nur noch in Nischenbereichen, in denen man sehr effiziente Anwendungen braucht, genutzt werden. Warum? C++ schleppt so Dinge mit sich rum, mit denen man normalerweise nichts zu tun haben will, wie zum Beispiel Speicherverwaltung. Außerdem sorgt die Nähe zum System auch für eine größere Fehleranfälligkeit und in den meisten Fällen auch für eine längere Entwicklungszeit.

Zitat

Man könnte auch sagen: Noch nicht. Wenn man sich mal ein wenig umschaut, bekommt man eigentlich den Eindruck, dass das gerade dabei ist, sich zu ändern. Abgesehen davon: Woher weißt du das so genau? Wenn ich mir z.B. Microsoft anschau, dann seh ich dort z.B. den Chairman des C++ Standardkommitees als Softwarearchitekt arbeiten. Und selbst wenn ist mir nicht ganz klar, was genau du eigentlich damit sagen willst. C++ wird also wohl von den meisten nicht voll genutzt. Eine Feststellung die ich so auch unterschreiben würde, aber im Kontext hier völlig irrelevant!?

Inwiefern eine Aussage über die Nutzung einer Sprache in der Realität in einer Diskussion über Sprachen irrelevant sein soll, ist mir auch nicht klar. Das beeinflusst im wesentlichen das Design der großen Bibliotheken, das betrifft doch nun wirklich direkt die Sprache.

Zitat

Um ja, d.h. man könnte in diesen Bereichen genausogut C# oder Java oder xyz verwenden, hat aber offenbar irgendwelche Gründe, das nicht zu tun. Und nun?

O.o Warum so aggressiv? Ich habe eine normale Antwort auf deine Antwort gegeben, in der nicht einmal ein negatives Wort über C++ gefallen ist, sondern nur über ihre Anwender. Guten Code zu schreiben ist eine hohe Kunst, meiner Meinung nach muss man da besonders mit C++ aufpassen.

Zitat

Ich kenne Haskell nicht wirklich. Darum und vor allem auch, weil es als funktionale Sprache wohl nicht so leicht in den Vergleich hier passt, hab ich es in meinem Post bewusst ausgelassen.

Aha, darf man funktionale Sprachen außerhalb der Wissenschaft etwa nicht nutzen? :P

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

19

10.09.2011, 17:14

Mir ist nicht klar, was daran

Quellcode

1
a = b.Add(c.Multiply(-0.5f));

leserlicher sein soll als

Quellcode

1
a = b - 0.5f * c;

Und das ist nur ein triviales Beispiel...

Ist das auf mich bezogen? Das wird in D wie in C++ gehandhabt, nur dass die Operator Überladungs Methoden anders benannt werden. Daher würden beide Beispiele von dir funktionieren (vorausgesetzt du hängst ein "op" noch vorn an das "Add" beim ersten Beispiel.
Bei zweiteren würden dann intern die Methoden opAdd, opMul und opSub aufgerufen werden. Darum würde sich aber der Compiler kümmern.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

Beiträge: 721

Wohnort: /dev/null

Beruf: Software-Entwickler/Nerd

  • Private Nachricht senden

20

10.09.2011, 17:15



Ich glaube: Hätte sich eine Sprache wie Java oder C# für Spieleentwicklung durchgesetzt, würden wahrscheinlich wesentlich weniger basale Probleme und eher Architektur-Fragen in Foren wie diesem hier besprochen werden und es würden wahrscheinlich auch wesentlich mehr Hobbyprojekte erfolgreich und nicht als unerfüllte Kindheitsträume enden.

:thumbup: Davon bin ich auch überzeugt.

Werbeanzeige