Was kommt nach der Objektorientierung?
-
Xin schrieb:
Und eigentlich bleibt mir nur, Dir eine Frage zu stellen: Hast Du eigentlich irgendetwas von dem, was ich geschrieben habe gelesen?
Ich kann dir sagen, dass ich alle deine Beiträge vollständig durchgelesen habe und den Beitrag von Shade Of Mine voll unterstreiche.
Tipp: Statt immer zu denken, dass die anderen dich nur nicht verstehen, solltest du dir mal überlegen, ob du dich einfach nicht richtig ausdrückst?
Grüssli
-
Ich hab auf den ersten paar Seiten rumgeschaut, als der Thread erstellt wurde, und jetzt hier die letzten 2 Seiten mal überflogen. Frage: Hat Xin seine Idee mittlerweile verraten oder werden immer noch pseudokonstruktive Metadiskussionen gehalten?
-
Dravere schrieb:
Xin schrieb:
Und eigentlich bleibt mir nur, Dir eine Frage zu stellen: Hast Du eigentlich irgendetwas von dem, was ich geschrieben habe gelesen?
Ich kann dir sagen, dass ich alle deine Beiträge vollständig durchgelesen habe und den Beitrag von Shade Of Mine voll unterstreiche.
Tipp: Statt immer zu denken, dass die anderen dich nur nicht verstehen, solltest du dir mal überlegen, ob du dich einfach nicht richtig ausdrückst?
Jetzt mal im Ernst...
Shade Of Mine schrieb:
Vorallem weil du, wenn du so ein Problem noch nicht lösen musstest, es sofort als uninteressant und trivial hinstellst. Wie zB die Diskussion über Decimal und Datenbanken.
Zitat von mir: Für eine Klasse System.Decimal, die man auch in C++ repräsentieren kann auf sinnvolle Sprachfeatures zu verzichten, wie Const-Correctness, C++-Referenzen, Templates oder Mehrfachvererbung, halte ich für sehr fraglich. Diese Sachen sind in C# nicht repräsentierbar.
Da steht nichts von uninteressant. Da steht in C++ machbar. Und ob das trivial ist, müssen wir da ernsthaft drüber streiten? Bitte Hand hoch, wer eine Klasse, die Dezimalzahlen repräsentiert, als nicht trivial einstuft.
Shade Of Mine schrieb:
Ich habe schon verstanden, alles was du nicht in C++ schon gemacht hast, ist irrelevant und braucht man nicht. Soviel ist schon rüber gekommen
Zitat von mir zu einer solchen Behauptung: "Es gilt darum gute Lösungen für Probleme zu finden. Eine beliebte Lösung muss deswegen nicht richtig sein. Ein für mich uninteressantes Problem bleibt aber wichtig."
Ich weiß nicht, wogegen ich hier noch anreden soll. Ich weiß auch nicht, was bei Shade of Mine so rüberkommt, denn entweder muss ich hier jedem einzelnen dreimal erklären dass ich hier niemanden schlachten will, nur weil er nicht Java hasst oder ich weiß es auch nicht.
Shade Of Mine schrieb:
Also sind wir vielleicht schon so weit gekommen, dass wir aktzeptieren können dass C++ doch nicht immer ideal ist?
Zitat von mir: "Klar. Ich habe nie gesagt, dass andere Sprachen grundsätzlich schlecht sind - im Gegenteil. Ich sage, dass unterm Strich, wenn ich eine Sprache wählen muss, die Wahl auf C++ fällt, weil der Rest nicht an C++ rankommt."
Sorry, Leute... aber teilweise verlangt ihr von mir, dass ich mich für Sachen rechtfertigen muss, die von mir nicht in den Raum gestellt werden.
Gleichzeitig fragte ich mich, wer hier eigentlich den Sinn des Threads versteht. Es geht hier nicht um einen Schwanzvergleich gegenwärtiger Techniken. Es geht um einen Schwanzvergleich in der der Zukunft. Welche Sprache hat die beste Chance auf eine Zukunft?Fassen wir vielleicht mal möglichst kurz zusammen, was meine Position ist.
Ich habe nie behauptet, dass C++ für alles ideal ist. Ich behaupte, dass C++ für große Projekte aufgrund der semantischen Stärke ideal ist, selbst dann, wenn es in einigen Teilen Mehraufwand bedeutet. Darum implementiere ich mein CMS in C++. Ich erwarte, dass dieses Projekt ein großes Projekt wird.
Dieser Thread dreht sich nicht um einen Schwanzvergleich von vorhandenen Techniken, sondern um die Frage, was morgen kommt. Es ist also durchaus legitim anzunehmen, dass C++ eine ähnlich ausgefeilte Library erhält, wie Java oder C# und diese Idee würde vermutlich nicht an einer Klasse für Dezimalzahlen scheitern.
Dynamische Typbehandlung zur Laufzeit ist mit statischen Sprachen möglich. Diese Behauptung stelle ich jetzt mal unbegründet in den Raum. Damit sollte wohl auch niemand ein Problem haben, oder etwa doch? Hat jemand Probleme sich die Konsequenzen vorzustellen?
Wir haben mit Java und C# zwei neue Linker erhalten. Sieht jemand ein Problem damit, das aktuelle Objektformat anzupassen und zu modernisieren? Oder zu ersetzen und mit einem Kompatiblitätslayer auszustatten? Wäre das eine Alternative gewesen zu zwei VMs, zwei JIT Compiler und den Verzicht auf bedeutende Sprach-Features?
Meine Meinung wäre, dass das die Zukunft darstellt und wir das Thema schon abgehakt hätten, wenn Java nicht in die Quere gekommen wäre. Weil wichtige Features entfernt wurden, halte ich Java für große Projekte für bedenklich - unabhängig davon, dass es trotzdem große Projekte in Java gibt - und Java für einen Behinderung der Sprachevolution von etwa 15 Jahren.
Diese Aussage steht so.
Und bevor jetzt dazwischen gegrätscht wird: Die Behauptung, dass es in Java und inbesondere in C# deswegen keine parallele Weiterentwicklung gegeben hätte, steht da nicht. Da steht auch nicht, dass Entwicklungen, die in C# und Java stattgefunden haben, in C++ aktuell ohne Mehraufwand zu übernehmen sind. Da steht, dass diese Weiterentwicklungen in C++ nachgepflegt werden müssen und ich der Überzeugung bin, dass C++ mit diesen Weiterentwicklungen am längsten überleben wird und dass wir etwa 15 Jahre verloren haben.
Da steht nicht, dass Normalfall-Projekte existieren, die in C# oder Java einfacher zu lösen sind. Derartige Schlussfolgerungen wurden von mir auch nicht provoziert - im mich da nochmal zu zitieren: "Lösungen für den Normalfall findest Du bei Java und C#."
-
TravisG schrieb:
Ich hab auf den ersten paar Seiten rumgeschaut, als der Thread erstellt wurde, und jetzt hier die letzten 2 Seiten mal überflogen. Frage: Hat Xin seine Idee mittlerweile verraten oder werden immer noch pseudokonstruktive Metadiskussionen gehalten?
Seinen Ansatz hat er bereits ganz am Anfang verraten.

