Was ist der Grund für die Verwendung solcher aufschlussreichen Systemaufrufnamen wie time
und creat
anstelle von getCurrentTimeSecs
und createFile
oder, vielleicht besser geeignet für Unix get_current_time_secs
und create_file
. Was mich zum nächsten Punkt bringt: Warum sollte jemand etwas cfsetospeed
ohne Kamelkasten oder zumindest Unterstriche wollen, um es lesbar zu machen? Natürlich hätten die Aufrufe mehr Zeichen, aber wir alle wissen, dass die Lesbarkeit von Code wichtiger ist, oder?
history
posix
system-calls
Benjoyo
quelle
quelle
ls -la | grep
aussehen würde:listAllHiddenAndNormalFiles() | globallySearchARegularExpressionAndPrint()
.Antworten:
Es liegt an den technischen Zwängen der Zeit. Der POSIX-Standard wurde in den 1980er Jahren erstellt und bezog sich auf UNIX, das 1970 geboren wurde. Mehrere C-Compiler waren zu dieser Zeit auf Bezeichner mit 6 oder 8 Zeichen beschränkt, sodass der Standard für die Länge von Variablen und Funktionen festgelegt wurde Namen.
Verwandte Fragen:
quelle
get_current_date()
undget_current_time()
konnte von einigen dieser frühen Toolchains nicht unterschieden werden. Der Grund war, dass diese Systeme auf winzigen Stellflächen von wenigen Kilobyte arbeiteten.creat()
. Ken Thompson wurde einmal gefragt, was er anders machen würde, wenn er das UNIX-System neu entwerfen würde. Seine Antwort: "Ich würde Kreation mit einem e buchstabieren."dr01 ist richtig, aber es gibt auch einen anderen Grund - Benutzerfreundlichkeit. Früher hatten Sie nicht so viel Komfort wie eine Tastatur, auf der Sie tippen konnten. Wenn Sie Glück hatten, hatten Sie so etwas wie eine alte Schreibmaschine. Wenn Sie Pech hatten, mussten Sie sich mit Systemen auseinandersetzen, deren Betrieb tatsächlich körperliche Arbeit erforderte (wie in, das Drücken der "Taste" erforderte viel Kraft), oder Sie haben manuell Löcher in eine Karte gestanzt.
Dies bedeutete, dass Sie auch innerhalb der Beschränkung von 6-8 Zeichen versucht haben, Ihre Befehle so kurz wie möglich zu halten. Deshalb hast du
ls
stattlist
undcreat
stattcreate
. Code aus dieser Zeit ist voll von Variablen wiea
,x
undi
- und natürlich,x2
und Freunde. Das Tippen war eine Menge Arbeit - heutzutage sind Sie weniger mit dem Tippen beschäftigtlistIndex
als früher mit dem "Tippen"i
- und es ist nicht mehr allzu langsam (insbesondere mit zusätzlichen Technologien wie der automatischen Vervollständigung).Die eigentliche Frage ist: Warum bleiben so viele Unix-Redewendungen bestehen, obwohl sie nicht mehr wünschenswert sind?
quelle
time
zugetCurrentTimeSecs
oder so etwas, werde ich nur Stop - Upgrade es. Selbst mit meiner komfortablen Tastatur und der neuesten Hardware bleiben diese Namen äußerst praktisch und einfach (die Einfachheit ist eine der Grundlagen von UNIX). Ich habe wirklich nicht das Bedürfnis, diese Art von Java / C # -Namen in die C-Sprache zu bringen, geschweige denn in einen Linux-Kernel. IMO, aus der Sicht eines Kernel-Entwicklers oder UNIX-Entwicklers im Allgemeinen, sind diese Redewendungen keineswegs unerwünscht .unRootlyLongNamed.Packaged.nonsensicalFunction
ist hässlich für mich, und ich bin mir lieber sicher, was es tut,man 2 time
als zu erraten, was es zu tun scheint.get_X
oderremove_file_from_cache
(könnte ich vorschlagenrmfc
?) Für Kernel-Entwickler unerwünscht sind, tun Sie es bitte öffentlich - ich würde gerne seine Reaktion sehen.Zusätzlich zu den anderen Antworten möchte ich darauf hinweisen, dass Unix als Reaktion auf Multics, CTSS und andere moderne Betriebssysteme entwickelt wurde, deren Namenskonventionen wesentlich ausführlicher waren. Ein Gefühl für diese Betriebssysteme erhalten Sie unter http://www.multicians.org/devdoc.html . Zum Beispiel http://www.multicians.org/mspm-bx-1-00.html gibt
change_name
als Befehl , um eine Datei für die Umbenennung; Vergleiche Unixmv
.Der Hauptgrund, warum die sehr kurzen Systemaufrufnamen bestehen bleiben, ist die Abwärtskompatibilität. Sie werden feststellen, dass neuere APIs in der Regel expliziter sind. zB
gettimeofday
undclock_gettime
statt nurtime
.(Auch heute ist die Verwendung
whateverIndex
anstellei
eines Schleifenindex ein automatischer Fehler bei der Codeüberprüfung in meinem Buch ;-)quelle
i
ist in Ordnung für einen Index, wenn Sie beispielsweise ein Array iterieren. Koordinaten? Verwendenx
undy
. Durchqueren einer Ordnungszahl? Beschreibend sein.)Dennis Ritchie setzte sich mit C die Einschränkung, dass es sich nicht auf Linker-Funktionen stützen würde, die Fortran nicht benötigte. Daher die Beschränkung auf 6 Zeichen für externe Namen.
quelle