Was bedeutet diese Aussage, dass C # und Java eine halbe Sprache sind? [geschlossen]

32

In dem Artikel: Warum POCO gibt es diesen Satz:

Maciej Sobczak bringt es auf den Punkt: „Ich mag es einfach nicht, wenn mir jemand die Hälfte der Sprache gibt und mir sagt, dass es zu meinem eigenen Schutz ist.“

Ich verstehe nicht, was er meint, obwohl C # im Besitz von Microsoft und Java im Besitz von Oracle ist , heißt das nicht, dass sie die Hälfte der Sprache beherrschen, oder? Ich habe keine Beweise gefunden, um diesen Satz zu beweisen, und ich bin wirklich neugierig darauf. Und noch neugieriger auf den Teil "Zu meinem eigenen Schutz".

123iamking
quelle
12
Ich habe das als Kritik daran interpretiert, den Programmierer Dinge wie das freie Zuweisen und Freigeben von Speicher und diese Art von "Schutz" tun zu lassen, aber ich bin mir nicht sicher, ob dies der Punkt war, den er anstrebte.
Kayaman
15
Ich bin mir nicht ganz sicher, denn der Artikel, aus dem er zitiert, scheint tot zu sein, aber es scheint, als würde er sagen, dass in Java und C # eine Reihe von "gefährlichen" oder kontroversen Funktionen von C ++ fehlen, wie Mehrfachvererbung oder Template-Metaprogrammierung.
GoatInTheMachine
3
Der Kontext des Zitats fehlt (der Link ist 404), daher erhalten Sie hier nur eine Vorstellung davon, was er wohl gemeint hat, oder (wahrscheinlicher) Leute, die nur ihre eigene Meinung vertreten. Wenn Sie den Kontext, dh den Inhalt der verlorenen Seite, tatsächlich kennen möchten, ist es wahrscheinlich am besten, den Autor direkt zu schreiben oder die verlorene Seite über die Wayback-Maschine oder ähnliches zu finden.
JacquesB
2
Der Aussage fehlt der Punkt, dass Sie nicht immer jeden möglichen Aspekt der Softwareentwicklung in einer Sprache offenlegen möchten , auch wenn Sie damit umgehen können . Sicher, Sie haben möglicherweise kein Problem mit dem Lesen von Speicherverwaltungscode, aber andere Entwickler sind möglicherweise nicht besonders aufgeregt, diesen Code zu verwalten. Es ähnelt dem Konzept der Einkapselung. Außerdem können Sie mit C # auf eine ganze Menge Dinge zugreifen, Compiler-Direktiven, spezielle Attribute und Überlegungen, aber nicht, dass man diese Dinge verwenden sollte.
Mark Rogers
32
Achten Sie zu Ihrem eigenen Wohl nicht auf die Leute, die glauben, dass eine Sprache alle Funktionen von C ++ haben muss, um als "real" und "vollständig" zu gelten. Achten Sie nicht auf die Leute, die denken, dass Typensicherheit, Gedächtnissicherheit und genau definiertes Verhalten "Trainingsräder" sind. Korrektheit wird in den meisten Branchen zum wichtigsten Aspekt von Software, und die Leute, die stolz darauf sind, sich nicht darum zu kümmern, werden bald irrelevant.
Theodoros Chatzigiannakis

Antworten:

162

Sobczak spricht nicht von Firmeneigentum. Die "halbe" Sprache, die ihm fehlt, ist all das, was Sie in vielen modernen Sprachen nicht können, obwohl er als gut ausgebildeter Computerexperte weiß, dass sie möglich gemacht werden könnten : Erben Sie von so vielen Klassen, wie Sie möchten. Weisen Sie ein beliebiges Objekt ohne Typbeschränkungen einem anderen zu. Steuern Sie die Zuweisung und Freigabe von Ressourcen manuell, anstatt dem Compiler und der Laufzeit zu vertrauen, die dies für ihn tun.