Ansonsten seine? Eine? Wie 1.0?
Wenn ich eine Version als 1.0 bezeichne, dann wird die Laufen, aber nur ein grundlegendes Subset darstellen und eher die Basis für nachfolgende Versionen. Das Ziel für eine 1.0 ist lediglich es mir nicht dahingehend zu versauen, Dinge zu erweitern, die ich bis zur 1.0 noch nicht kenne. (PS: und natürlich den Boden für bekannte Ideen vorzubereiten - bevor da einer wieder "Subset" nicht versteht und loslegt, dass man keine neue Sprache braucht, die nur läuft... btw... Subset beinhaltet auch, dass Features bereits implementiert sind, die in anderen Sprachen so nicht aufkommen. Und ja, ich lasse das jetzt einfach so stehen, keiner muss irgendwas glauben, in dem Thread ging es nicht um eine Syntaxbeschreibung, sondern nur um die zukünftige Weiterentwicklung und den Ansatz ist ja schon beschrieben.)
Für eine Idee fange ich doch kein neues Projekt in der Größe an...
-
funktionale Sprachen sind nicht neu eigentlich die Ideen sind älter als imperative sprachen die sind mit Assembler x86 verbunden, rescherschiere mal
nach LISP sprache und maschine.Es könnte aber kommen:
1)Echte Modelgetriebene Software Entwicklung: d.h. letzt endlich selbst IDE soll generiert und auf konkretes Domän angepasst werden. Bis jetzt beispiele von generierten IDES => keins :D. Dazu gehöhren auch GUI IDES
auch nicht so viel geile Heute.2)(eventuell Macro)Funktionen/Methoden auf Modulen bzw grossen Container als ein Class.
3)Implizierte Paralelisierung eventuell auf GPGPU oder verteilte (wie HAdoop)
(du schreibst einfacher set... add... Code und es wird umgewandelt in paralelesÜbrigens, Implizierte Paralelisierung von Haskell (dialect eden heisst es ) is gar nicht neu
da geht: Eden => paraleller C code => verteilt auf maschienenDies ist unglaublich grosse Problemen mit denen man wird beschäftigen über die ganz grosse Zeitraum.
-
Xin schrieb:
Da steht nicht, dass Normalfall-Projekte existieren, die in C# oder Java einfacher zu lösen sind. Derartige Schlussfolgerungen wurden von mir auch nicht provoziert - im mich da nochmal zu zitieren: "Lösungen für den Normalfall findest Du bei Java und C#."
Was ist eigentlich dieser Normalfall von dem du immer sprichst?
Aber naja, ich habe zB auf meine Aussage hin, dass ein 10 Zeiler in einer Scriptsprache für Textersetzung besser ist als ein C++ Programm, von dir als Antwort bekommen dass mir einfach nur gute String Klassen in C++ fehlen.
Was genau wolltest du damit dann ausdrücken? Ich habe das so verstanden, dass wenn ich eine bessere String Klasse als std::string hätte, C++ eine bessere Lösung gewesen wäre.
uU reden wir aneinander vorbei?
-
Xin schrieb:
Dynamische Typbehandlung zur Laufzeit ist mit statischen Sprachen möglich. Diese Behauptung stelle ich jetzt mal unbegründet in den Raum. Damit sollte wohl auch niemand ein Problem haben, oder etwa doch? Hat jemand Probleme sich die Konsequenzen vorzustellen?
Technisch möglich ist alles. Aber ist auch alles immer sinnvoll?
zB finde ich in C# die Trennung Value Typen und Referenz Typen richtig cool. Aber in der Praxis ist das nicht immer so toll. Ähnlich wie in C++/CLI wo es manchmal furchtbar unpraktisch ist, dass es unterschiede zwischen native und managed Klassen gibt - wobei die Idee ganz nett ist (und manchmal ja auch richtig toll ist).
Ich denke nicht, dass man alles in eine Sprache stecken sollte. Ein gutes Beispiel hier ist C++/CLI. Es hat viele managed Features und dennoch alle C++ Features. Aber in der Praxis ist es meh...
Wir haben mit Java und C# zwei neue Linker erhalten. Sieht jemand ein Problem damit, das aktuelle Objektformat anzupassen und zu modernisieren? Oder zu ersetzen und mit einem Kompatiblitätslayer auszustatten? Wäre das eine Alternative gewesen zu zwei VMs, zwei JIT Compiler und den Verzicht auf bedeutende Sprach-Features?
Bedeutende Sprachfeatures? Nicht wirklich. C# geht nicht wirklich was wichtiges ab. C# und Java sind problemlos für Enterprise Projekte verwendbar.
Du sagst zB die wichtigen Features die fehlen sind
Const-Correctness -> wird ersetzt durch Immutable Types
C++-Referenzen -> hier sehe ich nicht wirklich was relevantes. Referenzen sind Syntax Zucker. Einzig relevanter Vorteil ist, dass man damit defensive Kopien verhindert - was man in Java zB über Interfaces löst.
Templates -> Generics. Natürlich sind Templates mächtiger als Generics, aber prinzipiell sind es wieder 2 Lösungen für 1 Problem. Je nach Situation ist das eine oder andere besser.
Mehrfachvererbung -> dafür bietet Java eben Interfaces, die in einigen Situationen viel besser sind als Mehrfachvererbung. Alles in allem sehe ich hier keinen riesen Unterschied.Und was genau willst du haben? Binäre Kompatibilität von C# zu Java? Oder worauf genau zielst du ab? Das mit Linker habe ich nicht verstanden...
Meine Meinung wäre, dass das die Zukunft darstellt und wir das Thema schon abgehakt hätten, wenn Java nicht in die Quere gekommen wäre. Weil wichtige Features entfernt wurden, halte ich Java für große Projekte für bedenklich - unabhängig davon, dass es trotzdem große Projekte in Java gibt - und Java für einen Behinderung der Sprachevolution von etwa 15 Jahren.
Ich denke, dass Java sehr viel für die Computerwelt getan hat. Aber diese Diskussion ist rein hypothetisch. Niemand kann sagen was gewesen wäre wenn es Java nie gegeben hätte. Alleine der Blickwinkel den Java uns auf Softwareentwicklung eröffnet hat, ist mehr Wert als alles andere.
Auch wenn ich viele Sachen in Java nicht gut gelöst finde, so ist es doch eine tolle Mainstream Sprache. Selbst wenn man die Einfachheit mit der sich Java Programme erstellen lassen als einzig positives aufführt, so wäre es das immernoch wert gewesen.
C++ ist enorm komplex. Man braucht Jahre um es zu verstehen. Die Entwicklungskosten in C++ sind einfach hoch. Und mit C++0x ist es auch nicht wirklich besser geworden. Die Sprache ist ziemlich übersättigt mit Features und Sprachkonstrukten. Ich denke nicht dass es so toll wäre da noch eine Menge mehr Features reinzupacken.
-
Shade Of Mine schrieb:
Xin schrieb:
Da steht nicht, dass Normalfall-Projekte existieren, die in C# oder Java einfacher zu lösen sind. Derartige Schlussfolgerungen wurden von mir auch nicht provoziert - im mich da nochmal zu zitieren: "Lösungen für den Normalfall findest Du bei Java und C#."
Was ist eigentlich dieser Normalfall von dem du immer sprichst?
GUI, Datenbank, Dateizugriff, Kommunikation.
Eben das worauf sich C# und Java spezialisierten, weil es Normalfall ist.Kein Normalfall: Systemprogrammierung, Echtzeitgrafik, hoch effiziente Algorithmen. Es ist schade, dass diese Normalfall-Frameworks in C++ eher verstreut sind als unter z.B. std::gui zu finden sind. Und auch std::string ist mehr Container als sinnvoll nutzbare String-Klasse.
Hier kann man aber durchaus ansetzen und hätte man das vor 15 Jahren begonnen, hätte man die Zeit nicht verloren. Das Problem ist schließlich, dass solche Algorithmen von Entwicklern ausgelagert werden, die vielleicht Java fit sind, aber nicht in C++. Die Erfahrung reicht einfach nicht mehr für den Spezialfall. Der Normalfall sollte in meinen Augen aber Training für den Spezialfall sein und das funktioniert nur, wenn man eine Sprache hat, die Normalfall und Spezialfall abdecken kann.
Zumal z.B. im Job C#, Fortran, Python und C++ verwendet werden und die Zwischenschichten ein Spezialfall für sich sind. Diesen Spezialfälle brauchen wir nur, weil jede Sprache angeblich für irgendwas besonders gut geeignet ist. Ich könnte auch gut drauf verzichten.
Shade Of Mine schrieb:
Aber naja, ich habe zB auf meine Aussage hin, dass ein 10 Zeiler in einer Scriptsprache für Textersetzung besser ist als ein C++ Programm, von dir als Antwort bekommen dass mir einfach nur gute String Klassen in C++ fehlen.
Stimmt doch auch. Jede Skriptsprache hat doch bessere String-Verarbeitung als C++ mit den std::strings. Aber das sind Erweiterungen zu C++, die standardmäßig mitgeliefert werden. Ich halte es für legitim davon auszugehen, dass zukünftige std::strings eher an die Bedürfnisse von Strings angelehnt sind, dann würden meine Strings oder QStrings auch keinen Sinn mehr ergeben. Ich schreibe meine String-Klasse ja auch nicht, weil ich nichts besseres zu tun habe, sondern weil ich mit std::string nichts Sinnvolles anfangen kann, wenn ich Strings verarbeiten will.
STL ist gut und schön, aber das will doch keiner für "Normalfall"-Aufgaben.Was auf den ersten Blick in C++ schwieriger wird ist Boiler-Plate zu entfernen. int main(void) für kleines Skript braucht kein Mensch. Ist bei mir nicht erforderlich, der erste Befehl leitet main() ein (sowie die Klasse, die main enthält und das Projekt, das wiederum die Klasse enthält) und main endet am Ende der Datei.
emit "Hello World";Auch sowas kann man problemlos durch einen Compiler jagen. Das geht nicht nur bei Skriptsprachen. Es kann auch die vollständige Implementation eines Plugins darstellen, wenn man dem Compiler das von außen mitteilt.
Das erfolgte aber weniger Aufgrund von Skripts, als durch die Tatsache, dass ich C-Schülern erstmal ein Hello World vorsetzen muss und dann erklären darf, was Datentypen (int, void), Funktionen, Rückgabewerte oder Includes sind und dass man diese komischen Klammern halt machen muss, weil irgendwer das in den 70ern für sinnvoll erachtete sind. Bei C++/C#/Java werfen wir dann noch Namensräume und Klassen rein. Bevor ich dann bei "Hallo Welt" angekommen sind verstehen die nur noch Bahnhof. Oder ich unterrichte in der Form "Das müsst ihr jetzt noch nicht verstehen", bei solchen Dozenten frage ich mich aber immer, warum ich dann da sitze.
So kann man Step by Step aufbauen, was da im Hintergrund abgeht, bekommt man dann mit, wenn es interessant wird.Shade Of Mine schrieb:
Was genau wolltest du damit dann ausdrücken? Ich habe das so verstanden, dass wenn ich eine bessere String Klasse als std::string hätte, C++ eine bessere Lösung gewesen wäre.
Nein. C++ wäre eine Lösungsmöglichkeit gewesen. Und eine, die in der aktuellen Fassung reichlich BoilerPlate hervorruft.
Aber dieser Thread geht um die Zukunft von Programmiersprachen, vielleicht habe ich schonmal daran erinnert
Es gibt keinen Grund, warum C++18 nicht vielleicht sinnvolle Strings mitliefert. Eventuell spart man sogar die 5 Zeilen Boiler-Plate, aber die 5 Zeilen machen es dann auch nicht.Shade Of Mine schrieb:
uU reden wir aneinander vorbei?
Ich habe das Gefühl, dass aus meinen Aussagen Dinge interpretiert werden, die da nicht stehen und die auch nicht logisch daraus geschlossen werden können. Ich schreibe hier auch keinen Fachaufsatz, sodass ich auch nicht ausschließen kann, dass jeder Satz frei jeglicher Interpretation ist, aber in dem Fall kamen bisher eher weniger Rückfragen, als deutlicher Gegendruck zu den schlechtmöglichsten Interpretationen meiner Aussagen.
Anders ausgedrückt, es ist sehr stark davon auszugehen, dass wir (und andere) komplett aneinander vorbei reden, deswegen rücke ich die Dinge ja auch immer auf den Standpunkt zurück, den ich hier vertrete.
Würden ich nicht davon ausgehen, dass wir aneinander vorbeireden, würde ich diesen Thread tatsächlich als gezielten Angriff und beleidigend betrachten.
-
Ich bin zwar nur hobbymäßig an C++ interessiert, aber ich schalte mich hier trotzdem mal ein:
> Es ist schade, dass diese Normalfall-Frameworks in C++ eher verstreut sind als unter z.B. std::gui zu finden sind.
GUIs sind für ein allgemeines C++ viel zu speziell. Niemand wäre mit einer std::gui zufrieden, weil die einen Ribbons haben wollen, die anderen irgendein Linux-Widget, was Windows nicht hat.
Stroustrup schrieb:
I fear that GUI is too complex and too controversial topic for the standards committee. The committee consists of volunteers and we don't have the resources to build a major GUI library. Also, a standards committee can't compete with commercial (and non-commercial) vendors.
Die 3rd-Party-Libraries für GUIs sind einfach immer besser, da kann eine standardisierte Library einfach nicht mithalten.
> Und auch std::string ist mehr Container als sinnvoll nutzbare String-Klasse.
Was erwartest du denn von einem String? Ich fand std::string bisher vollkommen okay. Viele mögen String nicht, weil sie nicht begreifen, dass stringstream (oder überhaupt Streams) diese Aufgaben hat, die sie string irgendwie ankleben wollen.
Wenn dir ein Algorithmus für std::string fehlt, kannst du ganz einfach einen in Form einer freien Funktion hinzufügen. Ich halte std::string für vollkommen okay.Ich spreche evtl. im Interesse vieler, aber was ist überhaupt Xins Problem? Wir sind uns alle einig, dass C++ nicht die eierlegende Wollmichsau ist, dass aber C++ eher eierlegende Wollmichsau als Java oder C# ist. Alle Sprachen haben ihre Daseinsberechtigung. Wenn sie keine hätten, würden sich nicht mehr existieren. Für Aufgaben, die Java nun mal besser als C++ kann, ist Java auch geeignet. Das ist gesunder Menschenverstand.
Wo ist das Problem?
-
Ich möchte mich mal von einer anderen Seite an das Problem annähern:
ich glaube, dass wenn es noch eine Sprache gibt, die sich in einem Bereich durchsetzt, es keine All-Purpose-Language, sondern eine DSL sein wird. Sollte eine Sprache im All-Purpose-Language erfolg haben wollen, muss sie entweder
a) ein Übersetzungsmodell in eine andere All-Purpose-Language
oder b) komplette Abwärtskompatibilität zu einer etablierten All-Purpose-Language
besitzenWarum?
Die Programme werden immer Größer und komplexer. Programmiersprachen müssen daher Werkzeuge bieten, die diese Komplexität reduzieren. All-Purpose-Languages können dies aber nur in einem begrenzten Bereich, da für die Reduktion der Komplexität ab einem bestimmten Level spezifisches Wissen über das Problem erforderlich ist. Es ist zum Beispiel nicht davon auszugehen, dass eine Hochsprache jemals so gutes stringhandling bieten wird, wie Perl, oder andere Sprachen die extra dafür erschaffen wurden und keine anderen Probleme mehr lösen müssen.Wir werden daher mehr Diversität in den verwendeten Sprachen erleben und damit in den verschiedenen Bereichen auch unterschiedliche Programmierparadigma. Gleichzeitig wird der Einfluss von universellen Sprachen zurückgehen und auch hier wird sich jede Sprache eine eigene Nische suchen. Was wichtiger wird, ist aber die Anbindung an die DSLs. Hier liegt Java durch die JIT-Technologie momentan ziemlich weit vorn.
Jede neue Sprache wird sich von nun an die Frage erlauben müssen, welches Problem sie lösen will. "Besser als andere Sprachen" zu sein, reicht nicht mehr aus.
-
Shade Of Mine schrieb:
Du sagst zB die wichtigen Features die fehlen sind
Const-Correctness -> wird ersetzt durch Immutable Types
C++-Referenzen -> hier sehe ich nicht wirklich was relevantes. Referenzen sind Syntax Zucker. Einzig relevanter Vorteil ist, dass man damit defensive Kopien verhindert - was man in Java zB über Interfaces löst.Immutable Types sind eine Möglichkeit, kosten aber. Was kostet und nicht abschaltbar ist, wird keine andere Nische besetzen können.
Referenzen sind alles andere als Zucker... sonst wären sie so handlich wie es Zeiger sind.
Shade Of Mine schrieb:
Templates -> Generics. Natürlich sind Templates mächtiger als Generics, aber prinzipiell sind es wieder 2 Lösungen für 1 Problem. Je nach Situation ist das eine oder andere besser.
Stimmt und beide haben Berechtigung. Es ist eben nicht zwei Lösungen für ein Problem, sondern es sind semantisch vollkommen unterschiedliche Konstrukte.
Shade Of Mine schrieb:
Mehrfachvererbung -> dafür bietet Java eben Interfaces, die in einigen Situationen viel besser sind als Mehrfachvererbung. Alles in allem sehe ich hier keinen riesen Unterschied.
Ich programmiere jetzt seit 18 Jahren C++. Was mir bisher niemand erklären konnte war, wo eigentlich Interfaces besser sein sollen als Mehrfachvererbung. Das interessiert mich ehrlich, denn bisher sehe ich in Interfaces nur Nachteile.
Shade Of Mine schrieb:
Und was genau willst du haben? Binäre Kompatibilität von C# zu Java? Oder worauf genau zielst du ab? Das mit Linker habe ich nicht verstanden...
Die Objectfiles sind nicht geeignet Klassen abzubilden, was zu überflüssigem Aufwand führt, den man mit C# oder Java so nicht hat.
Shade Of Mine schrieb:
C++ ist enorm komplex. Man braucht Jahre um es zu verstehen. Die Entwicklungskosten in C++ sind einfach hoch. Und mit C++0x ist es auch nicht wirklich besser geworden. Die Sprache ist ziemlich übersättigt mit Features und Sprachkonstrukten. Ich denke nicht dass es so toll wäre da noch eine Menge mehr Features reinzupacken.
Womit wir an dem Punkt wären, wo ich vor Seiten schon schrieb, dass C++ scheiße ist - aber trotzdem das beste, was wir haben.
---------------------------------
Jodocus schrieb:
Ich bin zwar nur hobbymäßig an C++ interessiert, aber ich schalte mich hier trotzdem mal ein:
> Es ist schade, dass diese Normalfall-Frameworks in C++ eher verstreut sind als unter z.B. std::gui zu finden sind.
GUIs sind für ein allgemeines C++ viel zu speziell. Niemand wäre mit einer std::gui zufrieden, weil die einen Ribbons haben wollen, die anderen irgendein Linux-Widget, was Windows nicht hat.
Normal, die meisten wollen einfach ein Fenster haben und das ist abbildbar.
Ich bin mit Stroustrups Vision durchaus ganz gut vertraut. Und ich bin in vielen Dingen sogar sehr ähnlich gepolt wie Stroustrup. Aber nicht in allen. Ich weiß, dass grundlegende GUI realisierbar ist - das beweist Qt, wxWidgets und gtk.
Wer Ribbons will, muss sich dann ggfs. außerhalb des Standards bedienen. std::gui wäre eine naheliegende Möglichkeit, keine Pflicht.
Erklären wir einfach mal wxWidgets zu std::gui. Viele Fälle könnte man damit bereits abdecken, insbesondere den Normalfall. Mal eben ein kleines Tool hier... Mal fünf Buttons und ein Listview... wie man es in WinForms auch zusammenklatscht.Jodocus schrieb:
> Und auch std::string ist mehr Container als sinnvoll nutzbare String-Klasse.
Was erwartest du denn von einem String? Ich fand std::string bisher vollkommen okay.
Zu weit weg aus der Sprache - Strings sind nicht nur Normalfall, sondern absolut grundlegend und sollten entsprechend grundlegend von der Sprache unterstützt werden, wie in Perl oder Python.
Jodocus schrieb:
Ich spreche evtl. im Interesse vieler, aber was ist überhaupt Xins Problem?
Wie kommst Du darauf, dass ich ein Problem hätte? Wir diskutieren hier Möglichkeiten der Zukunft. Das wäre eine Lösung, aber kein Problem. Wenn Du alles okay findest, hast Du erst recht kein Problem.
---------------------------------
otze schrieb:
ich glaube, dass wenn es noch eine Sprache gibt, die sich in einem Bereich durchsetzt, es keine All-Purpose-Language, sondern eine DSL sein wird. Sollte eine Sprache im All-Purpose-Language erfolg haben wollen, muss sie entweder
a) ein Übersetzungsmodell in eine andere All-Purpose-Language
oder b) komplette Abwärtskompatibilität zu einer etablierten All-Purpose-Language
besitzenSo sieht's aus.

