Pourquoi les instructions dans de nombreux langages de programmation sont-elles terminées par des points-virgules?

130

Y a-t-il une raison pour laquelle un point-virgule a été choisi comme séparateur de ligne au lieu d'un symbole différent?

Je souhaite connaître l'historique de cette décision et espérer que les réponses permettront de mieux comprendre les décisions futures.

Un codeur
la source
6
Erlang et Prolog utilisent des arrêts complets.
Dave Clarke
13
Je me demande combien de langages de programmation connaissez-vous. Il y a beaucoup de langues qui n'utilisent pas les points-virgules.
knivil
50
Je parie que la réponse sera quelque chose comme "la valeur ASCII du point-virgule est particulièrement durable lorsqu'elle est utilisée comme dernier caractère d'une carte perforée de 80 caractères".
Ryan Thompson
22
Votre question ne va pas assez loin. La vraie question est «pourquoi n’importe quel symbole?»
Konrad Rudolph
5
Parce que c'est sur la rangée de base d'un clavier qwerty?
wim

Réponses:

132

En anglais, le point-virgule est utilisé pour séparer les éléments d'une liste d'instructions, par exemple

Elle a vu trois hommes: Jamie, originaire de Nouvelle-Zélande; John, le fils du laitier; et George, un genre d'homme maigre.

Lors de la programmation, vous séparez un certain nombre d'instructions et utilisez un point complet peut facilement être confondu pour une virgule décimale. L'utilisation du point-virgule constitue une méthode d'analyse simple permettant de séparer les instructions de programme individuelles tout en restant proche de la ponctuation anglaise normale.

Modifier pour ajouter
Au début, lorsque la mémoire était chère, que le traitement était lent et que les premiers langages de programmation étaient en cours de conception, il était nécessaire de scinder le programme en instructions séparées. Certaines langues exigent que chaque instruction soit placée sur une ligne afin que le retour chariot puisse agir en tant que délimiteur d’instruction. D'autres langues permettaient un format plus libre pour la disposition du texte et nécessitaient donc un caractère de délimitation spécifique. Ce caractère a été choisi pour être le point-virgule, probablement en raison de la similarité de son utilisation en anglais (cela doit être une supposition; je n'étais pas là à l'époque) et comme il n'a pas produit de conflit avec l'autre ponctuation marques et symboles nécessaires à des fins mathématiques ou autres fins syntaxiques.

Modifier à nouveau
La nécessité d'un caractère de terminaison revient à la configuration requise pour analyser le texte de la langue. Les premiers compilateurs ont été écrits en langage assembleur ou, dans certains cas, directement dans des instructions machine binaires conçues à la main. Avoir un caractère spécial qui identifie la fin de l'instruction et délimite le bloc de texte en cours de traitement facilite grandement le traitement. Comme je l’ai dit plus haut, d’autres langues ont utilisé le retour chariot ou les crochets. Les groupes Algol, Pascal, Ada, BCPL, B, C, PL / M et d’autres familles de langues utilisent le point-virgule. Quant à savoir lequel a été le premier à utiliser ce personnage, je ne reviens pas assez loin dans l’histoire pour que je puisse m'en souvenir. Son choix et son adoption sont parfaitement logiques

  • Son utilisation reflète l'utilisation d'une ponctuation anglaise normale.
  • D'autres caractères (par exemple, le point final) peuvent prêter à confusion, car ils ont déjà une utilisation commune (un point final est également utilisé comme point décimal).
  • Un caractère de ponctuation visible permet la mise en page de code au format libre.
  • L'utilisation d'un caractère de délimitation similaire dans des langues dérivées ou ultérieures s'appuie sur la familiarité acquise par tous les programmeurs ayant utilisé la langue précédente.

Pour terminer, je pense que ces réponses et commentaires ont nécessité plus de temps que de décider d’utiliser le point-virgule pour mettre fin à une déclaration lors de la conception de la première langue qui l’utilisait de cette manière.

