J'ai lu où sont utiles octals? et il semble que les octals sont quelque chose qui était une fois utile.
Beaucoup de langues traitent les nombres précédents avec un 0 comme octal, donc le littéral 010
est en fait 8. Quelques-uns parmi ceux-ci sont JavaScript, Python (2.7) et Ruby.
Mais je ne vois pas vraiment pourquoi ces langues ont besoin d'octal, surtout lorsque l'utilisation la plus susceptible de la notation doit désigner un nombre décimal avec un 0 superflu 0 .
JavaScript est une langue côté client, Octal semble assez inutile. Les trois sont assez modernes en tout autre sens, et je ne pense pas qu'il y aurait beaucoup de code utilisant une notation octale qui serait brisée en supprimant cette "caractéristique".
Donc, mes questions sont:
0o10
? Pourquoi copier une vieille notation qui remplace un cas d'utilisation plus utile?Copie aveugle de C, comme cliquet monstre dit dans son commentaire
La grande majorité des " créateurs de langue " ces jours-ci ont jamais vu quoi que ce soit, mais C et ses copies (C++, Java, Javascript, PHP, et probablement quelques dizaines d'autres, je jamais entendu parler). Ils ont jamais touché FORTRAN, COBOL, LISP, Pascal, Oberon, FORTH, APL, BLISS, SNOBOL, pour ne citer que quelques-uns.
Il était une fois, l'exposition aux langages de programmation était obligatoire dans le programme informatique, et qui ne comprend pas le calcul C, C++ et Java comme trois langues distinctes.
Octal a été utilisé dans les premiers jours parce qu'il a fait la lecture des valeurs d'instruction binaires plus facile. Le PDP-11, par exemple, au fond avait un opcode 4 bits, numéros de registre 2 à 3 bits, et 2 accès à 3 bits des champs de mécanisme. Exprimant la Parole en octal fait tout évident.
En raison de l'association au début de C avec le PDP-11, la notation octal a été inclus, car il était très courant sur les PDP-11s à l'époque.
D'autres machines ont des ensembles d'instructions qui ne pas la carte bien hex. Le CDC 6600 avait un mot de 60 bits, chaque mot contenant typiquement 2 à 4 instructions. Chaque instruction est de 15 ou 30 bits.
En ce qui concerne la lecture et l'écriture de valeurs, cela est un problème résolu, à une meilleure pratique de l'industrie bien connue, au moins dans l'industrie de la défense. Vous documentez vos formats de fichiers. Il n'y a pas d'ambiguïté lorsque le format est documenté, parce que le document indique si vous êtes à la recherche d'un nombre décimal, un nombre hexadécimal, ou un nombre octal.
Note également: Si vos paramètres par défaut du système I/O à 0 initial qui signifie octal, vous devez utiliser une autre convention sur votre sortie pour indiquer les valeurs hexadécimaux. Ce n'est pas nécessairement une victoire.
À mon avis, Ada a fait mieux: 2 # 10010010 # 8 # 222 # 16 # 92 #, et 146 représentent tous la même valeur. (Ce sera probablement me faire au moins trois downvotes là, juste pour mentionner Ada.)
Ils l'obtiennent de C. Pourquoi la copie? Étant donné que la mise en œuvre de la base de tous les 3 est dans la mise en œuvre par défaut de C. Python est CPPHON . =Ruby a été intégré à l'origine [~ # ~ # ~] c [~ # ~] aussi. JavaScript est le cas le plus intéressant ici. Il est géré dans le navigateur. Soin Pour deviner ce que le premier navigateur Web a été écrit?
Alors, pourquoi les trois de ces langues seront-elles appliquées dans C? Parce qu'ils sont tous originaires des systèmes UNIX. C'est donc un cas de convention entraîné par l'écosystème. Perl Cela aussi. Lua serait probablement si lua utilisait - entiers plutôt que doubles .
Il s'agit donc d'une question de l'environnement de ces langues écrites en C ainsi qu'ils prennent leurs conventions de C. Un bon corollaire de soutien est Visual Basic qui utilise -& o . En ce qui concerne cela, il semble être plus d'une abstraction fuite devenue la convention que toute autre chose.
Il y a une valeur pour la cohérence. Si vous ne pouvez pas déterminer de manière fiable comment un numéro sera traduit, vous aurez de vrais problèmes en utilisant une valeur dans différents contextes.
Cela signifie également que vous n'avez pas besoin d'écrire votre propre analyseur. Il y a une grande valeur dans l'utilisation de routines de bibliothèque bien testées.
De plus, si vous ne prenez pas en charge la syntaxe principale 0, vous n'avez pas de moyen simple d'écrire des valeurs octales.
Pendant que nous ne dépendons pas autant de chiffres octals que nous le faisions une fois, ils sont toujours de valeur. Bien que les mêmes résultats puissent être obtenus avec des nombres hexadécimaux, dans certains contextes, l'octal est plus facile à comprendre.
Jusqu'à présent, je n'ai vu qu'une seule utilisation pour les zéros de premier plan en nombres décimaux. C'est dans l'affichage et l'entrée de champs décimaux de longueur fixe tels que des numéros d'identification. Cela fait des années que j'ai vu des champs comme celui-là avec un zéro directeur. Bien que cela réduit les valeurs disponibles de 10%, il élimine le problème que les utilisateurs quittent souvent les zéros de premier plan lors de leur entrée.