Les «langues contraintes» de Fernando J. Corbató


13

Pour son discours du prix Turing de 1990 , Fernando J. Corbató a énuméré les raisons pour lesquelles des systèmes complexes échoueront inévitablement. Dans sa conclusion, il donne quelques suggestions pour diminuer la probabilité d'échec. Il énumère une idée comme suit:

[U] use de langages contraints pour la conception ou la synthèse est une méthodologie puissante. En ne permettant pas à un programmeur ou à un concepteur d'exprimer des idées non pertinentes, le domaine des erreurs possibles devient beaucoup plus limité.

Qu'entend-il par «langage contraint»?

Pendant un moment, j'ai considéré la programmation par contraintes . Cependant, la programmation par contraintes consiste à restreindre l'espace de solution du programme. C'est un outil qui habilite un programmeur. La fonctionnalité à laquelle Corbató fait référence semble être quelque chose qui restreint réellement le programmeur, ou du moins la rend plus encline à écrire du code terser.

Ma deuxième pensée est qu'il fait référence aux langages de programmation conservateurs . Corbató a reçu son prix Turing pour son travail accompli dans les années 1960 et 1970. Je crois comprendre qu'il a traité de nombreuses cartes perforées. Je n'ai jamais vu de carte perforée, donc je ne sais certainement pas comment en programmer une, mais je suppose que la programmation des cartes perforées est extrêmement libérale. Je soupçonne que les notions de vérification de type, d'analyse statique, etc. n'existaient tout simplement pas. Alors, Corbató fait-il peut-être référence à l'idée de langages qui empêchent le développeur de faire des erreurs stupides? Cela ne semble pas non plus être le cas. Les vérifications de sécurité et la modélisation des données n'ont rien à voir avec la justesse, ce dont il semble parler quand il mentionne "ne pas autoriser ... des idées non pertinentes".


@jweyrich Merci de m'avoir transmis à Programmers.SE. Cependant, quand je vais à la balise de langages de programmation sur StackOverflow, je trouve une multitude de questions qui sont tout aussi générales que la mienne, telles que "Y a-t-il un langage typé statiquement faible?" où l'auteur fait également référence à des documents de lecture généraux
Xander Dunn

5
@thoughtadvances Vérifiez les dates sur les questions que vous mentionnez, je suis prêt à parier que la plupart d'entre elles sont assez anciennes. SO a 4 ans, les choses changent et en général nous devenons plus stricts au fil du temps. Votre question est très bien sur les programmeurs (je suis un mod là-bas), mais cela aurait été plus facile si vous aviez simplement signalé cela pour une attention modérée et demandé qu'il soit migré au lieu de republier. La migration vous aurait évité de republier et aurait apporté la réponse aux programmeurs avec la question. Ne vous en faites pas maintenant, je m'en occupe.
yannis

3
Par exemple, si (note: si ) l'idée de malloc est "non pertinente" pour une application particulière pour une raison quelconque, alors choisir Java ("contraint en n'ayant pas de malloc) sur C (malloc est là) limiterait" le domaine des erreurs possibles "qui pourrait être associé à malloc
gnat

@YannisRizos Merci beaucoup de l'avoir migré. Je ne savais pas que cette fonction existe. Peut-être que les utilisateurs les plus expérimentés de StackOverflow auraient pu suggérer ce chemin plutôt que de simplement le fermer.
Xander Dunn

3
" Coder sur des cartes perforées " n'était qu'une autre façon de taper un programme. À la fin des années 60 et au début des années 70, nous avions des langues aussi sophistiquées que celles que nous connaissons aujourd'hui. De nombreux concepts de base des langages de programmation étaient déjà bien établis, et ALGOL 60 avait déjà établi la norme pour les outils de programmation en 1963.
Ross Patterson

Réponses:


8

Un «langage de programmation contraint» est tout simplement un langage qui ne fournit pas de moyens (faciles) de faire des choses qui ne sont pas pertinentes pour l'objectif des langages.

Notez que c'est "hors de propos", pas "stupide", "stupide" ou "incorrect".