uɐɪ
la source
19
Pas tout à fait correct. Le point-virgule sépare les phrases en blocs: chaque bloc doit être une phrase de travail, mais nous utilisons le point-virgule pour indiquer qu'il existe un lien fort entre deux phrases. Il est à mi-chemin entre une virgule et un point final, ce qui en fait un point d'arrêt mais relie une phrase à l'autre. La phrase ci-dessus serait: "Elle a vu trois hommes; Jamie: venu de Nouvelle-Zélande, John: le fils du laitier et George: un homme maigre." Votre utilisation du point-virgule pourrait être remplacée par une virgule. Peu de sujet, mais l'essentiel est essentiellement le même; il casse des déclarations.
alex.p
40
@ alex.p est en fait une utilisation acceptable d'un point-virgule à la place d'une virgule, ce qui entraînerait la confusion dans une phrase, ce qui rend cela correct.
Ryathal
13
Informations critiques sur les points-virgules: theoatmeal.com/comics/semicolon
Ed James
7
@ alex.p: Il semble que vous disiez que l'utilisation de Ian est mauvaise, mais vous pourriez simplement dire que son explication de la façon dont nous utilisons les points-virgules est incomplète. Si vous dites qu'il a tort, vous avez complètement tort. Son utilisation des points-virgules est tout à fait conventionnelle, et je suppose bien plus commune que l'exemple que vous donnez. Si vous dites simplement qu'il ne donne pas une explication exhaustive, alors je ne suis pas sûr de savoir pourquoi cela vaut vraiment la peine d'être mentionné.
iconoclaste
17
@Ian "cela doit être une supposition, je n'étais pas là à l'époque" Vous avez raté une occasion parfaite d'utiliser (correctement) un point-virgule ici :)
Travis Christian
70

De nombreux langages utilisent une syntaxe qui est modelée sur C (qui a été modelée sur B - grâce à @Crollster). Comme on peut le voir dans les commentaires, il existe une longue chaîne de tels langages ... B s’inspire de PL / I, qui a été précédée par ALGOL en utilisant le ;comme séparateur.

Puisque le terminateur de déclaration est en C ;, ces langues font de même.

Pour ce qui est de la raison pour laquelle il a été sélectionné comme terminateur d’instruction en C - peut-être en raison de son utilisation en anglais, "pour indiquer des instructions interdépendantes" .

C a également été inventé sur le PDP-11 à une époque où la quantité de mémoire disponible pour les jeux de caractères était limitée. Les inventeurs des langues devaient donc respecter ces contraintes.

Oded
la source
8
C vient de suivre la convention d'utilisation des points-virgules utilisée par son prédécesseur 'B'
Crollster
8
B vient de suivre la convention consistant à utiliser des points-virgules comme son prédécesseur, «PL / I» :)
Skomski
15
@Skomski - Qui a suivi quoi? J'attends que la dernière tortue entre;)
Oded
26
-1; Allez les gars, avons-nous tous oublié l'énorme influence ALGOL? Il y avait des points-virgules comme séparateurs d'instructions avant tout ce que vous mentionnez. (Je ne sais pas si cela a pris l'idée d'ailleurs)
hugomg
13
@Oded - Je pense que vous constaterez que ce sont les tortues tout en bas . * 8 ')
Mark Booth
54

FORTRAN a utilisé un retour chariot pour délimiter des instructions. COBOL utilisé période. LISP n'utilisait rien, s'appuyant sur des parenthèses pour tout. ALGOL a été la première langue à utiliser le point-virgule pour séparer des instructions. PASCAL a suivi l'exemple d'ALGOL en utilisant un point-virgule pour séparer les instructions.

PL / I a utilisé un point-virgule pour terminer les déclarations. Il y a une différence et cela se voit facilement dans PASCAL. Ada a suivi l'exemple de PL / I sur celui-ci plutôt que celui d'ALGOL.

Le point-virgule en tant que séparateur ou terminateur d'instruction a rapidement été accepté par la communauté informatique comme une notation utile et, autant que je sache, tout langage subséquent structuré en blocs suivait l'exemple d'ALGOL et utilisait le point-virgule pour séparer ou terminer les déclarations.

On m'a dit, il y a de nombreuses années, que BCPL utilisait le point - virgule ET le retour chariot comme séparateurs / finisseurs de relevé, mais je n'ai jamais utilisé le langage moi-même et je ne peux pas le vérifier. À un moment donné, l'utilisation du retour chariot pour séparer ou mettre fin aux instructions a été supprimée des descendants de BCPL. BCPL a engendré B, B, C, C, C ++, Java, et bien d'autres choses beaucoup moins bien pensées que PASCAL et Ada.

