Ich liebe es, in Sprachen zu programmieren, die sich an Hardcore-Programmierer zu richten scheinen. (Meine Favoriten sind Python und D.) MATLAB richtet sich an Ingenieure und R an Statistiker. Diese Sprachen wurden anscheinend für Leute entwickelt, die keine Hardcore-Programmierer sind und nicht wie Hardcore-Programmierer denken. Ich finde es immer etwas umständlich, sie zu benutzen, und bis zu einem gewissen Grad kann ich nicht sagen, warum. Hier sind einige Probleme, die ich identifiziert habe:
- (Beide): Die extreme Betonung von Vektoren und Matrizen, sofern es keine wahren Primitive gibt.
- (Beide): Die Schwierigkeit der grundlegenden String-Manipulation.
- (Beide): Fehlende oder umständliche Unterstützung für grundlegende Datenstrukturen wie Hash-Tabellen und "echte", dh typparametrische und verschachtelbare Arrays.
- (Beide): Sie sind wirklich sehr, sehr langsam, selbst nach interpretierten Sprachstandards, sofern Sie sich nicht nach hinten bücken, um Ihren Code zu vektorisieren.
- (Beide): Sie scheinen nicht für die Interaktion mit der Außenwelt ausgelegt zu sein. Beispielsweise handelt es sich bei beiden Programmen um relativ umfangreiche Programme, deren Start einige Zeit in Anspruch nimmt, und die anscheinend nicht so konzipiert sind, dass einfache Textfilterprogramme einfach zu schreiben sind. Darüber hinaus macht das Fehlen einer guten Zeichenfolgenverarbeitung die Datei-E / A in alles andere als sehr Standardformen nahezu unmöglich.
- (Beide): Die Objektorientierung scheint sich sehr verschraubt anzufühlen. Ja, Sie können es tun, aber es fühlt sich nicht viel idiomatischer an als OO in C.
- (Beide): Kein offensichtlicher, einfacher Weg, einen Referenztyp zu erhalten. Keine Zeiger oder Klassenreferenzen. Zum Beispiel habe ich keine Ahnung, wie Sie Ihre eigene verknüpfte Liste in einer dieser Sprachen rollen.
- (MATLAB): Sie können nicht mehrere Funktionen der obersten Ebene in eine einzige Datei einfügen. Dies fördert sehr lange Funktionen und ermöglicht das Ausschneiden und Einfügen von Code.
- (MATLAB): Ganzzahlen existieren anscheinend nicht als erstklassiger Typ.
- (R): Die grundlegenden eingebauten Datenstrukturen scheinen viel zu hoch und schlecht dokumentiert zu sein und scheinen aufgrund meiner Erfahrung mit ähnlichen Datenstrukturen, die jedoch niedriger sind, nie ganz das zu tun, was ich erwartet habe.
- (R): Die Dokumentation ist über den gesamten Ort verteilt und praktisch nicht durchsuchbar. Sogar D, das oft für schlechte Dokumentation angeklopft wird und immer noch ziemlich alpha ist, ist, soweit ich das beurteilen kann, wesentlich besser.
- (R): Soweit ich weiß, gibt es keine gute IDE dafür. Auch hier ist D, eine ziemlich alpha-artige Sprache mit einer kleinen Community, besser.
Im Allgemeinen glaube ich auch, dass MATLAB und R leicht durch einfache alte Bibliotheken in allgemeineren Sprachen ersetzt werden könnten, wenn ausreichend umfassende Bibliotheken vorhanden wären. Dies gilt insbesondere für neuere Mehrzwecksprachen, die viele Funktionen für Bibliotheksschreiber enthalten.
Warum erscheinen mir R und MATLAB so komisch? Gibt es andere wichtige Probleme, die Sie bemerkt haben und die dazu führen können, dass diese Sprachen für Hardcore-Programmierer ungewöhnlich sind? Was sind gute Überlebenstipps, wenn ihre Verwendung erforderlich ist?
Bearbeiten: Ich sehe ein Problem aus einigen der Antworten, die ich bekommen habe. Ich persönlich bevorzuge bei der Analyse von Daten ein Skript, das die gesamte Pipeline enthält. Dies impliziert, dass eine Allzwecksprache verwendet werden muss. Ich hasse es, ein Skript schreiben zu müssen, um die Daten zu "bereinigen" und auszuspucken, dann ein anderes, um sie in einer völlig anderen Umgebung wieder einzulesen usw. Ich finde die Reibung, MATLAB / R für einige meiner Arbeiten zu verwenden, und ein komplettes Eine andere Sprache mit einem völlig anderen Adressraum und einer anderen Denkweise, damit der Rest eine riesige Quelle der Reibung ist. Außerdem weiß ich, dass es Klebeschichten gibt, aber sie scheinen immer schrecklich kompliziert und eine Quelle der Reibung zu sein.