Безразличие к регистру - ошибка на миллиард долларов

May 07, 2021 09:22

Новая коллега осваивает работу с нашими продуктами. При этом у неё мак (целевая обстановка - Linux, полностью проверяется в виртуалке).
А у нас в репе в одном каталоге рядом registrar.cxx и Registrar.cxx.
Коротко:
1) head с явным указанием имени - показывает оба с разным содержимым.
2) ls пишет только один из них, Registrar.cxx.
3) "причем я клонила ( Read more... )

Leave a comment

Comments 17

vitus_wagner May 7 2021, 07:00:53 UTC
А у них на маке все так.

Хотя, конечно часто приходится пинать разработчиков, привыкших к хорошему, чтобы писали совместимо с mentally impaired OS.

Reply

gul_kiev May 7 2021, 07:21:03 UTC
Файлы registrar.cxx и Registrar.cxx в одном каталоге с разным содержимым - это хорошее?
И в каждом из них, наверное, есть переменные registrar и Registrar с одинаковым scope? ;-)

Reply

vitus_wagner May 7 2021, 07:25:09 UTC
Вот когда можно положить в один каталог файлы

ExpertSexChange и ExpertsExchange и их никто не перепутает - это точно хорошее.

Еще, конечно вспоминается пара

TheRapist и Therapist.

Но любой полезной возможностью можно воспользваться во зло. А если нельзя, значит она бесполезная.

Reply

netch80 May 7 2021, 12:07:04 UTC
Там registrar это main() с обвязкой, а Registrar это класс хэндлера событий от стека.
Нет, переменных таких в глобальном скоупе нет :)

Reply


gul_kiev May 7 2021, 07:09:11 UTC
В данном случае, как это ни странно, MacOs предлагает пользователю выбрать, как ему больше нравится:

... )

Reply


gul_kiev May 7 2021, 08:30:21 UTC
У меня на маке на case-insensitive fs не получилось создать в каталоге два разных файла, отличающиеся только регистром.
Если такая возможность есть, то это похоже на багу, в результате которой файловая система перестаёт быть консистентной. Было бы любопытно воспроизвести.

Reply

netch80 May 7 2021, 12:08:19 UTC
Так в том и засада, что сама FS оказалась case senitive, а вот тулзы, которые работают над ней - нет.
По крайней мере по всем описаниям выглядит так (я не щупал).

Reply

gul_kiev May 7 2021, 12:24:42 UTC
Настолько, что ls показывает только один файл из двух на case-sensitive fs? Не верится.
Приложения не заботятся о регистре в именах файлов. Им это и не очень тривиально сделать.
Больше похоже, что на case-insensitive fs каким-то образом удалось создать два файла, отличающихся регистром, и на этом поиметь странные эффекты: при явном указании имени читается правильный файл, а при просмотре каталога виден только один.

Reply

netch80 May 7 2021, 12:36:47 UTC
Ну это не я делал, но что ты предполагаешь - что CLion и XCode обладают доступом к секретным API, которые позволяют на case-insensitive FS создать имена, различающиеся только регистром? ;)

У меня мака нет, повторить не могу. Сделали уже переименование в транке, распространяем на активные ветки.
Будет мак - попрошу рассказать в максимуме подробностей, что это было.

Но я таки ceterum censeo, что case insensitivity - зло...

Reply


edo_rus May 7 2021, 12:00:15 UTC
почему только на маке? сходу вспоминается, что как минимум в zfs есть подобные опции.
про винду я уж не говорю.

ИМХО использовать два имени файла, различающие только регистром - дурной тон, не столь ужасный, как закладываться на byte order или невыровненное чтение памяти, но всё-таки дурной.

Reply

crazy_daemon May 10 2021, 16:39:55 UTC
А еще есть UGC, и два разных пользователя (да даже и один) вполне могут залить файлы отличающиеся только регистром. Например с той системы, где эти файлы таки отличаются. Или просто из разных каталогов с той системы, где не.

Reply

netch May 20 2021, 08:42:33 UTC
> ИМХО использовать два имени файла, различающие только регистром - дурной тон

Ну вот представим себе имена из base64 (ну, '/' -> '_'). Почему нет? ;) почему FS должна мешать этому?

Reply

edo_rus May 20 2021, 12:41:23 UTC
можно подумать, что в posix сложно несуразности найти.

речь-то была не о том, как правильно проектировать api операционных систем, а про то, как жить с тем, что имеем.

Reply


andy_scott May 19 2021, 13:49:44 UTC

Leave a comment

Up