PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C++09 (Teil 1) - Ein Überblick: Sprachfeatures


Gast
2008-02-18, 13:55:24
http://www.c-plusplus.de/forum/viewtopic-var-t-is-204654-and-postdays-is-0-and-postorder-is-asc-and-start-is-0.html

Gast
2008-02-18, 17:11:28
Danke für den Link. :up:

Das ist doch nicht deren ernst das sowas wie:
<.> (: &a) { a = 42; }
gültiger Code ist.

Coda
2008-02-18, 17:12:42
Noch nicht ganz sicher. Aber Lambda-Funktionen wären schon nett.

Gast
2008-02-18, 17:47:50
Noch nicht ganz sicher. Aber Lambda-Funktionen wären schon nett.
Klar sind sie nett. Ist die Frage, ob man da nicht ein bessere Syntax hätte finden können.
Ich hätte mir schon ein paar mehr Reflection-Funktionen gewünscht.

HellHorse
2008-02-18, 19:49:27
Ist es eigentlich sicher, dass es noch in diesem Jahrzehnt schaffen wird, oder sollte man es besser auf C++1x umbenennen?

Coda
2008-02-18, 20:19:59
Du bist fies.

Nasenbaer
2008-02-18, 21:03:39
Ist es eigentlich sicher, dass es noch in diesem Jahrzehnt schaffen wird, oder sollte man es besser auf C++1x umbenennen?
Naja die Khronos Group ist ja nicht dran beteiligt. ;D

Was soll das denn bedeuten?
int i = <.>(int x, int y) (x + y) (42, 23);

Gast
2008-02-18, 21:06:44
Ist es eigentlich sicher, dass es noch in diesem Jahrzehnt schaffen wird, oder sollte man es besser auf C++1x umbenennen?

Es ist ja schon umbenannt worden: C++++

Trap
2008-02-18, 21:11:39
Was soll das denn bedeuten?
int i = <.>(int x, int y) (x + y) (42, 23);
Das ist wohl int i=65; kompliziert hingeschrieben ;)

Nasenbaer
2008-02-18, 21:15:45
Das ist wohl int i=65; kompliziert hingeschrieben ;)
Ah ne Funktion die x und y als Ints entgegen nimmt und beide addiert. Ahja gehts noch übersichtlicher?!

HellHorse
2008-02-19, 22:31:33
Du bist fies.
Fies waere darauf hinzuweisen, dass es sowieso wieder 10 Jahre gehen wird, bis es von allen Compilern anstaendigen Support dafuer gibt.

Trap
2008-02-19, 22:59:39
Und darauf, dass Compiler für vernünftige Sprachen das schon seit über 15 Jahren können ;)

Thomas(:
2008-02-19, 23:47:17
Ohne Lamda-Funktionen sind doch solche Sachen wie std::for_each einfach nutzlos, dadurch wird der Code fast immer länger, und man verstehts nicht so gut.

Gast
2008-02-20, 00:43:21
Ohne Lamda-Funktionen sind doch solche Sachen wie std::for_each einfach nutzlos, dadurch wird der Code fast immer länger, und man verstehts nicht so gut.

Das Lamda-Geraffel ist ist z.B dafür da, um den lästigen Preprozessor endlich mal auf Distanz zu halten. Zudem wirst du bei Lambda-Funktionen endlich vernünftige Fehlermeldungen bekommen. Also ich finds gut.

Neomi
2008-02-20, 02:40:39
Und darauf, dass Compiler für vernünftige Sprachen das schon seit über 15 Jahren können ;)

Genauso, wie man manche Leute nicht eine Kreissäge bedienen lassen sollte, sollte man manche "Programmierer" nicht mit C++ arbeiten lassen. Wer nicht damit klarkommt (wobei ich nichtmal glaube, daß das auf dich zutrifft), sollte tatsächlich besser eine Sprache mit integriertem Kindermädchen nutzen. C++ aber absprechen zu wollen, eine vernünftige Sprache zu sein, zeugt nicht gerade von Kompetenz auf dem Gebiet. Smiley hin oder her.

Ernstgemeinte Frage: woher kommt dein Haß auf C++?

Gast
2008-02-20, 08:13:41
Ernstgemeinte Frage: woher kommt dein Haß auf C++?Ich wollte gerade eigentlich etwas ähnliches wie Trap schreiben ohne das ich dabei irgendwas gegen C++ hätte. Von daher: ist doch egal, bringt Spaß.

