Welcher Sprache gehört die Zukunft?
-
Xin schrieb:
... int a(4); // Initialisierung int a = 4; // Initialisierung ...
wer hat sich eigentlich so einen schwachsinn einfallen lassen?
-
Mr. N schrieb:
CStoll schrieb:
Irgendwann werden wir sie dem Computer diktieren
Ist das nicht super-unpraktisch?
Ich sag' nur Star Trek: "Hallo, Computer" (oder auch "Tastatur - wie rückständig"). Irgendwann wird es darauf hinauslaufen, daß wir dem Computer nur noch unser Problem schildern und er dann selbständig nach einer passenden Lösung sucht
DEvent schrieb:
Ich habe zuerst in Pascal programmiert und dann in C++. Damals fand ich es super nicht mehr begin und end schreiben zu müssen, sondern einfach { }.
Als ich angefangen habe mit C++, habe ich die begin/end's schon vermisst - aber man gewöhnt sich ja an alles
Das einzige was ich nicht verstehe ist, dass man einige Operatoren als friends definieren muss, aber andere als normale Klassenmethoden belassen kann. Wieso wurde nicht einfach alle Operatoren als Methoden definiert, die sich so wie erwartet verhalten (also wozu der Unterschied zwischen Ops als friend und Ops als Methoden)?
Das hat aber nichts mit der C-Syntax als Sprachgrundlage zu tun, sondern mit der Auflösung der operator-Überladung. Ein C++ Operator wird entweder als Methode des ersten Operanden oder als globale Funktion definiert - wenn du dem ersten Operanden keine zusätzlichen Methoden mitgeben kannst (weil's z.B. ein Build-in Typ ist), bleibt nur die globale Funktion (und die braucht im Ernstfall halt friend-Zugriff).
pale dog schrieb:
Xin schrieb:
... int a(4); // Initialisierung int a = 4; // Initialisierung ...
wer hat sich eigentlich so einen schwachsinn einfallen lassen?
Das Standardisierungskommitee (sowas ist besonders nützlich, wenn du mit Templates arbeiten willst - eigene Typen können mit der
T a(x);
Syntax initialisiert werden, und im Gegensatz zu Java sollen Build-ins weitgehend austauschbar mit eigenen Typen sein).Edit: (ich wußte doch, ich hab' etwas vergessen)
rüdiger schrieb:
CStoll schrieb:
C hat eine klare Programmstruktur und ist nebenbei standardisiert (letzteres können Basic und Pascal nicht von sich behaupten).
äh, es gibt ISO Standards sowohl für BASIC, als auch PASCAL.
Aber es gibt deutlich mehr BASIC-Dialekte als C-Variationen
(vergleich z.B. C64 Basic mit VBA - kaum zu glauben, daß die Sprachen miteinander verwandt sein sollen)
-
CStoll schrieb:
eigene Typen können mit der
T a(x);
Syntax initialisiert werden, und im Gegensatz zu Java sollen Build-ins weitgehend austauschbar mit eigenen Typen sein).ach du schreck
, dann soll das wohl einen konstruktoraufruf andeuten.
ich hasse C++!
-
pale dog schrieb:
CStoll schrieb:
eigene Typen können mit der
T a(x);
Syntax initialisiert werden, und im Gegensatz zu Java sollen Build-ins weitgehend austauschbar mit eigenen Typen sein).ach du schreck
, dann soll das wohl einen konstruktoraufruf andeuten.
ich hasse C++!Ich bin ehrlich gesagt auch kein Verfechter von C++, aber du siehst wirklich Probleme, wo keine sind.
-
pale dog schrieb:
CStoll schrieb:
eigene Typen können mit der
T a(x);
Syntax initialisiert werden, und im Gegensatz zu Java sollen Build-ins weitgehend austauschbar mit eigenen Typen sein).ach du schreck
, dann soll das wohl einen konstruktoraufruf andeuten.
ich hasse C++!Das soll, keinen Konstruktoraufruf andeuten, das ist ein Konstruktor-Aufruf
-
pale dog schrieb:
CStoll schrieb:
eigene Typen können mit der
T a(x);
Syntax initialisiert werden, und im Gegensatz zu Java sollen Build-ins weitgehend austauschbar mit eigenen Typen sein).ach du schreck
, dann soll das wohl einen konstruktoraufruf andeuten.
ich hasse C++!LOL! Und sowas nennt sich Programmierer...
-
Lügner schrieb:
Ich finde setf wirklich unintuitiv.
Hat das was mit der Syntax zu tun?
Nein, damit, dass das erste Argument von setf syntaktisch ein Funktionsaufruf sein kann, aber die Funktion gar nicht aufgerufen wird. Kurz für Nicht-Lisp-Kenner: Man kann eine Variablenzuweisung folgendermaßen machen:
(setq a 42) ;; wie a = 42 in C
Für Zuweisung von Strukturkomponenten oder Listen- oder Arrayelementen funktioniert das aber nicht mehr, da das keine Variablen sind. Dafür gibts dann spezielle Funktionen, die aus Traditionsgründen noch existieren, aber recht unintuitiv sind. Die Alternative ist das setf-Makro. In der einfachsten Form funktioniert es wie setq:
(setf a 42) ;; wird als Makro expandiert zu (setq a 42)
.
Man kann allerdings auch sowas machen wie(setf (car mylist) 23) ;; setzt das erste Element ("car") der Liste auf 23
. Die Idee ist, dass das erste Argument von setf ein generalisierter "Platz" ist, dem man auch irgendeine Art und Weise etwas zuweisen kann. Man kann das intuitiv so verstehen, dass setf dafür sorgt, dass (car mylist) danach gleich 23 ist.
Das ganze ist erweiterbar, man kann zu jeder Funktion eine setf-Expansion definieren, so dass auch(setf (meine-funktion a b c) 4711)
funktioniert. Wenn man die Idee der "places" verstanden hat, ist das ganze eigentlich ziemlich intuitiv. Mr.N hat nur ein Problem damit, dass da syntaktisch ein Funktionsaufruf steht, der keiner ist. Da Makros und Spezialoperatoren (if, and, let, defun, do ...) aber in Lisp meistens die Eigenschaft haben, dass nicht alle Argumente ausgewertet werden, ist das dieses Problem eigentlich keins.
-
pale dog schrieb:
ach du schreck
, dann soll das wohl einen konstruktoraufruf andeuten.
ich hasse C++!Schaffen wir es, den Hass derart zu schüren dass Du dem C++-Board fernbleibst?
(scnr)
Ein Beispiel, wo es meiner Meinung nach unintuitiv ist: (Annahme: T ist kein POD)
T t(); // Funktion int i(); // Funktion T t; // Default-Konstruiert ein T int i; // Uninitialisierter Integer AnyClass::AnyClass() : t() // Default-Konstruiert ein T , i() // Default-Initialisiert ein int (mit 0) {} T f = T(); // Default-Konstruiert ein T, benötigt aber Copy-Semantik int f = int(); // Default-Initialisiert ein int (mit 0), benötigt zwar auch Copy-Semantik, aber die ist für PODs gegeben
Damit ist es nicht möglich, ein Template zu schreiben, welches sowohl PODs als auch z.B. noncopyable non-PODs default-initialisiert, es seidenn dies geschieht in einer Initialisierungsliste. (Oder übersehe ich was?)
-
Bashar schrieb:
Mr.N hat nur ein Problem damit, dass da syntaktisch ein Funktionsaufruf steht, der keiner ist. Da Makros und Spezialoperatoren (if, and, let, defun, do ...) aber in Lisp meistens die Eigenschaft haben, dass nicht alle Argumente ausgewertet werden, ist das dieses Problem eigentlich keins.
Naja, es ist kein Problem. Aber eben nicht intuitiv.
CStoll schrieb:
Ich sag' nur Star Trek: "Hallo, Computer" (oder auch "Tastatur - wie rückständig").
Ich sag' nur: "Äh ja toll."
Science-Fiction-Autoren entscheiden ja nicht nach Praktikabilität, ob sie etwas schreiben, umgesetzt wird aber meistens nur, was praktikabel ist (bzw. eine Untermenge davon).
Ich will mal versuchen mir vorzustellen, wie das optimalerweise laufen würde:
Rede an den Computer schrieb:
"In the function template Foobar dependent on typename Type One and integral constant Number One specialised on Number One equals 4, after the assignment of a list to Spritzlidi add an assignment of Spritzlidi appended by Spritzlidi to Spritzlidi Two and replace all subsequent occurences of Spritzlidi in scope by Spritzlidi Two."
Mir würde da das Sprachzentrum zu sehr belastet werden.
pale dog schrieb:
wer hat sich eigentlich so einen schwachsinn einfallen lassen?
Offensichtlich klügere Leute als du, da es Sinn macht.
-
Der Durchschnitt schrieb:
Ich bin ehrlich gesagt auch kein Verfechter von C++, aber du siehst wirklich Probleme, wo keine sind.
für mich isses kein problem. irgendwie passt ja auch zu dieser fricklersprache
CStoll schrieb:
Das soll, keinen Konstruktoraufruf andeuten, das ist ein Konstruktor-Aufruf
konstruktoren für int's? der erfinder der registermaschine u.ä. leute würden im grabe rotieren
Artchi schrieb:
LOL! Und sowas nennt sich Programmierer...
nennt sich sowas nicht! auch wenn sowas manchmal was programmieren darf.
LordJaxom schrieb:
Schaffen wir es, den Hass derart zu schüren dass Du dem C++-Board fernbleibst?
(scnr)
dazu müsst ihr ein paar foren abschaffen. wenn nur noch das c++ forum da ist, gehe ich weg...
-
pale dog schrieb:
konstruktoren für int's? der erfinder der registermaschine u.ä. leute würden im grabe rotieren
Wo ist das Problem?
(Du bist übrigens ein wesentlich schlimmerer Troll als ich. Und es wird wieder mal Zeit für einen neuen Nick, gell?)
-
Mr. N schrieb:
Science-Fiction-Autoren entscheiden ja nicht nach Praktikabilität, ob sie etwas schreiben, umgesetzt wird aber meistens nur, was praktikabel ist (bzw. eine Untermenge davon).
Das läuft dann auf den (früher bereits erwähnten) Unterschied zwischen Programmentwickler und Anwender hinaus. Der Entwickler schreibt fein strukturierte (und mikro-optimierte) Algortihmen und wird wohl auch in der zukunft noch schreiben (bzw. Programmtexte eintippen), der Anwender schmeißt dem Computer sein Problem entgegen und erwartet eine Lösung, ohne sich um die genauen Abläufe kümmern zu wollen.
(und SF-Autoren beschreiben meist die Welt aus Sicht von Anwendern ;))Ich will mal versuchen mir vorzustellen, wie das optimalerweise laufen würde:
Rede an den Computer schrieb:
"In the function template Foobar dependent on typename Type One and integral constant Number One specialised on Number One equals 4, after the assignment of a list to Spritzlidi add an assignment of Spritzlidi appended by Spritzlidi to Spritzlidi Two and replace all subsequent occurences of Spritzlidi in scope by Spritzlidi Two."
Mir würde da das Sprachzentrum zu sehr belastet werden.
Ja, diktierte Programme basieren bestimmt nicht auf C- oder Basic-artiger Syntax. Die kannst du zwar recht übersichtlich aufschreiben, aber nur sehr umständlich vorlesen - für sprachgesteuerte Entwicklungsumgebungen wird sich zwangsläufig etwas eigenständiges entwickeln (was sich eher an der menschlichen Sprache orientieren wird).
-
Mr. N schrieb:
Bashar schrieb:
Mr.N hat nur ein Problem damit, dass da syntaktisch ein Funktionsaufruf steht, der keiner ist. Da Makros und Spezialoperatoren (if, and, let, defun, do ...) aber in Lisp meistens die Eigenschaft haben, dass nicht alle Argumente ausgewertet werden, ist das dieses Problem eigentlich keins.
Naja, es ist kein Problem. Aber eben nicht intuitiv.
Es ist doch sehr intuitiv von der Benutzung und Lesbarkeit. Bei
(setf (car a) 42)
weiß man doch sofort was gemeint ist. Das daraus resultierende(rplaca a 42)
, finde ich dagegen weniger intuitiv. :pAber welche Programmiersprache ist rein intuitiv? Selbst Sprachen wie Python, Ruby oder ADA haben ihre Grenzen
-
pale dog schrieb:
CStoll schrieb:
Das soll, keinen Konstruktoraufruf andeuten, das ist ein Konstruktor-Aufruf
konstruktoren für int's? der erfinder der registermaschine u.ä. leute würden im grabe rotieren
Was hat denn der damit zu tun? C++ ist keine Registermaschine - und wir haben auch kein Problem damit, int-Variablen zu konstruieren
-
Ich glaube, es wäre besser zu fragen: "Welche Sprache ist eine Eintagsfliege".
(Dann würde ich übrigens für C# stimmen)
-
SeppSchrot schrieb:
Ich glaube, es wäre besser zu fragen: "Welche Sprache ist eine Eintagsfliege".
(Dann würde ich übrigens für C# stimmen)
Sachlichkeit kann man bei deiner Signatur ja nicht erwarten...
-
Dann dürfte aber sowas:
4.toString()
auch nicht möglich sein. Aber angeblich soll das ein ganz tolles Feature in manchen Sprachen (C# und Ruby) sein. Aber wenn C++ was mit nativen Typen macht, was etwas OO'isch ist, ist es natürlich schlechtes Design. Oh man, pale dog ist glaub ich DER Troll schlecht hin hier im Forum.
Wann wird pale dog wieder anders heißen? (immerhin hat er sich ja shcon mal von vista nach pale dog transformiert, was kommt als nächstes?)
-
Artchi schrieb:
Oh man, pale dog ist glaub ich DER Troll schlecht hin hier im Forum.
Da dürftest du recht haben. Und inzwischen hab' sogar ich es aufgegeben, ihm die Vorteile von C++ nahebringen zu wollen (meistens jedenfalls).
Wann wird pale dog wieder anders heißen? (immerhin hat er sich ja shcon mal von vista nach pale dog transformiert, was kommt als nächstes?)
Sollen wir schonmal anfangen, Namensvorschläge zu sammeln
(mir fällt auf Anhieb noch 'net' und 'ten' ein - kennt jemand zufällig die komplette Sammlung?)
-
CStoll schrieb:
Wann wird pale dog wieder anders heißen? (immerhin hat er sich ja shcon mal von vista nach pale dog transformiert, was kommt als nächstes?)
Sollen wir schonmal anfangen, Namensvorschläge zu sammeln
(mir fällt auf Anhieb noch 'net' und 'ten' ein - kennt jemand zufällig die komplette Sammlung?)
Wie wärs denn mit "sharp"?
-
Mr. N schrieb:
(Du bist übrigens ein wesentlich schlimmerer Troll als ich...
es kann nur einen geben
CStoll schrieb:
...und wir haben auch kein Problem damit, int-Variablen zu konstruieren
bitweise? oder darf's auch schneller gehen?
Artchi schrieb:
Oh man, pale dog ist glaub ich DER Troll schlecht hin hier im Forum.
Wann wird pale dog wieder anders heißen? (immerhin hat er sich ja shcon mal von vista nach pale dog transformiert, was kommt als nächstes?)
weiss ich selbst noch nicht, aber ihr werdet mich bestimmt wieder schnell enttarnen
CStoll schrieb:
Und inzwischen hab' sogar ich es aufgegeben, ihm die Vorteile von C++ nahebringen zu wollen...
du hast noch nie einen wirklichen vorteil genannt, immer nur so kleinigkeiten, die manchmal gut, aber oft auch weniger gut sind. vielleicht gibt es keine echten vorteile?