Wie wäre es mit einer Liste mit fünf Dingen, die ich an einer Sprache hasse? :D
5- Wenn man eine Orange rot anmalt, ist sie noch lange kein Apfel.
Wenn eine Sprache entworfen wird, haben die Designer in der Regel im Kopf, wozu sie nützlich ist. Sie für etwas ganz anderes zu verwenden puede funktionieren, aber sich zu beschweren, wenn es nicht funktioniert, ist einfach dumm. Nehmen Sie Python. Ich bin sicher, dass entweder jemand ein Dienstprogramm entwickelt hat oder eines Tages entwickeln wird, um Exe-Dateien aus Python-Code zu erstellen. Warum um Himmels willen sollten Sie wollen um das zu tun? Es wäre nett - verstehen Sie mich nicht falsch -, aber es hat keinen Nutzen. Also hören Sie auf, sich darüber zu beschweren!
Ein gut durchdachtes Projekt würde wahrscheinlich Code aus mehreren Sprachen enthalten. Das heißt aber nicht, dass man ein Projekt nicht mit nur einer Sprache abschließen kann. Einige Projekte können durchaus mit den Fähigkeiten der von Ihnen verwendeten Sprache durchgeführt werden.
4- Stehen Sie auf Holzbeinen?
Die Plattform kann einen großen Einfluss darauf haben, was die Sprache leisten kann. Heutzutage können Garbage-Collectors oder sogar der frühe Versuch von Pascal, eine "Garbage-Collection" einzuführen, beim Verblassen des Speichers helfen (vielleicht malloc mehr Ram??). Computer sind schneller geworden, und so erwarten wir natürlich auch mehr von unseren Sprachen. Und offen gesagt, sollten wir das auch. Es gibt jedoch einen hohen Preis für die Bequemlichkeit des Compilers, Hash-Tabellen oder Strings oder eine Vielzahl anderer Konzepte zu erstellen. Diese Dinge sind möglicherweise nicht mit der Plattform, auf der sie verwendet werden, verbunden. Die Behauptung, sie seien leicht in eine Sprache einzubinden, sagt mir, dass Sie sich nicht auf ein Bein stellen können.
3- Wer ist wirklich schuld?
Fehler. Ihr wisst schon. Ich liebe Käfer. Warum ich Käfer liebe. Weil das bedeutet, dass ich meinen Job behalten kann. Ohne Wanzen gäbe es viele geschlossene Pizzerien. Aber die Benutzer hassen Wanzen. Aber hier ist ein kleiner Spritzer kaltes Wasser. Jeder Fehler est der Fehler des Programmierers. Nicht die der 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. Ihre Fähigkeiten ließen sich wahrscheinlich an einer Hand abzählen. Sie wollen Flexibilität oder Leistung? Sie haben Bugs. Und warum? Weil man nicht perfekt ist, und weil man Fehler macht. Nehmen Sie ein gut erkennbares Beispiel in C:
int a[10];
for (int idx = 0; idx < 15; idx++) a[idx] = 10;
Wir alle wissen, was das bewirken wird. Aber was einige von uns vielleicht nicht wissen, ist, dass Funktionalität sehr nützlich sein kann. Je nachdem, was Sie tun. Pufferüberläufe sind der Preis für diese Funktionalität. Dieser Code oben. Wenn ich den tatsächlich veröffentlichen würde. Das ist wieder sag es mit mir "Mein Fehler". Nicht C's Schuld, dass ich das tun konnte.
2- Sollten wir das nicht in den Papierkorb werfen?
Es ist sehr einfach, auf eine Funktion in einer Sprache hinzuweisen, die wir nicht verstehen, weil wir sie nicht oft benutzen, und sie als dumm zu bezeichnen. Sich beschweren, dass es da ist usw. Goto ist für mich immer unterhaltsam. Die Leute beschweren sich immer darüber, dass es goto's in einer Sprache gibt. Doch ich wette, Ihr letztes Programm enthielt eine Art von goto. Wenn Sie jemals ein Break oder ein Continue benutzt haben, haben Sie ein Goto benutzt. Das ist es, was es ist. Zugegeben, es ist ein "sicheres" goto, aber es ist, was es ist. Goto's haben ihren Nutzen. Unabhängig davon, ob "implizite" Goto's wie continue oder break oder explizite Goto's (unter Verwendung des eigentlichen Schlüsselworts "goto" für die jeweilige Sprache) verwendet werden. Nicht, dass die Entwickler von Sprachen fehlerfrei wären, aber typischerweise... wenn die Funktionalität seit Anbeginn der Zeit (für diese Sprache) existiert. Wahrscheinlich ist dieser Aspekt eine entscheidende Eigenschaft dieser Sprache. Das heißt, sie wird verwendet und ist wahrscheinlich nicht nur wegen der Abwärtskompatibilität in Gebrauch. Sie wird heute verwendet. Das heißt, vor 5 Minuten. Und richtig eingesetzt. Nun... es gibt wohl auch jemanden, der sie unsachgemäß verwendet, aber das bezieht sich auf Nr. 3 auf meiner Liste.
1. - Alles ist ein Objekt.
Okay, das ist eigentlich eine Untermenge von Nr. 2. Aber dies ist bei weitem die ärgerlichste Beschwerde, die ich in Hasslisten sehe. Nicht alles ist ein Objekt. Es gibt sehr viele Konzepte, die nicht zu den Objekten gehören oder gehören müssen. Dinge dort zu platzieren, wo sie nicht hingehören, ist einfach hässlich und kann die Effizienz eines Programms verringern. Sicher, je nach Sprache vielleicht nicht viel. Dies bezieht sich auch auf #5. Das bedeutet ... ja. Globale sind in Ordnung. Funktionen im Gegensatz zu statischen Methoden sind in Ordnung. Die Kombination von OO-Programmierung mit globalen Funktionen ist in Ordnung. Das bedeutet aber nicht, dass wir alle losziehen und unseren Code von seinen Objektmodellen "befreien" sollten. Wenn wir einen Codeabschnitt oder ein ganzes Projekt entwerfen, sollten wir uns überlegen, was hinter den Kulissen passiert debe bei der Zusammenstellung berücksichtigt werden. Nicht nur, wo das Konzept lebt und viele andere Faktoren. Warum sollte man globale Funktionen in Klassen oder Namensraumkonzepte verpacken, wenn es keinen Zweck erfüllt? Nehmen Sie statische Mitgliedsvariablen. Das amüsiert mich sehr, denn nun ja es hängt natürlich von der Sprache und der Implementierung ab, aber im Allgemeinen haben Sie gerade eine globale Variable deklariert. Ja, es gibt einige Gründe, diese Nicht-OO-Konzepte in OO-Wrapper zu verpacken. Einer davon ist natürlich die Selbstdokumentation von 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 wollte speziell darauf hinweisen, dass eine OO-Programmiersprache ohne ein globales Konzept höchstwahrscheinlich einen schwerwiegenden Designfehler hat. Aber auch hier kommt es auf die Intention und das Design der Sprache an, so dass ich nicht versuche, eine bestimmte Sprache herauszupicken und es gibt viel zu viele, um sie hier zu analysieren. Wie dem auch sei, überlegen Sie sich, wo der Code am effektivsten sein sollte. Wenn man etwas mit viel Schnickschnack versieht, der keine zusätzliche Funktionalität oder Unterstützung bietet, wird die Tastatur nur schneller abgenutzt. Damit ist niemandem gedient. Es sei denn, Sie möchten von der Person, die Ihnen wahrscheinlich fälschlicherweise beigebracht hat, dass alles ein Objekt ist, Pluspunkte sammeln.
Kurz gesagt, Programmieren ist nicht nur das gedankenlose Tippen auf der Tastatur. Bei jedem Projekt gibt es eine Menge Designüberlegungen. Ich weiß, es ist ein Klischee, aber man muss es aus jedem Blickwinkel betrachten. Selbst bei den heutigen typsicheren Sprachen. Man wirft nicht einfach einen Code in den Raum und erwartet, dass er gut funktioniert. Sicher es kann funktionieren, aber es ist vielleicht nicht der richtige Weg, es anzugehen. Insgesamt sollten Sie die Sprache und das Format wählen, die für die jeweilige Aufgabe UND die Umgebung am besten geeignet sind. Aber keine Die Sprache nimmt den Gedanken dahinter weg. Wenn du nicht denkst, tippst du nur.