John R. Strohm
la source
2
Il convient de noter que l’utilisation du point-virgule ou de la nouvelle ligne est en train de réapparaître récemment. Javascript, Lua, Go et Haskell ont tous un point-virgule implicite à la nouvelle ligne si sa syntaxe est valide là-bas. Et bien sûr, certaines langues ont conservé newline comme séparateur. Shell et Python viennent à l'esprit ici.
Jan Hudec
2
+1 pour "considérablement moins bien pensé que PASCAL et Ada"
Aditya
2
Algol 58 , précurseur d'Algol 60, utilisait des points-virgules. Notez qu’à l’époque, la distinction était souvent faite entre la forme de publication d’une langue et la forme de saisie proprement dite, car les périphériques de saisie étaient assez limités: majuscules uniquement, etc. Cette dichotomie n’était pas vraiment vraie de FORTRAN, nombre d'autres langues.
Dan Halbert
5
@ kevincline: Considérez-vous que le Boeing 777 est couramment utilisé? Chaque ligne du logiciel avionique qui exploite cet avion est écrite en Ada.
John R. Strohm
2
@kevincline Skype: écrit en Delphi (Pascal.) Microsoft a tenté de changer cela après l'avoir acquis, mais ils ne pouvaient pas le porter avec succès. Ils achètent donc maintenant des licences Delphi. Avez-vous déjà regardé la télévision aux États-Unis? La station fonctionne probablement avec un logiciel de WideOrbit, écrit en Delphi; ils sont le leader du marché avec une énorme marge. Déjà été dans un parc à thème? Il y a de fortes chances que le système de billetterie ait été écrit en Delphi. Pascal est partout. c'est simplement que cela procure un avantage concurrentiel si important que beaucoup de gens essaient de rester silencieux à ce sujet afin que leurs concurrents ne le découvrent pas.
Mason Wheeler
14

Pourquoi pas un autre symbole?

Quelques langues ont utilisé d'autres symboles - les anciennes versions de BASIC utilisaient plutôt deux points, par exemple.

En ignorant les quelques exceptions, cependant, je pense qu'il y a deux raisons principales. La première est que vous recherchez simplement quelque chose sans ambiguïté. Dans un analyseur classique, si vous rencontrez une erreur suffisamment grave pour que vous ne puissiez plus analyser l’instruction en cours, vous essayez normalement de synchroniser l’analyseur en sautant simplement jusqu’au terminateur d’instruction et en le relançant à partir du début de la prochaine déclaration. Pour cela, vous voulez quelque chose qui ne se produira normalement nulle part ailleurs dans le code, et un point-virgule est un symbole avec peu de signification, il est donc assez facile de le dédier à cette fin.

La deuxième raison est un peu similaire, mais vise davantage les personnes qui lisent / utilisent le code. Encore une fois, cela revient au fait que le symbole que vous utilisez n'a pas beaucoup d'importance. La lisibilité présente un avantage substantiel en termes d'utilisation du symbole que votre lecteur est habitué à voir dans un but particulier, quand et si possible. Cela ne veut pas dire que C est la seule syntaxe parfaite et que tout le reste devrait suivre scrupuleusement, mais cela veut dire que suffisamment de gens connaissent ce style de syntaxe pour qu'un langage vaguement similaire gagne beaucoup (et perd très peu) en suivant à peu près la même syntaxe que possible.

Je tiens à noter que cela ressemble beaucoup à la conception de presque n'importe quel autre programme. Si j'écris un programme utilisant des fenêtres, j'essaierai d'utiliser uniquement les fonctionnalités natives de la ou des plates-formes cibles. Un grand nombre des décisions qui incarneront seront en grande partie arbitraires et pourraient être prises différemment sans perte majeure de fonctionnalité - mais de même, les modifier sans gain substantiel de fonctionnalité déroute simplement les utilisateurs sans rien accomplir d'utile. Les mêmes principes de base s'appliquent à "qu'est-ce qui devrait mettre fin (ou séparer) une déclaration dans une langue?" comme "à quoi devrait ressembler une barre de défilement", ou "comment un contrôle d'arborescence devrait-il fonctionner?" Dans tous ces cas, la décision est essentiellement arbitraire et l'uniformité procure un avantage substantiel en soi.

J'ajouterais que la même chose se produit dans de nombreuses langues, mais d'une manière à laquelle la plupart d'entre nous sommes tellement habitués avant la programmation que peu de gens y pensent. Pourquoi tout le monde utilise "+" pour indiquer l'addition ou "-" pour indiquer la soustraction? Parce que la forme du symbole importe peu, mais que tout le monde accepte d'appliquer la même signification à chaque symbole compte beaucoup.