Gast
2008-03-10, 09:39:14
Warum wurde denn versäumt einfache Stringvergleiche über switch-Blöcke einzubauen?

Neomi
2008-03-10, 11:16:06
Warum wurde denn versäumt einfache Stringvergleiche über switch-Blöcke einzubauen?

Ein String ist kein integraler Typ. Deshalb ist das nicht schon lange drin, deshalb ist das immer noch nicht drin und deshalb gehört das auch gar nicht erst rein.

Gast
2008-03-10, 13:49:19
dann hätte man std::string wohl zu einem integralen Typ machen sollen.

Gast
2008-03-10, 14:14:03
Ein String ist kein integraler Typ.
Ja und? Hindert einem doch nicht daran, strings in switch zu erlauben?

Coda
2008-03-10, 17:10:18
Natürlich hindert das jemanden daran. String ist eine ganz einfach Klasse und kein Spezialfall.

Neomi
2008-03-10, 17:48:00
dann hätte man std::string wohl zu einem integralen Typ machen sollen.

Ist dir klar, was ein integraler Datentyp ist? Warum frage ich überhaupt, offenbar ist es das nicht.

Ja und? Hindert einem doch nicht daran, strings in switch zu erlauben?

Doch, denn genau das ist eine Bedingung für switch.

Gast
2008-03-10, 17:54:48
man sollte vielleicht erwähnen das der eigentlich Sinn der switch Anweisung darin liegt, dass der Compiler diese Mehrfachabfrage des selben Types sehr gut optimieren kann.
Diese Optimierung klappt aber nur mit ordinalen Datentypen.
Von daher macht es mit Strings nicht viel Sinn.

Gast
2008-03-10, 18:07:16
Doch, denn genau das ist eine Bedingung für switch.
Ja aber man könnte doch diese Bedingung relaxieren.

Nasenbaer
2008-03-10, 18:25:05
Ist dir klar, was ein integraler Datentyp ist?
Da manche das ja nicht erklären wollen, werde ich das mal übernehmen: :biggrin:

Ordinale und integrale Datentypen bezeichen die gleiche Menge von Datentypen. Sie müssen ja strenge totale Ordnung aufweisen, wenn ich das richtig überblicke, d.h. sämtliche Ganzzahltypen erfüllen soetwas.

Das Problem: Ich kann ohne weiteres so eine Ordnung über die lexikographische Ordnung definieren, wenn ich mich nicht irre.
Oder hab ich nen Denkfehler?!

Gast
2008-03-10, 18:43:49
Ja und? Hindert einem doch nicht daran, strings in switch zu erlauben?
Warum sollte man überhaupt Stringvergleich in einem Switch machen wollen?
Strings sind langsam, fehleranfällig und groß. Am besten wechselt man sie möglichst schnell nach der GUI durch eindeutige IDs aus und dann klappts auch mit dem Switch.

Nasenbaer
2008-03-10, 18:50:57
Warum sollte man überhaupt Stringvergleich in einem Switch machen wollen?
Strings sind langsam, fehleranfällig und groß. Am besten wechselt man sie möglichst schnell nach der GUI durch eindeutige IDs aus und dann klappts auch mit dem Switch.
Langsam? Also ich hab keinen 286er mehr zu Hause. Wenn man nicht in ner Schleife ständig die switch-Anweisung nutzt dann sollte das wohl kaum ins Gewicht fallen. Ist natürlich immer auf den Anwendungsfall bezogen aber deswegen sollte man dennoch die Möglichkeit haben Strings per switch zu vergleichen. Erspart einem unübersichtliche if-else if Blöcke. Intern könnten die ja gern wieder so umgewandelt werden aber übersichtlicher ist es allemal und das ist IMO bei weitem wichtiger.

Xmas
2008-03-10, 19:11:28
man sollte vielleicht erwähnen das der eigentlich Sinn der switch Anweisung darin liegt, dass der Compiler diese Mehrfachabfrage des selben Types sehr gut optimieren kann.
Diese Optimierung klappt aber nur mit ordinalen Datentypen.
Von daher macht es mit Strings nicht viel Sinn.
Der "eigentliche Sinn" von Sprachkonstrukten ist meist, die Intention des Anwenders klar und effizient darzustellen. Switch mit Strings ist in anderen Sprachen durchaus sinnvoll, aber dort sind Strings dann auch eingebaut und der Compiler weiß wie der Vergleichsoperator funktioniert oder wie er einen Hash aus dem switch-Argument erzeugen kann.

