C# & Gameprogramming

Die "kleinen Fehler bei COM" werden schnell ganz große Fehler, weil praktisch alles als COM-Objekt implementiert ist.
Einen int in bool zu casten erscheint sinnvoll nachdem false = 0; true = !false gilt, ist es einfach, eindeutig, nützlich und kommt häufig vor (if-conditions auf == 0).
 
So erstmals ist dieser Code absolut inkorrekt.

Zweitens sind deine Ergebnisse auch incorrekt.

Drittens ist allein die Behauptung das C# nur auch nur in die naehe von C++ kommt der absolute witz.

Sorry aber ich glaub da mehr meinen eigenen Benchmarks und ich glaube auch mehr Eric Gunnerson (einer der Haupt C# Compiler entwickler) der ebenfalls von geschwindigkeitsnachteilen spricht.

Die Optimierung ist ein Witz und ich waehre allgemein vorsicht bei C# die Optimierung einzuschalten.
Bei J++ gabs auch nen Optimierungsschalter dieser Bewirkte das J++ nicht in der Lage war eine einfache Rechnung richtig durchzufuehren.

"Welcher Idiot kommt schon auf die Idee Integer in bool zu casten"

Viele Entwickler seid einigen Jahren die die Software (inc. UNIX, Linux, Windows) geschrieben haben auf die dein geliebtes C# (auch der Compiler der dir dein C# kompiliert wurde teile in C gecodet) aufbaut.
Kommischerweise arbeitet sogar dein Computer mit 1,0.

C++ ist nunmal einfach schwieriger so das du halt bei C++ / C
if(a)
schreiben kannst. Bei C# heisst das halt
if(a!=null)
schoen aber meinung nach ist der ausdruck if(a) korrekt.
Wenn a was ist dann ist es was also true :)
Ist nur fuer anfaenger ne Falle:
if(a=3) // Kann boese Falle werden

"Solche Fehlkonstrukte sind die größte Fehlerquelle in nem Programm, das bekommen wir sogar in der schule zu hören"

Wie ich gesagt habe bei anfaenger. Mit ein Bischen erfahrung passiert das nicht. Ich wuerde mich niemals einen absolut profi schimpfen aber mir passiert das ueberhaupt nicht mehr.

"und unsere Infolehrer könne das zeug echt gut, wären die nicht lehrer wären die auf garantie programmierer geworden"

Da habe ich andere Erfahrung :-)
Ich bin nun 26 und dementsprechend war als ich in der Schule war noch Pascal angesagt, das ne Zeit her ist.

""sowieso find ich ist C++ ziemlich überladen mit teilweise uralten zeugs und die abwärtskompatibilität zu C macht ne Menge an dem Potential zu ner schönen sprache weg.""

Naja wenn ich Windows API Programmier rufst du C funktionen auf.
WinProc z.B.
Die Abwaertskompatibilitaet ist gerade gut wenns um Zugreifen aufs OS geht.

Bedenke Windows 95,98,NT,2000 UNIX Linux alles C :D nix OOP
 
ach zu:

"ist C++ ziemlich überladen"

Es gibt ne schoene Sache in C++ die du selber schon in deinem komischen Schnipsel genutzt hast :)

#include !

Du kannst alles schoen einbinden oder auch nicht einbinden.

Du hast zuviel Microsoft Literatur gelesen :)
Ich programmiere seid 6 Monaten auch C#. Und bin von der Sache recht ueberzeugt aber wer dir so nen Floh ins Ohr gesetzt hat das C# schneller als C++ ist den wuerd ich in ne Irrenanstallt einliefern.

C# ist sogar noch langsamer als Java ! Und Java kommt zu 80 % an C++ ran (C++ Progger behaupten 70, Java Progger 90 % :D) .
Das kann sich in der naechsten Zeit noch aendern.
PS: Balmer (Ja der Microsoft - cheffe) hat saemtliche oeffentlichen Benchmark vergleiche zwischen Java und C# verboten.
 
Hm verstehe deine Denkweise nicht

Erstmal hat Eric Gunnerson mit die Sprache designed, mit dem Compiler an sich hat er weniger zu tun.

Und wieso schließt du Rückschlüße von J++ auf C#, die überhaupt nicht stimmen.

