Pourquoi les langages de programmation scientifiques sont-ils si étranges? [fermé]

9

Il me semble que les langages de programmation destinés à être utilisés en science et en ingénierie sont toujours étranges par rapport aux langages à usage général. Quelques exemples du haut de ma tête:

  • Dans Matlab, chaque fonction doit être placée dans un fichier séparé
  • Dans R, <- est l'opérateur d'assignation, par opposition à = dans presque toutes les autres langues
  • Matlab, R, Julia et autres sont tous 1-indexés
  • Matlab utilise% pour les commentaires, et non le standard # ou //

Bien sûr, ces langues ont toutes plusieurs caractéristiques de conception qui en fait les rendre plus faciles à utiliser pour des applications scientifiques, telles que la notation de la matrice plus naturelle. Pourtant, ils font tous inexplicablement tous ces choix bizarres qui ne facilitent rien et auraient facilement pu être évités si les concepteurs de langues avaient simplement choisi de faire ce que font 99% des autres langues. Est-ce la raison pour laquelle le fournisseur est bloqué? Un manque de contact avec la communauté plus large de développement de logiciels? Autre chose?

J'ai lu ce fil et je n'ai pas trouvé les explications satisfaisantes. Ce n'est pas parce que R a été conçu comme un langage scientifique qu'il doit ignorer complètement les conventions et utiliser <- au lieu de =.

Haroba
la source
6
Réponse courte: parce qu'elles ont été faites pour des scientifiques, pas pour des programmeurs.
Bart van Ingen Schenau
19
Réponse courte: Parce que chaque langue que vous pensez être normale a été influencée par un ancêtre commun, C.
Ross Patterson
3
Je pense que vous aurez du mal à trouver des conventions à travers les langues. Cela dépend de leur héritage.
Robbie Dee
6
Rien de tout cela n'est bizarre. C'est juste différent . Parce qu'il n'y a aucune raison particulière de choisir une syntaxe par rapport à l'autre, à l'exception de ce à quoi l'auteur spécifique de la langue spécifique est habitué.
Jan Hudec
8
Votre 99% est faux. Si vous ne connaissez que le C et ses dérivés, vous pourriez le penser, mais bien plus de 50% des langages non-C utilisent quelque chose de différent pour l'affectation, l'indexation et / ou les commentaires.
david.pfx

Réponses:

21
  • Il existe différentes conventions. Conventions en mathématiques, logique et sciences appliquées et conventions en informatique. Les premiers sont beaucoup plus anciens.
  • Les langages scientifiques sont faits pour rendre la vie de LEURS utilisateurs plus pratique. L'utilisateur est considéré comme un scientifique, qui peut de temps en temps réaliser un algorithme ou vérifier une théorie, sans avoir besoin d'apprendre quelque chose de vraiment nouveau. Ainsi, les langages destinés aux scientifiques DOIVENT être constitués selon des normes non informatiques. Parce qu'ils ne sont pas destinés à l'usage des informaticiens. Ils sont conformes à d'autres normes et c'est bien en raison de la cible auditive. Parce que la bonne interface utilisateur SW, et la langue est l'interface utilisateur SW, doit être effectuée en fonction des besoins de l'utilisateur, pas du codeur.
  • Nos normes informatiques sont des normes de l'industrie. IL est l'industrie. La science n'est pas l'industrie. Les scientifiques en sont fiers. Et ils accepteraient à contrecœur quoi que ce soit de notre pratique dans le leur. Et ils n'aiment pas du tout les normes. Et personne n'aime les normes étrangères. Donc, si quelqu'un crée un langage scientifique qui respectera les normes informatiques, il ne se vendra pas bien, en raison de l'aversion de l'audition cible, même si elle était objectivement plus pratique.

Et même si nous jugeons uniquement en fonction des normes informatiques ... Désolé, de quelles normes parlez-vous? Avez-vous essayé d'écrire un prog en APL ou SNOBOL? Ces deux langues sont, à mon humble avis, les plus puissants dans les domaines appropriés (comptage et chaînes). Mais la syntaxe est quelque chose de TRÈS étrange (et efficace) La lecture d'une ligne de code APL peut prendre des jours. D'un autre côté, une telle ligne est un morceau sérieux de SW. Vous retourneriez à Mathlab avec des larmes de soulagement.

Quant à "=", beaucoup de gens ont du mal à s'habituer que ce n'est pas l'égalité, mais l'affectation. BTW, en Pascal c'est l'égalité et l'affectation est ": =".

Et vous pensez vraiment que == pour l'égalité est plus naturel? Au contraire, mélanger = et == est l'erreur la PLUS courante en programmation C, cela arrive très souvent même dans les IDE contemporains, avec leur contrôle automatique.