Gast
2008-03-10, 19:50:31
Warum wurde denn versäumt einfache Stringvergleiche über switch-Blöcke einzubauen?

Dafür gibt es std::map!

Nasenbaer
2008-03-10, 21:29:51
Der "eigentliche Sinn" von Sprachkonstrukten ist meist, die Intention des Anwenders klar und effizient darzustellen. Switch mit Strings ist in anderen Sprachen durchaus sinnvoll, aber dort sind Strings dann auch eingebaut und der Compiler weiß wie der Vergleichsoperator funktioniert oder wie er einen Hash aus dem switch-Argument erzeugen kann.
Naja dem Compiler was "mitteilen" wurde ja auch häufig mit den STL Algorithmen gemacht. Damit hatte man ja C++ um ne for_each Möglichkeit z.B. erweitert. Aber switch-Konstrukte sind deutlic variabler als ein simples for_each, dass für jedes Element ne Funktion aufruft.

Naja aber ist wohl nicht Sinn und Zweck der Erweiterungen C++ in ein Java zu verwandeln - da ist neu entwickeln sicher einfacher.

Gast
2008-03-10, 21:46:20
Naja dem Compiler was "mitteilen" wurde ja auch häufig mit den STL Algorithmen gemacht. Damit hatte man ja C++ um ne for_each Möglichkeit z.B. erweitert. Aber switch-Konstrukte sind deutlic variabler als ein simples for_each, dass für jedes Element ne Funktion aufruft.
Die STL teilt dem Compiler etwas mit?
Du scheinst noch nicht gemerkt zu haben, dass die STL nur eine Ansammlung von Template-Klassen ist, die auf der normalen Sprache aufsetzen. Dort wird nichts gemacht, was nicht jeder gute Programmierer auch selbst machen könnte.

Strings in Switch-Konstrukten sind imo nur etwas für Anfänger oder um etwas schnell zu hacken. Normalerweise baut man alle Komponenten, die auf Strings angewiesen sind generisch auf und kommt nicht in die Verlegenheit ein statisches switch zu verwenden.

Nasenbaer
2008-03-10, 22:13:00
Die STL teilt dem Compiler etwas mit?
Du scheinst noch nicht gemerkt zu haben, dass die STL nur eine Ansammlung von Template-Klassen ist, die auf der normalen Sprache aufsetzen. Dort wird nichts gemacht, was nicht jeder gute Programmierer auch selbst machen könnte.

Strings in Switch-Konstrukten sind imo nur etwas für Anfänger oder um etwas schnell zu hacken. Normalerweise baut man alle Komponenten, die auf Strings angewiesen sind generisch auf und kommt nicht in die Verlegenheit ein statisches switch zu verwenden.
Sorry aber Anführungszeichen sagen dir nichts? Ich weiß, dass die STL ne Menge Template-Klimbim ist. Es ging mir darum, dass damit scheinbar mehr Sprachbefehle möglich sind. Das diese natürlich nur "emuliert" werden ist mir klar. Letzlich werden alle Sprachen auf den gemeinsamen Nenner Assembler runtergebrochen. Es ist nur die Frage wie elegant ich das mit meiner Hochsprache ausdrücken kann.

Gast
2008-03-11, 07:51:43
Natürlich hindert das jemanden daran. String ist eine ganz einfach Klasse und kein Spezialfall. Was sollte einen daran hindern dies trotzdem in einem Switch verwenden zu können? Man könnte sobald eine Klasse einen Vergleichsoperator== implementiert diesen im Switch verwenden oder gar das Switch erweitern, um einen Funktionspointer für einen Vergleich mitzugeben.

Gast
2008-03-11, 12:12:09
Was sollte einen daran hindern dies trotzdem in einem Switch verwenden zu können? Man könnte sobald eine Klasse einen Vergleichsoperator== implementiert diesen im Switch verwenden oder gar das Switch erweitern, um einen Funktionspointer für einen Vergleich mitzugeben.
Dann implementier dir das doch selber mit templates.

Winter[Raven]
2008-04-06, 09:47:26
Nunja, abwarten wie sich das ganze entwickelt....

Nasenbaer
2008-04-06, 12:05:07
;6410803']Nunja, abwarten wie sich das ganze entwickelt....
Welch geistreicher Kommentar nur um diesen Uraltthread wieder auszugraben. ;D