Jaki jest powód używania takich nienazwanych nazw wywołań systemowych, takich jak time
i creat
zamiast getCurrentTimeSecs
i createFile
lub, a może bardziej odpowiednich w systemach Unix get_current_time_secs
i create_file
. Co prowadzi mnie do następnej kwestii: dlaczego ktoś miałby chcieć czegoś takiego cfsetospeed
bez futerału na wielbłąda lub przynajmniej podkreśla, aby był czytelny? Oczywiście wywołania miałyby więcej znaków, ale wszyscy wiemy, że czytelność kodu jest ważniejsza, prawda?
history
posix
system-calls
Benjoyo
źródło
źródło
ls -la | grep
będzie wyglądać następująco:listAllHiddenAndNormalFiles() | globallySearchARegularExpressionAndPrint()
.Odpowiedzi:
Wynika to z technicznych ograniczeń czasu. Standard POSIX został stworzony w latach 80. XX wieku i dotyczył UNIX, który narodził się w 1970 r. Kilka kompilatorów C w tym czasie było ograniczone do identyfikatorów o długości 6 lub 8 znaków, dzięki czemu ustalono standard długości zmiennej i funkcji nazwy.
Powiązane pytania:
źródło
get_current_date()
iget_current_time()
nie mogą być od siebie powiedział przez niektóre z tych wczesnych toolchains. Powodem było to, że systemy te działały na małych śladach o wielkości kilku kilobajtów.creat()
. Ken Thompson został kiedyś zapytany, co zrobiłby inaczej, gdyby przeprojektował system UNIX. Jego odpowiedź: „przeliteruję kreację za pomocą e”.dr01 ma rację, ale jest też inny powód - użyteczność. Wcześniej nie było czegoś tak wygodnego jak klawiatura do pisania. Jeśli miałeś szczęście, miałeś coś podobnego do oldschoolowej maszyny do pisania. Jeśli miałeś pecha, musiałeś poradzić sobie z systemami, które wymagały faktycznej pracy fizycznej (ponieważ wciśnięcie klawisza wymagało dużej siły) lub ręcznie wybiłeś dziury w karcie.
Oznaczało to, że nawet w granicach 6-8 znaków starałeś się, aby polecenia były jak najkrótsze. Dlatego masz
ls
zamiastlist
icreat
zamiastcreate
. Kod z tamtej epoki jest pełna zmiennych, takich jaka
,x
ii
- i oczywiście,x2
i przyjaciół. Pisanie na klawiaturze było bardzo pracochłonne - dzisiaj jesteś mniej obciążony pisaniemlistIndex
niż kiedyś „pisaniem na klawiaturze”i
- i nie jest już wcale tak wolniejszy (szczególnie w przypadku dodatkowych technologii, takich jak automatyczne uzupełnianie).Prawdziwe pytanie brzmi - dlaczego tak wiele idiomów uniksowych utrzymuje się, mimo że nie są już pożądane?
źródło
time
celugetCurrentTimeSecs
czy coś takiego, ja po prostu przestać to modernizacja. Nawet przy mojej wygodnej klawiaturze i najnowszym sprzęcie nazwy te pozostają niezwykle wygodne i proste (prostota jest jedną z podstaw UNIX-a). Naprawdę nie odczuwam potrzeby wprowadzania tego rodzaju nazw w stylu Java / C # do języka C, nie mówiąc już o jądrze Linuksa. IMO, z perspektywy programisty jądra lub ogólnie programisty UNIX, te idiomy są niczym niepożądanym .unRootlyLongNamed.Packaged.nonsensicalFunction
jest dla mnie brzydka i wolę być pewna, co robi,man 2 time
niż zgadywać, co się wydaje.get_X
lubremove_file_from_cache
(mogę zaproponowaćrmfc
?) Są niepożądane deweloperów jądra, zrób to publicznie - będę kochać , aby zobaczyć jego reakcję.Oprócz innych odpowiedzi chciałbym zauważyć, że Unix został opracowany jako reakcja na Multics, CTSS i inne współczesne systemy operacyjne, które były znacznie bardziej gadatliwe na temat swoich konwencji nazewnictwa. Możesz zapoznać się z tymi systemami operacyjnymi na stronie http://www.multicians.org/devdoc.html . Na przykład http://www.multicians.org/mspm-bx-1-00.html podaje
change_name
jako polecenie zmiany nazwy pliku; porównaj Unixmv
.Głównym powodem utrzymywania się bardzo krótkich nazw wywołań systemowych jest również zgodność wsteczna. Zauważysz, że nowsze interfejsy API są bardziej wyraźne; np.
gettimeofday
iclock_gettime
zamiast po prostutime
.(Nawet dzisiaj użycie
whateverIndex
zamiasti
indeksu pętli jest automatycznym błędem przeglądu kodu w mojej książce ;-)źródło
i
się do indeksu, gdy, powiedzmy, iterujesz tablicę. Współrzędne? Użyjx
iy
. Przechodząc przez porządek porządkowy? Bądź opisowy.)Dennis Ritchie nałożył na C ograniczenie, że nie będzie polegać na żadnych funkcjach linkera, które nie byłyby również wymagane przez Fortran. Stąd limit 6 znaków w nazwach zewnętrznych.
źródło