Wie wäre es mit fünf Dingen, die ich an "Dinge, die ich an einer Sprache hasse" -Listen hasse? : D.
5- Das Malen eines Orangerots macht es nicht zu einem Apfel.
Wenn eine Sprache entworfen wird, denken die Designer normalerweise daran, wofür sie nützlich ist. Es für etwas völlig anderes zu verwenden kann funktionieren, aber sich zu beschweren, wenn es nicht einfach dumm ist. Nimm Python. Ich bin mir sicher, dass entweder jemand eines Tages ein Dienstprogramm zum Erstellen von Exe aus Python-Code erstellt hat oder dass jemand dies tun wird. Warum um Gottes Erde willst du ? tun? Es wäre ordentlich - versteh mich nicht falsch - aber es hat keinen Sinn. Also hör auf dich darüber zu beschweren!
Ein gut gestaltetes Projekt würde wahrscheinlich Code aus mehreren Sprachen enthalten. Das heißt nicht, dass Sie ein Projekt nicht mit nur einer Sprache abschließen können. Einige Projekte entsprechen möglicherweise den Fähigkeiten der von Ihnen verwendeten Sprache.
4- Stehst du auf Holzbeinen?
Die Plattform kann einen großen Einfluss darauf haben, was die Sprache kann. Heutzutage können Müllsammler oder sogar Pascals frühe Versuche der "Müllsammlung" dazu beitragen, dass das Gedächtnis verblasst (vielleicht mehr RAM?). Computer sind schneller und daher erwarten wir natürlich mehr von unseren Sprachen. Und ganz ehrlich, wir sollten es wahrscheinlich tun. Es ist jedoch ein enormer Preis zu zahlen, damit der Compiler Hash-Tabellen oder -Strings oder eine Vielzahl anderer Konzepte erstellen kann. Diese Dinge werden möglicherweise nicht an die Plattform vererbt, auf der sie verwendet werden. Zu sagen, dass sie leicht in eine Sprache aufgenommen werden können, sagt mir nur, dass Sie möglicherweise kein Bein haben, auf dem Sie stehen können.
3- Wer ist wirklich schuld?
Bugs. Wissen Sie. Ich liebe Käfer. Warum liebe ich Käfer? Weil es bedeutet, dass ich meinen Job behalten kann. Ohne Käfer gäbe es viele geschlossene Pizzerien. Benutzer hassen jedoch Fehler. Aber hier ist ein kleiner Spritzer kaltes Wasser. Jeder Fehler ist die Schuld des Programmierers. Nicht die Sprache. Eine Sprache mit einer so strengen Syntax, die die Anzahl der möglichen Fehler erheblich reduzieren würde, wäre eine völlig nutzlose Sprache. Seine Fähigkeiten könnten wahrscheinlich an einer Hand gezählt werden. Sie wollen Flexibilität oder Kraft? Du hast Fehler. Warum? Weil du nicht perfekt bist und Fehler machst. Nehmen Sie ein wirklich identifizierbares Beispiel in C:
int a[10];
for (int idx = 0; idx < 15; idx++) a[idx] = 10;
Wir alle wissen, was das tun wird. Was einige von uns jedoch vielleicht nicht erkennen, ist, dass Funktionalität sehr vorteilhaft sein kann. Je nachdem, was Sie tun. Pufferüberschreitungen sind die Kosten für diese Funktionalität. Dieser Code oben. Wenn ich das tatsächlich der Öffentlichkeit zugänglich mache. Das ist wieder .. sag es mit mir .. "Meine Schuld". Nicht C's dafür, dass ich das machen darf.
2- Sollten wir das nicht in den Papierkorb werfen?
Es ist sehr einfach, auf ein Feature in einer Sprache zu verweisen, die wir nicht verstehen, weil wir es nicht oft verwenden und es als dumm bezeichnen. Beschwere dich, dass es da ist usw. Goto unterhält mich immer. Die Leute beschweren sich immer darüber, dass goto in einer Sprache ist. Ich wette, Ihr letztes Programm enthielt eine Art Goto. Wenn Sie jemals eine Pause oder eine Fortsetzung verwendet haben, haben Sie ein goto verwendet. Das ist es. Zugegeben, es ist ein "sicherer" Weg, aber es ist, was es ist. Gehe zu haben ihre Verwendung. Ob "implizite" gotos wie "continue" oder "break" verwendet werden oder explizite gotos (unter Verwendung des tatsächlichen Schlüsselworts "goto" für jede Sprache). Nicht dass Sprachentwickler fehlerfrei sind, aber normalerweise ... wenn Funktionalität seit Anbeginn der Zeit existiert (für diese Sprache). Wahrscheinlich ist dieser Aspekt eine definierende Qualität dieser Sprache. Das heißt .. es ' s wird verwendet und hängt wahrscheinlich aufgrund der Abwärtskompatibilität nicht herum. Es wird heute verwendet. Wie vor 5 Minuten. Und richtig eingesetzt. Nun ... wohl benutzt es auch jemand falsch, aber das bezieht sich auf # 3 auf meiner Liste.
1. - Alles ist ein Objekt.
Ok .. das ist wirklich eine Teilmenge von # 2. Aber dies ist bei weitem die nervigste Beschwerde, die ich in Hasslisten sehe. Nicht alles ist ein Objekt. Es gibt sehr viele Konzepte, die nicht zu Objekten gehören oder sein müssen. Dinge dort zu platzieren, wo sie nicht hingehören, ist einfach hässlich und kann die Effizienz eines Programms beeinträchtigen. Sicher. Je nach Sprache vielleicht nicht viel. Dies bezieht sich auch auf # 5. Das heißt ... ja. Global sind in Ordnung. Funktionen für statische Methoden sind in Ordnung. Die Kombination von OO-Programmierung mit globalen Funktionen ist in Ordnung. Das bedeutet nicht, dass wir alle unseren Code von seinen Objektmodellen "befreien" sollten. Was passiert beim Entwerfen eines Codeabschnitts oder eines ganzen Projekts hinter den Kulissen? sollte ?beim Zusammenstellen berücksichtigt werden. Nicht nur dort, wo dieses Konzept lebt und viele andere Faktoren. Warum globale Funktionen in Klassen oder Namensraumkonzepte einbinden, wenn dies keinen Zweck erfüllt? Nehmen Sie statische Elementvariablen. Das amüsiert mich sehr, weil ... nun ... Abhängig von der Sprache und der Implementierung natürlich, aber im Allgemeinen haben Sie gerade eine globale deklariert. Ja, es gibt einige Gründe, diese Nicht-OO-Konzepte in OO-Wrapper zu verpacken. Eine davon ist natürlich selbstdokumentierender Code. Das kann Sinn machen. Also ... wie ich schon sagte. Gehen Sie nicht raus und "befreien" Sie Ihren Code. Aber jede gute moderne Sprache wird ein globales Konzept außerhalb ihrer OO-Modellierung haben. Ja, ich möchte ausdrücklich darauf hinweisen, dass eine OO-Programmiersprache ohne globales Konzept höchstwahrscheinlich einen schwerwiegenden Designfehler aufweist. Wieder aber .. hängt von der Absicht und dem Design der Sprache ab, daher versuche ich nicht, eine bestimmte Sprache auszuwählen, und es gibt viel zu viele, um sie hier zu analysieren. Überlegen Sie, wo der Code leben und am effektivsten sein soll. Wenn Sie etwas hinzufügen, das weder Funktionalität noch Unterstützung bietet, wird die Tastatur schneller zermürbt. Es tut niemandem gut. Nun ... es sei denn, Sie mögen Brownie-Punkte von der Person, die Ihnen wahrscheinlich fälschlicherweise beigebracht hat, dass alles ein Objekt ist.
Kurz gesagt, das Programmieren ist nicht nur ein gedankenloses Tippen auf die Tastatur. Bei jedem Projekt gibt es viele Überlegungen zum Design. Ich weiß, dass es ein Klischee ist, aber man muss es aus jedem Blickwinkel betrachten. Auch bei heutigen typsicheren Sprachen. Sie werfen nicht nur Code raus und erwarten, dass er gut funktioniert. Sicher ... es mag funktionieren, aber es ist möglicherweise nicht der richtige Weg, dies zu tun. Wählen Sie insgesamt die Sprache und das Format aus, die für den jeweiligen Job UND die Umgebung am besten geeignet sind. Aber keine Sprache nimmt den Gedanken dahinter weg. Wenn Sie nicht denken, tippen Sie nur.