Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
025
28.02.2001, 19:16
CPlusPlus



Ja, es gibt eine internationale Bestellmöglichkeit...
Aber da kostet das ca. 15$ für den Versand :/

--

zum Seitenanfang zum Seitenende Profil || Suche
026
28.02.2001, 19:51
Buy-Menu-Man



Hi!
Also C# wird C++ nicht verdrängen, sondern eher java.....wenn überhaupt!
Aber wird es jemals so eine Sprache wie C++ geben, die besser als C++ ist???
Also ich meine, eine Sprache, die so eine hohe Bandbreite wie die von C++ hat!

Also ich glaub nicht, dass es das in nächster Zeit geben wird!

Ach ja...das hab ich ja noch fragen wollen:
Habt ihr die Betas schon bekommen????
Wie findet ihr das neue Design?

cu

--

http://battletech-hl.teamfortress2.de

zum Seitenanfang zum Seitenende Profil || Suche
027
28.02.2001, 22:31
Another1



na klar wird es die geben .. die sprachen werden immer mehr zu Moddellierungsprachen werden da es immer weniger auf optimierung der geschwindigkeit ankommen wird. Das ist das gleiche wie es schon immer war

ASM->Fortran->->C->C++->ToBeContinued??
-> Basic
->Pascal
....

--

Another1

...relaxing..atm =)
... und Schweiz suckt!

zum Seitenanfang zum Seitenende Profil || Suche
028
01.03.2001, 09:13
Kriz



C#'s Zugriff auf Instanzen ist aus meiner Sicht eine rein evolutionäre Sache:
Der berühmt-berüchtigte Zeigeroperator -> aus C/C++ ist einer der häufigsten Fehlerquellen in C/C++ Programmen. Der reine Punktoperator ist ja in Java schon erfolgreich als Folgeoperator java.lang.sys.arschlecken.wasweißich integriert worden als Resultat der URL-Domänen-Technik. Wieso dieser Schritt negativ in Bezug auf Instanzenzugriff sein soll, ist mir rätselhaft. Tja, an sich ist der Folgeoperator auch in C/C++ kein unbekannte Gestalt mehr:

struct A
{
struct B a_1;
} test;

x = test . a_1 . irgendwas;

Ich bin der Meinung, daß man auch OHNE Zeiger hervorragend arbeiten kann, auch wenn ich mich an dieses Fehlerrelikt gewöhnt habe. Die drei Call-Techniken Call-By-Value, Call-By-Reference und Call-By-Pointer sind irgendwie zuviel. Wenn ich ohne Kopien in Funktionen arbeiten möchte, reicht ein simples Call-By-Reference, da brauche ich nicht unbedingt ein Call-By-Pointer. Mittlerweile sehe ich keine Vorteile mehr mit den Zeigern zu arbeiten. Und ein "Geschwindigkeitsvorteil" der Zeiger sehe ich angesichts bei der Leistungsfähigkeit moderner PC's auch nicht mehr.

Hier heißt es mal wieder: Abwarten und Bier trinken...

Cu

--

K:R-I)Z++
"CSS ist cascading style sheets. Und nicht so'n Ranzspiel." - dp
In memory of Voice († 2005/03/30)

zum Seitenanfang zum Seitenende Profil || Suche
029
01.03.2001, 15:42
DarKnight



Wenn ich ehrlich bin....In meinen Programmen verwende ich nie Zeiger. Vielleicht ist es ja schlechter Programmierstil..aber Instanzen erscheinen mir logischer und der Code ist ohne Zeiger besser lesbar.

--

void CHudSayText :: EnsureTextFitsInOneLineAndWrapIfHaveTo( int line ) -- Aja?

zum Seitenanfang zum Seitenende Profil || Suche
030
01.03.2001, 15:46
Prefect



Nun ja, ich denke schon, dass es einen Unterschied macht, ob man Pointer verwendet oder ein Sub-Objekt direkt in eine Struktur einbettet.

Meiner Meinung nach war übrigens Call by Reference eine schlechte Idee, bzw. die gute Idee dahinter wurde mißbraucht. In Einzelfällen - besonders beim Übergeben einer fetten Struktur an eine Funktion die diese eigentlich nur lesen will - ist die Call by Reference-Methode logisch und einsichtig. Leider wird sie so mißbraucht, dass manchmal nicht klar wird, ob ein Objekt jetzt als Pointer oder direkte Value angesehen werden soll. Ähnliches wird passieren, wenn es kein -> mehr gibt.