Die Sache ist, all diese Einschränkungen wurden aus einem bestimmten Grund in Programmiersprachen eingeführt. Wir hatten Sprachen, die das alles zuließen. Im Laufe der Zeit stellten wir fest, dass der durchschnittliche Programmierer mit einer gewissen Anzahl von Einschränkungen und Handgriffen besser dran ist, da das Potenzial, wirklich schlimme Fehler zu machen, einfach zu groß ist, um die zusätzliche Kraft und Ausdruckskraft wert zu sein.

(Offensichtlich ärgert dies manchmal Programmierer, die nicht wirklich so viel Handarbeit benötigen. Ihre Beschwerden sind manchmal legitim. Aber die Leute sind notorisch schlecht darin, ihre eigenen Fähigkeiten einzuschätzen, und viele, die glauben, dass sie die Sicherheitsvorkehrungen nicht benötigen, tun dies.) Tatsächlich brauchen wir sie sehr. Es ist nicht immer einfach, echte überlegene Intellektuelle, die sich durch Einschränkungen in höheren Sprachen zurückgehalten fühlen, von durchschnittlichen Programmierern zu unterscheiden, die nur der Meinung sind, dass Beschwerden sie überlegen erscheinen lassen oder die es nicht wissen etwas besser.)

Kilian Foth
quelle
67
Das ist meine goto Antwort.
Neil
71
Ich möchte auch hinzufügen, dass es keinen überlegenen Intellekt gibt, der die Einschränkungen nicht braucht. Man kann immer davon ausgehen, dass jeder früher oder später Fehler macht. Und normalerweise ist der Fehler umso größer, je besser der Intellekt ist.
Neil
29
Java und C # bieten ein bisschen mehr, als nur zu verhindern, dass sich Menschen in den Fuß schießen. Die Speicherverwaltung nahm viel Zeit und Mühe in Anspruch, bevor beispielsweise die Garbage Collection begann, und es ist schwierig, die manuelle Speicherverwaltung korrekt durchzuführen. Die Speicherbereinigung verbessert die Produktivität des Programmierers.
Robert Harvey
12
@RobertHarvey Ich stimme zu 100% zu. Als langjähriger C ++ - Programmierer stand ich der automatischen Speicherverwaltung beim Umstieg auf C # skeptisch gegenüber. Sobald ich darüber hinweg war, war es unglaublich befreiend, dass ich mir 99% der Zeit keine Sorgen machen musste. Es hat meine Denkkraft befreit, stattdessen über andere Themen nachzudenken.
17 von 26
8
"Weisen Sie ein Objekt ohne Typbeschränkungen einem anderen Objekt zu." ... Also dynamic?
Arturo Torres Sánchez
34

Dies wird in der Originalquelle des Zitats recht gut erklärt :

Ich habe mich entschlossen, mehr über C ++ zu lernen, und wurde zu seiner treuen Leidenschaft - dies schließt mein Interesse an der Art und Weise ein, wie sich diese Sprache wahrscheinlich entwickeln wird. Außerdem ist mir aufgefallen, dass für die Entwicklung nützlicher Bibliotheken die besten und modernsten Techniken erforderlich sind , nicht die eigentlichen Anwendungen. Vor diesem Hintergrund habe ich versucht, einige meiner eigenen Bibliotheken für verschiedene Zwecke zu schreiben (siehe meine Download-Seite) und ich habe auch versucht, den C ++ Boost-Entwicklern über die Schulter zu schauen (siehe meine Link-Seite), um zu erfahren, was diese sind High-End-Techniken sind. Es ist sehr anstrengend, Zeit für die Entwicklung von Bibliotheken zu investieren, die allgemein und gleichzeitig nützlich sein sollen. Deshalb hören Programmierer nie auf zu lernen.

[…]

