web-dev-qa-db-fra.com

Pourquoi le signe d'insertion a-t-il été utilisé pour XOR au lieu de l'exponentiation?

Ce n'est pas vraiment un problème pour quiconque a déjà fait face à ce problème syntaxique, mais je vois une énorme confusion dérivant de l'utilisation du curseur (^) comme opération XOR au lieu de l'opération d'exponentiation mathématique largement acceptée.

Bien sûr, il y a beaucoup d'endroits où la (mauvaise) utilisation du curseur est expliquée et corrigée, mais je n'ai trouvé aucune source définitive quant à pourquoi le curseur a reçu une signification différente .

Était-ce une question de commodité? Un accident? De toute évidence, le raisonnement pourrait être différent pour les différentes langues, de sorte que les informations à tous égards seraient pertinentes.

Bien qu'il y ait d'anciens précurseurs, l'influent mathématicien français René Descartes est généralement crédité pour avoir présenté des exposants en exposant (unb) dans l'écriture mathématique, dans son ouvrage Geometrie qui a été publié en 1637. C'est la notation encore universellement utilisée en mathématiques aujourd'hui.

Fortran est le plus ancien langage de programmation largement utilisé pour les calculs numériques qui fournit un opérateur d'exponentiation, il date de 1954. L'opération d'exponentiation est indiquée par un double astérisque **. Il convient de noter que de nombreux ordinateurs à l'époque utilisaient encodages de caractères 6 bits qui ne fournissaient pas de caractère caret ^. L'utilisation de ** A ensuite été adoptée par les créateurs de divers langages de programmation plus récents qui offrent une opération d'exponentiation, comme Python.

Le premier jeu de caractères largement adopté qui contenait le signe d'insertion ^ Était l'encodage 7 bits ASCII qui a été normalisé pour la première fois en 1963. La programmation la plus ancienne le langage que je connais qui a utilisé le signe d'insertion pour indiquer l'exponentiation est BASIC, qui date de 1964. À la même époque, IBM a adopté le codage de caractères EBCDIC , qui a également comprend le signe d'insertion ^.

Le langage C a vu le jour en 1972. Il ne fournit pas d'opérateur d'exponentiation, il prend plutôt en charge l'exponentiation via des fonctions de bibliothèque telles que pow(). Par conséquent, aucun symbole ne doit être mis de côté pour l'exponentiation en C et dans d'autres langages de la famille C, tels que C++ et CUDA.

D'un autre côté, et peu courant pour les langages de programmation jusque-là, C fournit des symboles pour les opérations au niveau du bit. Le nombre de caractères spéciaux disponibles en 7 bits ASCII était limité, et comme il y avait une "affinité naturelle" d'autres opérations avec certains caractères spéciaux, par exemple & Pour AND et ~ Pour NOT, il n'y avait pas beaucoup de choix pour le symbole pour XOR.

Je ne suis pas au courant d'une justification publiée fournie par Ritchie ou Kernighan pour expliquer pourquoi ils ont choisi ^ Pour désigner XOR spécifiquement; court-métrage de Ritchie histoire de C est muet sur ce problème. Un regard sur la spécification du précurseur de C, le langage B , révèle qu'il n'avait pas d'opérateur XOR, mais déjà utilisé tous les caractères spéciaux autres que ^, $, @, #.

[Mise à jour] J'ai envoyé un e-mail à Ken Thompson, créateur de B et l'un des co-créateurs de C, me demandant pourquoi le choix de ^ Comme C XOR, et demandant la permission de partager la réponse ici. Sa réponse (légèrement reformatée pour plus de lisibilité):

De: Ken Thompson
Envoyé: jeudi 29 septembre 2016 04h50
À: Norbert Juffa
Objet: Objet: Justification du choix du curseur comme XOR opérateur en C?

c'était un choix aléatoire des caractères restants.

si je devais recommencer (ce que j'ai fait) j'utiliserais le même opérateur pour xor (^) et complément de bits (~).

puisque ^ est maintenant l'opérateur le plus connu, dans go, ^ est xor et également complémentaire.

L'utilisation de ^ Pour l'exponentiation en "mathématiques" à laquelle vous faites référence est en fait une utilisation établie à une date beaucoup plus tardive pour les systèmes de composition tels que Knuth's TeX qui date de 1978, les interfaces de ligne de commande pour les systèmes d'algèbre tels que Mathematica qui date de 1988, et des calculatrices graphiques au début des années 1990.

Pourquoi ces produits ont-ils adopté l'utilisation de ^ Pour l'exponentiation? Dans le cas des calculatrices, je soupçonne l'influence de BASIC. Tout au long des années 80, il a été un premier langage de programmation très populaire et a également été intégré à d'autres logiciels. La notation aurait donc été familière à de nombreux acheteurs de calculatrices. Ma mémoire est vague, mais je pense qu'il y avait même des calculatrices qui faisaient tourner de simples interprètes BASIC.

60
njuffa