Es macht nämlich durchaus einen großen Unterschied wie Daten angeordnet sind, und das ist nicht ein Hirngespinst von mir. Einer der Programmierer von Age of Empires II hatte einen Artikel auf Gamasutra, in der er die Optimierungen in Age2 beschrieb. In einigen Fällen konnten sie Algorithmen auf ein vielfaches Beschleunigen, indem sie einfach das Datenlayout änderten.
Ohne Pointer bzw. ohne klare Unterscheidung zwischen Zugriffsarten verliert man ein wertvolles Stückchen Kontrolle über dieses Datenlayout.

---
(...) sehe ich angesichts bei der Leistungsfähigkeit moderner PC's auch nicht mehr.
---
Abgesehen davon dass ich die Aussage, Zeiger hätten Geschwindigkeitsvorteile, auch nicht unterstütze: der letzte Teil des Statements ruft bei mir sehr viel negative Emotion hervor, und das nicht ohne Grund.
Leute die so denken sind es, die die immer beklagte Hardwareanforderungsschraube nach oben drehen:
Produkt A wird entwickelt - "Naja, bald wird es eh leistungsfähigere Prozessoren geben, also müssen wir ja nicht so auf Optimierungen achten"
Produkt A kommt raus und läuft einigermaßen, aber sicher nicht bei allen zufriedenstellend. Inzwischen:
Produkt A v2 wird entwickelt - "Naja, bis wir das fertig haben werden die, die Upgraden eh bessere Computer haben."
Produkt A v2 kommt raus und läuft einigermaßen, aber sicher nicht bei allen zufriedenstellen.
Repeat till infinity...

Klar dass das den Anwendern nicht paßt. Interessanterweise argumentieren so aber gerade die Firmen, die sich die Zufriedenheit der Kunden so hoch auf die Fahnen geschrieben haben...

Es gibt keine, aber auch GAR KEINE Ausrede dafür, keine Optimierungen zu machen. Punkt.

Hier möchte ich auch noch was zu den tollen Features wie automatisches Recycling (Java & C#) anfügen. Diese tolle "Feature" ist absoluter nonsense für ernsthafte Anwendungen, ganz besonders Serveranwendungen. Es ist doch logischj, dass der Verwaltungsaufwand für ein solches Feature enorm ist - es zeigt nur schlecht Programmierpraxis auf (nämlich das Löschen von nicht benötigten Speicherbereichen zu unterlassen). Wenn irgendjemand mir jetzt mit Memoryleaks kommt, so möge er doch folgendes Entwicklungsszenario überdenken: Warum nimmt man nicht einfach Standard-Speicherreservierungsalgorithmen her (new/delete, malloc()/free()), und für Debugbuilds wird eine spezielle Erweiterung eingesetzt, die eine Art Recycling unterstützt, aber eine Fehler-(Debug)meldung ausgibt, wenn Recycling tatsächlich nötig wäre. Auf diese Weise können robuste UND effektive Programme geschrieben werden.
Anscheinen ist aber "professionellen" Programmieren die Verwendung von Präprozessordirektiven & co. unbekannt.

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
031
01.03.2001, 16:19
DarKnight



Okay. Wenn ich jetzt Spiele wie AoE, HL oder B&W programmieren würde wär das ja was anderes. Im Moment habe ich noch keine Probleme mit der Grösse von parametern in Funktionen! =)
Aber das könnte sich ja schnell ändern. Okay, also da ist ein Zeiger was praktisches!

--

void CHudSayText :: EnsureTextFitsInOneLineAndWrapIfHaveTo( int line ) -- Aja?

zum Seitenanfang zum Seitenende Profil || Suche
032
14.03.2001, 23:11
*RED*FirE



zeiger sind nicht praktischer sie sind einfach notwendig denn mit ihnen kannst du zb in einer funktion die variable in main ändern
beispiel prog

#include <iostream.h>

void swap(int *x, int *y);