Jerry Coffin
la source
Très bons points (+1), bien que je ne sois pas tout à fait d’accord avec la partie "principalement arbitraire". Je pense qu'il y a très certainement des choses plus intuitives et d'autres moins intuitives. Dans l'utilisation par Windows d'un X pour fermer des fenêtres, il y a un symbolisme préexistant (peut-être seulement vaguement connecté) sur lequel il s'appuie. Et il est certain que, dans l’utilisation des couleurs par OS X, il s’inspire d’un symbolisme fort. (J'ignore pour le moment que M $ Windows a peut-être volé le X à X Windows, car je ne me souviens pas de ce qu'il a utilisé.)
iconoclast
3
@Brandon: Je n'avais certainement pas l'intention de dire que toutes les parties de la conception de l'interface utilisateur sont arbitraires - j'aurais peut-être dû dire «certaines» au lieu de «la plupart». Ce ne serait pas X qui aurait défini une forme particulière pour l'icône "fermer la fenêtre" - cela reviendrait à un gestionnaire de fenêtres individuel.
Jerry Coffin
Autant que je me souvienne, le BASIC Dartmouth original n’utilisait que les retours à la ligne pour terminer les instructions (c’est-à-dire une instruction par ligne). Je pense que plusieurs déclarations sur une ligne, séparées par des points, constituaient une extension Microsoft.
John R. Strohm
7

Le point-virgule a été proposé à l'origine dans Algol 60 en tant que séparateur de déclaration et non de terminateur.

Avant Algol 60, le seul langage de programmation de haut niveau existant était Fortran, exigeant que chaque énoncé se trouve sur une ligne distincte. Les déclarations couvrant plusieurs lignes, comme les boucles de bouclage, étaient considérées comme une bizarrerie et considérées comme des «blocs de déclarations».

Les concepteurs d’Algol 60 ont compris que les instructions nécessitaient une structure hiérarchique (if-then-else, boucles, instructions majuscules, etc.) et qu’elles pouvaient être imbriquées les unes dans les autres. Donc, l'idée de chaque affirmation sur une ligne séparée n'a plus de sens. Composition séquentielle des déclarations de la forme S1; S2; ...; Sn éventuellement inclus dans les parenthèses début - fin ont été appelés déclarations composées , et s'inscrivent dans la structure hiérarchique des déclarations envisagées par Algol 60. Donc, ici, le point-virgule est clairement un séparateur de déclaration , pas un terminateur.

Cela a posé des problèmes dans la pratique. Algol 60 avait également une "déclaration vide" qui était indiquée par rien. Ainsi, on pourrait écrire " begin S1; end " où le point-virgule apparaît comme s'il terminait S1. Mais le compilateur Algol 60 l'a vraiment traité comme un séparateur entre S1 et une instruction vide invisible le suivant. Ces subtilités étaient un peu trop pour les programmeurs pratiques. Habitués à des langages linéaires comme Assembly et Fortran, ils ont vraiment pensé au point-virgule comme un terminateur des déclarations. Lorsque les programmes étaient écrits, le point-virgule était généralement placé à la fin des déclarations, comme suit:

    a [i]: = 0;
    i: = i + 1

et le point-virgule ressemblait vraiment à un terminateur pour la première déclaration. Si les programmeurs traitaient le point-virgule comme un terminateur, une telle instruction donnerait une erreur de syntaxe:

    si je> 0 alors
      a [i]: = 0;
    autre
      a [i]: = 1;

parce que le point-virgule termine le "si" et, ainsi, le "else" devient suspendu. Les programmeurs étaient complètement confus.

Ainsi, PL / I, qui a succédé à IBM Fortran, a décidé de faire du point-virgule un terminateur de déclaration plutôt qu'un séparateur. Les programmeurs étaient satisfaits de ce choix. La majorité des langages de programmation ont suivi. (Pascal a résisté à la tendance, mais son successeur Ada a abandonné.)

