Warum sind wissenschaftliche Programmiersprachen so seltsam? [geschlossen]


9

Es scheint mir, dass Programmiersprachen, die für den Einsatz in Wissenschaft und Technik gedacht sind, im Vergleich zu Allzwecksprachen durchweg seltsam sind . Einige Beispiele aus meinem Kopf:

  • In Matlab muss jede Funktion in einer separaten Datei abgelegt werden
  • In R ist <- der Zuweisungsoperator im Gegensatz zu = in fast jeder anderen Sprache
  • Matlab, R, Julia und andere sind alle 1-indiziert
  • Matlab verwendet% für Kommentare und nicht das Standard-# oder //

Natürlich haben diese Sprachen alle mehrere Designmerkmale, die eigentlich für wissenschaftliche Anwendungen sie leichter zu bedienen, wie natürlicher Matrizenschreibweise. Trotzdem treffen sie alle unerklärlicherweise all diese bizarren Entscheidungen, die nichts einfacher machen und leicht hätten vermieden werden können, wenn die Sprachdesigner nur das getan hätten, was 99% der anderen Sprachen tun. Ist der Grund, warum der Anbieter gesperrt ist? Mangelnder Kontakt zur breiteren Softwareentwickler-Community? Etwas anderes?

Ich habe diesen Thread gelesen und fand die Erklärungen nicht zufriedenstellend. Nur weil R als Wissenschaftssprache entwickelt wurden, bedeutet nicht , es mußte vollständig Konventionen und Verwendung ignorieren <- statt =.


6
Kurze Antwort: Weil sie für Wissenschaftler gemacht wurden, nicht für Programmierer.
Bart van Ingen Schenau

19
Kurze Antwort: Weil jede Sprache, die Sie für normal halten, von einem gemeinsamen Vorfahren beeinflusst wurde, C.
Ross Patterson

3
Ich denke , Sie werden kämpfen , um zu finden , alle Konventionen über Sprachen. Es hängt von ihrem Erbe ab.
Robbie Dee

6
Nichts davon ist komisch. Es ist einfach anders . Weil es keinen besonderen Grund gibt, eine Syntax der anderen vorzuziehen, außer dem, an den der jeweilige Autor der jeweiligen Sprache gewöhnt ist.
Jan Hudec

8
Ihre 99% sind falsch. Wenn Sie nur C und seine Ableitungen kennen, denken Sie vielleicht, aber weit über 50% der Nicht-C-Sprachen verwenden etwas anderes für Zuweisung, Indizierung und / oder Kommentare.
david.pfx

Antworten:


21
  • Es gibt verschiedene Konventionen. Konventionen in Mathematik, Logik und angewandten Wissenschaften sowie Konventionen in der IT. Die ersten sind viel älter.
  • Die wissenschaftlichen Sprachen sollen das Leben IHRER Benutzer angenehmer machen. Der Benutzer wird als Wissenschaftler gesehen, der von Zeit zu Zeit einen Algorithmus realisieren oder eine Theorie überprüfen kann, ohne etwas wirklich Neues lernen zu müssen. Daher MÜSSEN die Sprachen für Wissenschaftler Nicht-IT-Standards entsprechen. Weil sie nicht für den Einsatz von IT-Mitarbeitern gedacht sind. Sie entsprechen ANDEREN Standards und das ist gut wegen des Zielhörers. Da die gute SW-Benutzeroberfläche und die Sprache die SW-Benutzeroberfläche ist, muss sie auf den Anforderungen des Benutzers und nicht des Codierers basieren.
  • Unsere IT-Standards sind Industriestandards. IT ist Industrie. Wissenschaft ist keine Industrie. Wissenschaftler sind stolz darauf. Und sie würden widerwillig alles aus unserer Praxis in ihre aufnehmen. Und sie mögen überhaupt keine Standards. Und niemand mag ausländische Standards. Wenn also jemand eine wissenschaftliche Sprache entwickeln würde, die den IT-Standards entspricht, würde sie sich aufgrund der Abneigung des Zielhörers kaum gut verkaufen, selbst wenn sie objektiv bequemer wäre.