int main()
{
int x = 5, y = 10;

cout << "Main. Vor Vertauschung, x: " << x << " y: " << y << "\n";
swap(&x,&y);
cout << "Main. Nach Vertauschung, x " << x << " y: " << y << "\n";
return 0;
}

void swap (int *px, int *py)
{
int temp;

cout << "Swap. Vor Vertauschung, *px: " << *px << " *py: " << *py << "\n";

temp = *px;
*px = *py;
*py = temp;

cout << "Swap. Nach Vertauschung, *px: " << *px << " *py: " << *py << "\n";

}

dies ist ein ausführbares programm

--

zum Seitenanfang zum Seitenende Profil || Suche
033
18.03.2001, 17:41
Prefect



int a,b;
a ^= b;
b ^= a;
a ^= b;

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
034
18.03.2001, 19:53
Buy-Menu-Man



Für das Swap Ding brauchst du doch keine Zeiger!

--

http://battletech-hl.teamfortress2.de

zum Seitenanfang zum Seitenende Profil || Suche
035
18.03.2001, 23:33
Kriz



LOL @ RedFire

Zeiger haben nur einen Vorteil, der aber günstig ist (und aus der Zeit der speicherarmen PC's stammt):

a) Sie benötigen (heute) nur genau ein 32-Bit Integer-Segment Speicherplatz für die Adresse. Das wird allerdings erst dann interessant, wenn man Datentypen benutzt, die >= 32 Bit sind bzw. 16 Bit auf älteren Zeigersystemen. Ein Byte per Zeiger zu übergeben ist sinnlos (vom char* mal abgesehen)...
b) Man kann prima (wie in Assembler auch) mit Zeigern durch Arrays durchfahren wie der geölte Blitz durch Zeus' Arschkerbe... *ggg*

@Prefect: Gut durchdacht :-)

Cu

--

K:R-I)Z++
"CSS ist cascading style sheets. Und nicht so'n Ranzspiel." - dp
In memory of Voice († 2005/03/30)

zum Seitenanfang zum Seitenende Profil || Suche
036
19.03.2001, 00:05
[PE]Spinator



@Perfect: Kannst du das mal erläutern ;)

--

This post was written using Opera 7.0 (http://www.opera.com)

zum Seitenanfang zum Seitenende Profil || Suche
037
19.03.2001, 16:25
*RED*FirE



ach so das wusste ich noch nicht
ich bin erst neu im c++ :)))

--

zum Seitenanfang zum Seitenende Profil || Suche
038
19.03.2001, 17:21
Kriz



@Spinator:

Pass uff :)

Prefects Algorithmus zum Wertetausch ist der schnellste, den man in C/C++ realisieren kann, da er auf prozessorgestütze Abläufe basiert (will sagen, daß es hierfür bereits maschinensprachige Befehle im Prozessor gibt). Das, was Prefect euch sagen will, ist Grundlagen der Informatik *ggg*:

Zum Bleistift nehmen wir diese zwei Werte:

a = 1010 (dezimal = 10)
b = 0110 (dezimal = 6)

In C/C++ existiert der Operator ^ (XOR-Operator = Exklusives Oder bzw. Ausschließendes Oder). XOR gehört zu den Bool'schen Operatoren und unterliegt der Bool'schen Algebra. Das nur nebenbei...

Die XOR-Operation auf zwei bool'sche Ausdrücke bewirkt folgendes:

0 xor 0 = 0
0 xor 1 = 1
1 xor 0 = 1
1 xor 1 = 0

Der erste von Prefects Befehlen lautet: a ^= b;
Ausgeschrieben auch interpretierbar als: a = a^b;
Bedeutet de facto: a = 1010 ^ 0110
Ausgeschrieben:

1010
0110
-----
1100 = a

2. Befehl: b ^= a; --> b = b^a; --> b = 0110 ^ 1100

0110
1100
-----
1010 = b (siehe an, der Wert vom vorherigen a...)

3. Befehl: a ^= b; --> a = a^b; --> a = 1100 ^ 1010

1100
1010
-----
0110 = a (siehe an, der Wert vom vorherigen b...)

a = 0110
b = 1010

Das ist der ganze Zauber... Mit Tauschen per Variablen geht's zwar auch, aber es ist langsamer. Der XOR-Operator wird als Bestandteil des Prozessorkerns direkt ausgeführt und zwar etliche Male schneller als irgendwie anders!