Das mit dem casten: klar arbeitet der Computer mit 0 und 1(zwar nicht mehr soo lange aber ok*gg*) und wirklich nur mit 0
und 1 und das ist der Unterschied zu C++. Bei 0 und 1 würde ichs ja noch notfalls einsehen, aber sobald jemand irgend
nen anderen Integer castet ist das Schwachsinn zB.
Code:
int a = 5;
if(a) {
..
}
das ist doch hohl, solche Schlußfolgerungen, Ist genauso als wenn man vergleichen würde(ziemlich kindisch aber passend)
true = Ente
false = Hund
was ist mit Katze?
in c++ ist ne Katze nen Hund weil sie ja keine Ente ist :=)
das ist das Problem dabei, sie ist nunmal kein Hund
Wenn es nur Enten und Hunde geben würde dann ok, aber so nicht
aber der letzte fall den du gesagt hast
if(a=3) ist wirklich nen blutiger Anfängerfehler, mach den auch nicht obwohl ich auch kein Profi bin.

Das mit meinen Infolehrer war nicht so gemeint bloß weil se Lehrer sind muss man auf sie hören, zu mal die auch auf C++
schwören :) weil denen Pascal zu alt ist aber die haben schon halt Erfahrung und wissen von was die reden.

Mit überladen meinte ich nicht den Quellcode, so wie du mit #include gesagt hast, kann man schon recht ordentlich
strukturieren, aber an das using von C# kommts nicht ran :), höchstens Java mit import, nur doof das der Name auch dem
reelen Dateinamen entsprechen muss :(, sondern hab mich eher auf die Sprachvielfalt bezogen.
Es gibt für C++ unzählige Libs und Klassen und kein normaler Mensch sieht da durch, und das ist schon kein Vorteil mehr
wenn man für nen Problem zigtausend Möglichkeiten hat, nach Murphy's Computergesetzen nimmt man sowieso die falsche :)

Und das Java auf 80 prozent an C++ rankommt, glaub ich dir nie, das musst du beweisen. Ich kann dir zig seriöse Quellen
zeigen die von viel niedrigeren Zahlen sprechen.
Und das mit dem Verbot von Benchmarks mit C#. Das stand in der Eula zu den Beta Versionen, wie es jetzt im Release ist
weiß ich nicht.
 
Hmm, es macht durchaus Sinn auf bool zu casten, stimmt ja mit der binären Logik überein: 0 ist FALSE, alles andere ist TRUE, ich seh hier nichts verwirrendes oder Sinnloses?
Der Fakt, dass PCs mit 0 & 1 arbeiten hat damit allerdings nur geringfügig zu tun.
Man könnte hunderte Möglichkeiten finden um so einen Cast zu rechtfertigen (auch z.b. die Menge der natürlichen Zahlen usw.).

Wg. deinem Tier-Vergleich: Du machst dabei einen schweren Fehler:
Es würde NICHT gelten:
true = Ente
false = Hund

SONDERN:
false = Hund
true = !false
 
Ne da ist nix falsch in der Denkweise.
so wie du es geschrieben hast ist es in C++ implementiert.
false = Hund
true = !false

Aber das wiederspricht voll der boolschen Logik
da gibt es nun mal nur zwei Zustände true oder false, und nicht das alles was nicht false ist true ist.Deshalb stimmt das so wie ich das geschrieben hab.
 
Hmm, es macht durchaus Sinn auf bool zu casten, stimmt ja mit der binären Logik überein: 0 ist FALSE, alles andere ist TRUE, ich seh hier nichts verwirrendes oder Sinnloses?
Der Fakt, dass PCs mit 0 & 1 arbeiten hat damit allerdings nur geringfügig zu tun.
Man könnte hunderte Möglichkeiten finden um so einen Cast zu rechtfertigen (auch z.b. die Menge der natürlichen Zahlen usw.).

Wg. deinem Tier-Vergleich: Du machst dabei einen schweren Fehler:
Es würde NICHT gelten:
true = Ente
false = Hund

SONDERN:
false = Hund
true = !false

Katze -> true ist also vollkommen logisch & korrekt ("nicht Hund").

Warum du deine Infolehrer erwähnt hast weiß ich zwar noch immer nicht, jedenfalls kann ich dir versichern, dass unsere aus der Praxis kommen, nicht evtl. beruflich Programmierer geworden wären.
(auch wenn das ganze hiermit so rein gar nichts zu tun hat...)

Die using-Direktive sagt nebenbei bemerkt nur aus, das dieser namespace ohne namespace-angabe verwendet werden kann, was so rein gar nichts mit dem physischen Include/Library-System zu tun hat.
(using gibts übrigens auch in C++).
usign ist eher eine Verletzung der Kapselung (wenn in zwei namespaces die selben Namen existieren ist das normalerweise kein Problem, using hebt die namespaces allerdings auf und die beiden namen kollidieren).

C#-technisch werden physische Beziehungen beim kompilieren/linken als Parameter angegeben.

Allerdings sei gesagt, dass sowohl C++ als auch C# nicht unbedingt eine ideale Lösung bieten.

Die Libraries von C++ seh ich keineswegs als Nachteil: jede hat einen bestimmten Zweck, die wichtigsten kennt man bald, uns man benutzt sie eben nur wenn man sie braucht.
Außerdem: der C++-Standard sieht AFAIK nicht viel mehr als die STL vor, also würde ich das nicht als "überladen" bezeichnen.
In C# darfst halt alles selber programmieren...

Das Java inzwischen 80% von C++ erreicht erscheint mir übrigens durchaus realistisch, vielmehr als 20% wird die VM wohl nicht wegnehmen.

Ahja: Es geht hier um den Vergleich der Sprachen nicht Compiler, was das angeht kannst du C# getrost vergessen (ich glaube es gibt ähmm... einen .. Compiler oder?)
 
Talla hat gesagt.:
Erstmal hat Eric Gunnerson mit die Sprache designed, mit dem Compiler an sich hat er weniger zu tun.
Wenn der Leiter Compiler Entwicklerteams wenig mit dem Compiler zu tun hat gebe ich dir recht :-)