Und selbst wenn wir nur nach IT-Standards urteilen ... Entschuldigung, welche Standards meinen Sie? Haben Sie versucht, einen Prog in APL oder SNOBOL zu schreiben? Diese beiden Sprachen sind meiner Meinung nach die mächtigsten in geeigneten Bereichen (Zählen und Zeichenfolgen). Die Syntax ist jedoch SEHR seltsam (und effektiv). Das Lesen einer Zeile APL-Code kann Tage dauern. Auf der anderen Seite ist eine solche Linie ein ernstes Stück SW. Sie würden mit Tränen der Erleichterung nach Mathlab zurückkehren.

Was "=" betrifft, haben viele Menschen Probleme, sich daran zu gewöhnen, dass es nicht Gleichheit, sondern Zuordnung ist. Übrigens, in Pascal ist es Gleichheit und Zuordnung ist ": =".

Und Sie denken wirklich, dass == für Gleichheit natürlicher ist? Im Gegenteil, Mischen = und == ist der häufigste Fehler in der C-Programmierung. Er tritt selbst in modernen IDEs mit ihrer automatischen Steuerung sehr häufig auf.

Über die Indizierung von 1 - es ist die einzige natürliche. Als Kind hatten Sie Gedichte und Lieder gelernt, in denen Sie gezählt haben: eins, zwei, drei ... und nicht 0,1,2 ... In der Schulmathematik haben wir gelernt, dass das Zählen bei 1 beginnt und bei 0 gehört nicht zu natürlichen / zählenden Zahlen. Nur mit der Definition von Funktionen kommen nicht natürliche Indizes. Immerhin wurde die 0 viele tausend Jahre erfunden, nachdem unser Vorfahr einen Finger erhoben hatte.

0-Start war einfacher zu realisieren und begann sofort nach dem Erscheinen von C mit der IT-Praxis. In Fortran, der ersten Sprache, wird jedoch die 1-Indizierung verwendet. Gleiches gilt für andere Sprachen der vorindustriellen Epoche.

Und ja, ich hatte Dyjkstras Artikel über die Natürlichkeit der 0-basierten Zählung gelesen. Und stimme seiner Argumentation überhaupt nicht zu. Es ist nur für Musiker selbstverständlich. Und selbst 0 Enthusiasten, die die C- und Java-Compiler erstellen, zählen die Zeilen des Codes ab 1!


1
": =" für Zuweisung und 1-basierte Indizierung werden auch in Smalltalk verwendet.
Rory Hunter

1
Ich kaufe nicht, dass die 0-basierte Indizierung auf einfache Implementierung zurückzuführen ist (FORTRAN widerlegt dies so ziemlich). cs.utexas.edu/users/EWD/transcriptions/EWD08xx/EWD831.html gibt einige Gründe an, warum man eine 0-basierte Indizierung bevorzugen könnte, aber beachten Sie, dass die Auswahl ziemlich willkürlich ist.
jk.

2
FORTRAN hatte eine 1-basierte Indizierung. PASCAL erlaubte eine willkürliche Indizierung: Sie können ein Array deklarieren, dessen Index beispielsweise zwischen -42 und +57 liegt. (Siehe en.wikipedia.org/wiki/… für ein Beispiel, wo dies nützlich ist.)
John R. Strohm

1
@ Gangnus Ich denke, es ist ein Fehler, moderne Sprachen mit C zu vergleichen und es für absichtlich schwer zu lesen zu halten. Es wurde entwickelt, um eine Alternative auf hoher Ebene zu Sprachen auf niedrigerer Ebene zu sein.
Robbie Dee