Cu

--

K:R-I)Z++
"CSS ist cascading style sheets. Und nicht so'n Ranzspiel." - dp
In memory of Voice († 2005/03/30)

zum Seitenanfang zum Seitenende Profil || Suche
039
19.03.2001, 18:47
Buy-Menu-Man



WOW.........ziemlich ausführlich erklärt!

--

http://battletech-hl.teamfortress2.de

zum Seitenanfang zum Seitenende Profil || Suche
040
19.03.2001, 18:48
[PE]Spinator



Goil, danke für die ausführliche Erklärung... Ich dachte ^ == Hoch :)

--

This post was written using Opera 7.0 (http://www.opera.com)

zum Seitenanfang zum Seitenende Profil || Suche
041
19.03.2001, 20:39
DarKnight



Hehe....so ist das in Basic! =) Ob es auch in anderen Sprachen so ist wiess ich nicht...

Wenn du ne Funktion die mathematisch "Hochrechnet" brauchst, kann ich dir eine geben! =)) Brauchst du net aber ich hab mal aus Jux und Dollerei (weil ich net wusste, dass es es schon eine gibt) eine programmiert (ganz easy). Naja bis mich dann der gute Kriz -- *ggg* -- darauf hingewiesen hat, dass es schon eine gibt!

Naja...war das jetzt interessant???? egal..... =)

--

void CHudSayText :: EnsureTextFitsInOneLineAndWrapIfHaveTo( int line ) -- Aja?

zum Seitenanfang zum Seitenende Profil || Suche
042
19.03.2001, 20:56
Prefect



Hehe... das mit dem XOR-Swap ist so ein kleiner Spaß aus der Assemblerprogrammierung (bei der beim i386 leider recht wenig Register vorhanden sind).
Ob der XOR-Swap wirklich schneller ist weiß ich nicht... muß mal testen. Gute Compiler sollten nämlich die tmp-Variable eh in einem Register abspeichern, und dann ist's eigentlich egal (es sei denn dem Compiler gehen die Register zum optimieren aus.)

/me geht testen.

[edit]
So. Folgender Code (die Funktionen sind natürlich nur Schikane *g*):
void loads_of_xor_swaps(int rpts)
{
int a, b;

a = rand();
b = rand();

while(rpts--) {
a ^= b;
b ^= a;
a ^= b;
}
}

void loads_of_tmp_swaps(int rpts)
{
int a, b;

a = rand();
b = rand();

while(rpts--) {
int tmp;
tmp = a;
a = b;
b = tmp;
}
}

void one_xor_swap(int *a, int *b)
{
*a ^= *b;
*b ^= *a;
*a ^= *b;
}

void one_tmp_swap(int *a, int *b)
{
int tmp;
tmp = *a;
*a = *b;
*b = tmp;
}


int main()
{
struct timeval tv_start, tv_end;
int a, b, i;
int msecs;

printf("Swap mit XORs: ");
gettimeofday(&tv_start, 0);
loads_of_xor_swaps(500*1000*1000);
gettimeofday(&tv_end, 0);
msecs = 1000*(tv_end.tv_sec-tv_start.tv_sec) + (tv_end.tv_usec-tv_start.tv_usec)/1000;
printf("%lu ms\n", msecs);

printf("Swap mit TMPs: ");
gettimeofday(&tv_start, 0);
loads_of_xor_swaps(500*1000*1000);
gettimeofday(&tv_end, 0);
msecs = 1000*(tv_end.tv_sec-tv_start.tv_sec) + (tv_end.tv_usec-tv_start.tv_usec)/1000;
printf("%lu ms\n", msecs);

printf("Realistischer Swap mit XORs: ");
gettimeofday(&tv_start, 0);
for(i = 0; i < 10*1000*1000; i++) {
a = rand();
b = rand();
one_xor_swap(&a, &b);
}
gettimeofday(&tv_end, 0);
msecs = 1000*(tv_end.tv_sec-tv_start.tv_sec) + (tv_end.tv_usec-tv_start.tv_usec)/1000;
printf("%lu ms\n", msecs);

printf("Realistischer Swap mit TMPs: ");
gettimeofday(&tv_start, 0);
for(i = 0; i < 10*1000*1000; i++) {
a = rand();
b = rand();
one_tmp_swap(&a, &b);
}
gettimeofday(&tv_end, 0);
msecs = 1000*(tv_end.tv_sec-tv_start.tv_sec) + (tv_end.tv_usec-tv_start.tv_usec)/1000;
printf("%lu ms\n", msecs);

return 0;
}

