Gibt es eigentlich eine Sprache die noch komplexer ist als C++?



  • An Bashar,

    wenn ich ehrlich bin, habe ich ML nur von den anderen immer gesehen. Und die meinten das der Haken an ML die Rekursion seie, da man alles mit Rekursion erschlagen müsse.

    Was ich hauptsächlich damit ausdrücken möchte ist, dass einige Sprachen aus der Theorie verschiedene Aspekte der Informatik zeigen und dadurch mehr oder minder komplex werden (Beispiel Prolog aus der Wissensbasierten Systemen oder auch die Sprachen zur Echzeitprogrammierung (PEARL))



  • Bitte ein Bit schrieb:

    wenn ich ehrlich bin, habe ich ML nur von den anderen immer gesehen. Und die meinten das der Haken an ML die Rekursion seie, da man alles mit Rekursion erschlagen müsse.

    Das stimmt so zwar prinzipiell, aber da muss man sich halt mal in die funktionale bzw. mathematische Denkweise reinfinden, dann passt das schon. Die Idee ist eigentlich recht simpel. In C++ gibts das in ähnlicher Form übrigens bei Template-Metaprogrammierung, das sind die gleichen Denkmuster.



  • Bashar schrieb:

    Bitte ein Bit schrieb:

    wenn ich ehrlich bin, habe ich ML nur von den anderen immer gesehen. Und die meinten das der Haken an ML die Rekursion seie, da man alles mit Rekursion erschlagen müsse.

    Das stimmt so zwar prinzipiell, aber da muss man sich halt mal in die funktionale bzw. mathematische Denkweise reinfinden, dann passt das schon. Die Idee ist eigentlich recht simpel. In C++ gibts das in ähnlicher Form übrigens bei Template-Metaprogrammierung, das sind die gleichen Denkmuster.

    Das mag sein, aber syntaktisch ist C++ sehr komplex, und bietet leider einiges Overhead. Wenn man sich die Boost-Bibliotheken z.B. mal ansieht, dann werden dort eine Menge sehr ausgefuchster Dinge gemacht, die die wenigsten C++-Programmierer verstehen (auch solche, die mit der STL arbeiten). Nicht zuletzt darf man nicht vergessen, dass viele nützliche C++-Techniken erst nach und nach entstanden sind und Syntaxelemente hierfür verwendet werden, die ursprünglich gar nicht dafür gedacht worden sind.

    Auch syntaktische Ambiguitäten machen die Sprache komplex, z.B. die Notwendigkeit von 'typename' an einigen Stellen um zwischen Typen und Members zu unterscheiden, oder die doppeldeutige Deklarationssyntax für Funktionen, die redundante Klammerpaare an einigen Stellen notwendig machen, um eine Initialisierung zu kennzeichnen.

    All diese Dinge führen dazu, dass C++ m.E. sehr wohl die komplexeste Programmiersprache ist, die es gibt. Esoterische Programmiersprachen wie Brainfuck sind von Natur aus viel weniger komplex, und auch von ML würde ich das behaupten (ohne je ML programmiert zu haben, aber ich kenne Haskell und F# und beide sind nach wissenschaftlichem Maß sehr sparsam (Parsimonie)).

    „asc“ führte sogar VB an. Das finde ich eine komische Wahl. Syntaktisch ist VB auf jeden Fall viel weniger komplex als C++. Die Sprachkonstrukte in „klassischen“ VB-Dialekten mögen zwar teilweise ein wenig komisch anmuten (z.B. sowas wie 'Open xyz For Binary As #1'). Aber das sind eben feststehende Konstrukte. Genausogut könnte man sagen, ObjC oder AppleScript seien komplex (auf letztere trifft das sogar eher zu). Auch semantisch gesehen ist VB eigentlich simpler als C++, auch wenn die .NET-Semantik teilweise recht verquer ist (weil sie einfach Inkonsistenzen enthält). Trotzdem wird es hier nie zu „Auswüchsen“ wie in C++ kommen, weil das Anwendungsgebiet einfach zu klar definiert ist. Übrigens gilt für das aktuelle VB dasselbe wie für C#. D.h. C# müsste genauso komplex sein.

    C++, durch seine enorm weite Anwendbarkeit, ist viel komplexer.



  • Hi,

    was mir auffällt ist daß hier keiner Ada aufführt. Die galt doch mal als das Monster an Sprachen, das nur auf Großrechnern implementiert werden konnte, weils von Ada bestimmungsgemäß keine Untermengen geben durfte.
    Ist hier jemand der Sich mit Ada auskennt und dazu was fundiertes sagen kann?

    Gruß Mümmel



  • Konrad Rudolph schrieb:

    All diese Dinge führen dazu, dass C++ m.E. sehr wohl die komplexeste Programmiersprache ist, die es gibt.

    Kennst du APL oder PL/I?



  • Hi,

    hab mich in der Vergangenheit mal mit PL/I beschäftigt, in vielen Dingen sicher noch komplexer als C++ aber (zumindest in der damaligen Version) nicht objektorientiert und ohne Templates.

    Gruß Mümmel



  • tfa schrieb:

    Konrad Rudolph schrieb:

    All diese Dinge führen dazu, dass C++ m.E. sehr wohl die komplexeste Programmiersprache ist, die es gibt.

    Kennst du APL oder PL/I?

    Nein, und es kann durchaus sein, dass die komplexer sind (wobei ich sagen muss, dass APL nicht komplex aussieht – kompliziert, ja. Komplex, nein). Ich bezog mich eher auf die bisher genannten Sprachen.

    Was Ada betrifft: Ada halte ich für deutlich weniger komplex als C++. Hier liegt an sich ein sehr striktes und formales Design zugrunde, sowohl in Syntax als auch Semantik.



  • tfa schrieb:

    Konrad Rudolph schrieb:

    All diese Dinge führen dazu, dass C++ m.E. sehr wohl die komplexeste Programmiersprache ist, die es gibt.

    Kennst du APL oder PL/I?

    Kennst du Monthz Pzthon?



  • ich stell mich mal ins lisp lager. beide sprachen, c++ und lisp, kann man mit dem entsprechenden hintergrundwissen in wenigen wochen so weit erlernen, dass man produktiven code erzeugen kann. wobei einem in c++ dann allerdings hauptsächlich "nur noch" best practices fehlen, fehlt einem in lisp unter garantie immer noch ein basisverständnis für die funktionsweise der sprache an sich.



  • Hi,

    wenn wir mal ganz ehrlich sind, wird C++ in sehr vielen Projekten einfach nur als C mit Klassen verstanden und angewendet. (von ein wenig STL-Nutzung mal abgesehen) Na und? Wenns die Aufgabe erfüllt ists doch OK. Die Aufgabe heißt doch meist nicht die gesamte C++Möglichkeitensau auf das Programm loszulassen, sondern in vertretbarer Zeit mit vertretbarem Aufwand das Problem so lösen, daß die Effizienz genügt und es ausreichend wartbar ist. Das ist bei der einen Aufgabe fast reiner Ansi-C-Code und im anderen vielleicht ein komplexes Template-Konstrukt.
    Wobei die entscheidenste Bedeutung der ganzen Template-Möglichkeiten vermutlich da liegt, wo mächtige Software-Werkzeuge selbst C++Code generieren. Das ist vielfach mit Templates erst möglich geworden oder wesentlich einfacher.

    Gruß Mümmel



  • Wundert mich das D in dieser doch etwas vom Thema abweichenden Diskussion nirgends auftaucht. Ich persönlich allerdings denke hier das Problem ist einfach das Komplexität hier einfach nicht klar definiert ist so das man gar nicht auf einen Nenner kommen kann. Komplex im Sinne von "Summe an Möglichkeiten" oder "Schwierigkeit des Erlernen(s)" oder vielleicht "Faktor des Abstrakten"?
    Denke das sind so die 3 Möglichkeiten die ich unter "Komplex" verstehen würde.

    Ich denke in der Summe der Möglichkeiten liegt C/C++ schon so weit oben... das ist kaum noch zu toppen. Die Schwierigkeit selbst sehe ich bei ASM schon sehr extrem, also für mich rein subjektiv gesehen. Was das Abstrakte angeht finde ich für mich das C++ da am sogar am intuitivsten ist (wenn man sich minimal Mühe gibt).

    Die Basic Familie ist zwar im kleinen zu "lesen" wie ein Buch aber wie hier schon erwähnt wurde wird es im großen Stile so extrem unübersichtlich. Zudem finde ich es teilweise nicht sonderlich eindeutig.

    Pascal und sehr viel mehr noch Delphi finde ich ist was die Syntax angeht der größte Müll nach BigBrother im TV ;). ASM sieht aus wie ein Zufallsgenerator der mit falschen Parametern aufgerufen wurde und LISP finde ich zwar nicht kompliziert aber nicht gerade "intuitiv". Ich glaube es hat schon seinen Grund das viele neuere (Script)Sprachen sich an der Syntax von Opa C. orientiert haben (Java/JS/PHP/C#,etc).

    Was die Altlasten angeht... nun war das nicht der Grundgedanke von 'D'?
    C++ modernisieren, entrümpeln und noch etwas anwender freundlicher gestallten?!



  • Slashi schrieb:

    Was die Altlasten angeht... nun war das nicht der Grundgedanke von 'D'? C++ modernisieren, entrümpeln und noch etwas anwender freundlicher gestallten?!

    Mhh... Gut, ich habe mir nur so etwas wie die c't/ix Artikel zu D angesehen, aber Anwenderfreundlicher oder verständlicher fand ich D ehrlich gesagt nicht. Mag sein das es das ist wenn man sich in die Syntax eingearbeitet hat, oder das die Beispiele abstrus gewählt worden sind.

    Für mich bleibt C++ eine der logischsten Sprachen, sofern man sich an etwas hält was man auch in jeder anderen Sprache tun sollte: Sauber Programmieren.

    cu André



  • Slashi schrieb:

    Ich glaube es hat schon seinen Grund das viele neuere (Script)Sprachen sich an der Syntax von Opa C. orientiert haben (Java/JS/PHP/C#,etc).

    ja, weil alle erfinder solcher sprachen C kennen und schon das eine oder andere C-programm selbst geschrieben haben. an programmiereinsteiger wird dabei meistens kein gedanke verschwendet.
    🙂



  • c-freak schrieb:

    an programmiereinsteiger wird dabei meistens kein gedanke verschwendet.

    Wieso? Ich kenne kaum jemanden, der sich mit dem Einstieg in C schwer tut. Ein guter Freund von mir hatte jetzt C in der Uni und war begeistert, weil alles so logisch und verständlich ist. C hat halt relativ wenig Grundstrukturen, im Gegensatz zur "Lernsprache" Java, wo man sofort in's Klassen- und OOP-Konzept reingeworfen wird, ohne irgendwas zu verstehen. Ich will keinen Flammenkrieg (:)) vom Zaum brechen, aber ich denke nicht, dass C absolut ungeeignet ist um einen Einstieg in die Programmierung zu finden.



  • Hi Badestrand,

    sorry, aber bei Deinem Posting dachte ich laut „WTF?“

    Badestrand schrieb:

    Ich will keinen Flammenkrieg (:)) vom Zaum brechen, aber ich denke nicht, dass C absolut ungeeignet ist um einen Einstieg in die Programmierung zu finden.

    Dann solltest Du schleunigst Stroustrups Abhandlung zu diesem Thema lesen. http://www.research.att.com/~bs/new_learning.pdf



  • Konrad Rudolph schrieb:

    Hi Badestrand,

    sorry, aber bei Deinem Posting dachte ich laut „WTF?“

    Macht ja nix 🙂

    Konrad Rudolph schrieb:

    Dann solltest Du schleunigst Stroustrups Abhandlung zu diesem Thema lesen. http://www.research.att.com/~bs/new_learning.pdf

    Ich finde das Paper in diesem Zusammenhang nicht sonderlich sinnvoll; hab's aber auch nur überflogen.

    C++ ist sicherlich schwer zu lernen, aber C? Wenn es vernünftig beigebracht wird, ist es meiner Meinung nach wirklich schnell zu verstehen, eben weil es so simpel ist bezgl. der Anzahl der Sprachkonstrukte. Hat man Variablen, Arrays, Zeiger und Funktionen verstanden, sitzt C schon, der Rest ergibt sich. Das einzige, woran sich meiner Erfahrung nach Neulinge schwer tun, sind Zeiger; vernünftig erklärt sind die aber auch ein Kinkerlitzchen.

    Inwiefern siehst du das denn anders?



  • Badestrand schrieb:

    Ich finde das Paper in diesem Zusammenhang nicht sonderlich sinnvoll;

    Lies es richtig, denn:

    C++ ist sicherlich schwer zu lernen, aber C?

    Stroustrup argumentiert in dem Paper genau das Gegenteil (und zwar stichhaltig).



  • Badestrand schrieb:

    C++ ist sicherlich schwer zu lernen, aber C? Wenn es vernünftig beigebracht wird, ist es meiner Meinung nach wirklich schnell zu verstehen, eben weil es so simpel ist bezgl. der Anzahl der Sprachkonstrukte.

    Weiß du was mir an C++ gegenüber C gefällt? Es hat Konstrukte die das Leben leichter machen ohne die Komplexität gegenüber C zu erhöhen. Und das Dokument sagt in dem Bezug wirklich eine Menge, auch wenn du es nicht so siehst.

    Man ist weder gezwungen in C++ von vorne herein OOP zu machen noch Templates notgedrungen zu erklären, selbst in der prozeduralen Programmierung ist es leichter als C (Und das sich hinter so etwas wie ein std::string sowohl OO wie auch Templates verbergen muss der Anfänger erstmal nicht wissen, der Einsatz ist dennoch leichter als die Verwendung von c-Arrays).

    cu André



  • Konrad Rudolph schrieb:

    C++ ist sicherlich schwer zu lernen, aber C?

    Stroustrup argumentiert in dem Paper genau das Gegenteil (und zwar stichhaltig).

    Nein, er sagt aus, dass es in C schwieriger ist, äquivalenten Code hinzubekommen. Gerade sein Beispiel bei "Complexity" ist albern, da er die gleiche Sicherheit fordert - darum geht's aber gar nicht beim Erlernen. Beim Erlernen geht's darum, die Abläufe und die Logik zu verstehen. Ich will damit keinesfalls sagen, dass C++-Anfänger zuerst C lernen sollten - das ist ein ganz anderer Punkt, C++-Lerner sollen C++ lernen. Aber wenn man einfach nur C lernen will, ist das Verständnis meiner Meinung nach schneller vorhanden als bei einem C++-Lerner, eben weil dieser zusätzlich noch Klassen, Funktionsüberladung und weiß der Geier was lernen muss.

    Und mir gefällt auch C++ besser, mit C++ kann man idR effektiver arbeiten, was auch gerade für Anfänger wichtig ist. Aber wie gesagt, ich finde, dass die Sprache C einfacher zu "verstehen" ist 🙂



  • Badestrand schrieb:

    Gerade sein Beispiel bei "Complexity" ist albern, da er die gleiche Sicherheit fordert - darum geht's aber gar nicht beim Erlernen.

    Doch, darum geht es sehr wohl. Es bringt nichts, jemandem von Anfang an konsequent etwas Falsches beizubringen. Im Gegenteil sogar: Du glaubst gar nicht, wieviele professionelle Programmierer einfach weiterhin so programmieren, weil sie es so gelernt haben. Ich sage nur Buffer Overflows. Wieso gibt es solche Fehler heutzutage überhaupt noch? Weil professionelle Programmierer sich nicht um die Validierung ihrer Eingaben kümmern. Speicherlecks? Gleiches Problem.

    Das hat nichts mit der fehlenden Technologie zu tun, das sind schlicht und ergreifend didaktische Probleme.

    Beim Erlernen geht's darum, die Abläufe und die Logik zu verstehen.

    Das ist Mittel zum Zweck. Der *Zweck* des Lernens ist es, funktionierende Software zu schreiben. Leider wird das in der Uni auch immer missverstanden, und der Student hat vier Semester lang Algorithmenkurse und kann danach kein einziges Programm in Java schreiben.

    Aber wenn man einfach nur C lernen will, ist das Verständnis meiner Meinung nach schneller vorhanden als bei einem C++-Lerner, eben weil dieser zusätzlich noch Klassen, Funktionsüberladung und weiß der Geier was lernen muss.

    Muss man? Sagt wer? Wieso kann man diese Dinge nicht alle erst mal als Blackbox betrachten?


Anmelden zum Antworten