Quelle est la raison d'utiliser de tels noms d'appel système peu révélateurs comme time
et creat
au lieu de getCurrentTimeSecs
et createFile
ou, peut-être plus appropriés sous Unix get_current_time_secs
et create_file
. Ce qui m'amène au point suivant: pourquoi quelqu'un voudrait-il quelque chose comme cfsetospeed
sans étui à chameaux ou au moins soulignés pour le rendre lisible? Bien sûr, les appels auraient plus de caractères, mais nous savons tous que la lisibilité du code est plus importante, non?
history
posix
system-calls
Benjoyo
la source
la source
ls -la | grep
ressemblerait à ceci:listAllHiddenAndNormalFiles() | globallySearchARegularExpressionAndPrint()
.Réponses:
Cela est dû aux contraintes techniques du moment. Le standard POSIX a été créé dans les années 1980 et faisait référence à UNIX, né en 1970. Plusieurs compilateurs C d'alors étaient limités à des identifiants de 6 ou 8 caractères, ce qui a défini le standard de longueur et de fonction. noms.
Questions connexes:
la source
get_current_date()
etget_current_time()
ne pouvait pas être dit à part par certains de ces premiers toolchains. La raison en était que ces systèmes fonctionnaient sur de minuscules empreintes de quelques kilo-octets.creat()
. On a un jour demandé à Ken Thompson ce qu’il ferait différemment s’il modifiait le système UNIX. Sa réponse: "J'épelle creat avec un e."dr01 a raison, mais il y a aussi une autre raison - la convivialité. À l'époque, vous n'aviez pas quelque chose d'aussi confortable qu'un clavier à saisir. Si vous aviez de la chance, vous aviez quelque chose qui ressemble à une machine à écrire de la vieille école. Si vous n’êtes pas chanceux, vous devez faire face à des systèmes nécessitant un travail physique réel (par exemple, il faut beaucoup de force pour appuyer sur la "touche"), ou des perforations manuelles dans une carte.
Cela signifiait que même dans la limite de 6 à 8 caractères, vous essayiez de garder vos commandes aussi courtes que possible. C'est pourquoi vous avez
ls
au lieu delist
, etcreat
au lieu decreate
. Le code de cette époque est plein de variables commea
,x
eti
- et bien sûr,x2
et d'amis. Taper était un travail fastidieux - de nos jours, vous êtes moins sollicitélistIndex
quei
par le passé "en tapant" - et ce n'est même plus si lent (en particulier avec des technologies supplémentaires comme la saisie automatique).La vraie question est de savoir pourquoi autant d’idiomes Unix persistent même s’ils ne sont plus souhaitables.
la source
time
lagetCurrentTimeSecs
ou quelque chose comme ça, je vais juste la mise à niveau l' arrêter. Même avec mon clavier confortable et mon matériel récent, ces noms restent extrêmement pratiques et simples (la simplicité étant l’un des principes fondamentaux de UNIX). Je ne ressens vraiment pas le besoin d'intégrer ce genre de nom de style Java / C # dans le langage C, et encore moins dans un noyau Linux. OMI, du point de vue d'un développeur de noyau, ou d'un développeur UNIX en général, ces idiomes ne sont pas très indésirables .unRootlyLongNamed.Packaged.nonsensicalFunction
est moche pour moi, et je préférerais être sûr de ce qu'il fait en faisantman 2 time
que de deviner ce qu'il semble faire.get_X
ouremove_file_from_cache
(pourrais - je proposerrmfc
?) Ne sont pas souhaitables pour les développeurs du noyau, s'il vous plaît le faire publiquement - j'adore voir sa réaction.En plus des autres réponses, je voudrais souligner qu'Unix a été développé en réaction à Multics, à CTSS et à d'autres systèmes d'exploitation contemporains, qui étaient beaucoup plus explicites sur leurs conventions de dénomination. Vous pouvez avoir une idée de ces systèmes d’exploitation à l’ adresse http://www.multicians.org/devdoc.html . Par exemple, http://www.multicians.org/mspm-bx-1-00.html donne
change_name
la commande permettant de renommer un fichier; comparez Unixmv
.De plus, la principale raison pour laquelle les noms d’appel système très courts persistent est la compatibilité avec les versions antérieures. Vous remarquerez que les nouvelles API ont tendance à être plus explicites. par exemple
gettimeofday
etclock_gettime
au lieu de justetime
.(Même aujourd'hui, utiliser
whateverIndex
au lieu dei
pour un index de boucle est un échec automatique de révision du code dans mon livre ;-)la source
i
c'est bien pour un index quand on itérera un tableau, par exemple. Coordonnées? Utilisezx
ety
. Traversant un ordinal? Soyez descriptif.)Dennis Ritchie s'est fixé comme contrainte que C ne repose sur aucune fonctionnalité de l'éditeur de liens qui n'était pas également requise par Fortran. D'où la limite de 6 caractères pour les noms externes.
la source