otze schrieb:
Wir werden daher mehr Diversität in den verwendeten Sprachen erleben und damit in den verschiedenen Bereichen auch unterschiedliche Programmierparadigma. Gleichzeitig wird der Einfluss von universellen Sprachen zurückgehen und auch hier wird sich jede Sprache eine eigene Nische suchen. Was wichtiger wird, ist aber die Anbindung an die DSLs. Hier liegt Java durch die JIT-Technologie momentan ziemlich weit vorn.
Und hier gehen wir ganz entschieden wieder auseinander. Ich sehe in Java bestenfalls einen Übergang und den auch weniger in Java als der der mitgelieferten VM.
otze schrieb:
Jede neue Sprache wird sich von nun an die Frage erlauben müssen, welches Problem sie lösen will. "Besser als andere Sprachen" zu sein, reicht nicht mehr aus.

Und genau das versuche ich umzusetzen. Mit einigen hundert Detailverbesserung in der Basissprache, wo ich gerade schonmal dabei bin...
-
@Xin: keine Lust zu quoten, zu viel Text. tl;dr wäre hier nicht ganz verkehrt, aber ich find den Thread doch irgendwie lustig deswegen hab ichs gelesen...
Kurz nochmal wegen Qt vs. Winforms. Ich wills ja nicht so hinstellen, als ob ich Qt nicht mögen würde, ich mags ja. Aber es kann wirklich nichts, was Winforms nicht auch kann, bzw. ich vermisse da nichts. Internationalisierung in Winforms ist doch völlig ok gelöst. Das ist nicht viel Aufwand, dafür ist es flexibel und du kriegst perfekte Ergebnisse hin, wenn du etwas Arbeit reinsteckst. Qt ist sprachbedingt (;)) etwas unflexibel. z.B. dieses MVC Modell. Es ist ja an sich toll und ich finds echt super im C++ Umfeld, sowas ist MFC Lichtjahre voraus. Aber es ist doch irgendwo auch unflexibel und funktioniert nur in den Fällen gut, an die die Qt Entwickler auch gedacht haben. In anderen Fällen mag es mit viel Aufwand und Workarounds halbwegs funktionieren, und es gibt Fälle, da wirds richtig übel... Aber ich will mich nicht beschweren, ich bin damit auch soweit auch ziemlich zufrieden und es ist das beste, was ich in C++ kenne. Nur sehe ich keinen Grund zu sagen, es wäre besser als Winforms oder gar WPF. Und was Layouts in Qt angeht, habe ich sie in Winforms nie vermisst. Es ist ein anderes Layouting Konzept, aber es funktioniert genauso gut, nur nicht so umständlich und fehleranfällig. Ist nicht immer ganz einfach mit den ganzen QLayouts durchzublicken, wo man sich vertan hat, wo eine falsche SizePolicy gesetzt ist usw.
Du hast auch mal geschrieben, dass C++ für große Projekte wegen der semantischen Stärke ideal ist. Hier sind wir einer Meinung. Ich wollte auch unbedingt an einem großen Projekt in C++ mitarbeiten und tu es auch. Bei großen Projekten spielen die meisten Probleme von C++ keine so entscheidende Rolle mehr und C++ kann seine Stärken besser ausspielen. Hier hat dir ja auch niemand widersprochen. Was die meisten hier versuchen klar zu machen ist, dass es sehr viele Projekte gibt (wahrscheinlich 90% oder mehr), wo C++ einfach nicht die beste Wahl ist. Die meisten Entwickler verdienen ihr Geld mit deutlich kleineren Projekten (wozu ich auch mittelgroße Projekte zähle, die widerum auch deutlich in der Unterzahl sind verglichen mit den ganz kleinen Projekten). Und bei solchen Projekten passt C++ einfach nicht, bzw. sie wären in anderen Sprachen 10x schneller und eleganter gelöst.
Echtzeitgrafik und "hocheffiziente Algorithmen" sind auch so ein Thema... Die sind in C++ nicht automatisch schneller. Sehe ich leider an unserer Software. Da gibt es sowohl hochkomplexe und hocheffiziente Algorithmen als auch Echtzeitgrafik. Ist alles in C++ geschrieben. Trotzdem ist sehr vieles sehr ineffizient und könnte man auch in Java 10x performanter schreiben. Weil die Software sehr stark gewachsen ist, sehr viel kann, sehr viele Sonderfälle berücksichtigen muss usw... Obwohl das Design insgesamt durchaus nicht katastrophal ist und viele Komponenten eigentlich richtig gut sind, ist das Gesamtgebilde nicht sehr gut wartbar/erweiterbar und überhaupt nicht performant. Komplettes Redesign (unter Berücksichtigung aller nun bekanten Anforderungen) wäre angebracht, ist aber von Kosten und vom Aufwand her überhaupt nicht drin. Deswegen bringen da auch einzelne hocheffizient (und Assembler-optimierte) implementierte Algorithmen gar nichts, wenn außen rum noch tausend andere Sachen ausgeführt werden und das ganze dann ewig dauert. Also, C++ ist noch lange nicht automatisch performant. Und ein Performance Unterschied von 10% lässt sich ganz leicht und billig durch einen etwas schnelleren Rechner ausgleichen.
-
Xin schrieb:
Und genau das versuche ich umzusetzen. Mit einigen hundert Detailverbesserung in der Basissprache, wo ich gerade schonmal dabei bin...
Ich glaube, dass wir immer noch aneinander vorbei reden. Ich glaube, dass der Markt nur noch Platz für sehr spezielle Sprachen hat. Sprachen wie matlab, die auf eine einzige Problemkategorie ausgelegt sind (in dem Fall: mathematische Probleme) und bei allen anderen Problemstellungen beliebig schlecht sind. Das heißt, das sich Platz für kleine Sprachen sehe, die sich einfach in andere Hochsprachen einbetten lassen. Meinetwegen auch durch direkte Codeübersetzung. Compilerzeit ist mir egal, was teuer ist ist meine Entwicklungszeit(und die Bugsuche durch zu hohe Komplexität).
Was ich mir zum Beispiel wünschen würde, ist eine funktionale Sprache basierend auf Prinzipien des data-oriented-programming* die für (nicht)-lineare Algebra ausgelegt ist. Mein jetziges Projekt ließe sich sicherlich mit so etwas in einem 10tel des Codes verglichen mit C++ implementieren.
-
Was mich interessieren würde, ist, in welchen genauen Anwendungsbereich Genesys passen soll. Soll die Sprache im großen und ganzen eine bessere Alternative zu C++ und dessen Stärken sein (z.B. Performance) oder auch in Teilbereiche passen in denen andere Programmiersprachen stärker sind (z.B. hohe Abstraktionen und statische Typsicherheit wie bei Haskell oder Scala)?
Bisher meine ich herauslesen zu können, dass Genesys dabei helfen soll performant implementierte Algorithmen statisch sicherer umsetzen zu können oder deren Wiederverwendung durch mehr Generizität verbessern soll. Ist das korrekt? Wenn ja, soll man diese Generizität auch in abstrakterer Form (deklarative Beschreibung von Algorithmen wie in der funktionalen Programmierwelt) einsetzen können?
-
Xin schrieb:
Jodocus schrieb:
Ich bin zwar nur hobbymäßig an C++ interessiert, aber ich schalte mich hier trotzdem mal ein:
> Es ist schade, dass diese Normalfall-Frameworks in C++ eher verstreut sind als unter z.B. std::gui zu finden sind.
GUIs sind für ein allgemeines C++ viel zu speziell. Niemand wäre mit einer std::gui zufrieden, weil die einen Ribbons haben wollen, die anderen irgendein Linux-Widget, was Windows nicht hat.
Normal, die meisten wollen einfach ein Fenster haben und das ist abbildbar.
Ich bin mit Stroustrups Vision durchaus ganz gut vertraut. Und ich bin in vielen Dingen sogar sehr ähnlich gepolt wie Stroustrup. Aber nicht in allen. Ich weiß, dass grundlegende GUI realisierbar ist - das beweist Qt, wxWidgets und gtk.
Wer Ribbons will, muss sich dann ggfs. außerhalb des Standards bedienen. std::gui wäre eine naheliegende Möglichkeit, keine Pflicht.
Erklären wir einfach mal wxWidgets zu std::gui. Viele Fälle könnte man damit bereits abdecken, insbesondere den Normalfall. Mal eben ein kleines Tool hier... Mal fünf Buttons und ein Listview... wie man es in WinForms auch zusammenklatscht.Qt ist ein aufgeblasenes Monstrum, das "Handy mit dem man sogar telefonieren kann". Grundlegend ist etwas ganz anderes.
wxWidgets ist so hässlich, dass man es nicht C++ nennen darf.
GTKmm ist in Ordnung, aber auch noch viel zu umfangreich für C++.Mit dem jetzigen Standardisierungskonzept und den extrem hohen Qualitätsansprüchen würde es 30 Jahre dauern, bis man sich auf ein
std::guigeeinigt hätte. Dann nochmal 20 Jahre, bis Microsoft das halbwegs implementiert hat. Ob dann überhaupt noch GUIs in der heutigen Form benutzt werden, ist äußerst fraglich.Sinnvolle Ergänzungen wären beispielsweise Dateisystem und Netzwerk.
-
Mechanics schrieb:
Kurz nochmal wegen Qt vs. Winforms. Ich wills ja nicht so hinstellen, als ob ich Qt nicht mögen würde, ich mags ja. Aber es kann wirklich nichts, was Winforms nicht auch kann, bzw. ich vermisse da nichts.
Ich habe das ich vorhin schon bei Shade of Mine markiert.
Ich bitte darauf zu achten, dass man mir im Thread vorgeworfen hat, mich nur für meinen Bedarf zu interessieren. Das funktioniert so aber nicht, wenn dann Argumentationen so ablaufen.

