Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
06.07.2002, 23:55
Mudder



Moin,

auch wenn das jetzt sehr Newbiehaft klingt, aber in welchen Programmiersprachen werden eigentlich Mods und Co geschrieben?

Mudder

--

zum Seitenanfang zum Seitenende Profil || Suche
001
06.07.2002, 23:58
dz|-freezer



das kann man nicht genau sagen da die games in verschiedenen sprachen geschrieben worden sind.

hl ist z.B. in c++ geschrieben.

--

zum Seitenanfang zum Seitenende Profil || Suche
002
11.07.2002, 21:16
The_real_KANE



verschiedene sprachen?
Also, soweit ich weis, ist seit jahren kein kommerzielles spiel mehr in was anderem als C/C++ geschrieben.
In der Schule beim lernen oder so zum testen etc werden noch spiele in anderen sprachen geschrieben, oder halt online games (also auf webseiten mit flash oder java etc).
Aber alles was du im Laden siehst ist eigentlich in C/C++
cu

--

Die Welt geht unter, gehen sie mit!


Dieser Beitrag wurde am 11.07.2002 um 21:16 von The_real_KANE bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
003
11.07.2002, 21:18
KhanRKerensky



Wärend die ganzen Desktop Progrämmchen in tausend verschiedenen Sprachen geschrieben werden... Englisch, Deutsch, Spanisch, Französisch usw :D

Quake hat aber afaik auch noch Assambler in sich.

--

"[...] you're going to burn in a very special level of Hell. A level they reserve for child molesters and people who talk at the theater." - Book

zum Seitenanfang zum Seitenende Profil || Suche
004
11.07.2002, 22:17
Mazze



Gut, ASM haben noch viele in sich...aber halt nur ein kleiner Teil!

--

BattleTech-MOD:
http://bthl.unitedgaming.net/

zum Seitenanfang zum Seitenende Profil || Suche
005
19.07.2002, 23:19
Onkel Dittmeyer



Das aber nur zur Optimierung von bestimmten Sachen afaik.
Lohnt es sich überhaupt noch bei den heutigen Compilern manuel zu optimieren?

--

zum Seitenanfang zum Seitenende Profil || Suche
006
20.07.2002, 10:19
Prefect



Jein. Es gibt da ja die 80-20-Regel, 20% des Codes sind für 80% der CPU-Cycles verantwortlich (manche reden sogar von 90-10, aber das kommt aufs Programm an).
Welche 20% das sind findet man meistens erst raus, wenn man fertig ist. Daher auch: "Premature optimization is the root of all evil". Es kommt einfach darauf an, was man optimiert, und im Normalfall läuft das Optimieren anders, als sich die meisten Leute das vorstellen.

Beispiel: Jemand kommt auf die genial Idee statt
i = x / 2;
folgendes zu schreiben:
i = x >> 1;

Der Code hat (zumindest für positive Zahlen) garantiert das selbe Ergebnis. Der Programmierer hat sich aber wahrscheinlich gedacht, daß eine Division länger dauert als eine Shift-Operation. Das stimmt auch - aber typischerweise optimieren Compiler sowas sogar wenn Optimierungen ausgeschaltet sind...
Dafür muß man sich dann aber mit nicht so leicht lesbarem Code herumschlagen. (Natürlich gibt es Situationen, in der die Version mit >> 1 logischer ist, aber die sind eher selten).

Meistens kommen die echten Optimierungen daher, daß man effizientere Algorithmen einsetzt, z.B. Trees statt Arrays, A* statt Dijkstra, Vertex Arrays statt Immediate Mode. Oft kann man auch einfach optimieren, indem man bestimmte Datenstrukturen effizienter auslegt. Was ist der Unterschied zwischen:

Quellcode:
struct foo {
    char a;
    int b;
    char c1;
    float f;
    bool isg;
    float g;
};

und:

Quellcode:
struct foo {
    char a, c1;
    bool isg;
    int b;
    float f, g;
};

Ganz einfach: die erste Struktur benötigt auf typischen 32-Bitsystemen 24 Bytes, die zweite Struktur nur 16 Bytes. Bei der ersten Struktur werden auf Grund des Alignments Bytes verschwendet. Das hat aber zur Folge, daß die erste Struktur mehr als eine halbe Cacheline belegt, und ein für den Prozessor unangenehmes Alignment hat. Wenn man jetzt auf riesigen Arrays dieser Strukturen nicht sequentiell arbeitet ist die zweite Version eindeutig im Vorteil, da man sie konsequent auf 16-Byte-Grenzen ablegen kann. Der Prozessor kann dann die gesamte Struktur auf einen Schlag in den Speicher holen, was bei der ersten nicht der Fall ist.