À propos de l'indexation à partir de 1 - c'est le seul naturel. Quand vous étiez enfant, vous aviez appris des poèmes et des chansons, où vous comptiez: un, deux, trois ... Et non 0,1,2 ... En mathématiques à l'école, nous avons étudié que le comptage commence à 1 et que 0 n'appartient pas aux nombres naturels / comptés. Ce n'est qu'avec la définition des fonctions que viennent les indices non naturels. Après tout, le 0 a été inventé plusieurs milliers d'années après que notre ancêtre a levé un doigt.

0-start était plus simple à réaliser et s'est immédiatement mis à la pratique informatique après l'apparition de C. Mais dans Fortran, la première langue, l'indexation 1 est utilisée. La même chose avec d'autres langues de l'époque pré-industrielle.

Et oui, j'avais lu l'article de Dyjkstra sur la naturalité du comptage basé sur 0. Et totalement en désaccord avec son argumentation. C'est naturel pour les musiciens. Et même 0 passionnés qui créent les compilateurs C et Java, comptent les lignes du code À PARTIR DE 1!

Gangnus
la source
1
": =" pour l'affectation et l'indexation 1 sont également utilisés dans Smalltalk.
Rory Hunter
1
Je n'achète pas que l'indexation basée sur 0 est due à la facilité de mise en œuvre (FORTRAN réfute à peu près cela). cs.utexas.edu/users/EWD/transcriptions/EWD08xx/EWD831.html donne quelques raisons pour lesquelles on pourrait préférer l'indexation basée sur 0, mais notez que le choix est assez arbitraire.
jk.
2
FORTRAN avait une indexation basée sur 1. PASCAL autorisait l'indexation arbitraire: vous pouviez déclarer un tableau dont l'index variait, par exemple, de -42 à +57. (Voir en.wikipedia.org/wiki/… pour un exemple où cela est utile.)
John R. Strohm
1
@Gangnus Je pense que c'est une erreur de comparer les langages modernes au C et de le considérer comme intentionnellement difficile à lire. Il a été conçu pour être une alternative de haut niveau aux langues de niveau inférieur.
Robbie Dee
1
FORTH est un langage basé sur la pile. Pensez à la calculatrice HP. Il était très compact et rapide, mais il était difficile d'écrire du code qui n'était pas impénétrable. Dans FORTH, vous utilisez rarement des variables mais poussez plutôt des choses sur la pile et utilisez des opérateurs qui agissent sur la pile.
Gort the Robot le
16

L'indexation à partir de 1 n'est pas étrange, elle est tout à fait normale et attendue, sauf pour les programmeurs , car ils ont été conditionnés à s'attendre à un comptage basé sur 0 par C (qui a été conditionné à partir des propriétés de l'architecture du processeur).

Les commentaires sont dénotés de très nombreuses manières différentes dans différentes langues; il n'y a pas de méthode standard, chaque langue choisit un symbole ou un digraphe qui n'est pas déjà pris.