Mechanics schrieb:
Internationalisierung in Winforms ist doch völlig ok gelöst. Das ist nicht viel Aufwand, dafür ist es flexibel und du kriegst perfekte Ergebnisse hin, wenn du etwas Arbeit reinsteckst
Wir machen das in der Firma. Es ist eine Katastrophe. Absolutes Nogo.
Tut mir leid, da bin ich selbst vom Amiga aus den frühen 90ern besseres gewohnt.
[quote="Mechanics"]Ich programmiere wenig GUI, bzw. habe in den letzten 10 Jahren kaum GUI geschrieben. Davon vieles in WinForms. Mit Gtk habe ich vor ca. 7 Jahren was aufwendiges fabriziert, aber GUI ist so... langweilig. Ich lerne zurzeit Qt, weil sich wieder ein wenig GUI abzeichnet. Ich kann es also mit WinForms nicht vergleichen. Layouts sehe ich nicht als Problem an, das hat jede andere GUI Lib auch - also außer WinForms und MFC...
Mechanics schrieb:
Du hast auch mal geschrieben, dass C++ für große Projekte wegen der semantischen Stärke ideal ist. Hier sind wir einer Meinung.
Ich verbuche das mal als Erfolgserlebnis

Mechanics schrieb:
Die meisten Entwickler verdienen ihr Geld mit deutlich kleineren Projekten (wozu ich auch mittelgroße Projekte zähle, die widerum auch deutlich in der Unterzahl sind verglichen mit den ganz kleinen Projekten). Und bei solchen Projekten passt C++ einfach nicht, bzw. sie wären in anderen Sprachen 10x schneller und eleganter gelöst.
Kommt auf die Frameworks an, die man so griffbereit hat. Ein Kollege fragte mich mal, mit welcher Sprache er ein Problem lösen soll, weil das in C++ so kompliziert. Ich habe ihm knapp 20 Klassen aus meinem Framework kopiert, am nächsten Tag war er fertig und total begeistert.
Der Mangel an offensichtlichen Hilfsmitteln ist in C++ aktuell ein Problem. Aber das lässt sich ja ändern. Für mich tue ich das und so füllt sich mein Framework über die Jahre.
Mechanics schrieb:
Echtzeitgrafik und "hocheffiziente Algorithmen" sind auch so ein Thema... Die sind in C++ nicht automatisch schneller. Sehe ich leider an unserer Software. Da gibt es sowohl hochkomplexe und hocheffiziente Algorithmen als auch Echtzeitgrafik. Ist alles in C++ geschrieben. Trotzdem ist sehr vieles sehr ineffizient und könnte man auch in Java 10x performanter schreiben. Weil die Software sehr stark gewachsen ist, sehr viel kann, sehr viele Sonderfälle berücksichtigen muss usw... Obwohl das Design insgesamt durchaus nicht katastrophal ist und viele Komponenten eigentlich richtig gut sind, ist das Gesamtgebilde nicht sehr gut wartbar/erweiterbar und überhaupt nicht performant. Komplettes Redesign ...
Dir fällt schon auf, dass "ineffizient" und "hocheffizient" Gegensätze sind?
Nichts wird effizient im Vergleich zu Java, nur weil man C++ nutzt. Man muss sich dann auch hinsetzen und die Möglichkeiten von C++ wenigstens effizient oder hocheffizient ausnutzen. Dass man ineffiziente C++ Software in Java 10x performanter wird, ist auch klar.Mein Framework ist meine Privatsache. Ich habe keinen Kostendruck, ich habe nur den Druck verhältnismäßig kompromisslos entwickeln zu wollen. So ist es auch schon mehrfach passiert, dass ich jegliche Entwicklung stoppte und das Framework säuberte. Das nimmt dann auch mal ein halbes Jahr in Anspruch, wo ich nur optimiere und aufräume.
Meine Sprache erzeugt u.a. Bytecode. Es gibt einen selbstgeschriebenen Interpreter dafür. So macht es Perl auch. Während Perl bei dem Test über 15 Jahre Entwicklungszeit hinter sich hatte, und als schnelle Interpretersprache gilt, war meine Sprache unoptimiert, sondern auf normalen Niveau programmiert und eine Liste mit noch ausstehenden Optimierungen vor mir hatte. Zeitlich lagen die Testprogramme im Promillebereich hinter Perl. Bei einem Programm mit einer Ausführungsdauer von 10 Sekunden, lag ich also im Bereich von 10-50ms hinter Perl.
Diese Compilergeneration existiert nicht mehr. Daran habe ich gelernt, dass C++ scheiße ist und ich C++ nicht als Basis für meine Sprache nutzen möchte und begann radikal umzubauen und einen einfacheren Testinterpreter einzubauen.Mechanics schrieb:
Und ein Performance Unterschied von 10% lässt sich ganz leicht und billig durch einen etwas schnelleren Rechner ausgleichen.
Das kommt auf das Problem an. ^^
Eventuell sind 10% von sehr viel immernoch sehr viel. ^^------------------------------------
otze schrieb:
Ich glaube, dass wir immer noch aneinander vorbei reden.
Und ich glaube, dass wir voll auf einer Linie sind. ^^
------------------------------------
Antoras schrieb:
Was mich interessieren würde, ist, in welchen genauen Anwendungsbereich Genesys passen soll. Soll die Sprache im großen und ganzen eine bessere Alternative zu C++ und dessen Stärken sein (z.B. Performance) oder auch in Teilbereiche passen in denen andere Programmiersprachen stärker sind (z.B. hohe Abstraktionen und statische Typsicherheit wie bei Haskell oder Scala)?
Zum ersten Teil klares ja, das ist der Part mit dem ich gestartet bin.
Bzgl. Scala und Haskell kann ich die Antwort so direkt nicht geben, ich habe lediglich mal eine Lisp-ähnliche Sprache gelernt und ein bisschen Lisp. Haskell steht recht weit oben auf meiner Todo-Liste. Ich habe mal nach einem Seminar geguckt, aber das Angebot scheint eher "überschaubar".
Mit Vergleichen zu Sprachen, die ich nicht beherrsche würde ich mich also bestenfalls hier lächerlich machen.Zum Thema Typsicherheit fahre ich eine zweischneidige Nummer. Ich bin der Überzeugung, dass man dem Entwickler nicht trauen kann, also die Sprache sehr restriktiv vorgehen muss und den Entwickler dazu soweit wie möglich zwingen muss sauber und diszipliniert zu programmieren. Gleichzeitig bin ich aber auch der Meinung, dass ich nicht alles vorhersehen kann, also dem Entwickler auch immer eine Möglichkeit geben muss, aus dem Sicherheitskäfig auszusteigen und perverse Sachen zu erlauben. Dann muss im Quellcode aber eine suchbare Alarmleuchte blinken, die auch als Marker durch den Compiler wandert.
Antoras schrieb:
Bisher meine ich herauslesen zu können, dass Genesys dabei helfen soll performant implementierte Algorithmen statisch sicherer umsetzen zu können oder deren Wiederverwendung durch mehr Generizität verbessern soll. Ist das korrekt? Wenn ja, soll man diese Generizität auch in abstrakterer Form (deklarative Beschreibung von Algorithmen wie in der funktionalen Programmierwelt) einsetzen können?
Hier sträube ich mich etwas gegen "wie in der funktionalen Programmierwelt", da ich zwar denke, einen brauchbaren Überblick zu haben, aber eben keine aktuelle, rein funktionale Sprache beherrsche.
Grundsätzlich denke ich erstmal eher an Templates, kenne die deklarative Programmierung allerdings aus Prolog und bin vom dem Konzept angetan. Ich habe allerdings bisher weder eine Umsetzung dafür, noch plane ich die deklarative Beschreibung konkret, wie sie in Prolog oder soweit mir bekannt auch in Haskell auftritt. Das passt so nicht 1:1 in die Syntax, die ihren Ursprung ganz klar bei C++ hat, auch wenn syntaktisch PHP inzwischen näher an C++ liegt als Genesys.
Und auch wenn mir klar ist, dass das jetzt so aussieht, als würde ich versuchen mich hier aus der Schlinge zu ziehen - ich plane auch nicht, nicht deklarativ zu arbeiten. Die Idee ist bekannt und interessant, der Fokus liegt zur Zeit allerdings derzeit auf ganz anderen Dingen.
...
Und nachdem ich jetzt mal ein paar Minuten hier sitze und gegrübelt habe... das müsste im Design bereits funktionieren - implementiert ist es soweit allerdings noch nicht. Das ist das Blöde, dass man in Programmiersprachen, die man gerade entwickelt, sowenig Programmiererfahrung hat.

Die Syntax passt wie gesagt nicht 1:1. Konzeptionell dürfte sollte das mit "einer" spezielleren Templatemethode zu realisieren sein, die aber quasi mehrfach spezialisiert ist. Das Design wurde aber nicht im Hinblick auf deklarative Programmierung formuliert. Da sollte ich durchaus nochmal drüber schlafen, weil soweit bin ich eigentlich auch nicht davon entfernt. Aus dem Blick von Haskell wäre mein Konstrukt bei der Verwendung allerdings eher Boilerplate.
Ich lasse das mal noch ein paar Tage in Hinterkopf garen... ansonsten hätte ich für die letzten Zeilen sicher keine 20 Minuten gebraucht...

So, Computer aus... in meinem Kopf fliegen jetzt Schreibweisen für deklarative Algorithmen hin und her... verdammt...

-
Ich gehe nur auf die wichtigen Features einer Programmiersprache ein. Der Rest fuehrt eh zu nichts.
Xin schrieb:
Shade Of Mine schrieb:
Du sagst zB die wichtigen Features die fehlen sind
Const-Correctness -> wird ersetzt durch Immutable Types
C++-Referenzen -> hier sehe ich nicht wirklich was relevantes. Referenzen sind Syntax Zucker. Einzig relevanter Vorteil ist, dass man damit defensive Kopien verhindert - was man in Java zB über Interfaces löst.Immutable Types sind eine Möglichkeit, kosten aber. Was kostet und nicht abschaltbar ist, wird keine andere Nische besetzen können.
Immutables sind schneller als const. Immutable bedeutet naemlich, dass du ploetzlich optimieren kannst wo du mit const nicht optimieren kannst. Weiters sind immutable Objekte per Definition Thread-sharable. Das erleichtert vieles.
Referenzen sind alles andere als Zucker... sonst wären sie so handlich wie es Zeiger sind.
Hast du auch ein Argument? Was bieten dir C++ Referenzen was du in Java nicht hast?
Shade Of Mine schrieb:
Templates -> Generics. Natürlich sind Templates mächtiger als Generics, aber prinzipiell sind es wieder 2 Lösungen für 1 Problem. Je nach Situation ist das eine oder andere besser.
Stimmt und beide haben Berechtigung. Es ist eben nicht zwei Lösungen für ein Problem, sondern es sind semantisch vollkommen unterschiedliche Konstrukte.
Welchen relevanten Unterschied siehst du denn zwischen Generics und Templates? Die Implementierung ist eine andere, keine Frage aber wodurch sind Generics fuer dich ein komplett anderes Konzept als Templates?
Shade Of Mine schrieb:
Mehrfachvererbung -> dafür bietet Java eben Interfaces, die in einigen Situationen viel besser sind als Mehrfachvererbung. Alles in allem sehe ich hier keinen riesen Unterschied.
Ich programmiere jetzt seit 18 Jahren C++. Was mir bisher niemand erklären konnte war, wo eigentlich Interfaces besser sein sollen als Mehrfachvererbung. Das interessiert mich ehrlich, denn bisher sehe ich in Interfaces nur Nachteile.
Interfaces bieten tiefe Vererbungshierachien an. In C++ ist soetwas wie Listener zu implementieren nicht wirklich gut moeglich. Man nimmt stattdessen einfach signal/slot - ist ja durchaus OK. Aber es ist eben eine komplett andere Loesung. Interfaces erlauben ploetzlich viel mehr Vererbung zu haben. zB ist serialisierung in vielen Sprachen ueber Vererbung geloest. Ich erbe von ISerializable und schon kann ich mich serialisieren. Soetwas waere in C++ nicht moeglich. Generell laeuft es darauf hinaus dass man in Sprachen ohne Interfaces deshalb flache Hierachien hat und in Sprachen mit Interfaces tiefe.
Durch die tiefen Hierachien ist es auch ploetzlich einfacher moeglich gegen Interfaces zu programmieren um den Code generisch zu halten.
Shade Of Mine schrieb:
Und was genau willst du haben? Binäre Kompatibilität von C# zu Java? Oder worauf genau zielst du ab? Das mit Linker habe ich nicht verstanden...
Die Objectfiles sind nicht geeignet Klassen abzubilden, was zu überflüssigem Aufwand führt, den man mit C# oder Java so nicht hat.
Keine Ahnung wo du jetzt Objectfiles und Klassen hernimmst.
Womit wir an dem Punkt wären, wo ich vor Seiten schon schrieb, dass C++ scheiße ist - aber trotzdem das beste, was wir haben.
Und das ist der Punkt: absolute Statements.
Das fuerht hier zu nichts.C++ ist nicht das beste was wir haben, denn ich kann fuer unzaehlige Anwendungsfaelle bessere Sprachen finden. C++ ist toll, keine Frage, aber solche absoluten Statements sind einfach nur Mist.
Ich weiß, dass grundlegende GUI realisierbar ist - das beweist Qt, wxWidgets und gtk.
Qt released 1-2 mal pro Jahr eine neue Version. Der Standard wird alle 10 Jahre mal verbessert. Wenn man sich jetzt die GUI Entwicklung ansieht so hat sich eine Menge getan in den letzten 10 Jahren und seitdem der neue Standard raus ist, gibt es sogar schon wieder was komplett neues: Metro.
Es ist unrealistisch anzunehmen dass man so Library schaffen koennte die ueberall gut laeuft (gtk ist unter Windows zB untragbar!) und dennoch nur alle 10 Jahre updates erfaehrt. So funktioniert die Welt nicht. Dazu muesste der Standard viel schnellere Updates bekommen.
-
So, ich beteilige mich auchmal an der Disskussion

Shade Of Mine schrieb:
Hast du auch ein Argument? Was bieten dir C++ Referenzen was du in Java nicht hast?
Es ging ja eher um den Vergleich zwischen C++ Referenzen und C++-Pointern und dass Referenzen syntaktischer Zucker sind, sie sind nicht überall da einsetzbar wo Pointer einsetzbar sind, aber man kann sie zum Beispiel sehr gut in der Parameterübergabe verwenden. In Java sind die Objekte prinzipiell nichts anderes als C++-Referenzen.
Shade Of Mine schrieb:
Welchen relevanten Unterschied siehst du denn zwischen Generics und Templates? Die Implementierung ist eine andere, keine Frage aber wodurch sind Generics fuer dich ein komplett anderes Konzept als Templates?
Erstmal sind Generics eine Auswertung zur Laufzeit, Templates werden vom Compiler vorher umgewandelt in Typen. Dadurch gibt es (abgesehen von Performance) die Möglichkeit der Spezialisierung, dazu kommen seit C++11 die Variadic Templates, die die Templates nochmal um ein vielfaches interessanter machen.
Shade Of Mine schrieb:
Interfaces bieten tiefe Vererbungshierachien an. In C++ ist soetwas wie Listener zu implementieren nicht wirklich gut moeglich. Man nimmt stattdessen einfach signal/slot - ist ja durchaus OK. Aber es ist eben eine komplett andere Loesung. Interfaces erlauben ploetzlich viel mehr Vererbung zu haben. zB ist serialisierung in vielen Sprachen ueber Vererbung geloest. Ich erbe von ISerializable und schon kann ich mich serialisieren. Soetwas waere in C++ nicht moeglich. Generell laeuft es darauf hinaus dass man in Sprachen ohne Interfaces deshalb flache Hierachien hat und in Sprachen mit Interfaces tiefe.
Das ist ausnahmslos alles in C++ mit Mehrfachvererbung auch Möglich (virtual abstract methods). Au0erdem erklär mir bitte mal, wie du ein JFrame und ein Observable in ein Objekt gleichzeitig kriegst? Viel spass dabei, weil methoden wie setChanged() sind protected. Ich betrachte es dabei übrigens nicht als guten Stil eine Methode notify() zu schreiben, die die Funktionalität public macht.
-
Xin schrieb:
Ich tue mich sehr schwer damit, Ideen als Unfug abzutun, wenn ich sie nicht verstehe. Diese Idee verstehe ich nicht, habe aber den Verdacht, dass Du derzeit auch kein Konzept hast. Jedenfalls lassen "könnte mir vorstellen" und "eventuell möglich" darauf schließen.
Ja, natürlich ist das erstmal nur eine Idee, und vielleicht auch nur eine Schnapsidee.

Xin schrieb:
Könntest Du ein konkretes Beispiel, einen konkreten Anwendungsfall beschreiben - unter Berücksichtigung, das der Mensch nur in der Lage ist, 2D Informationen mit einer ungefähren Entfernung wahrzunehmen, aber nicht 3D-Informationen.
Um den Unterschied zu verdeutlichen: Du siehst den Monitor, Du siehst, dass er etwa 60cm vor Dir steht, aber Du siehst nicht, was hinter dem Monitor ist. Der Mensch sieht immer einen kleinen Ausschnitt der ihm zugewandten Ebene.
Das Hauptsinnesorgan des Menschens ist das Gedächtnis, nicht das Auge. Entsprechend wird jede Kommunikationsform scheitern, die den Menschen überfordert.Das sehe ich nicht so. Einen Monitor in 3d könnte man von allen Seiten betrachten, ihn transparent machen, vergrößern, verkleinern,um ihn herumgehen, ihn in Teile zerlegen und mit den Teilen wiederum das gleiche machen.
Daß der Mensch immer nur einen kleinen Ausschnitt der ihm zugewandten Ebene sieht ist richtig, das ist aber bei einem Monitor in 2D ebenfalls so. Sobald die Inhalte größer als die Fläche des Monitors sind, leidet die Übersicht.
Das Gedächtnis ist definitiv kein Sinnesorgan. Aber wenn Du meinst, daß Informationen in 3d schwerer zu merken sind als in 2d, bin ich der Ansicht, daß das sein kann, aber nur wenn die Informationen unvorteilhaft dargestellt sind. Schau Dir dochmal die Seiten eines Würfels in 3d und in 2d an. Wenn ich Dir die Frage stellen würde, welche Seiten des Würfels benachbart sind, ist
das bei einem 2d-Würfel viel schwieriger zu erkennen als bei einem 3d-Würfel.Xin schrieb:
redrew99 schrieb:
So könnte z.B. ein Vektor mit einem bestimmten Gebilde dargestellt werden, wo man den Datentyp durch Veränderung der Farbe bestimmt. Der "Vektor" könnte darüberhinaus Buttons haben oder andere Eigenschaften(evtl. Displays?), um weitere Verändungen vornehmen zu können. Auch mit Tönen könnte man arbeiten.
Bis auf die Töne verstehe ich nur Bahnhof und da pfeift bei mir der Zug.
Wenn ich in 3d einen Vektor erzeugen möchte, nehme ich einfach einen dafür vorgesehenen Behälter,
sagen wir einen Würfel. Und um den Datentyp des Vektors zu bestimmen, könnte man dem Würfel eine bestimmte Farbe verpassen.Xin schrieb:
Und was soll die dritte Dimension abbilden?
Meine Vorstellung ist die, daß 3d-Programmieren nach Möglichkeit nichts mehr mit geschriebenem Code
zu tun hat. Der Großteil des Codes, der heute geschrieben wird, müßte durch 3d-Objekte dargestellt werden.
-
Shade Of Mine schrieb:
Ich gehe nur auf die wichtigen Features einer Programmiersprache ein. Der Rest fuehrt eh zu nichts.
Danke für die Wertung, aber auch danke für's Kürzen