Aber auch solche Optimierungen sind nur relevant, wenn die Datenstruktur andauernd massiv benutzt wird.

Assembler kann man übrigens komplett vergessen, wenn man nicht gerade die erweiterten Instructionsets wie MMX und so verwendet.

cu,
Prefect

--

Widelands - Gemütliche Aufbaustrategie, Free Software
Noch ein Blog - Lerne, wie die Welt wirklich ist, aber vergiss niemals, wie sie sein sollte.


Dieser Beitrag wurde am 20.07.2002 um 10:20 von Prefect bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
007
20.07.2002, 12:47
Mazze



Hm?
Ist das nicht das gleiche?
ob man
int x;
int y;

oder
int x, y;
schreibt?

--

BattleTech-MOD:
http://bthl.unitedgaming.net/

zum Seitenanfang zum Seitenende Profil || Suche
008
20.07.2002, 13:19
apfelkorn



doch, es ist das gleiche, nur manchmal ist es übersichtlicher das einzeln zu schreiben.

--

zum Seitenanfang zum Seitenende Profil || Suche
009
20.07.2002, 13:37
Archangel



NEIN, es ist NICHT das gleiche, lest doch mal!

das hängt damit zusammen, dass jede zeile in der strukturdeklaration an 32bit (auf 32 bit-systemen) alignt wird, also 4 bytes.
das bedeutet:

struct a {
char a1;
char a2;
};

verbraucht acht bytes, während:

struct b {
char a1, a2;
};

nur 4 bytes verbraucht. noch ein beispiel:

struct c {
char c1; // 1 byte -> an 32 bit alignt 4 byte
void *p1, *p2; // 8 byte -> an 32 bit alignt auch 8 byte
float f1; // 4 byte -> 4 byte
short s1, s2, s3; // 6 byte -> 8 byte
};

also ist sizeof(struct c) = 4 + 8 + 4 + 8 = 24, und nicht, wie man vermuten könnte, = 1 + 4 + 4 + 4 + 2 + 2 + 2 = 19

anders geschrieben wäre die struct:

struct d {
char c1; // 1 byte -> 4 byte
void *p1; // 4 byte -> 4 byte
void *p2; // 4 byte -> 4 byte
float f1; // 4 byte -> 4 byte
short s1; // 2 byte -> 4 byte
short s2; // 2 byte -> 4 byte
short s3; // 2 byte -> 4 byte
};

hier ist aber sizeof(struct d) = 4 + 4 + 4 + 4 + 4 + 4 + 4 = 28

--

Mar 01 01:10:13 <voice> jo
Mar 01 01:10:40 <voice> bis dann ^^
Mar 01 01:11:20 <Archangel> jo
**** ENDING LOGGING AT Tue Mar 1 01:58:13 2005

zum Seitenanfang zum Seitenende Profil || Suche
010
20.07.2002, 22:12
Prefect



Archangel: Leider enthält dein Post recht viel Käse.
Es gibt keinen Unterschied zwischen:

Quellcode:
struct foo {
    char a;
    char b;
};

und

Quellcode:
struct foo {
    char a, b;
};

Die Alignments des Compilers sind nicht pro Zeile. Es ist nur so, daß (und AFAIK ist das im Standard vorgeschrieben) der Compiler die Reihenfolge der Elemente einer struct _nie_ ändert. Gleichzeitig versucht der Compiler aber, für optimale Datenzugriffe die Variablen auf vernünftige Grenzen zu alignen. Wenn dann zwischen zwei Chars ein Int ist führt dieses Alignment zu Speicherverschwendung. Ob zwei aufeinanderfolgende Membervariablen in einer Zeile oder in zwei geschrieben werden ist dabei allerdings irrelevant.

cu,
Prefect

--

Widelands - Gemütliche Aufbaustrategie, Free Software
Noch ein Blog - Lerne, wie die Welt wirklich ist, aber vergiss niemals, wie sie sein sollte.

zum Seitenanfang zum Seitenende Profil || Suche
011
20.07.2002, 22:16
Archangel



hrm ok prefect, du hast recht.. leider hatt ich die structs in meinem testproggi so gewählt, dass es genau so hinkam..

(nein es waren nicht die structs, die ich gepostet hab..)

also sry für den mist, den ich verzapft hab :|

--

Mar 01 01:10:13 <voice> jo
Mar 01 01:10:40 <voice> bis dann ^^
Mar 01 01:11:20 <Archangel> jo
**** ENDING LOGGING AT Tue Mar 1 01:58:13 2005


Dieser Beitrag wurde am 20.07.2002 um 22:31 von Archangel bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche