В чем причина использования таких неописуемых имен системных вызовов, как time
и creat
вместо getCurrentTimeSecs
и, createFile
или, возможно, более подходящих для Unix get_current_time_secs
и create_file
. Что подводит меня к следующему пункту: почему кто-то хочет что-то вроде cfsetospeed
без верблюжьего футляра или, по крайней мере, подчеркивает, чтобы сделать его читабельным? Конечно, в вызовах будет больше символов, но мы все знаем, что читаемость кода важнее, верно?
history
posix
system-calls
Benjoyo
источник
источник
ls -la | grep
будет выглядеть так:listAllHiddenAndNormalFiles() | globallySearchARegularExpressionAndPrint()
.Ответы:
Это связано с техническими ограничениями времени. Стандарт POSIX был создан в 1980-х годах и относился к UNIX, который родился в 1970-х годах. Несколько компиляторов C в то время были ограничены идентификаторами длиной 6 или 8 символов, так что они соответствовали стандарту для длины переменной и функции. имена.
Смежные вопросы:
источник
get_current_date()
иget_current_time()
некоторые из этих ранних наборов инструментов не могут быть отличены друг от друга. Причина была в том, что эти системы работали на крошечных отпечатках в несколько килобайт.creat()
. Кена Томпсона однажды спросили, что бы он сделал по-другому, если бы он переделывал систему UNIX. Его ответ: «Я произнесу тварь с помощью е».dr01 прав, но есть и другая причина - удобство использования. Раньше у вас не было такой удобной клавиатуры, чтобы набирать текст. Если вам повезло, у вас было что-то похожее на машинку старой школы. Если вам не повезло, вам приходилось иметь дело с системами, для работы которых требовалась реальная физическая работа (например, для нажатия «клавиши» потребовалось много сил), или вы вручную пробивали отверстия в карточке.
Это означало, что даже в пределах 6-8 символов вы пытались сделать свои команды максимально короткими. Вот почему вы
ls
вместоlist
, аcreat
вместоcreate
. Код из той эпохи полон переменных, какa
,x
иi
- и, конечно,x2
и друзей. Печатание было большой работой - сегодня вы меньшеlistIndex
испытываете необходимость печатать, чем раньше - «печатать»i
- и это даже не так уж и медленно (особенно при использовании дополнительных технологий, таких как автозаполнение).Реальный вопрос - почему так много идиом Unix сохраняется, хотя они больше не желательны?
источник
time
наgetCurrentTimeSecs
или что-то в этом роде, я просто перестану его обновлять. Даже с моей удобной клавиатурой и новейшим оборудованием эти названия остаются чрезвычайно удобными и простыми (простота является одной из основ UNIX). Я действительно не чувствую необходимости переводить такого рода имена в стиле Java / C # на язык C, не говоря уже о ядре Linux. IMO, с точки зрения разработчика ядра или разработчика UNIX в целом, эти идиомы ничем близко не нежелательны .unRootlyLongNamed.Packaged.nonsensicalFunction
это некрасиво ко мне, и я предпочел бы быть уверен , что он делает, делаяman 2 time
чем гадать, что это , кажется, делает.get_X
илиremove_file_from_cache
(я бы предложитьrmfc
?) Нежелательны для разработчиков ядра, пожалуйста , сделайте это публично - я люблю , чтобы увидеть его реакцию.В дополнение к другим ответам я хотел бы отметить, что Unix был разработан как реакция на Multics, CTSS и другие современные операционные системы, которые были значительно более многословны в своих соглашениях об именах. Вы можете ознакомиться с этими операционными системами по адресу http://www.multicians.org/devdoc.html . Например, http://www.multicians.org/mspm-bx-1-00.html дает
change_name
команду для переименования файла; сравнить Unixmv
.Кроме того , основная причина , почему имена очень короткий системного вызова сохраняются является обратная совместимость. Вы заметите, что более новые API имеют тенденцию быть более явными; например,
gettimeofday
аclock_gettime
не простоtime
.(Даже сегодня использование
whateverIndex
вi
качестве индекса цикла вместо индекса автоматической проверки кода в моей книге ;-)источник
i
это хорошо для индекса, когда вы, скажем, итерируете массив. Координаты? Использоватьx
иy
. Обращаться к некоторому порядковомуДеннис Ритчи ограничил себя тем, что C не будет полагаться на какие-либо функции компоновщика, которые также не требуются Фортрану. Отсюда ограничение в 6 символов для внешних имен.
источник