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

DeKugelschieber

Community-Fossil

  • »DeKugelschieber« ist der Autor dieses Themas

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

1

10.09.2011, 10:31

Wieder mal das mit den Sprachen...

Zitat

Im Studium haben wir viel mit Java programmiert, wobei diejenigen, die schon C/C++ konnten, sich häufig darüber lustig gemacht haben.


Kann ich gut nachvollziehen :D

2

10.09.2011, 10:38

Warum? Was hat dich/euch konkret gestört? Jede Sprache hat ihre vermurksten Seiten und Nachteile. Ich kann Java-Verachter nicht verstehen. Das ist so wie wenn man sich über Brotsorten lustig macht.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

3

10.09.2011, 10:46

- Was mich an Java stört, sind fehlende Operatorüberladungen. Besonders bei Vektorrechnungen, wie sie in Spielen ja häufig gebraucht werden, führt das zu unleserlichem Code.
- Verglichen mit den Templates in C++ sind Java Generics ziemlich "kraftlos" :)
+ Dafür hat man in Java echte Plattformunabhängigkeit,
+ einen Garbage Collector,
+ Reflection

4

10.09.2011, 10:58

Zitat

- Was mich an Java stört, sind fehlende Operatorüberladungen. Besonders bei Vektorrechnungen, wie sie in Spielen ja häufig gebraucht werden, führt das zu unleserlichem Code.
- Verglichen mit den Templates in C++ sind Java Generics ziemlich "kraftlos"
Ich sehe das nicht als Nachteil, sondern als Vorteil. Operator-Überladungen verursachen viel unleserlichen Code. Wenn man eher wenige nicht sehr komplexe Bibliothek-Abhängigkeiten hat und eng mit einem Team zusammenarbeitet mag das noch ganz komfortabel sein, aber sobald man sich durch anderer Leute Code wühlt/diesen benutzt und die Überladungen nicht gut dokumentiert sind, bereitet das starke Schmerzen. Das ist ja gerade das tolle an Java - manchmal muss man vielleicht einen kleinen Umweg gehen, aber dafür lässt sich fast jeder Code wunderbar nachvollziehen. Ich lese Java Code wie Bücher und verstehe ihn auch so schnell (vorausgesetzt ich benutze eine IDE, die mir auf Klick den Code der entsprechenden Funktion/Klasse zeigt). Das ist IMO mit komplexen Sprachen wie C++ oder Scala nicht möglich. Je mehr eigene Sprachkonstrukte entwickelt werden und je komplexer diese sein können, desto höher wird die Verständnishürde und die Anzahl der Codestellen, die man überprüfen muss. Templates sind aus diesem Grund auch mit Vorsicht zu genießen. Im Vergleich zu C++ Templates sind Java Generics nicht ohne Grund kraftlos.

Ich finde es ja OK wenn man nicht so mit Java zurecht kommt oder keinen Spaß an der Sprache hat und das auch so äußert. Jedem das seine. Ich z.B. kann C++ nicht besonders leiden (habe schlechte Erfahrungen damit bei mehreren Hobbyprojekten gemacht, die vor allem damit zusammenhängen, dass man bei C++ auf ziemlich viele Dinge achten muss und so sehr viel Zeit verschwenden kann). Was ich ziemlich bescheuert finde, ist Java oder irgendeine andere Sprache über einen persönlichen Rahmen hinaus zu dissen. Solche Leute gehen mir in diesem Moment dann immer genauso auf den Senkel wie Windows-Hasser oder Apple-Jünger.

Dieser Beitrag wurde bereits 9 mal editiert, zuletzt von »Chromanoid« (10.09.2011, 11:12)


5

10.09.2011, 12:13

Ich bin mit C++ und Java noch nicht wirklich weit aber ich hab 1 Jahr lang in ANSI-C programmieren müssen und da sind z.B. List in C++ und ArrayList in Java ein Komfort. Also keine verketteten Listen per Hand programmieren oder Speicher mit Malloc und Realloc reservieren.

Ausserdem kann ich mit dem Lehrer nicht verhandeln, es wird dieses Jahr halt einfach Java unterrichtet.
Und Java wird in der Wirtschaft schon auch sehr häufig verwendet, da sieht man C++ vielleicht nicht mehr so oft.

Hat alles irgendwo Vor- und Nachteile. Mir geht es einfach darum, wenn ich schon Java lernen MUSS, dann will ich das auch für die Spieleprogrammierung verwenden.
„lean over the bowl and then take a dive all of you are dead. i am alive“

Beiträge: 721

Wohnort: /dev/null

Beruf: Software-Entwickler/Nerd

  • Private Nachricht senden

7

10.09.2011, 15:00

Man sollte viel mehr die Performance bei der Entwicklung( also die Entwicklungszeit ) als die Runtime-Performance betrachten. Von dem Aspekt sind Sprachen wie Java, Haskell oder Delphi C++ von Natur aus ein Stück voraus. Will man also schnell qualitativ hochwertige Software produzieren, würde ich immer zu Sprachen wie Java raten und nicht zu C++. C++ bietet durch aus seine Vorteile und hat auch eine legitime Existenzberechtigung, auch ist C++ Java in einigen Aspekten voraus, allerdings arbeitet man auf Basis von Java oder Haskell auf einer viel abstrakteren Ebene, die einem Sachen wie Speicherverwaltung und Pointer-Schießerein abnimmt.

idontknow

unregistriert

8

10.09.2011, 15:07

Pointer-Schießerein


Bist nicht gerade nen Fan von C++ oder wie?

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

9

10.09.2011, 15:22

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.

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


foreach

Frischling

Beiträge: 87

Beruf: Student

  • Private Nachricht senden

10

10.09.2011, 15:59

- Was mich an Java stört, sind fehlende Operatorüberladungen. Besonders bei Vektorrechnungen, wie sie in Spielen ja häufig gebraucht werden, führt das zu unleserlichem Code.

Das sehe ich genau wie Chromanoid eher als Vorteil.

Nachdem ich mich aber in letzter Zeit intensiever mit C/C++ beschäftigt habe, stören mich immer mehr Dinge an Java:
- Es gibt keine unsigned Typen (=> der Code in einigen meiner Bildbearbeitungs und Kryptographie-Algorithmen ist unübersichtlich und unnötig kompliziert)
- In der Standard-Bibliothek wird viel zu häufig gebrauch von Exceptions gemacht
- Nach der Einführung des Schlüßelwortes strictfp werden auch in der Klasse Math einfach die Methoden aus StrictMath aufgerufen (z.T. extreme Performance Probleme, weswegen ich mir eine Klasse FastMath geschrieben habe, welche einfach die Funktionen der C-Standard-Bibliothek aufruft)
- Es ist nicht genau definiert wann finalize aufgerufen wird (=> finalize ist für die meisten Fälle unbrauchbar, da man vieles deswegen explizit machen muss; z.B. das Trennen einer Datenbank-Verbindung)
- Die Klasse String ist immutable (=> Man kann sich keine eigene String-Klasse ableiten; (Ein kleines Pro: Synchronisierungsaufwand entfällt))
- Die Standard-Bibliotheken sind z.T. nicht einheitlich desinged und redundant (z.B. Collections)
- "Supplementary Characters as Surrogates" *WÜRG* warum nicht einfach ein neuer Primitiver Datentyp char32 und am Besten noch char8 + passende String-Klassen
- Warum sind die primitiven Datentypen keine Objekte (Diese Wrapper-Klassen fühlen sich komisch an)

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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
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;             
           }                         
       }
    }
    
    //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
    }
}

Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »foreach« (10.09.2011, 16:08)


Werbeanzeige