Shade Of Mine schrieb:
Xin schrieb:
Immutable Types sind eine Möglichkeit, kosten aber. Was kostet und nicht abschaltbar ist, wird keine andere Nische besetzen können.
Immutables sind schneller als const. Immutable bedeutet naemlich, dass du ploetzlich optimieren kannst wo du mit const nicht optimieren kannst. Weiters sind immutable Objekte per Definition Thread-sharable. Das erleichtert vieles.
Ein Immutable ist schneller als ein Const... Okay, ohne Dir zu nahe treten zu wollen, aber Du weißt schon, was Du da so schreibst?... ich kann mich erstmal auf 'schneller' wie 'nicht langsamer' einigen, doch wäre ich dankbar, wenn Du mir den Unterschied zwischen einem Unveränderlichen und einer Konstanten kurz erläutern würdest, damit ich verstehe, warum Unveränderliche schneller als Konstanten sind?
Thread-Shareable ist richtig, es erleichtert vieles und je nach Problem lassen sich Immutables super optimieren.
Nehmen wir also mal an, dass Immutables schneller als Mutables sind, wird die Aussage leider auch nicht unbedingt besser. Hier übrigens mal ein mal im Vorgriff noch ein Zitat von Dir:
Shade Of Mine schrieb:
aber solche absoluten Statements sind einfach nur Mist.
Zurück zum Unvermeidlichen: Immutables müssen bei Änderung kopiert, bzw. neu erzeugt werden, auch da, wo man auf ein Immutable/Const-Objekt verzichten kann. Hier kostet es und "dann kaufe ich eben einen schnelleren Rechner" ist kein Argument, das erzählt man mir schon seit über 10 Jahren, ich habe die dritte Generation schnellerer Rechner und Mutable-Objekte sind in der Regel immernoch schneller.
Wir haben nämlich häufig gar keine hochparallelisierbaren Probleme, sondern einfach nur die Änderung eines Zustandes.Beispiel Texteditor: Wir haben 10 Texte geöffnet. Wir haben das immutable Objekt Text, jeder Text besteht aus 10000 immutable Textlines. Und jetzt drückt der Benutzer eine Taste.
Das ist doch jetzt kein Ausnahmeszenario, oder?Und jetzt möchte ich sehen, wie schnell das Mutable im Vergleich zum Immutable ist.
Ich persönlich bin hier altmodisch... ich würde zum Mutable greifen.Shade Of Mine schrieb:
Was bieten dir C++ Referenzen was du in Java nicht hast?
Den Verzicht auf die Frage, ob die Java-Referenz Null ist. Das erfordert vom Entwickler Disziplin und vom Computer Laufzeit. Beides überflüssig mit C++-Referenzen, da gibt es einen klaren Vertrag, der vom Compiler überwacht wird und imho sicherer ist, als ein Entwickler, der überall gegen Null prüft.
Ansonsten frage ich mich, warum C# 'ref' und 'out' eingeführt hat, wenn Java alles hat. Vielleicht hatten die keine Lust für zusätzliche Rückgabeparameter ArrayListen zu missbrauchen oder laufend sinnfrei Objekte erstellen, zu kopieren und zu löschen, man weiß es nicht.
Welchen relevanten Unterschied siehst du denn zwischen Generics und Templates? Die Implementierung ist eine andere, keine Frage aber wodurch sind Generics fuer dich ein komplett anderes Konzept als Templates?
Generics erzeugen keinen Code, sondern benutzen den gleichen Code für gleichartige, verwandte Datentypen. Templates erzeugen Code auch für vollkommen unterschiedliche Datentypen, die keine Beziehung zueinander haben müssen.
Shade Of Mine schrieb:
Interfaces bieten tiefe Vererbungshierachien an. In C++ ist soetwas wie Listener zu implementieren nicht wirklich gut moeglich. Man nimmt stattdessen einfach signal/slot - ist ja durchaus OK. Aber es ist eben eine komplett andere Loesung. Interfaces erlauben ploetzlich viel mehr Vererbung zu haben. zB ist serialisierung in vielen Sprachen ueber Vererbung geloest. Ich erbe von ISerializable und schon kann ich mich serialisieren. Soetwas waere in C++ nicht moeglich. Generell laeuft es darauf hinaus dass man in Sprachen ohne Interfaces deshalb flache Hierachien hat und in Sprachen mit Interfaces tiefe.
Hmm... entweder bin ich echt zu blöd oder alles, was Du beschreibst mache ich in C++.
Kannst Du mir den Listener oder ISerializable mal zeigen, der in C++ nicht möglich ist? Zum Vergleich nehme einfach eine Klasse, die ausschließlich pure virtual Methods enthält, wenn Du das Interface ersetzt.
Was Dir fehlt sind nicht Interfaces, sondern Reflection. Die Basisklasse, die ich auch für die Datenbankgeschichten nutze, wurde geschrieben aufwendige Konfigurationen, die einen Graphen aus einer Vielzahl von unterschiedlichen Klassen nach XML zu serialisieren. Die Basisklasse lieferte Interface und Implementation. Die Konfiguration der Basisklasse ist das Problem: Reflection.
Dein Problem ist gegenwärtig. Falscher Thread.
Shade Of Mine schrieb:
Durch die tiefen Hierachien ist es auch ploetzlich einfacher moeglich gegen Interfaces zu programmieren um den Code generisch zu halten.
Tut mir absolut leid, aber das ist für mich alles easy going in C++.
Tiefe Hierarchien werden von vielen verdammt, keine Ahnung warum. Mein Framework ist ein Legobausteinkasten. Aber dafür brauche ich definitiv keine Interfaces, im Gegenteil: Ich brauche Mehrfachvererbung. Hier habe ich nicht nur die Interfaces, gegen die ich programmieren muss und die Implementierung.
Shade Of Mine schrieb:
Shade Of Mine schrieb:
Und was genau willst du haben? Binäre Kompatibilität von C# zu Java? Oder worauf genau zielst du ab? Das mit Linker habe ich nicht verstanden...
Die Objectfiles sind nicht geeignet Klassen abzubilden, was zu überflüssigem Aufwand führt, den man mit C# oder Java so nicht hat.
Keine Ahnung wo du jetzt Objectfiles und Klassen hernimmst.
Weißt Du, was Objectfiles sind und wie man Klassen dort abbildet?
Shade Of Mine schrieb:
Womit wir an dem Punkt wären, wo ich vor Seiten schon schrieb, dass C++ scheiße ist - aber trotzdem das beste, was wir haben.
Und das ist der Punkt: absolute Statements.
Das fuerht hier zu nichts.C++ ist nicht das beste was wir haben, denn ich kann fuer unzaehlige Anwendungsfaelle bessere Sprachen finden. C++ ist toll, keine Frage, aber solche absoluten Statements sind einfach nur Mist.
Das soll jetzt wirklich keine Beleidigung sein, aber ganz klar eine Kritik: Du bist mit Deinen Augen textlich sehr punktuell. Du gehst auf zwei Zeilen Text ein, ohne sie im argumentiven Konzept zu sehen. Ich hatte es vorher zusammengefasst und ich kann nicht vor jede Aussage eine Anleitung stellen, sonst wird's nämlich richtig lang.
Shade Of Mine schrieb:
Ich weiß, dass grundlegende GUI realisierbar ist - das beweist Qt, wxWidgets und gtk.
Qt released 1-2 mal pro Jahr eine neue Version. Der Standard wird alle 10 Jahre mal verbessert. Wenn man sich jetzt die GUI Entwicklung ansieht so hat sich eine Menge getan in den letzten 10 Jahren und seitdem der neue Standard raus ist, gibt es sogar schon wieder was komplett neues: Metro.
Das schöne an C++ ist, dass es nicht jedem Trend hinterherspringt. Metro heißt schon nicht mehr Metro. CodeProject hatte diese Woche eine nette Mail: "Windows 8 Review: It's really that bad".
Dein Argument ist bereits behandelt worden: Niemand ist gezwungen ausschließlich std zu verwenden, aber für ein Fenster wäre es eine Hilfe.
Wenn Du Dich also fragst, warum meine Antworten lang ausfallen, dann frage Dich bitte auch, warum laufend die gleichen Fragen kommen, denn auch das folgende ist wieder nur eine Wiederholung.
Antworte ich hierauf nicht, kommt "Dir sind die Argumente ausgegangen", jetzt antworte ich auf die Frage erneut, das macht den Text länger.
Den Großteil Deines Postings hätte man getrost löschen können mit dem Verweis, sich bereits Beantwortetes durchzulesen, bzw. was ich mit Immutables vs Const machen soll... ignorieren wäre auch unhöflich.Vielleicht sollte ich einfach schreiben, dass die Diskussion mit Dir zu nichts führt. Gegenseitige Ablehnung wäre Stagnation, bringt uns also auch nicht weiter. Also... Du darfst kürzen.
Shade Of Mine schrieb:
Es ist unrealistisch anzunehmen dass man so Library schaffen koennte die ueberall gut laeuft (gtk ist unter Windows zB untragbar!) und dennoch nur alle 10 Jahre updates erfaehrt. So funktioniert die Welt nicht. Dazu muesste der Standard viel schnellere Updates bekommen.
Wir reden von Zukunft: Das bedeutet, dass wir nicht nur die Auswahl aus Qt, WxWidgets und Gtk haben. Wir können ganz einfach hingehen und z.B. WxWidgets auf Linie ziehen, so dass std::gui Anwendungen Betriebsystemgerecht gerendert werden.
Und wir könnten es auch mit Listenern ausstatten, wenn das im Standardisierungs-Komitee gut ankommt.-----------------------------------------------
Cyres schrieb:
Shade Of Mine schrieb:
Hast du auch ein Argument? Was bieten dir C++ Referenzen was du in Java nicht hast?
Es ging ja eher um den Vergleich zwischen C++ Referenzen und C++-Pointern und dass Referenzen syntaktischer Zucker sind, sie sind nicht überall da einsetzbar wo Pointer einsetzbar sind, aber man kann sie zum Beispiel sehr gut in der Parameterübergabe verwenden. In Java sind die Objekte prinzipiell nichts anderes als C++-Referenzen.
Nur ein kleiner Einwand:
Bei Parametern sind C++-Referenzen top, aber Java-Referenzen entsprechen C++-Pointer, nicht C++-Referenzen! Syntax (".-Operator") und Name ("Referenz") und Marketing ("Java hat keine Pointer") waren darauf ausgerichtet, dem damals üblichen C++-Programmierer Sicherheit zu suggerieren, um zum Wechsel zu animieren.
Und die meisten Entwickler lesen, akzeptieren und denken nicht darüber nach, was sie gerade gelesen haben. Das gilt nicht nur in diesem Thread. Wenn irgendein Guru etwas gut findet, dann wäre ich ja blöd, dagegen zu sein.
Und genau deswegen führe ich regelmäßig solche Diskussionen. Ich bin so blöd gegen eine Armada von Leuten anzudiskutieren, die aus voller Überzeugung hinter technischem Rückschritt stehen und ihn verteidigen, weil sie damit billiger ausgebildet werden können und sich entsprechend ein kleineres Gehalt wünschen.
Natürlich ist Java Fortschritt! Aber halt nicht für die Informatik sondern für die Betriebswirtschaft. Ich kenne reichlich Leute, die begeistert iPads gekauft haben. Keiner konnte mir bisher sagen, wofür man das Ding sinnvoll einsetzen kann, wo ein Netbook oder Laptop nicht nur sinnvoller, sondern auch billiger wären. Beim Skypen steht mein Laptop auf der Tastatur, deren iPad kippt um und ich bewundere die Wohnzimmerlampe - gaaanz toll. Aber alle sind sich einig: Tablet-Rechner sind so cool.
Java ist das iPad für Entwickler.Eine Java-Referenz ist eine Referenz über eine Positionstabelle, aber der Zugriff über die Positionstabelle ist transparent. Was übrig bleibt ist ein Pointer und der ist nicht transparent, sondern präsent. Das ist das Ding, mit dem man in Java arbeitet.
Darum kann man einer Java-"Referenz" auch null zuweisen und erhält bei Zugriff eine NullPointerException, die Java-Wohnzimmerlampe - gaaaanz toll. Aber alle sind sich einig: Java ist so cool...Einer C++-Referenz kannst Du die Null nur mit Gewalt unterjubeln. Auch C++ kann umkippen und man sieht die Deckenlampe, aber die Tastatur als Standfuß beim Laptop hat sich trotzdem bewährt. Wenn's cool sein muss, kann man darauf natürlich keine Rücksicht nehmen