Un bon exemple de cela pourrait être ISO / ANSI SQL (avant SQL-92), qui n'avait aucun moyen dans le langage de requête d'exprimer de nombreux artefacts de programmation de type procédural tels que la récursivité ou les boucles. (Cependant, il les a maintenant et les vendeurs ont ajouté des extensions personnalisées pour eux auparavant de toute façon).


6
C'est exactement le point de Corbató. Il est entré dans beaucoup de détails dans un article de Datamation de 1969 intitulé PL / I As a Tool for System Programming (avec le sous-titre génial " cinq ans avec un compilateur temporaire "!).
Ross Patterson

Merci, cette réponse est très utile. Cette idée a des implications intéressantes. Cela semblerait indiquer qu'un programmeur voudrait avoir accès à une pléthore de langages variés avec des capacités variables plutôt que d'avoir un langage pour les gouverner tous, ce que de nombreux programmeurs aimeraient supposer que C, C ++ ou Java pourraient être.
Xander Dunn

@RossPatterson Excellent! Je vous remercie! Je cherchais une élaboration sur le sujet de Corbató, mais je n'ai pas trouvé grand-chose.
Xander Dunn

1
Une excellente citation résumée de cet article de Datamation: " Notre objectif en faisant le système ... a été d'explorer la frontière et de voir comment mettre en place efficacement un système qui atteint et satisfait les objectifs qui ont été fixés. Nous essayons de trouver sortir les idées de conception clés et les communiquer aux autres, quel que soit le système qu'ils connaissent. Par conséquent, un langage qui dépasse les détails spécifiques du matériel est certainement souhaitable, ... En d'autres termes, il oblige à concevoir, de ne pas jouer avec le code. Et cela s'est avéré être l'un de ses points forts . "
Ross Patterson

2
@thoughtadvances " Cela semblerait indiquer qu'un programmeur voudrait avoir accès à une pléthore de langues variées avec des capacités différentes plutôt que d'avoir une langue pour les gouverner toutes " - c'est l'une des différences entre un programmeur junior et un programmeur senior. Aucun charpentier n'a qu'un seul marteau :-)
Ross Patterson

3

Cela me semble très similaire à la notion de langages spécifiques au domaine. Tout comme @RBarryYoung l'a souligné, un exemple serait SQL (d'autres seraient HTML, CSS, etc.).


0

Tout d'abord, vous devez comprendre l'ère de l'informatique lorsque son discours a été prononcé (1990). Sachez également qu'il s'adresse à un public universitaire et que le MIT est son port d'attache.

À cette époque, les langues pour écrire des langues (méta-langues) étaient un sujet brûlant. Le protocole Art of the Meta-Object vient de sortir et inspire la conception de nouveaux langages. Cependant, tout ce luxe a un prix: la complexité.

Pour aider à réduire la complexité des systèmes et permettre la vérification de ces systèmes, des méta-langages tels que Z sont sortis pour faire une spécification testable. Je suppose qu'il fait référence à ce genre de langues.


2
Corbató n'est pas seulement un universitaire du MIT de la fin du XXe siècle. Il est l'un des pionniers de notre domaine. Son travail sur CTSS a été déterminant, menant directement aux systèmes Multics, Unix, CP / 67 et Linux et z / VM d'aujourd'hui. Et la déclaration en question est liée à un principe qu'il a ouvertement exposé 20 ans avant The Art of the Meta-Object Protocol et sa conférence Turing.
Ross Patterson

0

Peut-être qu'il veut dire un langage qui a un nombre assez faible de concepts à saisir. Consultez les diagrammes ici qui montrent les représentations graphiques des concepts dans Coffescript, Ruby et C ++. Peut-être que Tuner signifie que moins vous avez de concepts dans une langue, moins vous avez de chances d'exprimer des idées non pertinentes.


"... Ou une langue" - est-ce un commentaire sur quelque chose?
moucher

Modifié le post, afin de ne pas ressembler à un commentaire.
Manoj R
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.