Почему параметр cp не перезаписывать файлы называется --no-clobber?

Ну, я понял. Просто нужна была команда update-cache.

23
11.03.2020, 12:18
2 ответа

«Clobber » в контексте манипулирования данными означает уничтожение данных путем их перезаписи. В контексте файлов в среде Unix это слово использовалось по крайней мере еще в начале 1980-х годов, а возможно, и раньше. Csh пришлось set noclobberнастроить >на отказ от перезаписи существующего файла (позднее set -o noclobberв ksh93 и других оболочках в стиле sh -). Когда GNU coreutils добавил--no-clobber(в 2009 году ), они использовали тот же словарь, что и оболочки.

48
28.04.2021, 23:20

Термин «клоббер» хорошо -известен в вычислительной технике в целом.

Параметр --no-clobber/ -nдля cpбыл добавлен только в 2009 -01 -14 Камилом Дудкой (в коммите на github).

В частности, в рамках проекта GNU, оно также используется в GCC для описания случаев, когда инструкция ЦП или встроенный ассемблерный оператор уничтожает содержимое регистра. Так что это не случайно выбранное английское слово, и вполне вероятно, что люди, работающие над проектами GNU, написанными на C, будут хотя бы мимоходом знакомы с использованием этого термина из документации GCC или от других разработчиков проектов GNU, использующих его :

.
  • (clobber x)в GCC -внутренние файлы описания машины , которые учат GCC тому, что делает каждая инструкция в ISA. (Ограничения, аналогичные встроенным -asm)
  • GNU C Extended Asm встроенные операторы asm()имеют раздел «clobber», чтобы сообщить компилятору, какие шаги регистрирует встроенный ассемблерный шаблон. Как этот бесполезный бессмысленный пример x86:
    asm("xor %eax,%eax; mfence" ::: "eax", "memory", "cc");. например. SO Q&A с вопросом о соглашении о вызове функции -в этих терминах.
  • Документы GCC для-fcall-used-regописывают это как сообщение компилятору о том, что данный регистр "затирается" вызовами функций (, т.е. изменяет соглашение о вызовах ). В отличие от-fcall-saved-regили -ffixed-reg.
  • GCC-Wclobberedпредупреждение -«Предупреждать о переменных, которые могут быть изменены с помощью longjmp или vfork». (IDK, если он существовал в 2009 году, но он демонстрирует, что это слово используется для описания такого рода вещей в различных контекстах, включая имена опций в других программах ).

Автор коммита coreutils, который добавил --no-clobber, Камил Дудка, определенно знаком с внутренним устройством GCC :он (позже?)написал подключаемый модуль GCC для формальной проверки программ на C.

Я не знаю, повлияло ли на выбор имени внутреннее устройство GCC, или это было связано с существующими опциями оболочки, такими как set noclobber, или и то, и другое.

Забавный факт :первоначальные авторы GNU cpвключают Торджорна Гранлунда, основного автора проекта gmplib(GNU Multi -Precision )и который помог изобрести/реализовать мультипликативную -обратная оптимизация для деления при компиляции -постоянная времени(статья 1994 года , переполнение стека вопросы и ответы).

4
28.04.2021, 23:20

Теги

Похожие вопросы