1
FORTH ist eine stapelbasierte Sprache. Denken Sie an den HP Rechner. Es war sehr kompakt und schnell, aber es war schwierig, Code zu schreiben, der nicht undurchdringlich war. In FORTH verwenden Sie selten Variablen, sondern verschieben Dinge auf den Stapel und verwenden Operatoren, die auf den Stapel wirken.
Gort den Roboter

16

Die Indizierung von 1 ist nicht seltsam, sie ist völlig normal und wird mit Ausnahme von Programmierern erwartet , da sie so konditioniert wurden, dass sie eine 0-basierte Zählung durch C erwarten (was von den Eigenschaften der Prozessorarchitektur abhängig war).

Kommentare werden auf viele, viele verschiedene Arten in verschiedenen Sprachen bezeichnet. Es gibt keinen Standardweg, jede Sprache wählt ein Symbol oder einen Digraphen, der noch nicht vergeben ist.

Zuweisung ist ebenfalls ein seltsames und unverständliches Konzept, außer für Programmierer ; die meisten Menschen ist es egal, ob es =oder :=oder <-, sie kämpfen , um das verstehen Bedeutung (und für sie ist es in der Tat besser nicht zu verwenden =, weil dies , dass die Zuordnung betont ist nicht Gleichheit - die häufigste Hürde für Nicht-Programmierer Code verstehen).

Kurz gesagt, Programmiersprachen, die für andere Personen als professionelle Programmierer bestimmt sind, sehen anders aus, weil die Leute, die sie am häufigsten verwenden, dies so wollen.


4
Ich bin nicht der Meinung, dass die Indizierung von 1 nicht seltsam ist. 0-Indizierung ist in der Mathematik mindestens so häufig wie 1-Indizierung, und sie war offensichtlich jahrelang vor dem Aufkommen von Matlab oder S / R die Norm in der Programmierung.
Haroba

9
@Aqwis Oh ja, ich sehe bereits, wie das Baby null, eins, zwei zählt ... Der natürlichste Weg, wirklich.
Gangnus

4
Babys schreiben keinen Code. Es gibt gute Gründe für die Verwendung der Nullindizierung (siehe: Dijkstra), und wenn die Nullindizierung auch in der Mathematik üblich ist, kann ich nicht viele Gründe für die Verwendung der 1-Indizierung erkennen.
Haroba

1
@Aqwis Antworte auf deine eigenen Worte. Was ist komisch und nicht. Eine Sache, die von Kindheit an und durch Mathematik festgelegt wurde (natürliche Zahlen enthalten keine Null), kann von keiner Seite seltsam sein. Und was dem widerspricht, IST komisch. Und dass Sie sich an etwas anderes gewöhnt haben, spielt keine Rolle. Diese Sprachen sind einfach nicht für dich oder mich gemacht.
Gangnus

1
@phresnel Um die Antwort zu paraphrasieren: Die Indizierung von 1 ist normal. Mit Ausnahme von Programmierern, da sie konditioniert wurden, um es [Indizierung von 0] von C
Robbie Dee

5

Es gibt drei Probleme:

  1. Sie kennen bestimmte Traditionen und die guten Gründe für bestimmte Entscheidungen nicht.
  2. Sie legen zu viel Wert auf Syntax, zu wenig auf Semantik.
  3. Ingenieure und Wissenschaftler haben keine Erfahrung im Sprachdesign, was zu einer fragwürdigen Syntax führt.

Nun zu Ihren spezifischen Punkten:

  • Ich kenne Matlab nicht, daher kann ich die Anforderungen der Dateiorganisation nicht kommentieren. Beachten Sie, dass Java möchte, dass Sie eine Datei pro öffentlicher Klasse verwenden.

  • In R =kann auch als Zuweisungsoperator verwendet werden. Beachten Sie, dass mehrere Zuweisungsoperatoren erforderlich sind <-und <<-das Konzept des Gültigkeitsbereichs behandelt werden soll ( <<-Zuweisung eines Symbols in einem externen Bereich, anstatt ein neues Symbol innerhalb einer Funktion zu erstellen). Die Pfeile können auch in die andere Richtung verwendet werden, wodurch möglicherweise sauberer Code entsteht : complex_calculation() -> x.

  • 1-basierte Indizierung ist der Standard in der Mathematik, mit dem sich die Benutzer von Matlab und R wohler fühlen als C. Julia folgt Matlab, um eine bessere Lernkurve zu erzielen.

  • %für Kommentare wird auch in TeX / LaTeX verwendet. Dies #ist nur eine Konvention aus Unix-Skriptsprachen und ihren Nachkommen.