Mit ein Grund, warum Java ein gewaltiger Rückschritt ist. Pointer nennt man Referenz ohne die Konsequenzen zu implementieren, embedded Structs gibt es nicht mehr, jeder Furz muss mit New angelegt werden. Gaaaaanz toll...

-----------------------------------------------
redrew99 schrieb:
Xin schrieb:
Ich tue mich sehr schwer damit, Ideen als Unfug abzutun, wenn ich sie nicht verstehe. Diese Idee verstehe ich nicht, habe aber den Verdacht, dass Du derzeit auch kein Konzept hast. Jedenfalls lassen "könnte mir vorstellen" und "eventuell möglich" darauf schließen.
Ja, natürlich ist das erstmal nur eine Idee, und vielleicht auch nur eine Schnapsidee.

Ufffz... jetzt muss ich aber mal ganz weit im Gedächtnisstack zurückgehen

Neue Ideen sind immer Ideen, die vorher keiner für möglich hält. Und da ist viel Alk und andere bewusstseinserweiternde Mittel dabei. Wenn man also etwas neues will, sollte man also genau da suchen.
redrew99 schrieb:
Xin schrieb:
Könntest Du ein konkretes Beispiel, einen konkreten Anwendungsfall beschreiben - unter Berücksichtigung, das der Mensch nur in der Lage ist, 2D Informationen mit einer ungefähren Entfernung wahrzunehmen, aber nicht 3D-Informationen.
Um den Unterschied zu verdeutlichen: Du siehst den Monitor, Du siehst, dass er etwa 60cm vor Dir steht, aber Du siehst nicht, was hinter dem Monitor ist. Der Mensch sieht immer einen kleinen Ausschnitt der ihm zugewandten Ebene.
Das Hauptsinnesorgan des Menschens ist das Gedächtnis, nicht das Auge. Entsprechend wird jede Kommunikationsform scheitern, die den Menschen überfordert.Das sehe ich nicht so. Einen Monitor in 3d könnte man von allen Seiten betrachten, ihn transparent machen, vergrößern, verkleinern,um ihn herumgehen, ihn in Teile zerlegen und mit den Teilen wiederum das gleiche machen.
Wir bräuchten ein Holodeck. Das habe ich allerdings noch nicht auf dem Schirm.
Aber was den Teil angeht 'in Teile zerlegen und mit den Teilen wieder das gleiche machen', das erinnert mich an einen Text-Editor, den ich vor 15 Jahren mal geschrieben habe. Da würde ich gerne mehr drüber hören.
redrew99 schrieb:
Das Gedächtnis ist definitiv kein Sinnesorgan.
Streck Deine Hand aus, schau auf Deinen Daumen. Der Daumen ist das, was Du bewusst und scharf siehst. Der Rest sind bekannte Bilder, die vorrangig Deinen Erwartungen entsprechen.
Vielleicht kennst Du das Basketball-Experiment: http://www.youtube.com/watch?v=2pK0BQ9CUHk
Wir geben bisher einfach Text ein. Wenn Du Dir COBOL ansiehst, dann ist das Prosa. Fortran ist Prosa. Algol60 ist strukturierter. Pascal ist wieder strukturierte Prosa, aber die Optik kommt auch hier ins Rennen. Einer der Gründe, weswegen sich C in meinen Augen durchgesetzt hat, ist die optische Wahrnehmung des Quelltextes. Unwichtiges wie begin und end wird durch optisch unauffällige { und } dargestellt, die gleichzeitig optisch gut von der Prosa zu unterscheiden sind. Andere Sprachen gehen den anderen Weg - sie verwenden überhaupt keine "Prosa", als Beispiel wäre da Brainfuck zu nennen. Man könnte Brainfuck auch höheren Konstrukten austatten, aber obwohl es nur wenig kann, versteht niemand mehr den Quelltext.
Zukünftige Sprachen müssen eine Wertung vornehmen und diese Wertung optisch präsentieren.
Ich denke, dass 3D-Modellierung den Menschen überfordert.Ich arbeite im CAD Bereich. Unsere Kunden wollen 3D Modelle sehen; aber planen wollen sie in 2D. Es steckt schon im Wort. Ein Plan ist planar.
Modellierung erfolgt (bisher) immer nach Plan oder ist statisch.Technische Modellierung (z.B. mit Inventor) behandelt komplexe Zusammenspiele, z.B. sich drehende Zahnräder. Das ist durch eine Programmzeile schwierig auszudrücken, weil das Objekt auch 3D ist. Eine Variablenzuweisung ist aber gar nicht so komplex. Ein Programm läuft in der Regel eindimensional ab. Multithreading hingegen - und hier könnte es interessanter werden, läuft mehrdimensional ab, aber eine Anweisung in Thread 1 ist nicht zwangsläufig mit einer Anweisung in Thread 2 verbunden. Ein Thread erzeugt sein eigenes eindimensionales Universum.
In Deiner Idee könnte aber grundsätzlich durchaus etwas Erforschenswertes drin sein.
Trink noch einen
redrew99 schrieb:
Aber wenn Du meinst, daß Informationen in 3d schwerer zu merken sind als in 2d, bin ich der Ansicht, daß das sein kann, aber nur wenn die Informationen unvorteilhaft dargestellt sind. Schau Dir dochmal die Seiten eines Würfels in 3d und in 2d an. Wenn ich Dir die Frage stellen würde, welche Seiten des Würfels benachbart sind, ist
das bei einem 2d-Würfel viel schwieriger zu erkennen als bei einem 3d-Würfel.Das ist zweifelsohne richtig, aber wie müsste eine Programmiersprache, bzw. ein Problem aussehen, damit dies für eine Programmiersprache prinziprelevant wird?
redrew99 schrieb:
Wenn ich in 3d einen Vektor erzeugen möchte, nehme ich einfach einen dafür vorgesehenen Behälter,
sagen wir einen Würfel. Und um den Datentyp des Vektors zu bestimmen, könnte man dem Würfel eine bestimmte Farbe verpassen.Als Programmierer arbeite ich zwar häufig mit Vektoren und der Würfel heißt dann "v". Ich habe aber keine Ahnung, wohin v zeigt, denn ein Algorithmus ist eine Beschreibung, wie man ein Problem löst, v ist nur ein Platzhalter.
redrew99 schrieb:
Meine Vorstellung ist die, daß 3d-Programmieren nach Möglichkeit nichts mehr mit geschriebenem Code
zu tun hat. Der Großteil des Codes, der heute geschrieben wird, müßte durch 3d-Objekte dargestellt werden.Eins der ersten Programme, die ich in meiner Sprache laufen lies, war der Quicksort-Algorithmus, der ein Char-Array sortierte.
Könntest Du mir beschreiben oder zeichnen, wie Du Dir einen Sortieralgorithmus in 3D programmierst?