Mit folgendem Ergebnis:
Swap mit XORs: 3711 ms
Swap mit TMPs: 3618 ms
Realistischer Swap mit XORs: 6674 ms
Realistischer Swap mit TMPs: 6706 ms

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
043
20.03.2001, 13:10
Buy-Menu-Man



Tja....beim ersten ist es langsamer!
Beim 2. schneller......
Wieso????
Gibt es da eine logische Erklärung?

--

http://battletech-hl.teamfortress2.de

zum Seitenanfang zum Seitenende Profil || Suche
044
20.03.2001, 19:48
Prefect



Nicht sicher... es könnte mit der Optimierung von GCC zusammenhängen, oder aber mit Programmen, die im Hintergrund laufen...

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
045
20.03.2001, 20:22
DarKnight



Das Ergebnis ist generell zu knapp um gute Schlüsse zu ziehen. Also ist es scheissegal was man macht. Ob man nun so Swapt oder mit BITs. =)

Naja kommt bestimmt aber auch auf den Compiler an.

--

void CHudSayText :: EnsureTextFitsInOneLineAndWrapIfHaveTo( int line ) -- Aja?

zum Seitenanfang zum Seitenende Profil || Suche
046
21.03.2001, 11:42
Xave



Wollt ihr wissen, warum MS C# gemacht hat?
Sun hat MS verboten Java in ihrem System zu verwenden. MS will mit der .NET Strategie alles auf einen Standard oder evtl. 2 Bringen. Weil Whistler ziemlich Modular aufgebaut ist benötigt es eine Komponente welche alles zusammen hält (geplant war dazumals Java...). Weil nun Java für MS verboten wurde, haben sie ein gegenstück entwickelt (C#, welches keine ablösung für C++ sein soll).

Auf die Frage ob es was besser geben wird als C++... Ja
Intentional Programming (http://www.research.microsoft.com/research/ip/)
aber dies ist eher eine Vereinfachung alle Sprachen.

VisualStudio.Net -> Naja grafisch angepasst am Whistler (oder neuerdings XP)
Es zeigt schon kleine Details in Sachen .NET strategie und ich habe mich 3h damit befasst und bisher ein paar Kleinigkeiten entdeckt. Ob sich diese Strategie durchsetzten wird: Das zeigt uns die Zukunft

--

zum Seitenanfang zum Seitenende Profil || Suche
047
21.03.2001, 22:58
Kriz



Net ganz, Xave. SUN hat MS nur verboten, Java ohne deren Wissen zu erweitern... Dafür haben die Jungs von MS von SUN gerichtlich was auf den Rüssel bekommen...

Natürlich darf MS Java weiter benutzen, sonst dürfte der IE ja keine Java Applets ausführen. Wenn SUN dies verboten hätte, würde es für Windows auch kein Java geben, denn dann hätte MS bestimmt gesagt: "Nee nee, nix windowsbasierter Java-Interpreter für's SDK..."

Cu

--

K:R-I)Z++
"CSS ist cascading style sheets. Und nicht so'n Ranzspiel." - dp
In memory of Voice († 2005/03/30)

zum Seitenanfang zum Seitenende Profil || Suche
048
25.03.2001, 21:34
Zeeke



Hallo ihr, die ihr die Kinder der Sonne seit!! lol
naja, mal ne Frage, ich hab MS V Studio .NET am 26. Februar bestellt gehabt, und hab es noch immer nicht, darum wollt mal fragen, wie lange ihr denn alle so warten musstet, oder ob ihr auch immer noch wartet...
:)

Ciao

--

zum Seitenanfang zum Seitenende Profil || Suche
049
25.03.2001, 22:12
DarKnight



Bei mir ist auch noch nix da..... =)

--

void CHudSayText :: EnsureTextFitsInOneLineAndWrapIfHaveTo( int line ) -- Aja?

zum Seitenanfang zum Seitenende Profil || Suche