L'affectation est également un concept étrange et incompréhensible, sauf pour les programmeurs ; la plupart des gens se moquent de savoir si c'est =ou :=ou <-, ils ont du mal à comprendre le sens (et pour eux, il est en fait préférable de ne pas l'utiliser =, car cela souligne que l'affectation n'est pas l'égalité - l'obstacle le plus courant pour les non-programmeurs à comprendre le code).

En bref, les langages de programmation destinés à des personnes autres que des programmeurs professionnels sont différents parce que les personnes qui les utilisent le souhaitent le plus de cette façon.

Kilian Foth
la source
4
Je ne suis pas d'accord que l'indexation à partir de 1 n'est pas bizarre. L'indexation 0 est au moins aussi courante que l'indexation 1 en mathématiques, et c'était évidemment la norme en programmation depuis des années avant l'avènement de Matlab ou S / R.
haroba
9
@Aqwis Oh, oui, je vois déjà le bébé compter zéro, un, deux ... La manière la plus naturelle, vraiment.
Gangnus
4
Les bébés n'écrivent pas de code. Il y a de bonnes raisons d'utiliser l'indexation zéro (voir: Dijkstra), et lorsque l'indexation zéro est également courante en mathématiques, je ne vois pas beaucoup de raisons d'utiliser l'indexation 1.
haroba
1
@Aqwis Répondez pour vos propres mots. Ce qui est bizarre et pas. Une chose qui est définie à partir de la petite enfance et par les mathématiques (les nombres naturels n'incluent pas zéro), ne peut pas être bizarre de n'importe quel côté. Et ce qui contredit cela, c'est bizarre. Et que vous vous soyez habitué à autre chose, cela n'a pas d'importance. Ces langues ne sont tout simplement pas faites pour vous ou pour moi.
Gangnus
1
@phresnel Pour paraphraser la réponse: L'indexation à partir de 1 est normale. Sauf pour les programmeurs, car ils ont été conditionnés à s'y attendre [indexation à partir de 0] de C
Robbie Dee
5

Il y a trois problèmes:

  1. Vous ignorez certaines traditions et les bonnes raisons de certains choix.
  2. Vous mettez trop l'accent sur la syntaxe, trop peu sur la sémantique.
  3. Les ingénieurs et les scientifiques n'ont aucune expérience en conception de langage, ce qui conduit à une syntaxe discutable.

Passons maintenant à vos points spécifiques:

  • Je ne connais pas Matlab, je ne peux donc pas commenter les exigences d'organisation des fichiers. Notez que Java souhaite que vous utilisiez un fichier par classe publique.

  • Dans R, =peut également être utilisé comme opérateur d'affectation. Notez qu'il a besoin de plusieurs opérateurs d'affectation <-et <<-de gérer son concept de portée ( <<-attribue à un symbole dans une portée extérieure au lieu de créer un nouveau symbole à l'intérieur d'une fonction). Les flèches peuvent être utilisées dans l'autre sens aussi, potentiellement rendre le code plus propre de: complex_calculation() -> x.

  • L'indexation basée sur 1 est la norme en mathématiques, ce avec quoi les utilisateurs de Matlab et de R sont plus à l'aise que C. Julia suit Matlab afin d'avoir une meilleure courbe d'apprentissage.

  • %pour les commentaires est également utilisé dans TeX / LaTeX. Il #s'agit uniquement d'une convention des langages de script Unix et de leurs descendants.

Vous ignorez également que les «vrais» langages de programmation ont de nombreuses parties étranges. Pourquoi Scheme n'utilise-t-il pas =? Au lieu:

(define foo 5)

Pourquoi C utilise-t-il *pour le déréférencement, alors qu'évidemment un curseur ^xest plus courant dans d'autres traditions?

amon
la source
"Je ne connais pas Matlab, donc je ne peux pas commenter les exigences de l'organisation des fichiers. Notez que Java veut que vous utilisiez un fichier par classe publique." Je pense qu'il est parfaitement raisonnable que la langue s'attende à ce que vous divisiez votre projet en plusieurs fichiers. Cependant, une classe est généralement une quantité de code relativement importante. Les fonctions ne doivent pas nécessairement l'être. En forçant un fichier séparé pour chaque fonction, Matlab vous décourage de créer de petites fonctions et favorise à la place de grandes fonctions monolithiques.
haroba
1
Je suis presque d'accord avec tout, sauf p.3. Les scientifiques ne font pas leurs langues, ils LES COMMANDENT. Ce sont des clients, des utilisateurs, mais pas leurs créateurs. Si quelqu'un l'est, il est déjà un geek informatique. Et la syntaxe de n'importe quelle langue est discutable, personne n'est idéal pour toutes les tâches.
Gangnus
Matlab compile les fonctions / fichiers juste à temps selon les besoins. Il n'a pas vraiment de concept de programme, juste un tas de fonctions. Si j'exécute une fonction qui fait un appel à foo (), alors il recherchera son chemin pour un fichier appelé foo.m, le compilera et l'exécutera. Il n'est pas nécessaire de dire à l'avance à Matlab quel ensemble de fichiers j'ai l'intention d'utiliser.
Simon B
1

Je suppose que cela dépend de votre exposition à d'autres langues. Du haut de ma tête:

  • C / C ++ ont des fichiers source séparés (.c / .cpp & .h)
  • Les caractères -> sont utilisés en C # pour les expressions lambda
  • Les anciennes versions de VB utilisaient 1 comme index par défaut (bien que cela puisse être modifié avec Option Base)
Robbie Dee
la source
1
En C et C ++, vous pouvez définir autant de fonctions que vous le souhaitez dans un seul fichier.
haroba
Je fais juste remarquer qu'il n'est pas inhabituel que les modules soient répartis sur plusieurs fichiers. Si vous le souhaitez, vous pouvez mettre toutes vos fonctions dans des fichiers séparés en utilisant les langages .NET avec la construction de classe partielle .
Robbie Dee
1
Bien sûr, il n'est pas inhabituel que les modules soient répartis sur plusieurs fichiers, et c'est souvent souhaitable. Mais dans Matlab, vous devez mettre chaque fonction dans son propre fichier, ce qui signifie que si vous avez mille fonctions, vous avez besoin de mille fichiers .
haroba
3
Les commentaires en HTML ressemblent <!-- ... -->. Le signe de pourcentage est utilisé pour le codage d'URL: http://example.com/()devient http://example.com/%28%29.
amon
Désolé, mon erreur.
Robbie Dee