Ich spiele weiter mit C ++ und den Techniken zum Schreiben robuster Software. Um eine breitere Perspektive im Bereich zuverlässiger Software zu erhalten, habe ich mich entschlossen, etwas Zeit in das Erlernen von Ada (und verwandten Themen) zu investieren. Diese Sprache scheint vom Business völlig aufgegeben zu werden, obwohl es Ada war, das wirklich für komplexe und zuverlässige Aufgaben konzipiert wurde systeme. Ich muss zugeben, dass das Lernen von Ada für mich wirklich von Vorteil war, da es mir ermöglichte, meine Arbeits- und Entwicklungsansätze genauer zu betrachten. Am wichtigsten ist, dass einige der Ideen aus der Ada-Welt mehr oder weniger direkt auf C ++ angewendet werden können, wobei gute Ergebnisse im Bereich der Robustheit und Korrektheit erzielt werden.

[…]

OK, ich habe es vergessen. Ich habe eines Tages geschworen, Java nicht zu lernen. Hab ich doch. Nun, in dem Maße, in dem ich Arbeitscode lesen und schreiben kann. Ich habe 'Thinking in Java' (online verfügbar, kostenlos) und 'Core Java' (nicht online, nicht kostenlos) gelesen, war auch indirekt an einer Java-Entwicklung beteiligt und ... Nun, ich kaufe nicht es. Ich mag es einfach nicht, wenn mir jemand die Hälfte der Sprache gibt und mir sagt, dass es zu meinem eigenen Schutz ist. Es ist wie ein Papierhammer, der leicht gemacht ist, damit sich niemand verletzt, wenn er auf den Finger schlägt ... Gleiches gilt für C #. Ich wähle den Stahl-Vorschlaghammer, damit ich sicher sein kann, dass er, wenn ich Macho spielen möchte, standhält.
Die Frage ist - warum verwenden so viele Leute es (Java, C #, etc.)? Hmmm ... Vielleicht, weil es an manchen Stellen sehr gut ist. Es gibt jedoch Situationen, in denen sowohl die Sprache als auch die Bibliothek zeigen, dass sie (anfangs) eher für Applets entwickelt wurden, als dass sie zu Alleskönner-Dienstprogrammen wurden. Es verspricht einfach zu viel und gibt zu wenig für die Catch-All-Technologie. Oder als eine Lösung, die sich gegen jede Konkurrenz durchsetzen könnte.

Ich mag C ++, wenn maximale Leistung und weiteste Perspektive benötigt werden. An Orten, an denen die Ausdruckskraft von C ++ kein Muss ist, scheinen Sprachen wie Tcl oder Python genau das Richtige zu sein. Sie sind nicht nur hinsichtlich ihrer Entwicklung offen, sondern können je nach Bedarf erweitert und eingebettet werden. Ich sehe viele Möglichkeiten, in diesen Technologien zu träumen. Ich neige auch dazu, C als Sprache für die reguläre Programmierung aufzugeben - dies scheint nur als Ziel für die Codegenerierung eine vernünftige Wahl zu sein, da es sonst zu fehleranfällig ist. Heute ist Ada meine wahrscheinlich zweite Wahl für ernstere Projekte, vorausgesetzt, ich habe freie Wahl (was leider die meiste Zeit nicht der Fall ist).

Mit anderen Worten, der Autor dieses Zitats mag C ++, und er mag kein Java, und er hat das Gefühl, dass in Java die Hälfte von C ++ fehlt. Und das ist alles, was zu diesem Zitat gehört.

Jörg W. Mittag
quelle
18
Ironischerweise mag er C nicht aus dem gleichen Grund, aus dem er C ++ mag. Es ist sehr offen und erlaubt viel Kraft und viele Fehler.
GreySage
8
Er hält C ++ für ausdrucksvoller als Python
benxyzzy
12
@ GreySage Das ist mir auch aufgefallen ... C ist zu fehleranfällig, aber C # gibt dir nicht genug Power? C ist das weit weg von C ++? C # hat keine "unsicheren" Ecken, die Ihnen mehr Kontrolle geben? Interessante Mischung aus Meinungen, das ist sicher ...
WernerCD
10
@WernerCD kann nicht wirklich von unsicherem C # erzählen, aber C und C ++ haben so ziemlich nichts gemeinsam, außer dass Sie ein einfaches C90-Snippet in ein gültiges C ++ - isches Snippet verwandeln können, an dem der Compiler nicht erstickt.
Quentin
23

Der Artikel, auf den Sie in dem von Ihnen geposteten Blog verlinkt haben, wurde entfernt, daher ist es schwierig, sicher zu sein, aber wie Kilian sagt, ist es wahrscheinlich, dass C # und Java sich wie C ++ anfühlen, aber mit viel Features und Konstrukte wurden entfernt, um sie benutzerfreundlicher oder sicherer zu machen.

Im Jahr 2006, als dies geschrieben wurde, als C # noch relativ jung war und Java in vielerlei Hinsicht noch nicht ausgereift war, und als Power vs. Safety ein Kompromiss schien, bei dem man nur einen auswählen konnte, war dies keine völlig unvernünftige Position .

In diesen Tagen ist diese Position überhaupt nicht vernünftig. C # und Java haben sich enorm weiterentwickelt und Funktionen aus anderen (besonders funktionalen) Sprachen übernommen, um das Schreiben von sicherem Code zu fördern. Wir haben auch Sprachen wie Rust und Swift, die von Grund auf dafür entwickelt wurden.

Wenn jemand auf eine Sprache herabschaut, weil sie Ihre Hand hält oder sagt, dass eine schwer zu verwendende Sprache irgendwie gut ist, würde ich alles, was sie sagt, mit einem Körnchen Salz nehmen. Sie müssen sich nur die peinliche Anzahl von Fehlern ansehen, die in Code gefunden wurden, von denen wir jeden Tag abhängig sind und die von den klügsten Köpfen der Branche geschrieben wurden. Dies wäre trivialerweise durch die Verwendung von "sicheren" Sprachen vermieden worden, um herauszufinden, warum.

GoatInTheMachine
quelle
6
Ich stimme Ihrer Position im letzten Absatz zu. C ++ sollte der "Brunnen der Exploits" genannt werden.
Caleb Mauer
3
Ergänzend zu Ihrem zweiten Absatz haben sowohl Java als auch C # die C- und C ++ - Syntax aus verschiedenen Gründen stark eingeschränkt, einschließlich der Verführung bestehender C / C ++ - Entwickler mit dem Versprechen einer geringeren Lernkurve. Mit zunehmender Reife haben sie ihre eigenen Funktionen und Geschmacksrichtungen hinzugefügt, aber in ihrer Anfangszeit war es einfacher, sie als "C ++, aber weniger leistungsfähig" zu betrachten, da sie direkter als Alternative zu C ++ positioniert waren.
Harrison Paine
12

Rückblickend auf die Archive scheint dieses Zitat aus dem Jahr 2003 zu stammen (trotz des Artikels, in dem es aus dem Jahr 2006 zitiert wird). Zu dieser Zeit war C # in Version 1. x und es fehlten viele seiner modernen Funktionen :

Neue Eigenschaften

C # 2.0

  • Generika
  • Teiltypen
  • Anonyme Methoden
  • Iteratoren
  • Nullable-Typen
  • Getter / Setter getrennte Zugänglichkeit
  • Methodengruppenkonvertierungen (Delegierte)
  • Co- und Contra-Varianz für Delegierte
  • Statische Klassen
  • Inferenz delegieren

C # 3.0

  • Implizit typisierte lokale Variablen
  • Objekt- und Auflistungsinitialisierer
  • Automatisch implementierte Eigenschaften
  • Anonyme Typen
  • Erweiterungsmethoden
  • Abfrageausdrücke
  • Lambda-Ausdruck
  • Ausdrucksbäume
  • Teilweise Methoden

C # 4.0

  • Dynamische Bindung
  • Benannte und optionale Argumente
  • Generische Co- und Kontravarianz
  • Eingebettete Interoptypen ("NoPIA")

C # 5.0

  • Asynchrone Methoden
  • Anruferinfo-Attribute

C # 6.0

  • Compiler-as-a-Service (Roslyn)
  • Import von statischen Typelementen in den Namespace
  • Ausnahmefilter
  • In catch / finally-Blöcken abwarten
  • Auto-Property-Initialisierer
  • Standardwerte für Nur-Getter-Eigenschaften
  • Ausdrucksstarke Mitglieder
  • Nullpropagator (nullbedingter Operator, prägnante Nullprüfung)
  • String-Interpolation
  • Name des Betreibers
  • Wörterbuch-Initialisierer

C # 7.0

  • Out Variablen
  • Mustervergleich
  • Tuples
  • Dekonstruktion
  • Lokale Funktionen
  • Zifferntrennzeichen
  • Binäre Literale
  • Ref kehrt zurück und Einheimische
  • Generalisierte asynchrone Rückgabetypen
  • Expressionsbodierte Konstruktoren und Finalisierer
  • Ausdrucksstarke Getter und Setter

C # 7.1

  • Async main
  • Standardliteralausdrücke
  • Abgeleitete Tupelelementnamen

- "C Sharp" , Wikipedia (Verweise und Links entfernt)

Es ist wahrscheinlich verständlicher, dass C # in diesem Kontext wie eine halbe Sprache wirkte, da es nicht viel von dem gab, was C # heute ist. Es ist komisch zu denken, dass es nicht einmal staticUnterricht gab!

Es fehlte auch mehr Material, da C # an .NET gebunden war. Zum Beispiel gab es damals noch kein WPF . es war alles WinForms.

Nat
quelle
statische Klassen sind möglicherweise eine schlechte Wahl für ein fehlendes Feature, da sie in Java immer noch nicht vorhanden sind (C #). Es sei denn, dies ist ein Stich in Java?
user253751
1
@immibis Kein vorsätzlicher Stich auf Java, aber, jeeze, wirklich? staticKlassen scheinen solch ein primitives Merkmal zu sein; Ich stellte mir ein bisschen vor, dass sie Klassen mit Instanzen vorbereiteten.
Nat
2
Scheint so, als ob man sagt, dass die Jets von Kolbentriebwerken den Jets von Triebwerken vorausgingen. Eine "nicht instanziierte Klasse" wird im Allgemeinen als Modul oder Namespace bezeichnet , mit Ausnahme von Sprachen, in denen sich der gesamte Code in einer Klasse befinden muss. (Oder man nennt ein Fahrrad ein manuelles Auto oder ein Festnetztelefon ein stationäres Mobiltelefon oder ...)
user253751
@Nat - Es ist nett, statische Klassen zu haben, aber wenn man sie nicht hat, ändert sich absolut nichts. Sie können einfach alle Member der Klasse statisch machen, und alles, was Sie verlieren, sind einige Arten von Compilerfehlern, wenn Sie vergessen, dass die Klasse statisch bleiben soll.
Jirka Hanika
@JirkaHanika Ja, ich bin staticin den meisten Fällen sowieso kein großer Klassenfan . Ehrlich gesagt, ich habe es als ein Feature ausgewählt, das ich hervorheben möchte, da es ein sehr einfacher, primitiver Teil von C # ist. Ich habe nicht gedacht, dass sie nicht in Java sind.
Nat
3

Er beklagte sich über das Fehlen von Sprachfunktionen, die eine feinkörnige Kontrolle ermöglichen. Dazu gehören Tools für

  • Unveränderlichkeit erzwingen (wie das C ++ - constSchlüsselwort)
  • Kontrolle der Objektlebensdauer und des Eigentums
  • Steuern der Speichernutzung, des Kopierens und des Zuweisungsstils

Dies erinnert mich an eine meiner Kritikpunkte an Java:

Alles ist ein Zeiger, aber Zeiger existieren nicht.

In C ++ - Objekten sind Zeiger und Referenzen drei unterschiedliche Konzepte mit klarer Semantik. In Java haben Sie nur den Pseudo-Objekt-Zeiger. Durch das Zusammenführen dieser und das Vermeiden der wahren Zeigersemantik wird das Objektmodell weniger klar.

In einem gut definierten C ++ - Programm kann der Programmierer erwarten, dass Referenzen gültig und nicht null sind. Aufgrund seines vereinfachten Modells kann Java nicht dieselben Garantien geben.

Zu den Symptomen dieses weniger klaren Modells gehören das Nullobjektmuster und Yoda-Bedingungen wie 5.equals(potentiallyNullIntegerReference).

Wes Toleman
quelle
5
Das ist sehr verwirrt. Zeiger (im logischen Sinne existieren sie in Java) können Sie einfach nicht mit ihnen verwechseln. Der Sinn der Vereinfachung des Modells besteht darin, mehr Garantien zu ermöglichen. Die Logik, dass Sie mehr über den Code in einer Sprache annehmen können, ist weniger einschränkend. Mehr Einschränkungen -> mehr Garantien.
JimmyJames
1
@JimmyJames der Ausdruck bedeutet, dass Sie keinen tatsächlichen Zeiger haben können, obwohl alle Java-Klassen implizite (yuck, btw) Referenzsemantik haben. Zum Beispiel gibt es keine Möglichkeit, einen "Verweis" auf einen Verweis zu erhalten. Dadurch wird die Sprache an mehreren Stellen verkrüppelt, und manchmal sind irrsinnige Problemumgehungen erforderlich (siehe, Map.mergewenn Sie einfach einen Wert in einer Karte aktualisieren möchten).
Quentin
3
@JimmyJames: Einige Arten nützlicher Garantien können praktisch nicht angeboten werden, ohne bestimmte Einschränkungen aufzuerlegen. Darüber hinaus können einige nützliche Optimierungen Einschränkungen erfordern. Einige Sprachen enthalten jedoch sinnlose Einschränkungen, die Programmierern keine nützlichen Garantien bieten und nicht zur Durchführung nützlicher Optimierungen erforderlich sein sollten. Einige Einschränkungen sind einfach schlecht.
Supercat
3
@JimmyJames: Auf der anderen Seite bieten einige der grundlegenderen Einschränkungen von Java und C # im abgesicherten Modus eine sehr nützliche Garantie, die C ++ nicht bieten kann: Jede Referenz (was in C ++ ein Zeiger wäre), die jemals existiert beobachtet, um ein bestimmtes Objekt zu identifizieren, wird niemals beobachtet, um etwas anderes zu identifizieren .
Supercat
3
Können Sie einige Zitate zur Untermauerung Ihrer Antwort bereitstellen? Zum Beispiel, AFAIK, erwähnt die Seite nicht const. Es wird zwar "funktionale Programmierung" erwähnt, die Sprache, die er als Beispiel verwendet, ist jedoch "Schema", was keine reine funktionale Sprache ist (in der Tat achten die Designer von "Schema" darauf, die Verwendung des Wortes "Funktion" zu vermeiden und darüber zu sprechen " Prozeduren "), so scheint es, verwendet er die Interpretation von FP" erstklassiger Unterprogramme "und nicht" referentielle Transparenz ".
Jörg W Mittag
1

Ich stimme der Antwort von @Kilian zu, aber ich werde einige Elemente hinzufügen.

1- Ausführen gegen eine virtuelle Maschine, nicht das Betriebssystem

Da Java und C # über eine virtuelle Maschine ausgeführt werden, wird logischerweise erwartet, dass Sie nicht genau das tun können, was Sie möchten, wenn Sie direkt mit dem Betriebssystem arbeiten, da Sie wahrscheinlich etwas in der VM beschädigen. Darüber hinaus ist Java noch logischer, da es plattformunabhängig ist.

2 - Tonnen von Anwendungen erfordern nicht, dass Sie solche Dinge benötigen.

Es gibt Unmengen von Anwendungen, bei denen Sie nicht so viele Details durcharbeiten müssen. Wenn Sie dies jedoch in einer Sprache tun, die dies erfordert, erhalten Sie:

  • Mehr Risiken, Fehler aufgrund dieser unnötigen Dinge zu haben.
  • Mehr Entwicklungskosten, Speicherverwaltung und Testen kosten Zeit und Geld!

3- Die Sprache wird nach einer bestimmten Wahl gewählt, die Kosten / Nutzung / Risiken wie ... alles bewertet.

Mit C ++ können Sie so ziemlich alles machen, was Sie wollen, das ist die Wahl der C ++ - Leute. Je mehr es gibt, desto mehr müssen Sie bewältigen.

Dinge wie Mehrfachvererbung werden also nicht nur aufgrund der Tatsache aufgegeben, dass sie gefährlich sind. Sie werden aufgegeben, weil die Implementierung mit Kosten (Entwicklung, Wartung) verbunden ist, die für eine Funktion anfallen, die nur selten richtig eingesetzt wird und eingesetzt werden kann in der Regel anders umgeschrieben werden.

Walfrat
quelle
Die tatsächlichen Kosten einer Mehrfachvererbung liegen in der Tatsache, dass die beiden folgenden Garantien nicht eingehalten werden können: (1) Wenn ein Mitglied der Basisklasse in der Mittelklasse Büberschrieben wird M, ist Bdie Version dieses Mitglieds nur über M'' zugänglich. s überschreiben; (2) TWenn Sie eine Typreferenz angeben und diese in eine beliebige Supertypreferenz umwandeln, erhalten Sie Teine Referenz, die dem Original entspricht. Beide Garantien sind nützlich, und für die Unterstützung der Mehrfachvererbung muss mindestens eine aufgegeben werden.
Supercat
-1

Setzen Sie einfach alle Einschränkungen in Hochsprachen wie C # und Java, um den Programmierer zu schützen. Sie existieren nicht so sehr, um den Programmierer vor sich selbst zu schützen, sondern um den Programmierer vor anderen Programmierern zu schützen!

Wie oft stoßen wir als Programmierer auf Bibliotheken, deren Codierungspraktiken und Design ausgesprochen schlecht waren, die wir jedoch aus dem einen oder anderen Grund verwenden mussten?

Diese Programme weisen in der Regel die Merkmale der alten prozeduralen Programmiermethode auf, da keine Kapselung vorhanden ist und viel direkter Speicher mit wenig oder gar keinem Fehler beim Abfangen oder Behandeln geschrieben wird. Segfaults werden häufig eingesetzt, wenn versucht wird, sie in einem Großprojekt zu verwenden.

Hier sind Sprachen wie Java und C # äußerst hilfreich. Es ist nicht so, dass sie uns die Tatsache gefallen lassen, dass sie uns nicht all die netten Dinge machen lassen, die andere Sprachen tun machen.

Schnittstellen sind meiner Meinung nach in Bezug auf den Speicher oder die Ausführungsgeschwindigkeit jeden Kompromiss wert. Ich hoffe, Sie können sehen, dass in jeder Art von zeitlich begrenzter, geschäftskritischer Anwendung all diese Schutzmaßnahmen, die ordnungsgemäße Fehlerbehandlung und die allgemeine Gewissheit, dass der Speicher nicht ausgelastet ist, gute Dinge sind!

Akumaburn
quelle
dies scheint nicht zu bieten alles wesentliche über gemacht Punkte und erläuterte vor 5 Antworten
gnat
1
They exist not so much to protect the programmer from him/herself, but rather to protect the programmer from other programmers!oder soll es andere programmierer vor dem programmierer schützen?
Tobia Tesan
@TobiaTesan Das auch :)
Akumaburn