Sie ignorieren auch, dass „echte“ Programmiersprachen viele seltsame Teile haben. Warum wird das Schema nicht verwendet =? Stattdessen:

(define foo 5)

Warum wird C *zur Dereferenzierung verwendet, wenn ein Caret ^xin anderen Traditionen offensichtlich häufiger vorkommt?


"Ich kenne Matlab nicht, daher kann ich die Anforderungen der Dateiorganisation nicht kommentieren. Beachten Sie, dass Java möchte, dass Sie eine Datei pro öffentlicher Klasse verwenden." Ich denke, es ist durchaus vernünftig für die Sprache, von Ihnen zu erwarten, dass Sie Ihr Projekt in mehrere Dateien aufteilen. Eine Klasse ist jedoch normalerweise eine relativ große Menge an Code. Funktionen müssen nicht sein. Durch das Erzwingen einer separaten Datei für jede Funktion hält Matlab Sie davon ab, kleine Funktionen zu erstellen, und fördert stattdessen große, monolithische Funktionen.
Haroba

1
Ich stimme fast allem zu, außer S.3. Wissenschaftler machen ihre Sprachen nicht, sie BESTELLEN sie. Sie sind Kunden, Benutzer, aber nicht ihre Schöpfer. Wenn jemand ist, ist er / sie bereits ein IT-Geek. Und die Syntax jeder Sprache ist fraglich, niemand ist ideal für alle Aufgaben.
Gangnus

Matlab kompiliert Funktionen / Dateien nach Bedarf just-in-time. Es gibt kein wirkliches Konzept eines Programms, nur eine Reihe von Funktionen. Wenn ich eine Funktion ausführe, die foo () aufruft, durchsucht sie ihren Pfad nach einer Datei namens foo.m, kompiliert sie und führt sie aus. Sie müssen Matlab nicht im Voraus mitteilen, welche Dateien ich verwenden möchte.
Simon B

1

Ich denke, es hängt davon ab, ob Sie anderen Sprachen ausgesetzt sind. Aus dem Kopf:

  • C / C ++ haben separate Quelldateien (.c / .cpp & .h)
  • Die Zeichen -> werden in C # für Lambda-Ausdrücke verwendet
  • In alten Versionen von VB wurde 1 als Standardindex verwendet (obwohl dies mit Option Base geändert werden könnte).

1
In C und C ++ können Sie beliebig viele Funktionen in einer Datei definieren.
Haroba

Ich möchte nur darauf hinweisen, dass es nicht ungewöhnlich ist, dass Module auf mehrere Dateien aufgeteilt werden. Wenn Sie Ihnen gewünscht könnte alle Ihre Funktionen in separaten Dateien setzen .NET - Sprachen mit der Verwendung von partiellen Klasse Konstrukt.
Robbie Dee

1
Natürlich ist es nicht ungewöhnlich, dass Module auf mehrere Dateien aufgeteilt werden, und dies ist in vielen Fällen wünschenswert. In Matlab müssen Sie jedoch jede einzelne Funktion in eine eigene Datei einfügen. Wenn Sie also über tausend Funktionen verfügen, benötigen Sie tausend Dateien .
Haroba

3
Kommentare in HTML sehen aus wie <!-- ... -->. Das Prozentzeichen wird für die URL-Codierung verwendet: http://example.com/()wird http://example.com/%28%29.
Amon

Entschuldigung, mein Fehler.
Robbie Dee
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.