[Remarque ajoutée: l'article de Wikipedia sur les comparaisons de langages de programmation contient un tableau récapitulatif résumant la façon dont le point-virgule est traité dans divers langages de programmation.]

Uday Reddy
la source
6

C'est un travail approximatif, mais si vous regardez un clavier QWERTY standard limité aux valeurs ASCII, les caractères naturels pour la terminaison / séparation seraient.!?,:; et la voiture revient. de ceux!?: devrait être immédiatement disqualifié pour la prise de plusieurs clés et la terminaison de relevé va être une chose très commune. Les périodes seraient disqualifiées car elles sont facilement confondues avec des points décimaux, ce qui les compliquerait inutilement pour devenir un terminateur compte tenu de l'espace limité des ordinateurs initiaux. les retours à la ligne seraient disqualifiés après que les lignes de code puissent potentiellement être plus longues que ce qui peut être affiché sur une seule ligne à l'écran, il serait donc plus difficile de lire un programme lorsque les lignes doivent défiler horizontalement, ou requièrent des caractères supplémentaires pour créer une continuation sur la ligne suivante, ce qui ajoute encore à la complexité. cela laisse, et; comme options, de celles-ci, est utilisé beaucoup plus souvent par écrit que; le point-virgule est donc choisi parce que c'est le type le plus facile à taper, moins déroutant, car il ajoute du sens à un caractère de signification limitée et moins compliqué, car il n'existe aucun cas spécial d'utilisation.

Le point-virgule a été choisi parce que c'était le meilleur personnage basé sur la paresse et la simplicité.

Ryathal
la source
vous avez un bon point ici; Je ne dirais que "choisi" (ce qui est difficile à prouver) en quelque chose comme "... le point-virgule a gagné parce que c'était le meilleur personnage basé sur la paresse et la simplicité"
gnat
2
À peine. Le point-virgule comme séparateur / séparateur de commandes a commencé chez ALGOL (1958), antérieur à ASCII (travail commencé en 1960, première version en 1963, version majeure en 1967, mise à jour en 1986).
John R. Strohm
@ JohnR.Strohm et bien c'est une nouvelle pour moi, mais tout cela est pour moi une histoire à peu près ancienne
Ryathal
6
C’est une excellente théorie, mais la réalité est que les raccourcis clavier nécessitaient une touche de majuscule pour arriver au point-virgule de toute façon jusqu’à ce que la saisie au clavier moderne apparaisse dans les années 70. (Il y a plusieurs bonnes photos au bas de l'article du wiki: en.wikipedia.org/wiki/Keypunch ) C'est probablement basé sur les règles naturelles de la langue anglaise, une mode particulièrement populaire à la fois. (J'inclurais toutes les langues de la fin des années 50: ALGOL, FORTRAN, COBOL et SQL, à l'exclusion de LISP.) Le point-virgule d'ALGOL n'est qu'une des nombreuses conventions de langue anglaise utilisées, sur lesquelles BASIC a ensuite été développé.
SilverbackNet
@SilverbackNet, c'est pourquoi le "travail de pure supposition" ne devrait probablement pas constituer la base d'une réponse ici.
user1717828
6

C'est en grande partie un choix arbitraire. Certaines langues ont fait d'autres choix. COBOL termine les instructions avec le .caractère. FORTRAN, BASIC et Python terminent généralement les instructions avec des nouvelles lignes (avec une syntaxe spéciale pour les instructions multilignes). Et Lisp met ses déclarations entre parenthèses.

La raison principale ;est si populaire en tant que séparateur / terminateur d'instruction, c'est que la plupart des langages populaires actuels sont basés sur ALGOL , qui utilisait cette convention.

au lieu d'un autre symbole?

Quel autre symbole pourriez-vous choisir?

Les caractères ASCII # $ @ [] ^ _ `{|} ~ n'étaient pas toujours présents dans les encodages de caractères précédents tels que ISO 646 .

Les caractères ()*+-/<=>sont généralement utilisés en tant qu’opérateurs mathématiques et créeraient des ambiguïtés lorsqu’ils seraient utilisés comme terminateurs d’instruction.

product = a * b *  // If '*' were a statement terminator,
c * d *            // Are there two factors, or four?

Des problèmes similaires s'appliqueraient à 'et ", qui sont généralement utilisés comme délimiteurs de chaîne; ,, qui est généralement utilisé pour séparer les arguments de la fonction, et ., qui est généralement utilisé comme un point décimal (ou comme un délimiteur dans des constructions similaires some_struct.some_field).

Ça part !%&:;?.

Choisir !ou ?ne causerait probablement pas de difficultés techniques, mais leur signification en anglais donnerait une mauvaise ambiance au programme.

print(x)?  # Yes, you should.
           # It's an IMPERATIVE language; stop questioning my commands.
print(x)!  # OK!  You don't have to shout!

Le &serait un choix plus judicieux en tant que séparateur d'instructions (pas de terminateur), car

do_thing_a() &
do_thing_b()

peut être lu comme une commande permettant de faire la chose A , puis la chose B. Mais la plupart des langages avec un &opérateur l’utilisent comme un AND logique ou binaire .

Le %signe peut causer de la confusion dans des énoncés tels que interest_rate = 2.99%(ce qui affecterait la variable à la 2.99place de celle attendue 0.0299). Bien sûr, la signification mathématique bien connue de %n'a pas empêché C de l'utiliser comme opérateur restant.

Alors ça part :et ;.

: est un choix judicieux, et est en effet utilisé comme séparateur d'instruction intra-ligne dans la plupart des dialectes de BASIC.

Mais ;a la grammaire anglaise de son côté; il peut être utilisé pour séparer des clauses dans une phrase.

dan04
la source
3

Plutôt que d'essayer de répondre à votre question principale, je pense qu'il est préférable de vous concentrer sur votre question implicite:

Je souhaite connaître l'historique de cette décision et espérer que les réponses permettront de mieux comprendre les décisions futures en matière de conception et de mise en œuvre de langages de programmation.

Si vous souhaitez en savoir plus sur l'historique de la conception et de la mise en œuvre des langages de programmation et sur le processus, les débats des conférences sur l' historique des langages de programmation sont un très bon point de départ. (Je pense que vous aurez besoin d'une adhésion à ACM pour pouvoir accéder aux procédures cependant.)

Pourquoi les instructions dans de nombreux langages de programmation sont-elles terminées par des points-virgules? Y a-t-il une raison pour laquelle un point-virgule a été choisi comme séparateur de ligne au lieu d'un symbole différent?

Prenant votre question principale comme exemple de question à laquelle vous voudrez peut-être essayer de répondre en lisant les procédures de HOPL, je voudrais aborder le point suivant: les concepteurs d’un nouveau langage de programmation le font généralement parce qu’ils considèrent ceux qu’ils connaissent bien. cassé / déficient en quelque sorte. Leur nouveau langage est, d’une part, conçu pour remédier à cette lacune. D'autre part, les concepteurs de langage copieront également des éléments de conception d'autres langues qu'ils jugeront utiles ou ne changeront tout simplement pas les éléments avec lesquels ils n'ont pas rencontré de problèmes.

Cette dernière partie est particulièrement importante: au lieu d'essayer de déterminer quel langage de programmation a été le premier à utiliser les points-virgules comme terminateurs et pourquoi de nombreux autres langages de programmation l'ont copié, vous en apprendrez probablement plus en regardant des langages qui ne l'ont pas copié. il. Par exemple, bien que Smalltalk s’inspire beaucoup de Simula, il n’a pascopier sa syntaxe et en particulier son utilisation de points-virgules comme terminateurs d'instruction. Les terminateurs (les séparateurs) ont été complètement arrêtés, et le point-virgule a été utilisé pour autre chose. Inversement, la première langue qui utilisait un point-virgule comme terminateur de déclaration avait peut-être une raison de changer cela par rapport à ce qui était utilisé dans les langues antérieures. Il est également possible que ce soit la première langue à avoir introduit le concept entier de terminaison de déclaration (ou ce, indépendamment des autres langues) et que le point-virgule a été utilisé pour une raison qui est maintenant perdue dans le temps. (Je soupçonne que ce dernier cas est le cas ici, car aucun des autres répondants n'a été en mesure de trouver une citation de la personne qui a introduit le point-virgule plutôt que de proposer des suppositions réaménagées sur les raisons pour lesquelles le point-virgule était un bon choix.) point, Je pense que vous en apprendrez plus en examinant pourquoi les créateurs de langage ont changé les choses plutôt que pourquoi ils les ont copiés / conservés. Quand les gens changent des choses qu'ils veulent ou doivent expliquer habituellement, ils ne le font pas lorsqu'ils copient ou conservent les mêmes choses car «pourquoi changerions-nous? c'est comme ça que ça se passe!

Rinzwind
la source
2

C'est à propos de la visibilité.

Les premiers déclarations étaient les "." comme dans COBOL et nouvelle ligne, retour de chariot en FORTRAN.

Le CR s'est avéré limitant en ce sens qu'il est difficile de faire circuler une déclaration sur plusieurs lignes.

Un arrêt complet a provoqué un problème plus intéressant. Lorsque vous lisez du texte en anglais, votre cerveau traite les arrêts complets à un niveau subliminal, vous êtes conscient qu’une phrase est terminée et vous pouvez faire une pause pour respirer mais vous ne le remarquez pas vraiment. cela l'a signalé. Aussi dans beaucoup de polices le '.' est le plus petit caractère possible, parfois rendu sous forme de pixel unique. Les périodes manquantes ou supplémentaires sont devenues la principale cause d'erreur dans les programmes COBOL.

Tirer des leçons des premières erreurs, ALGOL a choisi un terminateur spécifique qui permettrait à une déclaration de s’écouler sur plusieurs lignes et en a choisi un qui soit visible et facilement repérable par les lecteurs. Le point-virgule étant à la fois assez grand et assez inhabituel en anglais commun pour ne pas être traité inconsciemment.

James Anderson
la source
1

Je croyais comprendre que ce choix avait été choisi parce qu’il était nécessaire de disposer d’un terminateur d’instruction explicite autre qu’un retour à la ligne / nouvelle ligne. À l'époque des écrans à 80 colonnes, il était assez courant de placer une seule ligne de code sur plusieurs lignes pour que l'utilisation de \ r ou \ n comme terminateur d'instruction ne fonctionne pas.

Les points-virgules ne sont utiles que parce qu'ils ne sont pas utilisés dans les instructions logiques / mathématiques. En tant que tels, ils n'entrent pas en conflit avec le contenu réel des déclarations de manière significative.


Personnellement, je pense que l'utilisation continue du point-virgule, ainsi que des exigences de style pour conserver les lignes de moins de 80 caractères, sont franchement stupides et anachroniques. Des langages tels que python ont largement démontré que vous pouvez écrire du code facile à comprendre et concis plus facilement sans eux. De plus, si vous rencontrez des problèmes avec des lignes de plus de 80 caractères, vous avez besoin d'un moniteur plus grand.

Faux nom
la source
3
À l'époque sombre, il n'y avait pas d '"écrans à 80 colonnes". Il y avait des cartes perforées à 80 colonnes et des imprimantes avec un nombre différent de colonnes. (Environ 130 ou plus était commun.) FORTRAN a terminé les déclarations à la fin de la carte, mais a permis aux cartes de continuation de continuer la déclaration. Les cartes de continuation étaient marquées par un personnage frappé dans la colonne 6 de la carte. (N'importe quel caractère fonctionnerait. Selon la convention locale, vous verriez généralement soit un signe +, soit un seul chiffre, les chiffres comptant pour plusieurs cartes de continuation.)
John R. Strohm
1
Un langage comme Python aurait été irréalisable pour les ordinateurs qui existaient dans les premiers jours de C. L'utilisation d'un caractère de terminaison d'instruction facilite l'analyse, et il était très important de réduire la charge en mémoire et en processeur des compilateurs des décennies précédentes. Surtout sur les ordinateurs où vous avez payé le temps de calcul par seconde.
Gigatron
@Gigatron - Je ne faisais référence qu'à l'utilisation de retours à la ligne pour terminer une instruction, pas à l'un des aspects de niveau supérieur de python.
Faux nom
1
@Gigatron, vous voudrez peut-être jeter un coup d'œil à LISP, et plus particulièrement à ses débuts sur IBM 704. Vous serez peut-être surpris de ce que les Anciens pourraient faire, même en travaillant avec des couteaux en pierre et des peaux d'ours.
John R. Strohm
1
@Gigatron: FORTRAN a été exécuté sur les mêmes ordinateurs et utilise des lignes nouvelles pour séparer les instructions (avec une syntaxe spéciale pour les instructions multilignes).
dan04
0

Voici deux questions: Pourquoi ALGOL a-t-il un point-virgule et pourquoi d'autres langues l'ont-elles suivie?

La première question est déjà répondue à bien des égards ici.

En tant que deuxième, ALGOL était très largement utilisé comme langage pseudocode pour l'écriture d'algorithmes. Ainsi, les points-virgules sont vite devenus naturels pour les utilisateurs de différentes langues. Et naturellement, ils ont été pris pour les langues les plus jeunes.

Gangnus
la source
0

Je me trompe peut-être, mais je pense que cela a quelque chose à voir avec le fait que dans beaucoup d'assembleurs, un point-virgule était utilisé pour commencer un commentaire, généralement placé après une instruction. Après tout, ;c’était un commentaire et non plus une partie de l’instruction elle-même.

Il est ensuite nécessaire de mettre fin aux instructions lorsque vous les tapez dans un interprète. Des instructions courtes (par exemple, des expressions mathématiques) peuvent être terminées en appuyant simplement sur la touche Entrée, en indiquant à l'interprète que l'expression est prête à être calculée et qu'elle produit un résultat. Mais parfois, on voulait entrer plusieurs lignes de code pour l'instruction. Un moyen d'y parvenir consistait donc à utiliser un caractère spécial comme terminateur de l'instruction au lieu de ne dépendre que de la touche Entrée. De cette façon, l’utilisateur pouvait entrer plus de lignes de code à la fois, car Enter ne l’avait pas encore envoyé à l’interprète. Ce n'est que lorsque l'interprète trouve le caractère de fin dans une ligne entrée avec Entrée qu'il l'exécute enfin et calcule son résultat.

Maintenant, combinez ces deux choses ensemble, et le point-virgule semble être un choix évident pour le caractère final: il indique où la partie instruction se termine et la partie commentaire commence. Ainsi, lorsque l'interprète le rencontre sur une ligne, il sait qu'il peut toutes les lignes de l'expression qu'il a tamponnée jusqu'ici et l'exécute, parce que l'instruction vient de se terminer, maintenant nous sommes dans un commentaire (enfin, au moins jusqu'à la fin de cette ligne, car la prochaine ligne commencera dans le code mode à nouveau, en commençant une nouvelle expression / instruction).

Cela suppose, bien entendu, que c’est vraiment le point-virgule qui a été utilisé pour les commentaires de la personne qui a eu l’idée de le réutiliser en tant que terminateur d’instruction. Si cela avait été un autre caractère, nous aurions pu nous retrouver avec un terminateur d'instruction différent.

Inb4: Non, ceci n'est pas un compte rendu historique. Je n'ai aucune preuve que ce soit la façon dont les points-virgules sont apparus. C'est juste comment j'imagine que cela aurait probablement pu arriver.

BarbaraKwarc
la source
-1

La plupart des langues prenaient le point-virgule car il était déjà largement utilisé à cette fin et sa modification n’avait aucun sens.

Et compte tenu des premières langues pour faire ce choix, vous devrez examiner quelles sont les alternatives. Lorsque vous concevez une langue, vous souhaitez que les caractères nécessaires soient disponibles et les jeux de caractères à cette époque étaient codés sur 6 bits, souvent avec des motifs réservés, souvent avec des caractères non définis (pour une occurrence ultérieure, pensez à la variantes nationales de la norme ISO-646 - la variante américaine est bien connue sous le nom ASCII - qui réutilise les codes pour les caractères "communs" tels que [, #ou $et en voit l'effet dans un contexte où il n'y a que la moitié moins de positions de code disponibles et des lettres et chiffres réservant plus de la moitié de ceux-ci).

Il n’existait probablement aucun autre caractère pouvant être utilisé comme séparateur d’énoncé aussi intuitivement ( .c’est probablement déjà le seul prétendant sérieux à ce critère) et sans introduire de difficultés d’expression ou d’analyse syntaxique à une époque où la théorie de l’analyse et de l’analyse était encore en cours d’élaboration ( .maintenant hors de question en raison de son utilisation en nombres réels).

Programmateur
la source
-1

L’utilisation du point-virgule est une autre raison du fait qu’il s’agit de l’un des caractères que nous n’avons pas besoin ni utilisé plus souvent.

Supposons que nous l'utilisions plus souvent comme nom de variable ou quelque chose et que si le point-virgule avait été utilisé comme mot clé ou comme opérateur, cela aurait été un conflit de symboles pour le compilateur; il était donc important d'utiliser un symbole qui n'est pas souvent utilisé dans le codage.

Je pense que les langages de programmation de style C l'ont rendu populaire et que les auteurs de nouveaux langages de programmation ne voulaient pas réinventer la roue et ils ont continué à l'utiliser, jusqu'à maintenant.

Basav
la source