Und wieso schließt du Rückschlüße von J++ auf C#, die überhaupt nicht stimmen.
Dieser Rechenfehler in J++ stimmt. War ein grosser Skandal. Ich kann dir gern ein paar Links raussuchen zu der Geschichte. Ich sage nicht das dies beim C# Compiler & Optmiriere genauso ist aber solange C# Compiler nicht einige Zeit gezeigt hat das es nicht so ist, bleib ich skeptisch.
Es gibt für C++ unzählige Libs und Klassen und kein normaler Mensch sieht da durch, und das ist schon kein Vorteil mehr
Es gibt x tausend librarys, aber wenn ich einen Datenbankfrontend fuer eine mysql Db schreiben will, schau ich mir mysql++ Library an (naheliegend).
Will ich fuer Linux eine Datenbankfrontend entwickeln schau ich mir mysql++ und z.B. Qt Biblothek (KDE) an.
Will ich ein Spiel programmieren habe ich mit mysql++ library gar nix zu tun.
PS: Die using Direktive kommt von C++. Namespaces kommen von C++.

Und das Java auf 80 prozent an C++ rankommt, glaub ich dir nie, das musst du beweisen. Ich kann dir zig seriöse Quellen
zeigen die von viel niedrigeren Zahlen sprechen.
Kenne zig "serioese" Quellen die Sprechen von mehr als 80 %. Aber glaub mal nicht serioesen Quellen und wenn du serioese Quellen beziehst schau auch auf das Datum wann dieser serioese Test durchgefuehrt worden ist.
Wir haben hier in der Firma in der ich arbeite eine Firmeninterne Studie gemacht zu Java und dieser glaube ich mehr.
Ausserdem verwendet C# eine Java aehnliche Technik.
Du behauptest das C# schneller als C++ ist aber Java nicht die 80 % von C++ erreicht. :-)
Sorry aber da geb ich mal nc.

Und das mit dem Verbot von Benchmarks mit C#. Das stand in der Eula zu den Beta Versionen, wie es jetzt im Release ist
weiß ich nicht.
Meiner Info nach:
nicht widerrufen.


Aber das wiederspricht voll der boolschen Logik
da gibt es nun mal nur zwei Zustände true oder false

Du schreibst es ja selber :
2 Zustaende. Das heist

und nicht das alles was nicht false ist true ist.

Nach deiner Rechnung waehren wir bei 3 zustaenden.
True
False
Nicht True aber auch nicht False (undefined?)

2 Zustaende sind nunmal True / False !
Das beeinhaltet das wenn etwas nicht True ist ist es False
Wenn etwas nicht False ist kann es nur True sein.
 
hi,
Ich programmier schon länger in C++ und muss sagen, wenn ich ein Programm schreib, mach ich das ganz sicher in C++ und nicht C#.
C# ist zwar leichter, was jeder sagt, aber letztendlich kommt es bei manchen Sachen auf die Geschwindigkeit (C++ IST SCHNELLER ALS C# :-)) an und darauf was man besser findet!!!
Die einen finden vielleicht C++ besser, die andern C#.

Deshalb isses Schwachsinn, dauernd zu schwätzen was geil am C# oder C++ ist, jeder sollte das nehmen, was er besser findet!
 
Zurück