В ответ на публикацию исправления проблемы, связанной с поддержкой работы ФС Bcachefs в режиме без учёта регистра символов в именах каталогов, Линус Торвальдс заявил, что разработчики ФС видимо не способны учиться на своих ошибках, поскольку это далеко не первая проблема в коде обработки регистронезависимости...Подробнее: https://www.opennet.dev/opennews/art.shtml?num=63149
Он ещё не учёл, что в каждой новой версии стандарта Unicode появляются новые правила. Одна программа может поддерживать одну версию стандарта, а другая другую и их поведение в обработке одинаковых данных будет отличаться.
> Он ещё не учёл, что в каждой новой версии стандарта Unicode появляются новые правилаКакие например?
>> Он ещё не учёл, что в каждой новой версии стандарта Unicode появляются новые правила
> Какие например?Черт знает насчет стандарта - а например андроида дико колбасит при попытке засэйвить имена файлов с цветными смайликами.
При том иногда оно умудряется - засэйвить. Но тогда - какая-нибудь программа типа индексатора или файлменеджера начинает выдаваьт совершенно левые сообщения при попытках что-то делать с этим файлом. И наверняка в софте есть более 9000 вулнов которые можно на этой почве проэксплуатировать.
Когда видение ОС/ФС и программы расходятся это целый класс багов, desync. Типа атак на HTTP хидеры когда разный парсинг там и тут юзается для чего-то полезного атакующему. Вот тут у вас deny не сработал и файло - умыкнули, а вот тут - файло удалось переписать леваком. А вот тут - вообще удалось ваши системы заклинить. Это мощный - и забавный - класс багов. Где очень сложно понять с какой стороны подстав вообще ждать. Торвальдс набрал достаточно опыта чтобы тоже это усвоить. Чем он и крут.
Стандарт Юникода нельзя сравнивать со Стандартами языков программирования. В Юникоде кодовые позиции символов не пересматриваются. Каждый следующий стандарт привязывает к определённой кодовой позиции какой-либо символ.
... к незанятой кодовой позиции, какой-нибудь "новый" символ.
Он-то как раз и учёл. И прямо об этом говорит.
И появляются не "правила", а новые символы и новые, дополнительные интерпретации. Старое не ломается.
> Он ещё не учёл, что в каждой новой версии стандарта Unicode появляются
> новые правила. Одна программа может поддерживать одну версию стандарта, а другая
> другую и их поведение в обработке одинаковых данных будет отличаться.Он как раз в правильной точке чтобы наесться всего этого жуткого булшита досыта. И именно поэтому и выступил с такой отповедью. Он буквально сказал: разработчики пытаются найти правильное решение задачи, выкатывая исправления. Проблема в том что нельзя сделать явно кривое действие - правильным. Правильного решения этой проблемы не существует в природе. Должен же кто-то сказать это борцам с ветряными мельницами, когда они увлекшись очередной атакой на проклятого монстра - забыли что это вообще смысла не имеет?!
Больше всего мне нравятся толкователи слов учителя. Но обычно толкованием занимаются после смерти, а тут ещё при жизни. Повезло ему.
> Больше всего мне нравятся толкователи слов учителя. Но обычно толкованием занимаются
> после смерти, а тут ещё при жизни. Повезло ему.Я способный ученик. Поэтому могу взять да укатать этим классом багов в репу, без ложной скромности. Поэтому понимаю о чем он говорит. Он вот тоже - пришел к тем же выводам. Ему тоже не хочется иметь дело с целым классом вулнов из разряда "desync" на ровном месте.
Это называется не "ученик" - а, немного другим метким и резким словцом...
(настолько резким - что, не буду даже звучивать тут, да и зачистят 300% :]).
Типичная ситуация, когда борятся со следствием, а не решают проблему.
> Типичная ситуация, когда борятся со следствием, а не решают проблему.Вот Торвальдс и сказал что решать надо - проблему. Как то - наворачивание потуг придавать байтам и их комбо специальный смысл вместо того чтобы просто и брутально сохранить как есть, с минимумом ограничений ("can't contain null and /") - ведет к великому множеству дурных факапов на ровном месте.
Зеня вон даже любезно подогнал примеры файликов как вам ВНЕЗАПНО можно попробовать перезапиать файло. Или стырить его - нарушив ACL. ЧСХ в виндах точно были факапы с тырингом внеплановых файлов через HTTP сервера, черех вулны с именами. По моему даже чуть ли не в IIS не говоря уж о других :)
Удобно же когда некто deny на СуперСекретныйФайл влепил, но он все равно - скачался как суперсекретныйфайл, если софт тупанул :)
вот именно koi8r (щщщютка)
Я себе слабо представляю, чтобы у человека в паспорте были сердечки вместо букв в имени, на номерах домов и квартир мордочки кошечек и собачек вместо цифр, и ладошки с модификатором цвета кожи вместо чисел в ценниках на товарах.
Имена файлов и каталогов должны быть в усеченном подмножестве.
> Я себе слабо представляю, чтобы у человека в паспорте были сердечки вместо
> букв в имени, на номерах домов и квартир мордочки кошечек и
> собачек вместо цифр, и ладошки с модификатором цвета кожи вместо чисел
> в ценниках на товарах.Вы можете дать лекцию как делать case folding всяких умляутов и каких там еще закорючек правилдьно. А если иероглифы взять - какие вообще шансы что типовой опеннетчик напишет им case folding правильно, совпадая с мнением ФС, и
> Имена файлов и каталогов должны быть в усеченном подмножестве.
Как по мне - меня устраивает подмножество "everything except null and /". Главное не пытаться искать специальный смысл в этих байтах - и жевать их как отдала ФС. Иначе - возможно горе от ума, как с case folding.
>Вы можете дать лекцию как делать case folding всяких умляутов и каких там еще закорючек правилдьно
>Как по мне - меня устраивает подмножество "everything except null and /"Вот ты и вывел принцип для усечения подмножества - символ, для которого существует само понятие большой/маленький, строчный/прописной, upper case/lower case. Всё остальное - откладываем в сторону. Я понимаю, что для общности подхода правильней отдавать как есть, но люди - не машины, и передай мне файл D096D09ED09FD090 не выглядит удобным для человека точно. На мой взгляд, потому-то и надо усекать множество всех вариантов, когда дело касается взаимодействия машины с человеком (хотя бы до тех пор, пока человек не научится читать байты напрямую, чтобы это не значило).
Проблема в том, что идея использовать юникод в именах каталогов и файлов при всех плюсах самого юникода, принесло кучу недостатков, которые уже всем т давно очевидны.
> Вот ты и вывел принцип для усечения подмножества - символ, для которого
> существует само понятие большой/маленький, строчный/прописной, upper case/lower case.Вон там примеров навалили где с этим нифига не просто все. Юникод большой и сложный, а чтобы вызвать десинк хватит и 1 несовпадения в рюхании вон того теми и этими. Это заведомое поле для багов и вулнов и Торвальдс очень прав на тему этой маздайшины.
> подхода правильней отдавать как есть, но люди - не машины, и
> передай мне файл D096D09ED09FD090 не выглядит удобным для человека точно.Наамного удобнее когда в некоторых ведроиде половина файлов с цветастыми смайликами засэйвиться не может вообще - а которые все же могут - потом вызывают дикие глюки у программ. Вплоть до невозможности подвинуть это файло вон туда файлменеджером или неоткрытия встроенными программами.
Видимо, вот, для дружественности к пользователю какой-то процессинг сделали. И пользователь вообще недоумевает: как это, не удалось удалить файл?! Очень дружественно, теперь придумайте как этот крап из системы вообще стереть. Вот вам новый ВНЕЗАПНЫЙ квест!
> Проблема в том, что идея использовать юникод в именах каталогов и файлов
> при всех плюсах самого юникода, принесло кучу недостатков, которые уже всем
> т давно очевидны.Сам по себе юникод вообще никому и никак не мешает ибо UTF8 прекрасно вписался в "can contain anything except null and /". Но вот потуги процессить его регистр и что там еще...
> Вы можете дать лекцию как делать case folding всяких умляутов и каких там еще закорючек правилдьно.Как то ведь раньше без unicode прекрасно все жили, а кто то и ныне живёт (мин.в DOS'е).
И причём прекрасно живёт(в DOS же - лишь длины именам не хватает) - без этих всех топиковых проблем.
> А если иероглифы взять ...Пускай с ними, т.б.созданными быть по сути криптографическими глифами для узкого круга лиц изначально да и частью символов и поныне, трaхаются те кому их навязывает их власть,
- какого остальной мир должен с ними же трахаться! Да ещё в ущерб рискам безопасности себе.
Ну я вот храню фотографии с именами типа "2024-03-01 12:54:12.jpg", и каждая вторая программа (кхем, Nextcloud) начинает преобразовывать по своим правилам.
У меня в паспорте вместо "ё" написано "е". И во многих документах теперь расхождение.
Предлагают обединить не только регистры, но и "еЕёЁйоЙОйОЙойо", чтоб наверняка.
> Торвальдс сообщил, что времена FAT давно закончилисьEFI system partition уже можно в ext4 ?!!
Разрешаю!
Можешь реализовать, а мы посмотрим.
Кто сказал CoreBoot и CanoeBoot?
KogoeBoot?
Das U-Boot
U96: Das Boot
>Maximum velocity
>Das boot
>System activated
Вас юбут, а вам всё равно
>Можешь реализовать, а мы посмотрим.Уже реализовано, где-то уже не помню но скачивал UEFI драйвера для ext4,htfs,hfs,udf.
А так у многих плат в UEFI есть поддержка htfs,т.к более распространенная.
вообще можно.. но стандарт требует от производителей ефи добавлять только минимальный набор драйверов среди которых нет ехт4, но он не запрещает его добавлять а значит можно иметь ефи систем партишн на любом разделе.
А исполняемые файлы EFI в формате ELF можно?
В маке вроде hfs+? =)
В маке APFS.
но не в UEFI
на маках уже UEFI нет как такового
В смысле? Вы в курсе что если в новой системе форматировать диск в ext4 в его в старой системе (где то же есть ext4) не сможете даже примонтировать !
для переноса данных используется ext3, а для починки новой системы не используйте древний rescue. а спасти данные можно - читать то можно, только писать нельзя...
ему не надо чинить. Там на старой системе отказ монтировать из-за того, что диск отформатирован с поддержкой фич, о которых старое ядро внезапно не знает.
это да
но с другой стороны, не невыпускать же новые версии теперь
наверное можно указать уровень совместимости при создании, чтобы при смене дистриба не напороться
Монтируйте в ext2.
ESP - это ошибка
Точно!
Надо UKI сразу в ПЗУ шить. 😏
> Точно!
> Надо UKI сразу в ПЗУ шить. 😏Рассматривая мини-линуз-как-бутлоадер в SPI флешке - да ты телепат почти?!
> EFI system partition уже можно в ext4 ?!!Можно, и не только в ext4: https://efi.akeo.ie/downloads/efifs-1.11/x64/
Там ext4 нету. Но я знаю, где есть. :) Только куда их положить, чтобы заработало? (:
> Там ext4 нетуЕсть. ext2_x64.efi -- общий драйвер для ФС семейства ext*
> Только куда их положить, чтобы заработало?
Сначала по этой инструкции https://github.com/pbatard/efifs/wiki/Adding-a-driver-to-a-U... (раздел "Creating the UEFI firmware module") драйвер нужно преобразовать в формат, понятный прошивке. Потом любым рабочим способом добавляешь получившийся модуль в образ биоса, после чего прошиваешь. Только учти, что обычными утилитами модифицированную прошивку не залить -- нужно либо снимать защиту вручную (как -- гугли сам, я уже не помню деталей), либо использовать программатор.
> Есть. ext2_x64.efiИ чем этот блоб лучше виндузятских блобов?...
Ну да, времена FAT может и закончились, а вот мс до сих пор жив - поэтому секуре в бут вам всем, пока эту нежить не закопаете.
>> Торвальдс сообщил, что времена FAT давно закончились
> EFI system partition уже можно в ext4 ?!!Теоретически там хоть btrfs можно. Практически - зависит от того какие драйвера ФС в фирмвари были.
Воткните нужный драйвер в фирмварь и вперед. Вантуз правда будет в некотором удивлении и не сможет обновлять загрузчик. Но это может и хорошо :).
Куда именно воткнуть? (:
> Куда именно воткнуть? (:В образ фирмвари, куда ж еще. Да, для этого его придется перегенерять.
>EFI system partition уже можно в ext4 ?!!А почему не в NTFS? Причем легаси и некорректное преобразование? Там где нужен FAT пусть будет FAT с его требованиями.
С ext2 можно. А зачем что-то более сложное / журналируемое для раздела, который не перезаписывается или обновляется крайне редко.
Все правильно сказал. Регистронезависимость -- это Приколюха™, которую нам подложили диды. Те же самые диды, которые решили, что было бы Прикольно™, если бы IP-адреса записывались не только как десятичные числа через точку, но и как всякие там 127.1, 0x7f.0.0.1 и еще какая-нибудь ересь.
Молодому поколению похоже не объяснили, что ip-адрес это просто число. А запись числа может быть любой.
Старшему поколению походу не объяснили, что поддерживать множество способов ввода числа нужно сразу везде: во всех приложениях с полем ввода IP-адреса, во всех библиотеках, парсящих IP-адрес из строки. В итоге разные приложения/библы поддерживают разную часть Прикольного™ RFC.
А по какой причине предъява людям, придумавшим ИП, а не писателям программ втч себе?!
Потому что программы требующие 4-ре десятичных числа - тупо более авдекватны.
(почему именно десятичных? чтобы легче/быстрей визуально отличались от маски)/мимопроходил
> А запись числа может быть любой.А есть хотя бы одна причина использовать какие-то числа кроме ОБЫЧНЫХ ?
Чуви явно не видел IP-адреса IPv6. Ничего, подрастёшь и узнаешь, а пока делай ДЗ и кушай кашку
Тогда уж пиши IP6.66...
> А есть хотя бы одна причина использовать какие-то числа кроме ОБЫЧНЫХ ?Что такое "обычные" числа? Беззнаковые целые длиной 8, 16, 32, 64 бита? Знаковые той же длины? Т.н. числа с плавающей точкой? Это раз.
Два - вон там рядом новость про qbittorrent. Торрентами пользуетесь? Наверняка. А в их спецификации есть такая штука, как DHT. Где идентификатор каждого узла - число в 20 байт длинной. Более того, для работы DHT над такими числами ещё и разные операции совершать нужно - XOR, сравнение. Шифрование - тоже внезапно сплошь и рядом работа с "длинной" арифметикой. А без шифрования вы бы даже сюда не попали - сайт то скорее всего по протоколу https загружен.
> узла - число в 20 байт длинной. Более того, для работы
> DHT над такими числами ещё и разные операции совершать нужно -
> XOR, сравнение. Шифрование - тоже внезапно сплошь и рядом работа с
> "длинной" арифметикой. А без шифрования вы бы даже сюда не попали
> - сайт то скорее всего по протоколу https загружен.Более того - когда вы будете делать операции над числом 20 байтов размером - вы заодно невольно озаботитесь и endianess :) ибо есть минимум 2 способа записать такое число в память. Начиная с старшего байта, или с младшего.
> Более того - когда вы будете делать операции над числом 20 байтов размером - вы заодно невольно озаботитесь и endianess :) ибо есть минимум 2 способа записать такое число в память.Совершенно не важно, как число лежит в памяти. Результат a+b не должен зависеть от расположения байт, это гарантирует язык программироавания (например, Си). endianess появляется, когда вы хотите отправить это число на другое устройчтво.
> Совершенно не важно, как число лежит в памяти.Вообще-то важно. Ибо мы храним это число грубо говоря, как uint8_t whatever[20]. И вот тут возникает вопрос: whatever[0] это MSB или LSB этого числа? Сия договоренность также может влиять на транспортный формат. Если мы выстреливаем 20 байтов в провол - который из них будет первым в проводе? И что он представляет? Это важно для имплементера альтернативной реализации, который будет сам имплементить совместимое решение по спекам, а не "возьмите нашу волшебную фигню".
Это же будет колыхать и при чтении допустим файла в память. Потому что запись 20 байтов в файл - это запись 20 байтов в файл. Само по себе ничего не говорит как эти байты трактовать.
> Результат a+b не должен зависеть от расположения байт,
Вообще-то он таки будет зависеть от него при операции с 20-байтовым (160-битным) числом ибо делая математику "этажеркой" надо заморочиться в какую сторону carry делать.
Если что я писал сравнимую "широкую" математику. Ну напиши допустим сравнение A vs B на тему ">" или "<" не учитывая где MSB а где LSB в представлении something[20]. Это как бы влияет на то какой индекс надо первым чекать.
> это гарантирует язык программироавания (например, Си).
Покажи мне в си работу с целыми integer, размером 2^160. Вон тому типу это надо - для DHT, там адресация 160 битов. Ну и кроме всего прочего с этими числами делается математика. Конечно есть либы для big int, но тот вопрос полностью не отвалится и там - и они могут быть и не оптимальны для частного случая 1 конкретной математики фиксированной - но большой - ширины.
А еще бывает математика с КАСТОМНЫМИ правилами. Что такое "operator +" и "operator -" или например "operator > " в той или иной математике может здорово варьироваться. Если сомневаетесь посмотрите на поля галуа допустим. А круто когда "operator +" определен так же как "operator -" и результат операций - одинаковый? :)
> endianess появляется, когда вы хотите отправить это число на другое устройчтво.
У вон того кадра это DHT, там это by default. Но вообще-то оно появляется и без отправки. Скажем реализуй "operator >" без знания где у тебя MSB и LSB?!
>> Совершенно не важно, как число лежит в памяти.
> Вообще-то важно. Ибо мы храним это число грубо говоря, как uint8_t whatever[20]. И вот тут возникает вопрос: whatever[0] это MSB или LSB этого числа? Сия договоренность также может влиять на транспортный формат. Если мы выстреливаем 20 байтов в провол - который из них будет первым в проводе?В адекватных протоколах/стандартах - порядок бит и байт тоже стандартизирован собственно...
> Совершенно не важно, как число лежит в памяти. Результат a+b не должен
> зависеть от расположения байт, это гарантирует язык программироавания (например, Си).
> endianess появляется, когда вы хотите отправить это число на другое устройчтво.ЯП вам ничего не гарантирует в этом плане. Потому что порядок байт зависит от процессора. ЯП (если говорим про С/С++) вам гарантирует лишь то, что при операциях со стандартными типами результат вычислений будет корректным для данного конкретного типа данных (сейчас опускаем нюансы с обработкой переполнения типа). Потому что в большинстве случаев работа с типами диапазона 8-bit-64-bit и порядком байт "вшита" на уровне процессора. То же относится к типам float и double (для них даже отдельный сопроцессор бывает). Там есть нюансы - например 64-bit типы на 32-bit процессорах обычно обрабатываются "программно", а не "аппаратно" - я же сейчас говорю в общем и целом, про то, что актуально для архитектуры х86_64. Интересное начинается тогда, когда вам нужно всё это дело в каком-либо виде представлять человеку. Потому что вам нужно бинарное число, которое суть есть просто массив с n байт, преобразовать например в массив байт в кодировке ASCII (которая обычно для вывода чисел и используется). Т.е. вам нужно прочитать массив байт числа в определенном порядке, затем привести его к определённому основанию (например преобразовать в десятичное число, или в шестнадцатиричное) и вывести на печать в определённой кодировке. Операции приведения к основанию и перевода в кодировку обычно совмещены в единое целое.
Более того, стандартные типы чисел в С/С++ такие, какие они есть, потому что их делали на базе поведения процессоров. Поэтому в частности претензии растовиков к undefined behavior выглядят очень смешно для того, кто хоть немного понимает о чём речь. Иными словами, когда вам кто-то пытается втереть про undefined behavior для числовых типов в С/С++, знайте - этот человек просто ничего не понимает в программировании. И скорее всего продвигает чьи-то корыстные интересы. Но это так, к слову.
И да, если вам нужно передавать "сырые" байты с устройства на устройство, порядок байт может сказываться. Поэтому например для Internet Protocol (те самые ip адреса) чётко прописано, что для ipv4 адрес - это big endian 32-bit беззнаковое целое. А порт - big endian 16-bit беззнаковое целое. И если вы реализуете какой-то собственный сетевой протокол, то очень желательно сразу чётко оговаривать, в каком виде у вас будут передаваться числа.
> что их делали на базе поведения процессоров. Поэтому в частности претензии
> растовиков к undefined behavior выглядят очень смешно для того, кто хоть
> немного понимает о чём речь.Вообще-то ничего смешного тут нет. Ибо упростили жизнь комитету и имплементерам компилера - ценой дохрена левых багов которых вообще быть не должно было.
В частности то что сишка делает с signed int over/underflow и integer promition это за гранью добра и зла. И с enum - тоже.
В хрусте хватило ума хотя-бы не пытаться заметать проблему под ковер а честно пофиксить. Да, путем усложнения компилера. Но 1 раз наверное можно и подраспереться чтобы ВООБЩЕ ВСЕЙ ПЛАНЕТОЙ не огребать глупейшие баги, оптом, где их быть не должно. В C23 и соотв C++ комитет ьбакланов даже чуть попустило, signed int теперь только в twos complement можно, и все остальное noncompliant. Но, блин, долбаные пасатижи, доделать до well defined behavior ДО КОНЦА - ИХ НЕ ХВАТИЛО. Чтобы wrap в этом случае был строго регламентирован.
> Иными словами, когда вам кто-то пытается
> втереть про undefined behavior для числовых типов в С/С++, знайте -
> этот человек просто ничего не понимает в программировании.Или что вероятнее - задолбался прыгать по граблям которых быть вообще не должно было. Ибо правила си в работе с integer оставляют желать много лучшего. Это я как махровый сишник говорю. Это источник грабель.
> И скорее всего продвигает чьи-то корыстные интересы. Но это так, к слову.
Или кто-то не понял что premature optimization is a root of all evil (c) D.Knuth.
> И да, если вам нужно передавать "сырые" байты с устройства на устройство,
> порядок байт может сказываться. Поэтому например для Internet Protocol (те самые
> ip адреса) чётко прописано, что для ipv4 адрес - это big
> endian 32-bit беззнаковое целое. А порт - big endian 16-bit беззнаковое
> целое. И если вы реализуете какой-то собственный сетевой протокол, то очень
> желательно сразу чётко оговаривать, в каком виде у вас будут передаваться
> числа.Если это не оговарить - первый же имплементер альтернативной реализации покроет вас последними словами. А уж что будет на машине с другим endianess... поэтому такой подход в целом - не годится для всего что IO делает. А compute-only задач на этом глобусе не так уж и много, особенно совсем без IO с хоть чем-то.
> Вообще-то ничего смешного тут нет. Ибо упростили жизнь комитету и имплементерам компилера
> - ценой дохрена левых багов которых вообще быть не должно было.Не обижайтесь, но это именно, что смешно ;) Проще говоря, вы - живая иллюстрация моих слов. Почему - объясню чуть ниже.
> В частности то что сишка делает с signed int over/underflow и integer
> promition это за гранью добра и зла. И с enum -
> тоже.Вот это например. "сишка" ничего с этим не делает, а делает процессор. И если у вас переполнение - то вы сам себе злобный буратино, ибо не учли, что у вас числа могут "выезжать" за границы используемого типа данных. А процессор делает ровно то, что вы ему сказали делать.
> В хрусте хватило ума хотя-бы не пытаться заметать проблему под ковер а
> честно пофиксить. Да, путем усложнения компилера. Но 1 раз наверное можно
> и подраспереться чтобы ВООБЩЕ ВСЕЙ ПЛАНЕТОЙ не огребать глупейшие баги, оптом,
> где их быть не должно. В C23 и соотв C++ комитет
> ьбакланов даже чуть попустило, signed int теперь только в twos complement
> можно, и все остальное noncompliant. Но, блин, долбаные пасатижи, доделать до
> well defined behavior ДО КОНЦА - ИХ НЕ ХВАТИЛО. Чтобы wrap
> в этом случае был строго регламентирован.Ну т.е. "махровый сишник" даже не подозревает о существовании типов фиксированной длины.
Всяких там uint32_t и подобного. И не понимает, для чего нужны типы int, unsigned int, и почему они именно такие. Ну-ну.> Или что вероятнее - задолбался прыгать по граблям которых быть вообще не
> должно было. Ибо правила си в работе с integer оставляют желать
> много лучшего. Это я как махровый сишник говорю. Это источник грабель.Это вы мне как очередной, нанятый за копеечку строчить комментарии, говорите. Уж извините за прямоту. Понимаю, жизнь бывает тяжёлая, но не стоит таким заниматься. Это вам же и отольётся в будущем, когда очередной, наслушавшийся вас неофит вообразит, что очередной же "суперсовременный" ЯП решит все проблемы за него и полезет писать на нём прошивку системы управления ядерным реактором или автопилотом самолёта. А источник грабель в данном случае лишь "программист", который не понимает как это всё работает.
> Или кто-то не понял что premature optimization is a root of all
> evil (c) D.Knuth.А это здесь причём?))
> Не обижайтесь, но это именно, что смешно ;) Проще говоря, вы -
> живая иллюстрация моих слов. Почему - объясню чуть ниже.Это вы - живая иллюстрация. Антипаттернов в программировании. Живой пример как писать софт вообще совсем не надо. От юзабилити - до антибаг кодинга и ИБ! Можно выбрать любое направление - и не прогадать.
Почему? Потому что достаточно посмотреть на ваш софт. Его скрины. Сорцы и вообще.
> Вот это например. "сишка" ничего с этим не делает, а делает процессор.
Сэр, вы нифига в программировании не поняли! Если бы я хотел знать что делает процессор - я бы сишку брать не стал, и взял бы асм. Там это по крайней мере - можно. А вот именно в сишке - вы даже долбаный флаг Carry посмотреть вот так по простому - не сможете. И получается максимально дурацкая ситуация. Даже просто определить - переполнится ли вот тут или нет в сишке это тот еще квест. Особенно с дефолтными типами. Какой процент програмеров успешно с ним справляется - вы поняли! И некоторые вещи не очень криво делаются - только левыми builtin которые не стандартные. Хотя можно еще превратить код в квест по брейнфаку и посмотреть сколько програмеров облажается в его понимании. Что так no-win, что так.
В этом месте до хрустиков дошло - обернуть ручку грабель поролоном наконец. Ага, так можно было!
> И если у вас переполнение - то вы сам себе злобный
> буратино, ибо не учли, что у вас числа могут "выезжать" за
> границы используемого типа данных.Во первых можно поговорить как в сишке эти самые типы определены. И как это работает по дефолту. Int - это сколько? Переполнится он вот тут? А на другой платформе? Ответ на этот простой вопрос - знатнейший брейнфак. Особенно если еще и какие-то операции с числами делать. А с signed это вообще - минное поле.
> А процессор делает ровно то, что вы ему сказали делать.
Я никакому процессору вообще ничего не говорил делать. Это заявление применимо только к программированию на ассемблере. Сишку же я юзал как раз чтобы на ассемблере не програмить и не лезть в интимные детали конкретного процессора, получив ПОРТАБЕЛЬНЫЙ код.
> Ну т.е. "махровый сишник" даже не подозревает о существовании типов фиксированной длины.
Т.е. я ими активно пользуюсь. Особенно в фирмварях и "новых" апях моего разлива. Но и это тоже полкило грабель.
1) Promotion типов у C все равно дико горбатый и грабельный. А 1, 1U, 1UL, и 1ULL это 4 довольно разные вещи.
2) Для enum хоть какой-то намек на адекват появился - в C23. До этого вы вообще даже так с ходу не знаете - какой у этой фигни получился вот тут тип.
3) В сях так то еще есть - препроцессор. И им порой рюхают в компилтайм разные вещи. Только он - не сишка. Но - математику тоже умеет. И даже сильно больше чем математику. Он "почти тюринг полный" и на нем можно делать весьма хитрые конструкции, прелесть которых в том что все это обсчитается компилтайм, и можно сочетать понятную двуногому запись с эффективностью в run time. Проблема в том что комитет тупарей вон то к вот этому совсем никак не применял. И про эти типы препроцессор ничего не знает.
> Всяких там uint32_t и подобного. И не понимает, для чего нужны типы
> int, unsigned int, и почему они именно такие. Ну-ну.У меня этих uint32_t имхо сильно больше чем у вас. И тем не менее, баги на вон том - лезут. У почти всех. Чисто статистически. И в очередной раз затыкая "int" underflow за дидом при неожиданных (какая неожиданность!) внешних данных - это может и надоесть. И захотеться - более радикального решения этой проблемы. Так и появился хруст...
> Это вы мне как очередной, нанятый за копеечку строчить комментарии, говорите.
Мне никто ни цента за это не платит. Я просто люблю качественный софт и не люблю глупые баги и вулны на ровном месте. Так что при всей симпатии к сишке - было бы глупо игнорить недостаки или даунплеить удачные решения откровенно за@#$ших уже проблем.
> Уж извините за прямоту. Понимаю, жизнь бывает тяжёлая, но не стоит таким
> заниматься. Это вам же и отольётся в будущем, когда очередной, наслушавшийся
> вас неофит вообразит, что очередной же "суперсовременный" ЯП решит все проблемыКак я уже сказал - мой профит никак не зависит от коментов на опеннете. И хрустом я не пользуюсь. Но знаете, когда gccrs дойдет до кондиции - я подумаю на эту тему. Потому что инженерное решение задолбавших проблем - в частности пусть и ценой усложнения компилера - таки лучше чем в i++'й раз запрыгивать на те же грабли с пофигом комитета тупарей на мои (и вообще отраслевые) проблемы.
> за него и полезет писать на нём прошивку системы управления ядерным
> реактором или автопилотом самолёта. А источник грабель в данном случае лишь
> "программист", который не понимает как это всё работает.Людям свойственно ошибаться. Чисто статистически. Поэтому будет очень хорошо, если софт - подстрахует. Люди вообще - существа весьма забагованные.
>> Или кто-то не понял что premature optimization is a root of all
>> evil (c) D.Knuth.
> А это здесь причём?))При том что это, кажется, про вас... процессор ему там что-то делает. В сишке. Ога. Где в сишке абстракции чтобы состояние этого процессора вообще видеть? А, нигде? :)
> Это вы - живая иллюстрация. Антипаттернов в программировании. Живой пример как писать
> софт вообще совсем не надо. От юзабилити - до антибаг кодинга
> и ИБ! Можно выбрать любое направление - и не прогадать.
> Почему? Потому что достаточно посмотреть на ваш софт. Его скрины. Сорцы и
> вообще.Да-да, чтоб вам поверили - главное кричать погромче)) И вообще - причём здесь я и мой софт? Я вроде бы в "крутые профессионалы" никогда не напрашивался. Так, умею кое-чего. А уж оценивать программу по скриншотам - это пять. Дальше можно и не продолжать в общем.
>[оверквотинг удален]
> взял бы асм. Там это по крайней мере - можно. А
> вот именно в сишке - вы даже долбаный флаг Carry посмотреть
> вот так по простому - не сможете. И получается максимально дурацкая
> ситуация. Даже просто определить - переполнится ли вот тут или нет
> в сишке это тот еще квест. Особенно с дефолтными типами. Какой
> процент програмеров успешно с ним справляется - вы поняли! И некоторые
> вещи не очень криво делаются - только левыми builtin которые не
> стандартные. Хотя можно еще превратить код в квест по брейнфаку и
> посмотреть сколько програмеров облажается в его понимании. Что так no-win, что
> так.Что вы тут плач Ярославны разводите?)) Берите и пишите сами, чтоб не переполнялось. Сделать это достаточно просто. Или берите готовое - вон для вас библиотека gmp для длинной арифметики. Там вообще ничего не переполняется, главное чтобы памяти хватило. В общем в очередной раз подтверждается тезис: "Плохому танцору..." Далее по тексту.
> В этом месте до хрустиков дошло - обернуть ручку грабель поролоном наконец.
> Ага, так можно было!"До хрустиков дошло")) Ещё раз, библиотеки для длинной арифметики существуют не в единственном числе и не один год (а то и на десятки лет счёт пошёл уже). Там в принципе переполнений не бывает. Но у всего есть цена. Как и в Расте, всё считается программно, а значит - медленнее, чем стандартные типы. Если же говорить в целом, то единственное "нововведение" Раста - это встроенный в компилятор статический анализатор кода. Всё. Нужно ли оно? Очевидно, что нет.
> Во первых можно поговорить как в сишке эти самые типы определены. И
> как это работает по дефолту. Int - это сколько? Переполнится он
> вот тут? А на другой платформе? Ответ на этот простой вопрос
> - знатнейший брейнфак. Особенно если еще и какие-то операции с числами
> делать. А с signed это вообще - минное поле.Ещё раз, если вам нужны типы с чётко определённым размером - они есть. Берите и пользуйтесь. int нужен там, где не особо важно, какой это будет длины, главное - чтобы быстро. Если вы этого не понимаете, то вам не нужно браться за программирование. Или для начала почитать "умные" книги. Хотя, боюсь, тут уже бесполезно...
> Я никакому процессору вообще ничего не говорил делать. Это заявление применимо только
> к программированию на ассемблере. Сишку же я юзал как раз чтобы
> на ассемблере не програмить и не лезть в интимные детали конкретного
> процессора, получив ПОРТАБЕЛЬНЫЙ код.Да-да, расскажите нам про вашу квалификацию ещё))
>[оверквотинг удален]
> До этого вы вообще даже так с ходу не знаете -
> какой у этой фигни получился вот тут тип.
> 3) В сях так то еще есть - препроцессор. И им порой
> рюхают в компилтайм разные вещи. Только он - не сишка. Но
> - математику тоже умеет. И даже сильно больше чем математику. Он
> "почти тюринг полный" и на нем можно делать весьма хитрые конструкции,
> прелесть которых в том что все это обсчитается компилтайм, и можно
> сочетать понятную двуногому запись с эффективностью в run time. Проблема в
> том что комитет тупарей вон то к вот этому совсем никак
> не применял. И про эти типы препроцессор ничего не знает."В огороде бузина, а в Киеве - дядька".
> У меня этих uint32_t имхо сильно больше чем у вас.
Лежу под столом)) Жги ещё, товарищ))
> И тем
> не менее, баги на вон том - лезут. У почти всех.
> Чисто статистически. И в очередной раз затыкая "int" underflow за дидом
> при неожиданных (какая неожиданность!) внешних данных - это может и надоесть.
> И захотеться - более радикального решения этой проблемы. Так и появился
> хруст...Да и пускай себе)) Хотите - пользуйтесь. Главное - другим только не показывайте))
> Мне никто ни цента за это не платит. Я просто люблю качественный
> софт и не люблю глупые баги и вулны на ровном месте.
> Так что при всей симпатии к сишке - было бы глупо
> игнорить недостаки или даунплеить удачные решения откровенно за@#$ших уже проблем.Да не вопрос)) Пользуйтесь С++ - там большинство "проблем" решено уже давным давно.
> Как я уже сказал - мой профит никак не зависит от коментов
> на опеннете. И хрустом я не пользуюсь. Но знаете, когда gccrs
> дойдет до кондиции - я подумаю на эту тему. Потому что
> инженерное решение задолбавших проблем - в частности пусть и ценой усложнения
> компилера - таки лучше чем в i++'й раз запрыгивать на те
> же грабли с пофигом комитета тупарей на мои (и вообще отраслевые)
> проблемы.Забавно. В очередной раз удивляюсь: люди на что угодно готовы пойти, лишь бы С++ не учить))
> Людям свойственно ошибаться. Чисто статистически. Поэтому будет очень хорошо, если софт
> - подстрахует. Люди вообще - существа весьма забагованные.Да не вопрос)) Но софт от этого не спасёт, потому что тоже людьми написан.
> При том что это, кажется, про вас... процессор ему там что-то делает.
> В сишке. Ога. Где в сишке абстракции чтобы состояние этого процессора
> вообще видеть? А, нигде? :)И какое "состояние" вы там собрались смотреть?)) Ох, блин... В общем, попытка замаскироваться засчитана. На тех, кто "живой" код в глаза ни разу не видел даже подействует наверно. По остальному - не зачёт. Приходите на пересдачу))
> Да-да, чтоб вам поверили - главное кричать погромче))Это мое мнение, ибо не первый год в софтострое. ИМХО, вам стоило б умерить гордыню и трезво оценивать скиллы VS остальные.
> И вообще - причём здесь я и мой софт? Я вроде бы в "крутые профессионалы"
> никогда не напрашивался.Тогда, имхо, следовало быть скромнее в толкании "ценного" мнения "как надо" и предъявах.
> Так, умею кое-чего.
Вот исходя из реалий и прикидывайте ценность вашего мнения. Я эти реалии вижу не хуже вас.
> А уж оценивать программу по скриншотам - это пять.
По сценарию за кадром в этом месте угорают профессионалы софтостроя, минимально понимающие аспект project management или хоть азы UI/UX.
> Дальше можно и не продолжать в общем.
Это в ваших интересах, ибо в таком возрасте совершать детские ошибки человека не украшает. Если вы думали что никто не заметит - напрасно, минимально продвинутые прогармеры очень наблюдательные. Работа у них такая.
> Что вы тут плач Ярославны разводите?)) Берите и пишите сами, чтоб не
> переполнялось. Сделать это достаточно просто.Вообще-то весьма зависит от.
1) Стандарты си определены очень фривольно, много места для грабель.
2) То что на практике ожидают програмеры часто не совпадает.
3) Идея упростить жизнь авторам компилеров и спекописателям ценой кучи багов - такая себе.
4) Людям свойственно ошибаться.И вот тут было бы кстати если компилер подстраховал бы.
> Или берите готовое - вон для вас библиотека gmp для длинной арифметики.
1) Они overly generic, огроменные и здоровые и вероятно тормознее чем частная реализация.
2) По этой причине - удачи в микроконтроллер засунуть, например. Переписывать? Я не для того си юзал чтобы потом грабли асма И ТАМ собирать, сорян! Code reuse мое все, я не живу вечно.
3) Если кто-то например IO с этим делает, он от понимания структуры данных никуда не денется. Иначе это при удобном случае - сломается.> Там вообще ничего не переполняется, главное чтобы памяти хватило.
Так переполнения нас долбают - в каком-нибудь
for (int i = UserSuppliedCrap1; i < UserSuppliedCrap2; <somethng bogus>)
{
something[i] = 10;
}
...в ЛУЧШЕМ случае - будет infinite loop, из-за "never true", особенно если какие-то вычисления. Или сразу референснут something[-10], даже поймать можно было. Но "int" подразумевает что -10 в переменной ОК. А то что ее как индекс юзанули... в си штатно нет такой аналитики. Хотя внутри компилер много чего знает и пруфает в целях оптимизации. Или например оно понятия не имеет размер something. Something[100] - валидно или нет?И тем более никто не е... что int oveflow случится, VS что юзерь в UserSuppliedCrap1/ UserSuppliedCrap2 или математике по пути.
И куда вы тут - gmp? Мне вот просто интересно, как вы это запишете :). И знаете, если я буду GMP хреначить, да еще asan/ubsan влеплю - я так то и жабу или дотнет взять мог, с такий же производительностью и жором ресурсов.
> В общем в очередной раз подтверждается тезис:
> "Плохому танцору..." Далее по тексту.Статистически - переломов костей у "танцоров" многовато. Я лично патчил несколько глупых int overrun за грандами, на кривых входных данных. А то они прямые - с эфира, сети или файла - никто и не обещал.
> "До хрустиков дошло")) Ещё раз, библиотеки для длинной арифметики существуют не в
> единственном числе и не один годПроблема си не в длинной арифметике. А в арифметике int вообще и том что вокруг. Очень хреново задефайнено в стандарте. Вплоть до того что overflow signed int'а - вообще UB. Изначально из-за implementation defined формата хранения signet int, существовало минимум 2 варианта. В C23 попустило немного, оставили только two's complement. Но затребовать well defined behavior - не, таки их не хватило. Для unsigned оно при том well defined по моему "since forever", алгоритмика активно закладывается на врап, в целях оптимизации, чтобы явно и мануально не делать это.
А именно длинная математика интересна в основном тем что при желании IO этого куда-нибудь в портабельном виде все же придется определиться где LSB/MSB. И никакой gmp сам по себе этот аспект не решит в общем случае.
> у всего есть цена. Как и в Расте, всё считается программно,
> а значит - медленнее,Прелесть хруста в том что как раз - проверок в рантайме нет, просто ряд "антибажных приемов", при том половина известны и продвинутым сишникам. По части проверок debug режим примерно как ubsan в си. Релиз - так же как и си забивает для скорости на трек целочисленных операций, чудес не бывает, чекать int overrun в рантайме не бесплатно :P. Это минимум conditional какой-то надо в код врезать, прям в алгоритм.
А боров чекер... знаете, в си вы видите указатель на некую аллокацию. Аллокацию юзают из 10 мест. Вопрос прост как дрова: можно free() здесь и сейчас на ЭТО? Или это еще 3 из 10 локациям которые это референсили - еще надо? Не угадаете - будут либо утечки памяти, либо - use after free. Боров довольно элегантно решает эту проблему, форся правильный usage таких вещей с проверяемостью КОМПИЛ ТАЙМ.
Почему бы не признать что при всей мерзотности синтаксиса хруста и вендорлокнутой экосистеме, некие рациональные зерна в дизайне есть? Продвинутые сишники часть могут делать препроцессором, анализаторами и проч. Свалив явно кривые потуги в фазе компила, специфичными компилтайм ассертами. Ибо фэйл в рантайме - это прекрасно, теперь представьте что фирмвар ECU вашего авто в assert на скорости 100+ так сделает. Все еще хочется assert в рантайме?
> чем стандартные типы.
Это не особо юзабельно в базовых конструкциях языка. Плюсы на что-то такое еще реально убедить. Из них и нечто типа хруста вылепить можно. Вот прям заоверлоадив энному типу operator [] и оно будет чекать валиден ли доступ. И даже нечто типа борова изобразить можно. На сях это не особо получится в нормальном виде.
> Если же говорить в целом, то единственное "нововведение" Раста - это встроенный
> в компилятор статический анализатор кода. Всё. Нужно ли оно? Очевидно, что нет.И еще - для начала - антибажный дизайн и более удачные аннотации намерений програмера. Скажем в си все массивы - "decays to pointer" и аннотация вида void func(foo_t foo[10], bar_t bar[20]) радостно забьет на 10 и 20 и если ваш foo лишь [5] оно радостно промотается по 5 лишним элементам. Кстати лесится: void func(foo_t foo[static 10] ... - а вот так уже компилер буедет орать варнингом если foo_t foo[5] в такое попатыться. Можно еще радикальнее через struct, но - костыли же. При том у каждого свои.
> Ещё раз, если вам нужны типы с чётко определённым размером - они
> есть. Берите и пользуйтесь.Теперь объясните это, допустим, препроцессору, которым я вон ту таблицу в компилтайме заполнял, чтоб не заполнять дофига полей лапками как обезьяна а ПОСЧИТАТЬ их в компилтайм? Комитет бакланов не хватило на то чтобы то счастье распостранить ВЕЗДЕ. И integer promotion там все равно норовит при случае "int" вкостылить.
...на память об этом не так уж много кода переживет -Wconversion (gcc/clang). А ваш код - переживает?
> int нужен там, где не особо важно, какой это будет длины, главное - чтобы быстро.
При этом дофига програмеров - жестко лажает с допущениями где это (не)ок. Даже гранды.
> Если вы этого не понимаете, то вам не нужно браться за программирование.
Я думаю что вы не поняли что дедушка Кнут сказал про "premature optimization is a root of all evil". Да-да, именно про такие фортели в 95% случаев.
А на данный момент компилер очень хорошо оптимизирует код. Более того. Вы явно не смотрели что LTO может сделать на именно уровне ASM. Вы бы сами до половины оптимизаций вообще не доперли бы. Ну то-есть на куске кода в килобайт может вы его и обставите. А сделайте это 20 кило кода - и он пожалуй обставит вас, ему не обломно трекать что 2 килобайта назад удобную константу уже вгрузили и можно скипнуть вот тут вгруз регистров. Удачи такое мануально.
> Или для начала почитать "умные" книги. Хотя, боюсь, тут уже бесполезно...
Я так то - читал. И учителя у меня норм были. А потом я посмотрел как это реально применяется и какие best practices устаканились. И сделал выводы.
> Да-да, расскажите нам про вашу квалификацию ещё))
Я уже рассказал выше что думаю о соотношении вашего скилла VS чсв и ценности этого мнения.
>> том что комитет тупарей вон то к вот этому совсем никак
>> не применял. И про эти типы препроцессор ничего не знает.
> "В огороде бузина, а в Киеве - дядька".Это взаимосвязанные веши. Я могу этим препроцессором заполнить массив констант дабы не писать кучу значений - руками. Рутинная работа - для машин. Вот только благодаря ISO и тут можно граблями получить.
Да черт, я могу даже проверить в компилтайм, препроцессором, что не трогаю 33-й бит в 32-бит регистре. Только и тут можно - граблями получить. Почему все это должно быть столь криво, костыльно и хреново я не знаю, поэтому с моей стороны будет спрос на решения где нечто сравнимое сделано менее горбато.
>> У меня этих uint32_t имхо сильно больше чем у вас.
> Лежу под столом)) Жги ещё, товарищ))Нефиг бухать, тогда и под столом валяться не придется.
>> И захотеться - более радикального решения этой проблемы. Так и появился хруст...
> Да и пускай себе)) Хотите - пользуйтесь. Главное - другим только не показывайте))ИМХО, когда научитесь делать нормальные юзеринтерфейсы и код писать так чтобы глаза не вытекали - тогда и приходите с "ценным" мнением. Так просто и банально.
Я вообще хрустиков не жалую. Но признаю что мне бы хотелось некоторых фич из того что умеет хруст. Потому что в итоге я для себя часть этого переизобрел сам. Но изобретать нестандартный вел с необычными запчастями - хуже чем когда это 1 раз сделают нормально на всю толпу и доведут до ума (с этим у хрустиков пока проблемы, см отповедь в линухкернеле на тему скачайтеночнушку).
>> игнорить недостаки или даунплеить удачные решения откровенно за@#$ших уже проблем.
> Да не вопрос)) Пользуйтесь С++ - там большинство "проблем" решено уже давным давно.Вы даже близко не представляете себе какой код на плюсах я ухитрялся патчить. И что они там делали.
Тем не менее...
1) Аналог допустим borrow checking на си++ не есть стандартная фича. Я знаю проекты где нечто сравнимое сделали. Но это рвет мозг сторонним програмерам.
2) Часть вещей в C++ будет таки - в рантайме, с оверхедом.
3) Я даже не знаю кто из C++ и Rust победит в номинации "Brainfuck 2.0". Война была равна.
4) Что хуже всего - "int" и все его дурные грабли (и препроцессор) унаследованы от си.Мое частное мнение - все эти "int" давно пора сделать well defined и все левые поползновения маркировать - unsafe. Чтобы точно знать где грабли. Ставят же таблички "осторожно, высокое напряжение".
> Забавно. В очередной раз удивляюсь: люди на что угодно готовы пойти, лишь
> бы С++ не учить))Я его даже малость знаю - в объеме достаточном для прагматичного решения ряда моих задач, типа довольно круто пропатчить вон ту программу. Но он сложный. И кривой. И половина самой жесткой кривизны это как раз легаси от си. Типа позора с целочислеенными типами, и ровно те же факапы в препроцессоре.
Пожалуй хруст так то даже проще чем C++ в целом. У C++ дофига субстандартов и за годы там отросло немеряно фич. И ООП, на котором порой делают очень крутые и нестандартные абстракции.
> Да не вопрос)) Но софт от этого не спасёт, потому что тоже людьми написан.
Вообще-то из ненадежных компоенентов можно собрать более надежную чем каждый отдельный компонент - и это часть процесса. Вероятность того что облажается (компилер && человек) равна произведению вероятностей. Т.е. радикально ниже. Значит bug rate - убавится. Видите, законы природы можно использовать - себе во благо. Теорвер, например.
>> В сишке. Ога. Где в сишке абстракции чтобы состояние этого процессора
>> вообще видеть? А, нигде? :)
> И какое "состояние" вы там собрались смотреть?)) Ох, блин...В случае математики и переполнений? Флаги процессора, типа carry там всякого. А вы что подумали? На асме такое делается 1-2 командами. Но в плотном цикле это скорость порушит очень даже, и если в каком-нибудь кодеке или крипто это воткнуть - и зачем нам "дотнет № 2"? А так чтобы избирательно проверить вот только тут? Не то чтобы СОВСЕМ нельзя, но... левые builtin для этого - вообще не стандартная сишка. А без этого - програминг больше брейнфак напоминать начинает и код - что угодно, но не элегантный, простой и понятный даже обезьяне. А без этого его и половина двуногих поймет - неверно.
> В общем, попытка замаскироваться засчитана.
Не, это немного не так. Вы просто не поняли мой пойнт. Поскольку ваш опыт в софтострое - без году неделя. Это по вам - видно. Зато ЧСВ у вас - не целый отдел крутой корпы хватит.
> На тех, кто "живой" код в глаза ни разу не видел даже подействует наверно.
> По остальному - не зачёт. Приходите на пересдачу))Проблема в том что тут ученики и учителя местами перепутаны.
> Это мое мнение, ибо не первый год в софтострое. ИМХО, вам стоило
> б умерить гордыню и трезво оценивать скиллы VS остальные.Какую гордыню? Я вам про вполне конкретные вещи говорю, а вы мне про скриншоты, ага.
> Тогда, имхо, следовало быть скромнее в толкании "ценного" мнения "как надо" и
> предъявах.А чем моё мнение хуже любого другого? Вы пока что ничего конкретного в поддержку своей точки зрения не привели. Только выкрики.
> Вот исходя из реалий и прикидывайте ценность вашего мнения. Я эти реалии
> вижу не хуже вас.Прикинул, дальше - что?
> По сценарию за кадром в этом месте угорают профессионалы софтостроя, минимально понимающие
> аспект project management или хоть азы UI/UX.Да-да, жгите дальше))
> Это в ваших интересах, ибо в таком возрасте совершать детские ошибки человека
> не украшает. Если вы думали что никто не заметит - напрасно,
> минимально продвинутые прогармеры очень наблюдательные. Работа у них такая.Чего?)) Вы о чём вообще?))
> Вообще-то весьма зависит от.
> 1) Стандарты си определены очень фривольно, много места для грабель.Для сидящих в танке в танке повторяю ещё раз через дуло: стандарты такие, какие они есть, потому что аппаратная часть именно так работает. Дальше, вы хоть на голове стойте, но процессор у вас переполнение целочисленного типа посчитает именно так, как в него заложили это разработчики. И положит результат в соответствующую целочисленную переменную С/С++. Или любого другого ЯП, если в нём реализованы соответствующие типы. Поэтому в С/С++ если а + b > <max_type_value>, то undefined behavior. Обойти это можно программно, но считать в таком случае процессор будет дольше. Потому что сколько-то тактов понадобится на обработку соответствующей логики.
> 2) То что на практике ожидают програмеры часто не совпадает.Вообще плевать, кто там и чего ожидает. Читайте стандарты, там всё чётко прописано. Дополнительно - читайте документацию к компиляторам. Потому что - да. Реализация в компиляторе может не совпадать с соответствующим стандартом. Вон в clang до сих пор некоторые вещи из стандарта с++17 не реализованы (если код собирать именно с опцией c++17). Несмотря на то, что год на дворе в общем-то 2025.
> 3) Идея упростить жизнь авторам компилеров и спекописателям ценой кучи багов -
> такая себе.Никто ничего никому не упрощал. См. ответ на п.1.
> 4) Людям свойственно ошибаться.
> И вот тут было бы кстати если компилер подстраховал бы.А он и подстраховывает, но шнурки вы должны научиться завязывать себе сами. Руками. Потому что магии не существует.
> 1) Они overly generic, огроменные и здоровые и вероятно тормознее чем частная
> реализация.Ага, зато в Расте оно лучше реализовано. Верим!
> 2) По этой причине - удачи в микроконтроллер засунуть, например. Переписывать? Я
> не для того си юзал чтобы потом грабли асма И ТАМ
> собирать, сорян! Code reuse мое все, я не живу вечно.Ага, зато Растовый код где вообще ВСЕ переменные такие, вы туда засунете. Ну-ну.
> 3) Если кто-то например IO с этим делает, он от понимания структуры
> данных никуда не денется. Иначе это при удобном случае - сломается.А это тут вообще причём?
>[оверквотинг удален]
> for (int i = UserSuppliedCrap1; i < UserSuppliedCrap2; <somethng bogus>)
> {
> something[i] = 10;
> }
Ага, а до size_t мы не дочитали, так что его тоже не существует. Но оно как бы ладно. Вы с темы то не слазьте - обсуждали переполнение целочисленных типов вроде бы, а не выходы за границы массивов. Но можем и это обсудить. Правда, смысла не вижу - закончится очередной демонстрацией вашей особо высокой квалификации. А про неё и так всё понятно. Скучно в общем.
> И тем более никто не е... что int oveflow случится, VS что
> юзерь в UserSuppliedCrap1/ UserSuppliedCrap2 или математике по пути.
Все претензии - к производителям процессоров.
> И куда вы тут - gmp? Мне вот просто интересно, как вы
> это запишете :). И знаете, если я буду GMP хреначить, да
> еще asan/ubsan влеплю - я так то и жабу или дотнет
> взять мог, с такий же производительностью и жором ресурсов.
Куда-куда... На Кудыкину гору. Для начала, я на чистом С не пишу и не планирую (хотя и в нём это делается без проблем - читайте документацию по gmp). А в С++ это делается о-очень сложно. Представьте, как нужно перетрудиться, чтобы написать...
for(mpz_class i = 0; i < UpperBound; i++).
> Статистически - переломов костей у "танцоров" многовато. Я лично патчил несколько глупых
> int overrun за грандами, на кривых входных данных. А то они
> прямые - с эфира, сети или файла - никто и не
> обещал.
Сомневаюсь я, что вы хоть что-то патчили хоть раз. Если только в своём воображении.
> Проблема си не в длинной арифметике. А в арифметике int вообще и
> том что вокруг. Очень хреново задефайнено в стандарте. Вплоть до того
> что overflow signed int'а - вообще UB. Изначально из-за implementation defined
> формата хранения signet int, существовало минимум 2 варианта. В C23 попустило
> немного, оставили только two's complement. Но затребовать well defined behavior -
> не, таки их не хватило. Для unsigned оно при том well
> defined по моему "since forever", алгоритмика активно закладывается на врап, в
> целях оптимизации, чтобы явно и мануально не делать это.
Слушайте, из-за того, что вы бредятину повторите в двадцатый раз по кругу, она во что-то осмысленное не превратиться. Если нужны целочисленные переменные с фиксированным размером - используйте их. Если есть вероятность переполнения - библиотеку gmp. Всё, точка. На этом вопрос закрыт.
> Прелесть хруста в том что как раз - проверок в рантайме нет,
> просто ряд "антибажных приемов", при том половина известны и продвинутым сишникам.
> По части проверок debug режим примерно как ubsan в си. Релиз
> - так же как и си забивает для скорости на трек
> целочисленных операций, чудес не бывает, чекать int overrun в рантайме не
> бесплатно :P. Это минимум conditional какой-то надо в код врезать, прям
> в алгоритм.
А при чём тут какие-то проверки? Это раз. А два, если вы про проверки переполнения целочисленного типа, то они есть. Потому что во время компиляции вы никогда не угадаете, какие числа будут обрабатываться. Если не умеете предсказывать будущее. Можно лишь примерно сказать, что вот здесь за пределы uint64_t не выйдем, потому что нет оперативной памяти такого размера в природе. И всё в таком роде.
> А боров чекер... знаете, в си вы видите указатель на некую аллокацию.
> Аллокацию юзают из 10 мест. Вопрос прост как дрова: можно free()
> здесь и сейчас на ЭТО? Или это еще 3 из 10
> локациям которые это референсили - еще надо? Не угадаете - будут
> либо утечки памяти, либо - use after free. Боров довольно элегантно
> решает эту проблему, форся правильный usage таких вещей с проверяемостью КОМПИЛ
> ТАЙМ.
Дальше - ваш borrow checker ошибается, и всё. Вы в пролёте, потому что полагаясь на него, сами вы ничего не проверяли. А borrow checker ошибётся гарантировано. И знаете, почему я так в этом уверен? Попробуйте на досуге вызвать SEGFAULT в компиляторе gcc, который вылизывают десятилетиями. Впрочем, у вас вряд ли получится. А мне удалось. На компиляции корректного кода.
> Почему бы не признать что при всей мерзотности синтаксиса хруста и вендорлокнутой
> экосистеме, некие рациональные зерна в дизайне есть? Продвинутые сишники часть могут
> делать препроцессором, анализаторами и проч. Свалив явно кривые потуги в фазе
> компила, специфичными компилтайм ассертами. Ибо фэйл в рантайме - это прекрасно,
> теперь представьте что фирмвар ECU вашего авто в assert на скорости
> 100+ так сделает. Все еще хочется assert в рантайме?
Да я уже не раз признавал)) Ещё раз - вся заслуга Ржавых (погремуха то зато какая красивая, прям загляденье) в том, что они статический анализатор кода засунули в компилятор. Всё. Достижение сомнительное, но пусть будет. А сомнительное оно потому, что городить из-за этого целый новый ЯП - абсолютно точно не нужно. Ну а дальше начинаем смотреть, кто, как и для какой цели использует Раст. Контингент программистов - мягко говоря, с сомнительной квалификацией. Это раз. Лицензии почти всего, что на нём написано, коротко можно охарактеризовать как "покорми корпорации, а то упыри голодные". Сплошь и рядом - одна пермиссивщина. Это два. Агрессивный маркетинг - это три. И банальная логика - это четыре. Логика в том, что если С на что-то и менять, то на С++. Потому что это два совместимых и очень похожих ЯП. Вплоть до того, что современные компиляторы С почти все на С++ написаны. С++ стандартизирован давным-давно к тому же. И с помощью него можно сделать вообще всё то же, что и на Ржавом. И даже больше. Потому что на С++ написано куча библиотек. Плюс накоплен громадный опыт использования где угодно и для чего угодно. При этом оно будет быстрее работать, а с точки зрения кода - куда более читабельно.
> Это не особо юзабельно в базовых конструкциях языка. Плюсы на что-то такое
> еще реально убедить. Из них и нечто типа хруста вылепить можно.
> Вот прям заоверлоадив энному типу operator [] и оно будет чекать
> валиден ли доступ. И даже нечто типа борова изобразить можно. На
> сях это не особо получится в нормальном виде.
Да. А ещё в С++ есть нормальное ООП, нормальная реализация многопоточности (да ещё и не в одном варианте).
> И еще - для начала - антибажный дизайн и более удачные аннотации
> намерений програмера. Скажем в си все массивы - "decays to pointer"
> и аннотация вида void func(foo_t foo[10], bar_t bar[20]) радостно забьет на
> 10 и 20 и если ваш foo лишь [5] оно радостно
> промотается по 5 лишним элементам. Кстати лесится: void func(foo_t foo[static 10]
> ... - а вот так уже компилер буедет орать варнингом если
> foo_t foo[5] в такое попатыться. Можно еще радикальнее через struct, но
> - костыли же. При том у каждого свои.
А оно так и должно быть. Потому что ЯП достаточно низкоуровневый. И это, что называется, "не баг, а фича". Причём, без шуток. Оно так и задумывалось.
> Теперь объясните это, допустим, препроцессору, которым я вон ту таблицу в компилтайме
> заполнял, чтоб не заполнять дофига полей лапками как обезьяна а ПОСЧИТАТЬ
> их в компилтайм? Комитет бакланов не хватило на то чтобы то
> счастье распостранить ВЕЗДЕ. И integer promotion там все равно норовит при
> случае "int" вкостылить.
В сто тридцать первый раз - используйте типы фиксированной длины. Если вы вкорячили int туда, где требуется точный размер целочисленного типа - вы сам себе злобный буратино.
> ...на память об этом не так уж много кода переживет -Wconversion (gcc/clang).
> А ваш код - переживает?
Да. Потому что я его на сборку проверяю обоими компиляторами обычно. И не на одной архитектуре.
> При этом дофига програмеров - жестко лажает с допущениями где это (не)ок.
> Даже гранды.
Во-первых, кто сказал, что они - гранды? А во-вторых, вы сами только что написали - проблема в квалификации людей. При чём тут ЯП? Не умеете пользоваться топором - не берите его в руки.
> Я думаю что вы не поняли что дедушка Кнут сказал про "premature
> optimization is a root of all evil". Да-да, именно про такие
> фортели в 95% случаев.
Честно? Мне плевать на всех дедушек вместе взятых с высокой колокольни. Авторитет не имеет никакого значения.
> А на данный момент компилер очень хорошо оптимизирует код. Более того. Вы
> явно не смотрели что LTO может сделать на именно уровне ASM.
> Вы бы сами до половины оптимизаций вообще не доперли бы. Ну
> то-есть на куске кода в килобайт может вы его и обставите.
> А сделайте это 20 кило кода - и он пожалуй обставит
> вас, ему не обломно трекать что 2 килобайта назад удобную константу
> уже вгрузили и можно скипнуть вот тут вгруз регистров. Удачи такое
> мануально.
Это вообще тут при чём?
> Да черт, я могу даже проверить в компилтайм, препроцессором, что не трогаю
> 33-й бит в 32-бит регистре. Только и тут можно - граблями
> получить. Почему все это должно быть столь криво, костыльно и хреново
> я не знаю, поэтому с моей стороны будет спрос на решения
> где нечто сравнимое сделано менее горбато.
Как вы что-то проверите, если результат вычислений заранее неизвестен? Если все вычисления ради того и затевались, чтобы получить результат?
> Нефиг бухать, тогда и под столом валяться не придется.
Да с такими комментариями оно и не нужно - и так весело)) Ох-хо-хо...
> ИМХО, когда научитесь делать нормальные юзеринтерфейсы и код писать так чтобы глаза
> не вытекали - тогда и приходите с "ценным" мнением. Так просто
> и банально.
К вам приходить?)) Спасибо, обойдусь.
> Я вообще хрустиков не жалую. Но признаю что мне бы хотелось некоторых
> фич из того что умеет хруст. Потому что в итоге я
> для себя часть этого переизобрел сам. Но изобретать нестандартный вел с
> необычными запчастями - хуже чем когда это 1 раз сделают нормально
> на всю толпу и доведут до ума (с этим у хрустиков
> пока проблемы, см отповедь в линухкернеле на тему скачайтеночнушку).
У них не "пока", у них в принципе проблемы. По-другому и быть не может.
> Вы даже близко не представляете себе какой код на плюсах я ухитрялся
> патчить. И что они там делали.
До-о... Верю!
> Тем не менее...
> 1) Аналог допустим borrow checking на си++ не есть стандартная фича. Я
> знаю проекты где нечто сравнимое сделали. Но это рвет мозг сторонним
> програмерам.
> 2) Часть вещей в C++ будет таки - в рантайме, с оверхедом.
Да и пускай себе.
> 3) Я даже не знаю кто из C++ и Rust победит в
> номинации "Brainfuck 2.0". Война была равна.
> 4) Что хуже всего - "int" и все его дурные грабли (и
> препроцессор) унаследованы от си.
Нет там никаких граблей, есть лишь "программисты", которые не умеют читать документацию.
> Мое частное мнение - все эти "int" давно пора сделать well defined
> и все левые поползновения маркировать - unsafe. Чтобы точно знать где
> грабли. Ставят же таблички "осторожно, высокое напряжение".
Оно и так всем, кроме вас, известно))
> Я его даже малость знаю - в объеме достаточном для прагматичного решения
> ряда моих задач, типа довольно круто пропатчить вон ту программу. Но
> он сложный. И кривой. И половина самой жесткой кривизны это как
> раз легаси от си. Типа позора с целочислеенными типами, и ровно
> те же факапы в препроцессоре.
До-о... В очередной раз слышу про "кривость" С++... От тех, кто его не осилил))
> Пожалуй хруст так то даже проще чем C++ в целом. У C++
> дофига субстандартов и за годы там отросло немеряно фич. И ООП,
> на котором порой делают очень крутые и нестандартные абстракции.
Во-от... Так и скажите: "Я не осилил". Громко и чётко. Прежде всего - себе самому. Признание проблемы - первый шаг к её решению.
> Вообще-то из ненадежных компоенентов можно собрать более надежную чем каждый отдельный
> компонент - и это часть процесса. Вероятность того что облажается (компилер
> && человек) равна произведению вероятностей. Т.е. радикально ниже. Значит bug rate
> - убавится. Видите, законы природы можно использовать - себе во благо.
> Теорвер, например.
Не-а, вероятности то как раз складываются. Только не впрямую. Математику писать лень - сами разберётесь. Более того, как уже сказал, вы будете полагаться на автоматику там, где этого делать не следует. И вместо нескольких мелких, некритических ошибок, получите по итогу одну, но такую, что прям epic fail.
> Не, это немного не так. Вы просто не поняли мой пойнт. Поскольку
> ваш опыт в софтострое - без году неделя. Это по вам
> - видно. Зато ЧСВ у вас - не целый отдел крутой
> корпы хватит.
Хы))
> Проблема в том что тут ученики и учителя местами перепутаны.
И с чувством юмора беда, да.
> Какую гордыню? Я вам про вполне конкретные вещи говорю,В смысле, конкретно обсудили мою персоналию и попытались троллить? Столь же удачно как и с UI и с кодом, имхо, получилось.
> а вы мне про скриншоты, ага.
Люблю возвращать фавор в симметричном формате, так таким как вы - понятнее.
> А чем моё мнение хуже любого другого?
Тем что ваше соотношение апломба и компетентности ни к черту. Это как если бы Фукс, эксперт по картам (игральным) с чего-то стал учить вас навигации.
> Прикинул, дальше - что?
Догадайтесь сами.
> Да-да, жгите дальше))
Да это не я жгу. Вы кажется не поняли что от ноля можно двигаться в разные стороны, с разным знаком.
...
>> 1) Стандарты си определены очень фривольно, много места для грабель.
> Для сидящих в танке в танке повторяю ещё раз через дуло: стандарты
> такие, какие они есть, потому что аппаратная часть именно так работает.Какая именно "аппаратная часть" так работает? Нельзя ли уточнить, в деталях?
> Дальше, вы хоть на голове стойте, но процессор у вас переполнение
> целочисленного типа посчитает именно так, как в него заложили это разработчики.Очень интересно. А почему для signed int переполнение UB, а для unsigned - вполне себе well defined: для unsigned стандартом явно требуется конкретное поведение, с врапом, и всем пофиг как вы там реализуете это.
Раз вы решили поумничать на тему - вот и раскажите чем signed и unsigned так принципиально, отличаются что дискриминация. Я то в отличие от вас догадываюсь, и подсказал немного. Но теперь ваша очередь. Попробуйте отдуться за свой апломб.
> И положит результат в соответствующую целочисленную переменную С/С++.Простите, знаковую или беззнаковую? ;) А то это 2 довольно разных случая. Что тупо, но - это же си. Так что можно сделать well defined для одного и ub для второго.
> Или любого другого ЯП, если в нём реализованы соответствующие типы.
У любых других ЯП могут быть очень сильно свои идеи как и что.
> Поэтому в С/С++ если а + b > <max_type_value>, то undefined behavior.
То-есть стандарты вы не читали. И тем более - не видели код типа крипто, совершенно рутинно ЭТО делающий. Для unsigned, конечно, где это - специфицировано, и всем пофиг как проц и кто там сделает.
Итого: я вас поймал. Вы стандарт не читали, но задвинули мне отсебятины. Знаете в чем наше отличие? Я таки - удосужился стандарт еще и почитать, и поотвисать с теми кто мне может на эту тему реальный мастеркласс дать. После этого - а вы точно хотите об этом поговорить? Именно со мной? Будучи уверенными что вы лучше меня знаете топик? Тогда вот вам!
> Обойти это можно программно, но считать в таком случае процессор будет дольше. Потому что
> сколько-то тактов понадобится на обработку соответствующей логики.Спасибо капитан очевидность. И тем не менее. В gcc например есть нечто типа -ffast-math, чтоли, для убер-оптимизаций, если багодром пофигу. Но оно noncompliant как раз.
> Вообще плевать, кто там и чего ожидает.
А мне не плевать - на то что в результате дохрена багов и CVE на ровном месте. И я буду считать что это плохой стандарт. Имея на руках обоснования в виде CVE.
> Читайте стандарты, там всё чётко прописано.
Вы их сами - не читали. И я вас на именно этом и поймал. Ибо вы явно не в курсе что там UB только для signed, а для unsigned - well defined. С пофигом что там в каком железе, внезапно.
Более того, иногда железо вообще не совсем compliant. Скажем AVR весьма криво выглядит в си, и если попытаться там арифметику с указателями... окажется что указатели у гарвардца бывают разные, и ...
> Дополнительно - читайте документацию к компиляторам. Потому что - да.
Это не лишне. Но вы кажется не поняли что си настолько клевый стандарт что там враппинг well defined для unsigned, но ub для signed. Почему так? А ктулху его знает. Так привыкли.
Да что там. Посмотрим как определен "char". Он знаковый или беззнаковый по дефолту? А, погодите, и запись int i = 10 тоже даже не гарантирует signed оно или unsigned? Офигенный стандарт - чтобы прострелить пятку. Откуда следует что вон тот ваш совет - не катит. Сюрприз!
> Реализация в компиляторе может не совпадать с соответствующим стандартом.
Тогда это по большому счету - баг компилятора.
> Вон в clang до сих пор некоторые вещи из стандарта с++17 не реализованы
> (если код собирать именно с опцией c++17). Несмотря на то, что
> год на дворе в общем-то 2025.Да там и в GCC только недавно некоторые вещи сделали. Вот, #embed из C23 наконец завезли. Но сейчас то 2025 уже.
> Никто ничего никому не упрощал. См. ответ на п.1.
Именно что упростили. Сделав слишком дофига всего - опциональным или poorly defined. Можно начать с знаковости "char" без квалификаторов, допустим. Отличный способ сделать себе день^W мозг. А, в GCC даже ключи есть меняющие дефолт? Классно, да? :)
> А он и подстраховывает, но шнурки вы должны научиться завязывать себе сами.
> Руками. Потому что магии не существует.У вас шнурки развязались, профессор.
> Ага, зато в Расте оно лучше реализовано. Верим!
При чем тут это? В расте антибаг лучше реализован. Боров, сразу нормальные типы без идиотских рулезов промоушна и прочих типичных грабель. Из "big" типов вспоминается uint128 но он так то и в сях как GCC extension - есть. Правда не везде.
> Ага, зато Растовый код где вообще ВСЕ переменные такие, вы туда засунете.
> Ну-ну.Вообще раст засовывают в МК и его как таковой можно здорово обрубить. Это правда довольно такое себе. Пока. Но в целом они эти вопросы вроде решают. И через несколько лет можно будет вполне серьезно корябать фирмвари мк на хрусте, имхо.
>> 3) Если кто-то например IO с этим делает, он от понимания структуры
>> данных никуда не денется. Иначе это при удобном случае - сломается.
> А это тут вообще причём?При том что тут представление в памяти и в файле/проводе и все договоренности придется состыковать. Сюрприз!
> Ага, а до size_t мы не дочитали, так что его тоже не существует.
Он тоже в лучших сишных традциях - определен фиг знает как.
> слазьте - обсуждали переполнение целочисленных типов вроде бы, а не выходы
> за границы массивов.Внезапно, одно порой ведет к другому. Представляете, out of bounds бывает следствием факапа в математике с переменной индекса! Я лично такое фиксил за грандом. Он на определенных входных данных в "int" уходил в минуса, и ... :)
> вижу - закончится очередной демонстрацией вашей особо высокой квалификации.
Пока я вот даю эксперту мастеркласс на тему сишных типов. Он, оказывается, и это не знает, и размахивая стандартом - сам его почитать не удосужился видимо.
> Все претензии - к производителям процессоров.
Не, вот извините. Я не программирую под конкретный процессор. Я программирую под конкретный стандарт си. И поэтому претензии буду выдвигать - хреновым стандартам. Как требования стандарта натянуты на конкретный проц - мне не интеремно, это проблемы авторов компилера. А вот мне интересно чтобы стандарт не клал грабли на ровном месте.
>> И знаете, если я буду GMP хреначить, да еще asan/ubsan влеплю - я так то и жабу или дотнет
>> взять мог, с такий же производительностью и жором ресурсов.
> Куда-куда... На Кудыкину гору. Для начала, я на чистом С не пишу и не планируюА я пишу. И планирую. Хотя и гнутыми экстеншнами балуюсь. Часть из них в C23 наконец затолкали. Но и там - полумеры и костыли.
> (хотя и в нём это делается без проблем - читайте документацию по gmp).
Да нафиг мне ваш gmp вперся, по большому счету. Я и сам могу написать широкую математику. Понимая все аспекты. Я это проверял несколько раз для частных случаев, и с пониманием вон тез аспектов. Без этого понимания я б вообще в дискуссию не полез.
> А в С++ это делается о-очень сложно. Представьте, как нужно перетрудиться, чтобы написать...
> for(mpz_class i = 0; i < UpperBound; i++).Там этот класс надо - написать для начала. И если делать не совсем ректально то даже и < UpperBound не потребуется. Будет или итератор какой, или еше какой safe доступ. Который таки облажаеться не сможет/не даст. Но это все придется вкостыливать именно самому в общем случае.
> Сомневаюсь я, что вы хоть что-то патчили хоть раз. Если только в своём воображении.
Ага, и вон те роли в опенсорсных проектах мне приснились. Чойта они меня ревьюером кода взяли? Сам не понимаю. Надо было эксперта типа вас же. А что, много желающих вас ревьюером зазвать?
> Слушайте, из-за того, что вы бредятину повторите в двадцатый раз по кругу,
> она во что-то осмысленное не превратиться. Если нужны целочисленные переменные с
> фиксированным размером - используйте их. Если есть вероятность переполнения - библиотеку
> gmp. Всё, точка. На этом вопрос закрыт.Не, вот извините. Вы стандарты не читали и жесточайше спалились. Ибо не знаете что для unsigned переполнение - well defined, и на это можно уповать.
Конкретный пример? А вон в вике крипто, salsa/chacha попсовые. И вот прям там оно уповает на врап для uint32_t. Стандартный трюк для крипто и компилер ОБЯЗАН обеспечить это поведение. Иначе он - noncompliant. Видите, а стандарты то читать - полезно. Потом всякие очковтирателей можно в пень слать.
> А при чём тут какие-то проверки? Это раз.
При том что overflow например поймать. Это надо carry флаг чекнуть, лишние инструкции в общем случае.
> А два, если вы про проверки переполнения целочисленного типа, то они есть. Потому что во
> время компиляции вы никогда не угадаете, какие числа будут обрабатываться.А вот это - весьма зависит от. В общем случае да, но во многих частных - вполне. И даже в си можно, препроцессором. Круто, а? Но вам это не написали в стандарте а сами вы до такого фиг допрете. Но можно почитать скажем сорц линуха и найти пример как оно.
И вы видимо не видели что могут пруверы в современных компилерах, в целях оптимизации. То что это знание наружу не вывешивается - это как раз очень глупо.
Прикиньте, оно на раз может заметить что функция может получать на вход только 1, 2 и 10 и отпедалить пруф что вот тут проверку можно - удалить. И убрать ее нахрен. Правда, потом Торвальдс вон там кроет когда ему проверку null чрезмерно ретиво снесли :)
> Если не умеете предсказывать будущее. Можно лишь примерно сказать, что вот здесь
> за пределы uint64_t не выйдем,Вообще-то...
1) Я умею предсказывать будущее. Просто не всегда и не всегда на 100% точно.
2) А вот таки по ширине математики я обычно могу сказать ТОЧНО какие у меня максимально возможные значения. Чтобы не быть как вон те, с CVE, да и вообще, в фирмварях видите ли вредно так лажаться - потом какие-нибудь силовые ключи бахают и проч.> потому что нет оперативной памяти такого размера в природе. И всё в таком роде.
Вообще-то если я допустим жую 32 отсчета с 12-bit ADC я таки могу весьма конкретно уповать что их сумма лезет в u32.
>> решает эту проблему, форся правильный usage таких вещей с проверяемостью КОМПИЛ ТАЙМ.
> Дальше - ваш borrow checker ошибается, и всё. Вы в пролёте, потому
> что полагаясь на него, сами вы ничего не проверяли.Там и еще веселее приколы есть. Вплоть до try_* всякие. Но си как таковые не решают эту проблему - никак! Да и плюсы - лишь местами. Это ведет к дофига багов.
> Впрочем, у вас вряд ли получится. А мне удалось. На компиляции корректного кода.
Надо же, в программах бывают баги.
> Да я уже не раз признавал)) Ещё раз - вся заслуга Ржавых
> (погремуха то зато какая красивая, прям загляденье) в том, что они
> статический анализатор кода засунули в компилятор. Всё.Проблема C в том что он вообще местами статическому анализу не особо поддается. Пример с [] decays to pointer я приводил. Не менее интересно void* анализировать.
Так что их заслуга - сделали более дружественный статическому анализу язык.
> будет. А сомнительное оно потому, что городить из-за этого целый новый
> ЯП - абсолютно точно не нужно.В сях и плюсах по наследству некоторые проблемы с статическим анализом особо не лечатся, стандарты так сделаны и фичи языка такие. Аннотации намерений кодера - в вещах типа void* просто отсутствуют.
> в том, что если С на что-то и менять, то на
> С++. Потому что это два совместимых и очень похожих ЯП.Совместимы и похожи они не на 100%, а за какой-нибудь reinterpret_cast хочется кого-нибудь вообще прибить нахрен.
...
> С++ стандартизирован давным-давно к тому же. И с помощью него можно
> сделать вообще всё то же, что и на Ржавом.Я даже аналоги борова видел. Но типовой C++'ер поделит на ноль с такого.
> будет быстрее работать, а с точки зрения кода - куда более читабельно.
На мой вкус C++ и Rust могут порубиться за звание Brainfuck-2.0. Простоту и элегантность си продолбали оба.
...
> Да. А ещё в С++ есть нормальное ООП, нормальная реализация многопоточности (да
> ещё и не в одном варианте).Ну тут за нормальное с вами могут поспорить. Да и спорный вопрос - баг оно или фича.
> А оно так и должно быть. Потому что ЯП достаточно низкоуровневый.
Не, вот на минуточку. Я дал ВСЕ АННОТАЦИИ НАМЕРЕНИЙ и то что стандарт не затребовал верификацию при их наличии - это факап стандарта. ЧСХ для "static N" работает же по факту! Это не error но варнингами орет шикарно. И таки - вот - видит что буфер мелкий.
Внутрях компилер еще и не такое видит. Но в силу педальности стандарта - интерфейса к этому нет.
> И это, что называется, "не баг, а фича". Причём, без шуток. Оно
> так и задумывалось.Внезапнй прострел пяток не является фичой. И при вон тех аннотациях можно математически пруфануть (не)корректность. И это даже работает. Частично! :E
> В сто тридцать первый раз - используйте типы фиксированной длины.
Расскажите как это сделать допустим в препроцессоре? А, погодите, он вообще типы не рюхает? :)
> Если вы вкорячили int туда, где требуется точный размер целочисленного типа - вы
> сам себе злобный буратино.Этих мест намного больше чем большая часть програмеров типа вас думали.
>> ...на память об этом не так уж много кода переживет -Wconversion (gcc/clang).
>> А ваш код - переживает?
> Да. Потому что я его на сборку проверяю обоими компиляторами обычно. И
> не на одной архитектуре.У gcc и clang у обоих есть -Wconversion но это специфичный свич, прозванивающий все что касается промошна, конверсий и потенциальных факапов. Только он не врублен по дефолту ибо большая часть сишного кода при этом сыпет дофига варнингов.
> Во-первых, кто сказал, что они - гранды?
Я сам это вижу. По уровню владения сишкой и уровню их алго.
> А во-вторых, вы сами только что написали - проблема в квалификации людей.
Людям свойственно ошибаться. Даже, вот, квалифицированным. Поэтому будет кстати если они аннотируют намерения а компилер прочекает что реализация и декларации совпали.
> При чём тут ЯП? Не умеете пользоваться топором - не берите его в руки.
Вон там топор - на ручку грабель насадили, стандартизаторам так проще всего было :)
> Честно? Мне плевать на всех дедушек вместе взятых с высокой колокольни. Авторитет
> не имеет никакого значения.Поэтому вы будете генерить кислотные ифейсы пополам с г@нокодом и поучать других жизни? Казалось бы что в этом плане может пойти не так...
...
> Это вообще тут при чём?Это вам небольшой реверанс на тему как машины работают. И что компилеры умеют на эту тему своим ходом.
> Как вы что-то проверите, если результат вычислений заранее неизвестен? Если все вычисления
> ради того и затевались, чтобы получить результат?Если результат вычислений заранее невзвестен - вы где-то конкретно облажались. Вероятно еще на фазе архитектуры. А, вам видимо никто и не рассказывал что лучше сначала думать, потом кодить.
> Ох-хо-хо...
Йо-хо-хо, полкило бутрома... :)
> К вам приходить?))
Ктулху меня упаси...
...
> У них не "пока", у них в принципе проблемы. По-другому и быть не может.Они хайповые. За что и страдают. Но все же ряд элегантных решений вот нащупали. А чего ради я должен игнорить прогресс типа борова вечно - хз.
>> 2) Часть вещей в C++ будет таки - в рантайме, с оверхедом.
> Да и пускай себе.А таки неудобно будет когда хрустик обгонит на повороте в бенче...
> Нет там никаких граблей, есть лишь "программисты", которые не умеют читать документацию.
Я не понимаю этой веры некоторых господ в дрессировку дувуногих. За столько лет можно было бы уже и заметить что это так не работает. CVEхи пачками соврать не дадут.
> Оно и так всем, кроме вас, известно))
Я и вижу - что вы лажаете с советами на ровмно месте. Видимо не читав стандарт, так что даже не в курсе что врап signed и unsigned это 2 большие разницы.
> До-о... В очередной раз слышу про "кривость" С++... От тех, кто его не осилил))
Осиливать эту штуку в полном объеме - надо МакЛаудом быть. Особенно если нескольких стандартов, они довольно круто менялись по ходу пьесы.
А, да, сишникам тоже auto завезли. Прикол в том что у них до этого auto тоже было, но другое :)
> Во-от... Так и скажите: "Я не осилил". Громко и чётко. Прежде всего
> - себе самому. Признание проблемы - первый шаг к её решению.У меня стойкое ощущение что вы не осилили все это - еще жестче, но пытаетесь меня чему-то учить. А вот это - EPIC FAIL.
> Не-а, вероятности то как раз складываются. Только не впрямую.
С фига ли? Если я могу повесить баг с вероятностью X и компилер ловит баг с вероятностью Y то в целом вероятность что баг долетит до юзера (X * Y). Потому что надо чтобы не сработали оба условия. Но с теоврером у вас не лучше чем с стандартами кажись. Оок!
> мелких, некритических ошибок, получите по итогу одну, но такую, что прям epic fail.
И обоснование этого ... что?
>> Проблема в том что тут ученики и учителя местами перепутаны.
> И с чувством юмора беда, да.Ну, э, много у вас поклонников вашего юмора? Так, для статистики?
О-хо-хо... Ладно, я понял - весна виновата. Время сложное для некоторых людей, ничего не поделаешь. В общем извините, но строчить очередную простыню на ваше эм... мнение мне лень. Да и сказал я уже всё, что хотел. В очередной раз по кругу обсуждать одно и то же - не вижу смысла.
> и сказал я уже всё, что хотел.Как же мы все рады... А, то уже колёсико мышки от прокрутки вашего DDOS читателей дымится.
> Как же мы все рады...Кто это - "мы"? У вас раздвоение личности? Растроение? Расчетверение? 😱 И зачем вы всё это читаете?
один вредина зачистил тебе ответ (без нарушений правил любых)
> Более того, стандартные типы чисел в С/С++ такие, какие они есть, потому что их делали на базе поведения процессоров. Поэтому в частности претензии растовиков к undefined behavior выглядят очень смешно для того, кто хоть немного понимает о чём речь.Ты совершенно не понимаешь в чем проблема с UB для целочисленных переполнений в С. А проблема в том, что умный компилятор без предупреждения выбрасывает код "опытного" программиста вроде такого:
// Должно сработать, ведь С это переносимый ассемблер, правильно?
if (a + b < a) {
//overflow...
}
либо заменяет его "эквивалентным":
if (b < 0) {
//overflow?
}не смотря на то, что программист знает ассемблер и точно знает, как на его целевой архитектуре (на любой современной!) переполняются целочисленные.
>Иными словами, когда вам кто-то пытается втереть про undefined behavior для числовых типов в С/С++, знайте - этот человек просто ничего не понимает в программировании.
Давай, рассказывай, чего надо преисполниться в программировании, чтобы считать такое поведение нормальным.
Ну всё, набежали... Ребята, я вам уже пару раз говорил - методичку смените, а то надоели со своим бредом.
> Ты совершенно не понимаешь в чем проблема с UB для целочисленных переполнений
> в С. А проблема в том, что умный компилятор без предупреждения
> выбрасывает кодЭм. Так ведь оптимизации компилятора не имеют никакого отношения к UB языка.
>Эм. Так ведь оптимизации компилятора не имеют никакого отношения к UB языка.Имеют, непосредственное. Оптимизации применяются исходя из предположения, что в коде нет UB.
> Более того - когда вы будете делать операции над числом 20 байтов
> размером - вы заодно невольно озаботитесь и endianess :) ибо есть
> минимум 2 способа записать такое число в память. Начиная с старшего
> байта, или с младшего.Именно.
16тиричная система не так уж и плоха для адресов от 00 до ff в каждом из 4 сегментов адреса. 7F.0.0.1 или C0.A8.0.1 выглядит ничуть не хуже десятичной системы, даже как-то лаконичнее.
Суть не в том, хуже или лучше шестнадцатиричная запись десятичной. А в том, что вариант должен быть один, потому что это стандарт. Нет ни единой причины использовать много вариантов там, где можно использовать один. Было бы сэкономлено много человеколет, если бы стандартодатели выбрали бы один вариант для записи ip-адреса.
> Суть не в том, хуже или лучше шестнадцатиричная запись десятичной. А в
> том, что вариант должен быть один, потому что это стандарт.Тогда это должен быть хекс, вероятно. Ибо представлять байты как именно десятичные значения - тот еще изврат. Это и парсить не особо удобно, и тому как хранится не соответствует.
> Нет ни единой причины использовать много вариантов там, где можно использовать один.
В IPv6 придумали, блин, сразу несколько причин. Увы и ах.
> Было бы сэкономлено много человеколет, если бы стандартодатели выбрали бы один
> вариант для записи ip-адреса.Бы - не считается. Скажем для v6 сокращенная форма есть. Или еще вариант для link local. Не очень хорошо с их стороны но где ж вы тогда были?
> Тогда это должен быть хекс, вероятно.Соглашусь.
> В IPv6 придумали, блин, сразу несколько причин. Увы и ах.
Адрес ipv6 очень длинный, причём зачастую состоит на половину из нулей. Это веская причина.
> Скажем для v6 сокращенная форма есть.
И эта форма простая и понятная; и для человека, и для парсера. Других форм нет. Стандартизёры явно учли ошибки прошлого.
> выглядит ничуть не хуже десятичной системы, даже как-то лаконичнее.Речь про сопровождение двух взаимоисключающих форматов записи.
Есть куча кода, для которого ip адрес это четыре байтовых числа через точку.
Твоё удобство и лаконичность я поддерживать не собираюсь
> Есть куча кода, для которого ip адрес это четыре байтовых числа через точку.Вот это, как раз, и нестандартное использование IP адреса. Ведь известно, что IP адрес - это 4х байтовый беззнаковый int.
>> Есть куча кода, для которого ip адрес это четыре байтовых числа через точку.
> Вот это, как раз, и нестандартное использование IP адреса. Ведь известно, что
> IP адрес - это 4х байтовый беззнаковый int.Int - это как правило нечто вообще хзкакого размера и endianess. А IPv4 это вполне себе 4 байта в вполне конкретном порядке. И нехило это как раз подчеркнуть.
Для IPv6... ну вы его по другому и не захотите особо записывать. Ибо если вы попробуете это как uint128 напечатать, да еще ктулху упаси в десятичной системе ... ух... удачи! Как видите этот номер как раз - не работал.
Разделение на октеты важно, оно позволяет видеть некторые вещи на глаз, скажем "тот же это subnet или нет". Удобно, быстро, визуально. Вы охренеете с какой скоростью devops ворочают такие вещи.
IP без маски ничего не стоит. Как его доставлять, в какую подсеть?
C0.A8.00.01если уже быть точным, в 16-ричной обычно пишутся все разряды, даже нулевые
а обычные у вас это какие числа?
> у васЗайди в магазин, купи 0xFA3 гвоздей
> Зайди в магазин, купи 0xFA3 гвоздейНахрен тебе их столько? В таком количестве их обычно уже на вес норовят продавать. Кто ж их будет пересчитывать в таком объеме? :)
@то в штуках, килограммах, а может быть в фунтах ?
>Зайди в магазин, купи 0xFA3 гвоздейЕсли покупать в маркетплейсе, то может быть предусмотрен преобразователь из hex
Эффективное хранения в памяти.
Для IPv4 ровно 4 байта нужно.
Да оно так и в любой системе и хранится, но интерпретация этих 4 байт может быть разной.
Есть разные нотации одного и того же числа (двоичная, восьмеричная, десятичная, шестнадцатеричная, с 8-битными полями, разделенными точкой и др)
>А есть хотя бы одна причина использовать какие-то числа кроме ОБЫЧНЫХ ?hex-редакторы придумали и применяются не зря. Там используется hex-нотация, потому что удобно.
IP адрес удобно представлять как двоичное число, потому что сейчас применяется "плавающие" маски сети. Вот пример: CIDR: 142.250.0.0/15
>>А есть хотя бы одна причина использовать какие-то числа кроме ОБЫЧНЫХ ?
> hex-редакторы придумали и применяются не зря. Там используется hex-нотация, потому что удобно.А знаешь, что ещё удобно? Когда не нужно открывать хекс редактор.
Так IP и так записывается "обычными", десятичными числами. Четыре байта, каждый записывается десятичным числом. Это просто четыре байта, четыре числа, четыре символа. Как его ещё записывать?
Некоторые из четырёх символов делают пятнадцать и героически это преодолевают...
Попробуйте попинговать адре типа 192.168.0.10 и 192.168.0.010. Меня результат удивил.
Во втором случае ping идет на 192.168.0.8. Почему?
Подсказка: ping 192.168.0.0x10
Т.е. программу не смущает, что часть нужно интерпретировать в десятичном формате, и часть в шестнадцатиричном? Видимо, есть какой-то алгоритм, т.е. каждый октет по порядку проверяет на принадлежность к системе счисления.
Внезапно 010 - это число в восьмиричной системе. Если в десятичную перевести как раз 8 будет. Вообще программирование это про числа а не так как сейчас многие привыкли....
>Внезапно 010 - это число в восьмиричной системе.Это оговоренная нотация числа восемь. Где возможно обозначают подстрочником.
какой еще подстрочник? каакя нотация ?
числа начинающиесь с 0 в Си соответственно во многих шелах интерпретируются как восьмиричные
Во всяких устройствах с недоношенным вводом, типа телевизоров, одно-двухзначные адреса как раз добиваются нулями в начале. И при этом работают как без нулей.
Видимо, это от самой программы зависит то, как она обрабатывает входные данные.
> 0x7f.0.0.1ужас. кошмар. Но я знаю одного человечка, который в HTTP статусах возвращал 0x404 и 0x200.
Он думал, что хакеры вот так по крутому числа пишут, наверное
Не мог он возвращать 0х404. На что вы намекаете? Говорите прямо
> Не мог он возвращать 0х404. На что вы намекаете? Говорите прямо
>> Не мог он возвращать 0х404. На что вы намекаете? Говорите прямо
> https://paste.pics/800754f3080456c9627bfe0ef0180452Это видимо дотнетчик был, или накрайняк жабист, судя по коду который с трудом влезает на экран на здоровенном мониторе.
> 0х200HTTP статус-код 512 не является стандартным кодом; он был предложен для использования в определенных приложениях, чтобы указывать на ошибку сервера, когда произошла хотя бы одна ошибка.
Мдя..
Вас это удивит, но наберите в браузере http://3644916501/63149
Однако
молодец. Теперь бери этот айпишник - 3644916501 - и попробуй его вводить во все остальные проги: настройки прокси-сервера, нетворк-менеджер, какой-нибудь ip route add, cli докера, пинг, а еще вот сюда: https://www.wikihow.com/images/thumb/2/25/Find-Your-Subnet-M...
Поэтому и изобретают json, потому как думают, что всё должно быть читаемым. Им же не приходит на ум, что процессор видит только числа и никаких скобок и прочего.
> Поэтому и изобретают json, потому как думают, что всё должно быть читаемым.
> Им же не приходит на ум, что процессор видит только числа
> и никаких скобок и прочего.И его тоже полностью в полном виде - как generic - корректно от и до не парсит почти никто из существуюшего софта :). А реакция на "нежданчики" у софта бывает самой разной. Экспериментируйте - и вы найдете много вещей которых эти, которым не хочется напрягаться, забыли предусмотреть. Это позволит вам извлечь море лулзов.
Ну вот например я какого-то бота подвесил насмерть. Он просто не ожидал мой формат выхлопа и кажется очень увлекся парсингом. Посмотрим как такой оборот его владельцу :)
ping 3644916501 вполне работает
Это что такое?!
Меня это ОЧЕНЬ удивило, спасибо.
Меня удивляет что это кого-то удивляет. И много ли тут людей меньше 20?
"Экслера не читали" (с) что там было про обходы сквида ? Сколько там прошло - лет 20-25 ?Ну что, новое поколение пытается пройтись по тем же граблям :-)
И это неплохо, раз читать они так и не научились.
>Вас это удивит, но наберите в браузере http://3644916501/63149http://033120201425/63149 то же самое.
http://0xD9410315/63149 то же самое.
Всё равно ip адреса маршрутизируются в устройствах, работающих с двоичным представлением.
Ну вот маску подсети можно было бы как-то проще делать или наоборот - более интересно. Хорошо хоть короткую преамбулу придумали и на этом спасибо.
Ну дык пиши netmsk 0xffffff00
Жиза, только сегодня пришлось иметь дело с renpy и файлы были в рандомном регистре повсюду. Часто с электроном то же самое.
Пингвин прав - регистронезависимые имена файлов это сознательное упрощение для первых неискушённых пользователей персональных компьютеров времён MS-DOS с кодировкой ASCII, чтобы им было проще освоить диковинную чудо-технику. Но сейчас-то все уже прошаренные - называют файлы большими и маленькими буквами, некоторые даже с пробелами)) Зачем тащить этот анахронизм в сегодняшнее время? Тем более в юникоде понятие регистра действительно крайне расплывчатое...
Некоторые даже в национальных кодировках, прикинь! Но, как правило - не ъ. Третьего дня мне тут пара человек зачесывала кто за название книг транслитом, кто против имен возможности имена пользователя\пароли в кодировках, отличных от дефолтной протестовал, кто на Power-Shell ругался...
В общем, те-о-ре-ти-чес-ки да, но нет.
Ага ! А ещё и с помощью эмодзи (где там птичий язык ?) ...Даёшь приведение эмодзи в нижний регистр !!! И чтоб библиотека была на языке, который нельзя называть !
Даже ASCII далек от адекватного. Что уж говорить про Unicode.
Но ведь и в ext4 недавно добавили nocase: https://www.opennet.dev/opennews/art.shtml?num=50581
Опционально. Очевидно - для узких нужд.
> Опционально. Очевидно - для узких нужд.А кстати, для каких? Всегда было любопытно
Для совместимости с уже существующими решениями.Например, при монтировании сетевой виндовой шары как cifs, регистр не учитывается.
Сервис, который с ней работает, ищет файлы по имени, а расширения перебирает по типам всегда в нижнем регистре.
Потребовалось сделать зеркало сервиса вместе с данными.Так как расширения у файлов стандартные и латиницей, но встречаются в любом регистре, а имена числовые, то было решено отформатировать раздел с этой опцией. Это позволило rsync-ом забирать только дельту.
Сами файлики выгружаются из ИС с сохранением исходного расширения, а добавляются пользователями. За годы работы их накопилось весьма много.
Разработчикам ушел запрос на доработку экспорта, по пока не переделали.
Тут скорее имело бы смысл сделать запрос на доработку поиска (игнорировать регистр расширений).Кейс понял, но если уже есть зеркало, приведение к нужному виду по идее решается массовым переименованием сначала с одной стороны, потом с другой, с переключением на одну файловую систему пока обрабатывается другая.
На самбе, емнип, все эти штуки с регистром и автоконвертацией имён решались настройками сервера.
в комплект к вайну. когда пытаешься виндовое что-то копировать, типа патча поверх, то может оказаться всё в разных регистрах
> А кстати, для каких? Всегда было любопытноЯ в код не смотрел, но подозреваю, что след тянется к Майкрософт. Они ж в последнее время активно начали в Линукс влазить и использовать его у себя. А имена файлов и папок без различия регистра - это именно их детище.
> но подозреваю, что след тянется к Майкрософт.Так и есть.
https://static.sched.com/hosted_files/osseu2020/ea/Gabriel_K...
Ах, да. Страница 10.
Маки тоже по дефолту apfs в case insensitive форматирует.
Регистры нужны сугубо для человека, машине вообще поx, что ты там и как назовёшь.
Но по факту когда хуман ищет файл, ему ВСЁ РАВНО, какой там регистр! Он его не помнил никогда и не должен. Просто найди "фотки ДР 2005" - ЗАЧЕМ тут регистр?!?!
Всё верно сказал!
сердечки в юникоде еще и размер меняют?
>сердечки в юникоде еще и размер меняют?Не понял вопроса? Есть кодовая позиция, она может быть занята определённым символом, либо может быть незанятой, свободной. Если красному и чёрному сердцу отвели определённые кодовые позиции, то это разные символы. Если например, не вдаваясь в подробности просто, символ "сердце" привязяли к определённой кодовой позиции, и нет других привязок с графичеим русунком в форму сердца. То тогда все сердца разных форм и цветов будут считаться одним символом. Такова анатомия Юникода. Всё дело в привязке: "кодовая позиция = графический рисунок".
Сердечки в имени файла. Это мы заслужили. За такое надо было бить по рукам с самого начала, а теперь все эти dei расплодились.
> За такое надо было бить по рукам с самого началаА за умляуты в имени файла тоже? Это же такая наглость желать писать слово правильно!
А за иероглифы тоже?Слава богу таких даунито как ты никто не слушал. И позволили писать то, что они хотят.
Сперва сердечки разных цветов, потом буквы разных цветов. Это же круто, мы же всё можем. И причем тут национальные алфавиты? Там есть сердечки?
Бессердечные алфавиты!
Это не национальный, это женский алфавит. На нем девочки пишут, а ты тут со своей программистской логикой лезешь
>>> Сердечки в имени файла.
>> За такое надо было бить по рукам с самого начала
> А за умляуты в имени файла тоже?В первую очередь, бить надо за подобную гнилую софистику, когда демагог приравнивает спецсимволы (НЕ применяются для записи слов) к буквам (используются для записи слов) с целью развязать тупой спор.
> (НЕ применяются для записи слов)каким кодом в юникод закодирована "Ritratto di Monna Lisa del Giocondo"?
Советую перечитать и попробовать выдернуть из контекста более подходящее.
Не вижу приципиальной разницы между буквой, иероглифом и сердечком. И то, и другое, и третье имеет совершенно произвольное значение, определяемое культурой. Названия файлов для компьютера бессмысленны в любой кодировке с любым набором символов. Для человека же все эти закорючки имеют субъективное значение, и поскольку задача компьютера быть удобным инструментом, вводить произвольные ограничения на набор символов контрпродуктивно. По техническим причинам необходимы маркеры иерархии (разделители путей, возможно имена томов/дисков), но и только. Должен ли и этот маркер выбираться пользователем произвольно, или должен быть однозначно определён на уровне ФС — вопрос открытый, но не принципиальный. Я считаю полезной иметь возможность давать символам произвольные значения, а кому-то — как мы можем видеть по комментариям — и 8.3 непозволительная роскошь.
С чего бы анониму решать это? Хочу и использую, вот, держи 🤡
А за Unicode куда бить?
> Не понял вопроса?ну вот у "а" и "А" одна и таже буква, имеют разные коды, и мы говорим что "А" это буква "а" большого размера (верхнего регистра). Ну вот с буквами понятно, а понятие регистра разве у сердечек есть? "Красное сердечко" никоим образом не является "регистром" "черного сердечка", это два разных символа.
Строго говоря Юникод не знает таких понятий как "верхний регистр", "нижний регистр". Есть кодовая позиция, и есть прявязанный к конкретно данному коду, символ. И всё! Термины: "регистр", "глиф символа", "кегль", "шрифт" относятся к типографике, а не Юникоду.
Юникод оперирует такими понятиями, как направления письма (левое, правое), можно ли один символ комбинировать с другим символом (диакритика), тип разрыва строки.Кириллическое А = U+0410 - а это его кодовая позиция.
Кириллическое а - U+0430
Латинская A - U+0041
Латинская a - U+0061
Прям какой-то антипатерн "dont repeat your self" получается...
Это про
U+0410 и U+0041
U+0430 и U+0061
Если что
Сами-то символы одинаковые
Комитет стандартизирующий Юникод очень экономно подходит к "расходованию" кодовых позиций. Если комитет решил, что латинское "A" и кириллическое "А" разные символы значит на то были веские основания. Когда решают поместить какой либо символ в состав Юникода, тщательно изучается история данного символа.
Значит г____но это, а не комитет. Очевидно же, что почти половина кирилицы схожа с латиницей:
АВЕКМНОРСТУХ - это всё русские символы, которые МОЖНО заменить латинскими. Но никто это не сделал. Ну и накуль нужóн этот комитет, который "тщательно изучал историю"?? Изучал, да ни___я не изучил. В результате даже 16-битного юникода нехватило - полезли в 32-битный.Я считаю, что в текущем виде юникод - это позорище ИТ. Так же как USB и x86.
А как вы объясните zalgo ?
> Строго говоря Юникод не знает таких понятий как "верхний регистр", "нижний регистр". Есть кодовая позиция, и есть прявязанный к конкретно данному коду, символ. И всё!Никто с этим не спорит, ибо юникод это средство кодирования символов того или иного алфавита языков, и других неязыковых (неграфических) символов. Вот смотрите:
//ru.wikipedia.org/wiki/Русский_алфавит
"""
Ру́сский алфави́т (ру́сская а́збука) — алфавит русского языка, включающий 33 буквы.
"""Ну это что за ересь? 33 звука - а не символа (буквы), ибо символы в таблице ниже там с разным регистром.
Аа, Бб, Вв, ... - и сколько в итоге букв? вот столько же и кодов в юникоде, и есть соглашение, что код условно 0001 - это символ "А", а 0002 - символ "а" это один и тот же звук в разном регистре. Для чего вообще придумали регистр символов это вообще другая тема обсуждения.
Но те же сердечки будучи символами условно "смузихлебного" алфавита разве имеют понятие регистра? "Черное сердечко" и "Красное сердечко" это два разных регистра одного сердечка получается? Или все же есть "Большое красное сердечко" и "маленькое красное сердечко"?
"""
(например, кто-то считает символы "❤" и "❤️" одинаковыми в режиме без учёта регистра, а кто-то нет)
"""с какого бодуна? разве не алфавит того или иного языка об этом должен говорить? Алфавит "смузихлебного" языка говорит, что это разный регистр одного сердечка?
> 33 звукаЕ, Ё, Ю и Я все вместе мерзко хихикают, рядом прыскают от смеха Ц и Щ, а Ь и Ъ смотрят молча, с недоумением.
> Е, Ё, Ю и Я все вместе мерзко хихикают, рядом прыскают от
> смеха Ц и Щ, а Ь и Ъ смотрят молча, с
> недоумением.то есть вы не издаете звуки при чтении этих букв?
> то есть вы не издаете звуки при чтении этих букв?Звуки то он издаёт. Только вот звуков в алфавите чуть больше, чем вам кажется. Е, Ё, Ю, Я - по два звука. Подучите фонетику родного языка;)
Вот такой даже придумали :)//ru.wikipedia.org/wiki/Фонетический_алфавит
> Только вот звуков в алфавите чуть больше, чем вам кажется. Е, Ё, Ю, Я - по два звука.
42 звука - там твердые мягкие и всякая ересь.
> Подучите фонетику родного языка;)Не родной он мне вовсе. Спросим у чатгопоты:
"""
сколько звуков было до внедрения буквы твердый знак и мягкий знак?-----
До внедрения твердых и мягких знаков в старорусском языке было несколько особенностей в произношении и письменности, но в целом их появление связано с реформами, произведёнными в XI-XIV веках.
До этого времени в русском языке не было выделения мягкости в произношении согласных так, как это стало возможным с помощью мягкого знака (ь) и твёрдого знака (ъ). Но важно отметить, что гласные звуки и некоторые согласные существовали и без этих букв.
Вот как это выглядело:
До внедрения твёрдого и мягкого знаков:
Звуков было меньше — многие звуки, которые позже стали мягкими или твёрдыми с помощью этих знаков, просто не различались по звучанию. То есть, не было необходимости в разделении звуков типа [т'] (мягкое т) и [т] (твёрдое т).Мягкость и твёрдость согласных в значительной степени стали диакритическими знаками позже, когда язык стал более строгим в разделении этих звуков. В старославянской письменности (когда появлялись первые кириллические алфавиты) мягкость передавалась с помощью особых букв (ь и ъ) и через контекст.
Количество звуков было меньше, поскольку:
Многие звуки не делились на твёрдые и мягкие.
Мягкость согласных (например, [к'] или [д']) передавалась просто по контексту и не обозначалась отдельно.
Как выглядело количество звуков до этих знаков:
В русском языке было примерно 35-36 звуков (без учёта твёрдого и мягкого знаков).Однако после внедрения этих букв их количество увеличилось, так как твёрдый знак и мягкий знак стали как бы разделять пары твёрдых и мягких согласных.
Что именно изменилось с введением знаков:
В старославянском и более древних вариантах славянских языков не было чёткого разделения на мягкие и твёрдые согласные. Эти звуки не передавались с помощью конкретных букв.С развитием языка и внедрением мягкого и твёрдого знаков появилась возможность чётко различать пары звуков, такие как [т'] и [т], [с'] и [с], [к'] и [к].
Таким образом, до внедрения ь и ъ звуков было меньше, так как мягкость и твёрдость не отделялись так явно. Мягкий и твёрдый знак стали обязательными элементами, благодаря которым звуков стало больше.
Надеюсь, это объяснение помогает! Если хочешь более подробную информацию о развитии этих звуков, могу рассказать!
"""
вот так вот :)
> Вот такой даже придумали :)
> //ru.wikipedia.org/wiki/Фонетический_алфавитДа, я в курсе. Не знаю как сейчас, раньше этому в школе обучали. Классе в 7-8 примерно, если я правильно помню. Подзабыл уже за давностью лет))
> Не родной он мне вовсе.
Тогда извините - вам простительно. А какой родной? Если не секрет, конечно.
> вот так вот :)
Последняя значительная реформа правил русского языка была после Революции. Лучше ориентироваться на неё.
> А какой родной? Если не секрет, конечно.Нахско-дагестанская языковая семья
> Последняя значительная реформа правил русского языка была после Революции. Лучше ориентироваться на неё.
а тотальное уничтожение нахско-дагестанской языковой семьи началось еще во времена аннексии Кавказа.
> Нахско-дагестанская языковая семьяЯсно.
> а тотальное уничтожение нахско-дагестанской языковой семьи началось еще во времена аннексии
> Кавказа.Вопрос сложный. РИ с одной стороны "тюрьмой народов" не зря называли. С другой... Все, существующие сегодня языки, со временем исчезнут. Это объективный процесс. По одной из двух причин - либо ввиду смерти носителей, либо из-за того, что человечество сольётся в единое целое. Т.е. будет один единый язык. Скорее всего некая смесь из ныне существующих. Каких и в какой пропорции - сказать сложно.
> Вопрос сложный."Кирилизация" это по вашему что? Или "Большинство языков нахско-дагестанской семьи бесписьменные" это откровенная ересь.
"""
До установления советской власти некоторые народы Дагестана использовали аджам — адаптированную арабскую письменность.Сохранилось некоторое количество письменных источников XVII—XIX веков на аварском, лакском, лезгинском и некоторых даргинских языках, использующих аджам[15]. В 1929 году советская власть ввела в качестве официальной письменности для языков Дагестана латиницу, но уже в 1939 году латиница была заменена на алфавиты на основе кириллицы.
"""Короче, тема не для опеннета.
Как ты решил, что регистров может быть только два? У «смузихлёбного» алфавита вполне может быть произвольно большое количество регистров, и в этой системе "❤" и "❤️" могут быть представлены как сердечко в «чёрном регистре» и «красном регистре».
> Как ты решил, что регистров может быть только два?Я и не решал, повторяю:
"""
с какого бодуна? разве не алфавит того или иного языка об этом должен говорить?
"""
Кроме того есть буквы которые имеют по 2 варианта. То есть строка если преобразовать в верхний, а потом в нижний регистр не будет равна самой себе. Кроме того может не совпасть даже длина, потому что есть хитрый символ, который преобразуется в 2 символа. Короче с юникодом всё сложно, поэтому правильно Линус говорит, что регистронезависимые ФС это костыль.
> Такова анатомия Юникода. Всё дело в привязке: "кодовая позиция = графический рисунок".а что есть регистр? это "кодовая позиция('a') ~ кодовая позиция('A')"
>сердечки в юникоде еще и размер меняют?Есть описание символа. А как его изобразить решает дизайнер.
Пивожор как-то забыл, что был ASCII одним регистром во времена, когда он ещё не умел списывать. И что filename должен быть именно что name, где Алекс, алекс и аЛеКс — это одно и то же, а смайлы должны запрещаться/меняться на всякие (0x444) и т.д.
Регистронезависимость в именах файлов — благо системного уровня, а не прикол от дедов.
Никто не виноват, что вас в шелле не научили эскейпить файлы и параметры в кавычки брать.
> был ASCII одним регистром во временаНикогда не был. Символы 'A' и 'a' имеют разные коды в ASCII
Вот да. Может в 1970х где-то и экономили битик.
Но уже́ в 80х была ASCII-7 и аналоги (7 бит). 127 символов (и 0-й байт) для кодирования регистрозависимой латиницы — выше крыши.* Я не настолько старый чтобы помнить причину изначально 7-битной кодировки. Но вроде в 8-й бит засовывали чётность для передачи по всяким-разным каналам.
> Я не настолько старый чтобы помнить причину изначально 7-битной кодировки.Шоб по телетайпу слать и вводить тупой текст. 8 бит это бит чётности для проверок ошибок. Да и первые модемы так же работали. Всё сильно упрощалось и подпрограммы для работы с этим занимали несколько инструкций - было очень актуально, когда всё-всё-всё (логику, "дрова" и т.п.) надо было запихнуть в 32 кб памяти.
Регистронезависимость в именах файлов - отрава и мина замедленного действия.
Как и регистрозависимость
Есть хоть одна техническая причина превращать одно имя файла в другое? Линус прав, имя файла - это просто набор байтов, и самый переносимый способ записывать имя - это любые байты, кроме '\0', '/' и ещё '\n', но во многих случаях даже он ничего не сломает. Если файловая система занимается подобной хренью, как превращение одних кодировок в другие или сменой регистра, то пусть будут добры занимать сразу ВСЕ возможные имена, если им делать нехрен.
Внезапно, в NTFS могут быть '\0' в имени файла. ;)
> Внезапно, в NTFS могут быть '\0' в имени файла. ;)О, круто, надо будет с HTTP серваком поэкспериментировать на юзерах винды, посмотреть сколько софта такие имена даунлоадов сожрать сможет - и что потом с юзерами винды и их софтом случится.
В линухе то такую диверсию зарубят прям на уровне сисколов. А вот в винде есть шансы что софт хорошенько налетит на том что такможнобыло с 1 стороны и 0x0 имеет специальное значение в C строках - с другой. Знаешь сколько сплойтов такого плана существует в этом мире? Видимо нет. Иначе не считал бы такие вещи - фичой. Вон там в ссылках написали несколько идей как юзеров винды можно огревать эксплойтами, через git и чего там еще, но это - далеко не полный список подарков им по линии ФС которые можно отгрузить при креативном подходе к вопросу.
И чем больше таких нежданчиков - тем больше шансов что тот или иной програмер продолбается и это будет - экслуатируемый вулн скорее всего.
Советую в следующий раз не лепить нелепый наброс на Микростфт, а задать вопрос. Тогда бы я ответил, что Анонимный эксперт не сможет создать такой файл. А сейчас добавлю, что по причине недостатка знаний, и даже не буду уточнять номер RFC. ;)
> Советую в следующий раз не лепить нелепый наброс на Микростфт,А таки у меня к ним есть определенные претензии за то что они начали вот этот балаган с регистронезависимостью. И сейчас это все - приводит к пачке веселых CVE, имя которым легион. К счастью манера делать из маздая сервера вывешенные в интернет несколько поутихла, но оказались и другие способы, типа залить архивчик, или файло в git вообще подсунуть, и много чего еще. А теперь это булшит бинго зачем-то в линухе. Потому что поналезло тут всяких, типа вас, с маздайными замашками.
И как винду можно было в BSOD вынести заходом на страничку пытающуюся открыть что-то типа file://c:\con\con - я тоже не забыл. Я вообще злопамятный на такие подставы. И бсоды от открытия картинки отмасштабированной до 100000x100000 чтоли - помню. Секурити и онлайн безопасность винды всегда были образцом для подражания. Со знаком минус.
> а задать вопрос. Тогда бы я ответил, что Анонимный эксперт не сможет создать
> такой файл.С вон теми замашками - сможет создать много чего еще интересного. При том не того что подразумевалось.
> А сейчас добавлю, что по причине недостатка знаний, и даже не буду уточнять номер RFC. ;)
Какой, нахрен, RFC по винде? В этом мире есть более 1 протокола взаимодействия, если что :). Вот вы поручитесь что будет с маздайцем если ему в каком-нибудь rsync или торенте - что-то этакое форсировано подсунуть?
Не вижу проблемы в создании стандарта с набором регистрозависимых символов, включающего только алфавиты существующих языков + что-то по иероглифам если там оно есть. Всё остальное не имеет регистра и не учитывается. Готов к решению следующей задачи
Ты предложил простое и неправильное решение. С турецким языком что делать будем, например? Там с английским регистры их версий I не совпадают: I → ı, İ → i.
Нашёл о чём капитанить, старый брюзжун. Лучше бы набросил на тему неактуальности древовидных ФС с их директориями/папками, симлинками и прочим.
> просто бесятся от того, что им приходилось пыриться в детстве в консольку.Вот не надо тут. Мне в детстве приходилось пыриться в интерфес, сделанный из вот такой cpaни
╔════════════════════╗
║░░░░░░░░░░░░░░░░░░░░║
║░░░░░░░░OPEN░░░░░░░░║
║░░░░░░░░░░░░░░░░░░░░║
╚════════════════════╝Но я совсем не против использования юникода в именах файлов.
В чем удобство использования Юникода в именах файлов?
> В чем удобство использования Юникода в именах файлов?Можно без обиняков обозвать файло "неведомая долбаная фигня ❤ и ❤️" и это даже будет корректно оотображаться. Но если удумать еще и регистр этого процессить... выйдет неведомая долбаная фигня! :)
привет андроид, где несколько тысяч фото в одной папке намерно вешают систему и хрен там что найдёшь...
Так там потому что классическая ФС (ext4 или что там сейчас). Ну и в моём комментарии не было речи о том что надо все файлы в одной папке отображать.
Тут не с регистронезависимостью проблема, а с тем, что в именах файлов разрешена всякая дичь вроде вот этих юникодных сердечек.
Ну, иди расскажи японцам, что они должны файлы латиницей называть.
Проблема вообще не в символах, а всего лишь в синдроме утенка вскормленных Виндой.
Они считают правильной всю ту дичь, которую Микрософт накосорезил в своих системах в 1980-х - и продолжает бережно тащить ее в 2020-е.
Ну регистронезависимость важна при поиске. При обращении к файлу регистр однозначно должен соблюдаться, в противном случае имя файла нельзя представить в виде набора конкретных байт и тут все абстракции поехали... Как велосипед на квадратных колёсах!
Для обеспечения регистронезависимого поиска по файловой системе вовсе не требуется поддержка со стороны файловой системы
Против символов национальных алфавитов никто не против. А вот цветные смайлики в именах файлов... Зачем?
> Против символов национальных алфавитов никто не против.В чем разница? Написать 赤いハート или поставить ❤️?
> А вот цветные смайлики в именах файлов... Зачем?
Не зачем, а почему бы и нет. И то, и другое просто код юникода.
В данном случае проблема это "регистронезависимые файловые системы". Которые просто пережиток старых времен.
>> Против символов национальных алфавитов никто не против.
> В чем разница? Написать 赤いハート или поставить ❤️?Ну зачем так далеко ходить:
ͦpͤnnͤͭ - удачи любителям "независимости" подобрать тот самый, единственно-верный "регистронезависимый" вариант. Я уж не говорю о всяких скучных öäÜóß ... и о том, как ЭТО более-менее эффективно можно парсить.
> удачи любителям "независимости" подобрать тот самый,
> единственно-верный "регистронезависимый" вариант.А зачем тебе вообще "регистронезависимый" вариант? Чтобы со всяким старьем было совместимо?
Сейчас даже NTFS поддерживает case-sensitive.> Я уж не говорю о всяких скучных öäÜóß
Так как раз из-за того, что ß просто так в upper-case не конвертнешь, и нужно использовать case-insensitive!
>>Сейчас даже NTFS поддерживает case-sensitive.Да как бы не с W2K... Только в реестре отключено по дефолту и софту может чеку сорвать от таких фокусов.
>В чем разница? Написать 赤いハート или поставить ❤️?В количестве и комбинациях байт. Ели это имена файлов, то это два разных файла.
> А вот цветные смайлики в именах файлов... Зачем?Просто красиво,
Только найди потом файл с таким названием.
>> А вот цветные смайлики в именах файлов... Зачем?
> Просто красиво,
> Только найди потом файл с таким названием.У вас в find юникод сломали?
Ааа, ну с таким подходом можно что угодно нагромоздить. Было бы желание. Только пусть желающие это громоздят на своей системе, но нет же - навязывают остальному миру, ворую ресурсы цивилизации.
Был вопрос как найти файл, самое очевидное это find
Затем, что когда-то иероглифы и были этими самыми смайликами, только не всегда цветными.
Ничего они, поди, email адреса то латиницей пишут, не обламываются.
> Ничего они, поди, email адреса то латиницей пишут, не обламываются.Боюсь, обламываются, но не они - 二ノ宮@黒川.日本, например.
Я извиняюсь, а японцы виндой пользуются? Там же все ФС регистронезависимые.
Ответ простой, надо скачать с серверов MS исошник десяточки с японской локализацией, накатить в виртуалку и посмотреть как это выглядит.
> Они считают правильной всю ту дичь, которую Микрософт накосорезил в своих системах в 1980-х - и продолжает бережно тащить ее в 2020-е.Ну в ненужное же тащат из 70х.
Причём тут Микрософт? У микрософта это всего лишь следствие, что в cp/m файлы были всегда в верхнем регистре. Т.е. писать мог по любому, но файл всегда назывался в верхнем регистре и соответственно в первых досах было так же, ну а потом сделали уже регистронезависимость и тогда это не было проблемой - 7 бит, как и 640 кб всем хватит.Ну и попробуй объяснить условному Васяну, что файл ДОКУМЕНТВАСИ.XLSX и документваси.xlsx как-то различаются. Ведь и ежу понятно, что это один и тот же файл. Ну и компы они не для яфинов, они для Васянов, поэтому у Микрософта всё и сделано правильно.
> всего лишь следствие, что в cp/m файлы были всегда в верхнем регистреА римляне когда-то писали исключительно капсом, но однажды, к счастью, все-таки решились сломать совместимость.
> Ну и попробуй объяснить
Я много лет оказываю техподдержку юзерам. Обычному пользователю - объясню, без проблем.
Вот лахте, которая гонит пургу только для того, чтобы лишний раз получить тридцать полусребреников за "яфина" - что-либо объяснять, пожалуй, побрезгую.
> Ну и попробуй объяснить условному Васяну, что файл ДОКУМЕНТВАСИ.XLSX и документваси.xlsx
> как-то различаются. Ведь и ежу понятно, что это один и тот
> же файл. Ну и компы они не для яфинов, они для
> Васянов, поэтому у Микрософта всё и сделано правильно.Но вебсервак то - сохранит и тот и другой, ибо не маздай голимый. И при случае отдаст Васе другой документ. После чего Вася как раз рискует внепланово переписать себе файло - НЕ ТЕМ документом.
> Но вебсервак то - сохранит и тот и другой, ибо не маздай голимый.Что, даже IIS или, не дай бог, Apache на Windows Server? Бида-бида…
> После чего Вася как раз рискует внепланово переписать себе файло - НЕ ТЕМ документом.
Вася как раз ничем не рискует. «Маздай голимый» делали для людей, так что файлик успешно скачается как документваси (1).xlsx если там уже лежит ДОКУМЕНТВАСИ.XLSX. На ОС сделанных для удобства компьютера у Васи будет дилемма — какой же из двух документов тот, который ему нужен, и как их отличить друг от друга не открывая.
> Что, даже IIS или, не дай бог, Apache на Windows Server? Бида-бида…Я ж написал для непонятливых - большая часть серверов отнюдь не на маздае голимом. Желающих отваливать кучу денег за то чтобы потом заниматься вон тем непотребством предсказуемо немного.
Достаточно сказать что маздайапдейт грузит апдейты - линуксным CDN. Это при том что у майкрософта датацентров - во, и лицензий уж себе то можно и выписать наверное. Но видимо маркетинговый булшит вместо эффективной, быстрой и дешевой сервировки файлов - не очень :)
>> После чего Вася как раз рискует внепланово переписать себе файло - НЕ ТЕМ документом.
> Вася как раз ничем не рискует. «Маздай голимый» делали для людей, так
> что файлик успешно скачается как документваси (1).xlsxВот это - очень зависит от того кто, что какой протокол, чем качалось, ...
Вон там в шапке новости штуки три CVEхи на тему. Оказывается Васе то можно этих файликов навалить от души. Потому что софт не чекал эту подставу. И можно ему что-то внепланово перезаписать.
> если там уже лежит ДОКУМЕНТВАСИ.XLSX. На ОС сделанных для удобства компьютера
> у Васи будет дилемма — какой же из двух документов тот, который ему нужен, и
> как их отличить друг от друга не открывая.Эти, ублажающие Васю, как видим конкретно доигрались до ситуации когда они не только не знают чего хотел Вася, но и чего они сами хотели - не знают. Ибо юникод оказался сложным и понятие "верхнего регистра" и "нижнего регистра" в нем ... мягко говоря не сильно простой и однозначно трактуемый топик.
Классическое такое - "хотели как лучше, а пооучилось как всегда".
Попробуй объяснить условному Васяну, что файл ДОКУМЕНТВАСИ.XLSX, ДОКУМЕНТВАСИ.XLSX и ДΟКУМЕНТВΑСИ.ΧLSX это разные файлы, когда он видит одинаковые.А там посерьёзнее различия, чем регистр букв.
Напиши список разрешенных символов
Этот список уже до меня давно написали. ASCII называется.
Ну, ок, конвертнём в base64 и будем в таком виде хранить на диске, а в файлменеджере будем показывать исходную форму с сердечками, иероглифами и арабской вязью.
Товальдс такой жест придумал нвидии.
Ну это которым потом он, пазязя, напишите драйверы.
А чтой то не пишут драйверы для Нвидиа.
Молодец ну.
> Тут не с регистронезависимостью проблема, а с тем, что в именах файлов
> разрешена всякая дичь вроде вот этих юникодных сердечек.Ну то есть вы предлагаете ограничить набор юникодных символов, разрешённых к использованию.
А юникод развивается. И добавляет постоянно новые символы. Кто будет поддерживать список разрешённых символов в актуальном состоянии? Хотите взяться за такое дело?
А ещё нужно каждому символу присвоить метки регистра, мол, верхний он или нижний. И поддерживать в актуальном состоянии табличку с биективным отображением одного в другое. А за это дело взяться хотите?
Каждая проверка на предмет того, что файл содержит символы только из разрешённого списка -- будет жрать вычислительные ресурсы. Чем больше символов -- тем больше жрёт. И её надо производить для каждого файла? Железо должно работать, да?
В общем, это плохое решение. Куда легче -- поступить так, как предлагает Линус, и просто больше не делать функциональность регистронезависимости в ФС.
в именах файлов можно ограничиться английским алфавитом, малыми буквам, проблем-то
> в именах файлов можно ограничиться английским алфавитом, малыми буквам, проблем-топочему бы и нет, давайте
только не английским, а китайским
Когда не было юникода, был бешеный спрос на десятки тысяч разных кодировок текста. Предлагаете вернуться в эпоху, когда к текстовому файлу нужно прилагать, в какой кодировке он сохранён, вместо того, чтобы разрешить кому угодно писать его/её избранный алфавит и всё бы замечательно отрендерилось?
> в режиме без учёта регистраА теперь поиграйтесь в регистре где символы L I i l выглядят одинаково.
Если я хочу тебя взломать или обмануть это мне только плюс. Поэтому я буду продавливать регистронезависимость всеми силами.
Да не, иногда в шрифтах L выглядит как i, 0 как o, я про это.
Меня нечего взламывать, я не криптовалютчик.
Диды придумали нолик зачёркивать. И всё было хорошо, однозначно и недвусмысленно, пока не пришёл юникод со скандинавским Ø.
> пока не пришёл юникод со скандинавским Ø.Про ISO8859 ты, понятное дело, не в курсе.
Смотрим в «Tips for mathematical handwriting»:Don’t slash the 0. The Greek letter phi has a vertical slash; the empty-set symbol has a slanted slash.
Оказывается, что всё хорошо никогда не было. Диды об перечёркнутые нули спотыкались ещё до появление вышеупомянутого гайда, и похожие символы всегда были проблемой и на письме, и позже при печати.
Нуу, это-то понятно, что когда в имени файла может быть Greek letter phi или empty-set symbol, то зачёркивать ноль уже бессмысленно.
Автор этого гайда не понимает разницу между _про_чёркиванием, когда концы не выходят наружу, и _пере_чёркиванием, когда они заметно выступают.Большинство остальных рецептов адекватны, но этот конкретно - в морг.
> Да не, иногда в шрифтах L выглядит как i, 0 как o, я про это.
> Меня нечего взламывать, я не криптовалютчик.Это ты пока не взломан - не криптовалютчик. А вот если тебя взломать и поставить майнер - уже вполне.
> регистронезависимостьТак это как раз про регистрозависимость. В каком-нибудь досе или винде 3.1 по умолчанию все имена файлов заглавными буквами показываются, и сразу понятно, где L, а где I.
Не было такого в досе и 3.1. Прописными.
Смотря какой DOS. DOS 6.22 при желании поддерживал длинные имена файлов. :)
Исторически FAT12, FAT16 регистрозависимые, но в именах файлов возможно только заглавные буквы. И проблем не было.Регистронезависимость в FAT принесена с добавлением длинных имен файлов.
А вот NTFS изначально создавалась регистронезависимой.
> А вот NTFS изначально создавалась регистронезависимой.Смотрим параметр ObjectAttributes в NtCreateFile
https://learn.microsoft.com/en-us/windows/win32/api/winternl...а в нём ULONG Attributes
Is a set of flags that controls the file object attributes. This value can be zero or OBJ_CASE_INSENSITIVE, which indicates that name-lookup code should ignore the case of the ObjectName member rather than performing an exact-match search. The value OBJ_INHERIT is irrelevant to device and intermediate drivers.
Флаг OBJ_CASE_INSENSITIVE указывает коду поиска имён игнорировать регистр. То есть по умолчанию поиск регистрозависим. При этом надо понимать, что "поиск в ФС" и "ФС" не одно и тоже.
> коду поиска имён игнорировать регистр.Это костылик только для кода API открытия файла.
А например получил список файлов в каталоге, и.. нужно знать а какая там файловая система, с какими атрибутами? И не переносил ли кто файлы на флешке, пересылал, и не похерил атрибуты? :)> OBJ_CASE_INSENSITIVE.. То есть по умолчанию поиск регистрозависим.
Нет, тут состояния "как нибудь" и "игнорировать".
Состояние "как нибудь", зависит от того как примонтирован ресурс.
А вот монтировать NTFS с явной чувствительностью к регистру, сейчас точно можно.
Я всегда говорил что Линус наш слоняра. Все правильно и по полочкам разложил.
Это называется дорисовка личности, ты дорисовываешь все хорошее, как бы игнорируя минусы, занимаясь самообманом.
Поздно рассуждать о боржоми, когда почки накрылись. Само появление не-ascii символов в именах файлов открыло ящик пандоры. ИЧСХ, если появится менеджер паролей i❤mypasswords или криптокошелёк i❤cryptocoins - найдутся лопухи, которые будут ими пользоваться, и их потом поимеет злой хакирь, который выпустит, соответственно, менеджер паролей i❤️mypasswords или криптокошелёк i❤️cryptocoins со зловредами внутри, в том же каталоге приложений.
> Поздно рассуждать о боржоми, когда почки накрылись. Само появление не-ascii символов в
> именах файлов открыло ящик пандоры.Как открыло, так и закроет. Немного боли и придет стандартизация.
>> Поздно рассуждать о боржоми, когда почки накрылись. Само появление не-ascii символов в
>> именах файлов открыло ящик пандоры.
> Как открыло, так и закроет. Немного боли и придет стандартизация.Который оно там год уже "приходит"? А тем временем нас заваливает пачками глупых вулнов и просто глюков на ровном месте.
Вот тебе вместо кучи национальных кодировок вместе или вместо ASCII подвезли юникод, например.
> времена FAT давно закончилисьТут я бы поспорил. Даже на больших флешках, таких как 128 Гб, FAT32 прекрасно себя чувствует. По размеру кластера они вроде как с exFAT одинаковы. Единственный минус - нельзя создавать файлы больше 4 Гб.
FAT32 позволяет вставить флешку в телевизор, магнитолу, приставку, смартфон, и не думать "а поддерживается ли там exFAT или нет?".
По поводу юникода и FAT32. Поддерживается. Файлы со спецсимволами создаются. А во поводу регистров (а тем более регистров спецсимволов), ну, под Linux FAT32 case sensitive. А под виндой nocase. Но там и NTFS - nocase.
Разве речь о том, чтобы выпилять FAT32 из линукса?Речь о том, чтобы в новые ФС не тянуть старые неактуальные привычки.
> Разве речь о том, чтобы выпилять FAT32 из линукса?
> Речь о том, чтобы в новые ФС не тянуть старые неактуальные привычки.Ну не знаю, мне лично с nocase удобнее. Всяко лучше, чем иметь в одной папке файлы вида:
привет.txt
Привет.txt
ПрИвЕт.txt
привет.txT
> с nocase удобнее. Всяко лучше, чем иметь в одной папке файлы вида:
> привет.txt
> Привет.txt
> ПрИвЕт.txt
> привет.txTСоглашусь,
Temp
tempКруто., а теперь разберись какая из них, Temp, temp.
Это как пример.
> Круто., а теперь разберись какая из них, Temp, temp.
> Это как пример.Три буквы: FHS.
Никому не нужное нагромождение костылей, которого сам стандартизатор не придерживается.
> Три буквы: FHS.FHS, или фолликулостимулирующий гормон , — это гормон, вырабатываемый гипофизом как у мужчин, так и у женщин.
> Ну не знаю, мне лично с nocase удобнее. Всяко лучше, чем иметь
> в одной папке файлы вида:
> привет.txt
> Привет.txt
> ПрИвЕт.txt
> привет.txTГнилой виндузоид - палится сразу. Вон там для таких любезно штуки три CVE на основе такого упрощения. Представляешь, в уникоде топик кто кому upper case - весьма сложная штука. И это порождает неоднозначный парсинг.
Вот так вот тебе кто-то зальет ПрИвЕт.txt - а он и перезапишет привет.txt без спроса - хотя софт был уверен что все окей, файло же разное! При том понятие одинаковости и разности начинает еще и зависеть от программы - и попробуй вообще угадай где на тебя ВНЕЗАПНО упадет такой рояль.
> Гнилой виндузоид - палится сразу.А зачем останавливаться на одних только лишь именах файлов? Можно ещё емейлы делать типа lena@mailbox.org, Lena@mailbox.org, LeNa@mailbox.org, lenA@mailbox.org... Да чего уж там - сразу URL-ы серверов. Вот набираешь ты в адресной строке не google.com, а Google.com, и попадаешь на другой сайт. А ещё имена улиц можно делать "некрасова" и "Некрасива", и чтобы они находились в разных частях города. Не нравится? Ты что не современный?
> Можно ещё емейлы делать типа lena@mailbox.org, Lena@mailbox.org, LeNa@mailbox.org, lenA@mailbox.orgТы не поверишь, но так и есть. Емейлы по rfc регистрозависимые, так как растут из имён пользователей на юниксе. И на это требование rfc забивают решительно все почтовые системы в мире, тоже по понятным причинам.
>забивают решительно все почтовые системы в миреНе все забивают.Потому что есть стандарт внезапно с # в имени почтового ящика, позволяет на одном почтовом ящике кучу пользователей вешать.Вообще почта это ужасный набор костылей- но пространство имён даже позволяло сразу доставить письмо на телетайп.А так куда шлюзов только не было- Фидо,usenet,uuсp и т.д.А самые бородатые дяди могли получить /отправить письмо с помощью telnet .
Система обработки почты автоматически переводит все буквы в нижний регистр, независимо от того, как они введены.То есть разных регистров нет в принципе.
И да на названия улиц распространяются правила русского языка.
Так что они пишутся с большой буквы за которой следуют маленькие.
> А зачем останавливаться на одних только лишь именах файлов? Можно ещё емейлы
> делать типа lena@mailbox.org, Lena@mailbox.org, LeNa@mailbox.org, lenA@mailbox.org...А почему бы и нет? Сейчас оно сделано именно так, потому что RFC822 делался еще для ARPA Internet. Это дремучая древность - первая версия опубликована в 1982 году, а начала разрабатываться еще раньше.
> Да чего уж там - сразу URL-ы серверов. Вот набираешь ты
> в адресной строке не google.com, а Google.com, и попадаешь на другой сайт.Тем не менее, некоторые части UR как раз case sensitive.
Вот прям здесь и сейчас. https://www.opennet.dev/opennews/art.shtml?num=63149 открывается.
А https://www.opennet.dev/opennews/Art.shtml?num=63149 - нет.> А ещё имена улиц можно делать "некрасова" и "Некрасива", и
> чтобы они находились в разных частях города. Не нравится? Ты что
> не современный?Ты же понимаешь что название улиц еще еще более древнее легаси?
Вы сейчас можете иметь одновременно файлы:Привет.txt
Привeт.txt
Привет.txt
Пpивет.txtвинда их различит, вы визуально - нет (или ой не всегда). Это бо́льшая проблема, чем регистр, который различим всегда - но всем плевать.
> старые неактуальные привычкиЭто называется "обеспечивать совместимость, столь ценимую нашими корпоративными клиентами". Например, так:
Invalid file or folder names
Applies to: OneDrive for BusinessThese names aren't allowed for files or folders: .lock, CON, PRN, AUX, NUL, COM0 - COM9, LPT0 - LPT9, _vti_, desktop.ini, any filename starting with ~$.
Notes:
_vti_ can't be used anywhere in a file name.
forms can't be used when the folder or file is at the root level of a library.
゛and ဧ can't be used as the first character of a folder.
Слабо...https://learn.microsoft.com/en-us/windows/win32/fileio/namin... :
> Do not use the following reserved names for the name of a file:
> CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, COM¹, COM², COM³, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, LPT9, LPT¹, LPT², and LPT³.Где запрет на имя COM¹ ?
(И почему запретили COM0, с ним же нет проблем? Ха-ха)
>>Даже на больших флешках, таких как 128 Гб, FAT32 прекрасно себя чувствует.А писать что нибудь пробовали в "больших" объёмах. Как скорости? :)
ExFAT тоже по скорости плох, и плох везде, если только не писать исключительно фильмы и архивы.И кстати, флешка 0.1ТБ, это вовсе не большая флешка. Но это не важно. Суть в том, что большие флешки берут, очевидно что бы на них писать. И на больших объемах записи, влияние неудачной файловой системы может увеличить скорость с минут до часов. А в остальном с FAT почти все хорошо. :)
> писать что нибудь пробовали в "больших" объёмах. Как скорости? :)Нормально там по скорости,не хуже чем у UDF.Нужно нормальные флэшки использовать,а не с 100 мгб кэшем а остальные тормоз.
Но UDF хрен чем отремонтировать,а exfat чиниться.Да, обычно ошибки в метаданных,но бывает что и данные страдают.А если вы имеете ввиду миллион файлов в папке - нечего лучше ext4 с индексом и отключённом журналом не придумали.Ну можно ещё пошаманить с btrfs,все оптимизировав,но чем она тогда от exfat будет отличаться не понятно.
Торвальдс однозначно не прав.
Все эти свистелки и перделки разбаловали юзеров!Нужно делать как в RT-11.
6+3 длинна имени файла, и фиксированный набор "A—Z, 0—9, $, ., %"
Этого хватит всем!А то взяли моду придумывать длинные названия, да еще и какие-то сердечки туда пихать!!11
> Нужно делать как в RT-11.
> 6+3 длинна имени файла, и фиксированный набор "A—Z, 0—9, $, ., %"Ну вообще чем прощще тем лучше, тем это более надежнее, правда длинна имени файла коротка.
Насамом деле как в Windows, нормально вполне.
Или это такое развлечение, играться с именами файлов папок из таблицы символов, сомнительное развлечение.
Все эти регистры, Temp temp.
> Насамом деле как в Windows, нормально вполне.Угу, когда Привет.txt, Пpивет.txt и Привeт.txt различаются, а Привет.txt и привет.TXT - нет. Офигенски нормально.
Э, нет.
Компьютеру для различения разных файлов достаточно числа, большинству систем хватит 64 бита. Корпоративным свалкам наверное 128 бит впору.
Остальное - от лукавого.Диссертация - в файле 1254785421, порнуха в 1254785241
Не перепутай.
Да здравствует RADIX-50 !
С точки зрения пользователя все же регистронезависимые имена удобны. И если проблема в похожих символах UTF-8, которые нельзя порой в нужный регистр привести, то может проблема в UTF-8?
Какие собственно проблемы хранить тогда локаль в файловой системе? Это от силы один байт. Да и при наличии локали отпадает необходимость в utf-8 или решает проблемы какими символами имя файла ограничить в utf-8. Главное графически отобразить локаль и будет сразу видно где турецкая l, а где английская l. Или чего там ещё. Ну а список эмодзи можно и ограничить, тогда и не будет проблем. У сердечек нет верхнего и нижнего регистра, это вообще картинка которая записана как символ в utf-8. Такие картинки порой решают некоторые проблемы программистов.
Такая, что это не очень совместимо с ФС.
Он очень умен он очень умен.
Ну так да. Я ведь в отличии от тебя для известных компаний создавал файловую систему. И прекрасно понимаю что дополнительная информация о пути имени файла созданет возможность её поддержки и исправления. Локаль в отличии от имени является служебной информацией и в случае обнаружения каких проблем всегда что-то можно исправить и даже более - версионировать. И это то что до тебя не доходит.
Эдуард? А что из-под анонима?
И да, проблема в кодировке. Если будет кодировка в которой нет похожих и повторяющихся символов и нет вредоносных символов, то и результат может быть неплохой. Да часть символов всегда можно зарезервировать под исправления. Но Линукс в эту сторону даже не смотрит. Почему? Потому что это весьма много работы, а они хотят сосредоточится на других задачах. Вот чесно бы так сказал бы.
Торвальдс абсолютно прав. И правильное решение - прямо в винде включить регистрозависимые пути в реестре HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\kernel\obcaseinsensitive=dword:00000000Для тех каталогов, где прям супер-нужно регистронезависмость можно её включить через fsutil.exe file setCaseSensitiveInfo <path> enable/disable
Ага, а потом сидеть гадать почему софтина не работает и пополнять список исключений
Просто на program files вешаешь регистронезависимость. А сама винда сделана так чтобы работать норм и с регистрозависимостью.
>>винда сделана так чтобы работать норм и с регистрозависимостьюНет. Точнее очень много Win-ПО не переносят регистрозависимость.
Ставите сторонний драйвер регистронезависимой FS, и обнаруживаете что на нем много что не заработает.
На Маках тоже иногда попадается старое/портированное ПО, не переносящее регистрозависимость, и для него приходится делать образ или раздельчик с регистронезависимой FS.
И? Это ПО ставится в Program Files. На него вешаешь какую надо настройку - и всё работает из коробки. Пути к файлам же пользователя не хардкодят.
>правильное решение - прямо в винде включить регистрозависимыеОй скопытится.. Вам мало что значительная часть ПО от не латиницы в путях выпадает в осадок?
Но можно примонтировать разделы и каталоги как регистрозависимые.
А так, и кому это надо смогут работать, и ничего системного не полетит, и с полагающемся на регистронезависимость ПО ничего не случится.
>Вам мало что значительная часть ПО от не латиницы в путях выпадает в осадокВремён Windows 98? Потому что даже хрюшный софт уже на *W-функции (UCS-2) переведён.
А весь секрет в том, что юникод - это не кодировка, юникод - это бинарный формат для хранения текстовой информации, наравне с odt, openxml и Microsoft doc/docx. Именно поэтому там есть "символы" типа "обратить весь последующий текст задом нарерёд" и подобные, о которых никто не в курсе. Стоит понять эту простую истину, и куча вопросов к юникоду, используемому в качестве кодировки, сразу отпадает.
> docxС каких пор он бинарный?
Товальдс, офигенный парень.
Мож байтовый?
Лично у меня и так к нему вопросов никаких нет. Я его не использую. Достаточно национальных кодировок.
Юникод - это попытка снова сделать одну кнопку для решения всех проблем, как, например, сделали с браузером. Впрочем с браузером скорее другое дело. Там, видимо, целенаправленно делали все для того, чтобы влезть каждому в ПК.
Ты не прав. Юникод, Международная система единиц - лучшие избретения человечества.
> Ты не прав. Юникод, Международная система единиц - лучшие избретения человечества.Ну, записать одну и ту же букву тремя и более разными кодами, удобно.
В том то и прикол, что они на самом деле разные. Не нравится, что на _вашем_ экране они одинаковые - поменяйте шрифты на те, которые будут вам рендерить ascii и кириллицу как оьычно, а всё остальное в ином стиле, чтобы сразу было видно подмену, когда копипастите не думая.
В винде ж как-то сделали.
Более того, там по ходу дискуссии дальше объясняют, что в винде NTFS как раз имеет правильное решение.
> NTFSНу потому что они не выпускают по +100500 файловых систем раз в два месяца.
А улучшают NTFS.
И там же разбирают, что ẞ и SS - это разные стандарты перевода для ß, и кто-то точно пострадает.
Да наверняка сделали только для широкоизвестных алфавитов. А остальное, как придётся.
А остальное, как придётся.Потому что гомункулы не равны между собой )
Товальдс, офигенный, парень.
Возможно. Практичное решение, которое куда лучше, чем «мы не знаем как сделать идеально, поэтому вообще никак делать не будем». Регистрозависимость — костыль, растущий из отсутствия строк в Си и экономики вычислений семидесятых, когда действительно тратить процессорное время и память на приведение регистров (и уж тем более на такую роскошь как произвольная строка) было непозволительно. Так пятьдесят лет и мучаемся с античеловеческим поведением файловых систем. Ну зато компьютеру так удобнее.
>Да наверняка сделали только для широкоизвестных алфавитов.Потому что там utf-16 (как и в java) и upper/lower не скачет по размеру ну и +- проще и понятнее.
В виде Легаси и совместимость. Которую надо тащить десятилетиями.
Ах, да, stable api nonsense. Каждый раз забываю.
Пользуясь случаем "❤" и "❤️" Чиркову за дополнение оригинала - ссылками на конкретные вулны.
Проблема не стоит выеденного яйца. Микрософт скоро закопают окна в пользу Марины и регистронезависимость ни кому будет не нужна.
Маринка кде закопали она теперь Азер Линукс.
Да без разницы, логика ведет к тому, что окна рано или поздно будут закопаны вместе со всем своим барахлом, в т.ч и с регистронезависимостью.
А что эта? Новый виндопс?
Ну че там, пацан то Товальдс, как он там.
Краткое руководство по опеннету:
1. ругать решения майкрософта
2. точно такие же решения Applе (да-да, регистронезависимость) замалчивать либо хвалить
3. ???
4. PROFIT
> 1.А ругань где увидели-то?
> 2.
Вживую никогда не пользовался и не интересовался, сказать нечего.
> 3.
А чего сказать-то хотели?
> 4.
Хотя-бы какая-нить св***ь, хотя-бы на банку пива подкинула! Нету желающих.
> ругать решения майкрософтаНу типа как найти отдушину определенную, в данном случае Microsoft.
А можно было сделать проще, у файла два атрибута номер и текстовое поле, система оперирует именами, а текстовое поле это та фигня, что отображается пользователю и в принципе не важно, что там записано и каким регистром.
Система оперирует номерами, ачепятка-)))
А можно было изначально не использовать объект (файл) из реального мира, но это была-бы уже другая история.
В том-то и дело. Изначально, у греков, "файл" - не объект, а процесс. "Как вы лодку назовёте, так она и поплывёт"
Аноним изобрел i-node, какой ужас.
> А можно было сделать проще, у файла два атрибута номер и текстовое
> поле, система оперирует именами, а текстовое поле это та фигня, что
> отображается пользователю и в принципе не важно, что там записано и
> каким регистром.Почему-то желающих оперировать номерами inode - не сильно дофига оказалось...
Только не говорите ему про базы данных - совсем расстроится... :) А вообще, нужно просто принять единый общемировой стандарт, включающий в себя однозначные правила преобразования регистра для каждого естественного языка (письменности) на планете. И в каждом коде должны быть реализованы только эти правила, а все остальные - исключены. Вроде, ничего сложного.
ASCII качественно не смогли сделать... Что уж про остальное говорить?
Вот для ASCII я бы такое и не решился предложить - там в плане кодирования национальных букв всё было неоднозначно изначально. Но мы же здесь не ASCII обсуждаем, а вполне однозначный в этом плане Unicode, правильно?
Вероятно когда-нибудь так и будет.Но пока есть проблемы и неочевидные подводные камни.
Вот хорошая статья на эту тему в переводе:
https://habr.com/ru/articles/525608/
Особенно интересен момент с важностью локали, хотя всегда считал, что Unicode придумали, чтобы этой проблемы не существовало.
>Только не говорите ему про базы данных - совсем расстроитсяПрежде чем язык чесать надо своей дурной башкой думать. Торвальдс говорит про низкоуровневые вещи. Базы данных и офисные программы это высокоуровневые абстракции.
Э, а что не так с БД?
Во всяких SQL и прочих LDAP регистронезависимый синтаксис использует даже не ASCII, а достаточно узкое его подмножество (гуглить в сторону ASN ("Abstract Syntax Notation")).
Вот там можно определить понятия (функции) для upper|lower cases.
А для самих данных всё тут же становится опять интересным. Вплоть до изменения порядка сортировки (collation) между релизами какой-нибудь i18n.
> однозначного, правильного и безошибочного пути выполнять данную операцию просто не существуетДа что там, даже однозначного, правильного и безошибочного способа определить ширину произвольного набора кодовых точек Юникода в экранных знакоместах шрифта с фиксированной шириной — тоже не существует. Разные либы разных версий дают разное. В far2l неплохо так задолбались с этим
Страшно, очень страшно, мы не знаем что это такое, если бы мы знали, что это такое, но мы не знаем, что это такое.
Ну, так, верно же. Если фс регистры зависима, то человек на глаз способен отличить один символ от другого. Главное же, что линукс безопасен, а то, что эта безопасность приводит к уязвимостям - не проблема линукса. :D
Я в начале подумал, что символы пик ♠️ и червей ♥️ некоторые считают одним. А потом пригляделся - там чёрное сердце ❤ и ❤️ и красное. И что интересно, клава Андроида при копировании и вставке в превьюшке показывает их как оба красные
Товальдс, все таки клевый чувак, изобрел ♠️ и ♥️.
Как-то даже и не странно что FreeBSD+ZFS не имеет никаких сложностей в вопросе Unicode - пользуйте UTF8.
А у оголтелых очередные грабли на ровном месте.
Правильно сделал !
юникод превратили в какой-то бардак. цветные смайлики -- а дальше что? анимириванные 3д-смайлики с поддержкой дх12 и содержащие фреймы с джава-скриптом, выполняемым на ассемблере?то же самое и с электронной почтой. раньше письма от компаний содержали только плаин-текст и картинки разве что во вложениях --- по сути в письмах ничего другого не нужно.
теперь письма от компаний содержат жаваскрипт, актив-икс, загружаемые шрифты фреймы и прочее г*вно.мне-то не жалко, просто поверхность атаки увеличилась на десятки порядков.
как будто специально превращают стандарты в решет0 (почему это слово не пропускает фильтр опеннета????), выполняющее функции медиа-центра для детей.
Очевидно, что "кое-кто" напрямую заинтересован в "pεшεTε" на десктопах! Потому и допускают всякую дичь.
В почте всё же нужен какой-то rich текст, но строго в рамках типографии - а-ля bbcode. А жабоскрипты и прочую ересь банить нещадно.
Изобретают новую седушку для велосипеда, как обычная седушка, но более эргономично обхватывающая твою зд**ницу.
С такой седушкой. Ты удивишься, как ты мог использовать просто седушку.
Так-то могли-бы просто форсировать ASCII для регистронезависимого режима и не мучать джопу
Линус никогда не сможет определять оборудование? А то Альт-11 понаставил Нвидии на 1,7 ГБ, а при удалении ея деинсталлирует Хромиум. Хотя тот и так был бы снесён.
Собственно чем больше Линус делится своим мышлением, тем больше понятно, почему Linux такой кривой по итогу.
По поводу файловых систем главный вопрос: для кого они существуют? Если для компа - ему до лампочки как называть фрагменты данных (ему также наплевать на каталоги и любые иные искусственные структуры). Если же мы сходимся на том, что файловые системы существуют больше для человека, то регистронезависимость - это важная тема, т.к. человеку значительно проще ориентироваться на то, когда файлы имеют объективно разные наименования. Более того, по хорошему следует на базовом уровне "запретить" неадекватные наименования и любые спец. символы в противовес тому, чтобы тащить за собой весь юникод, который уже превратился в абсолютный мусор.
Регистрозависимость - это простейшее решение, т.к. оно вообще не требует ровно никаких усилий для реализации. Собственно этим и Linux славится: никакого стабильного ABI, полный маразм в подключаемых библиотеках с одинаковыми именами функций (Порядок загрузки библиотек может влиять на то, какая версия символа будет использована) и прочие радости жизни.
Даже стабильные драйверы не написать, т.к. они имеют офигенный шанс сломаться при обновлении ядра. Зато с "умным" видом рассуждаем на тему регистров в файловых системах, чтобы загадить индустрию окончательно.
>Собственно чем больше Линус делится своим мышлением, тем больше понятно, почему Linux такой кривой по итогу.Линукс оптимален. Чо ты нагнетаешь?
И этот бред еще и плюсуют.
попробовал я при установке macos выбрать регистрозависимую фс. и после этого многие программы имели ошибки типа "не могу найти такой-то файл" потому что он написан не в том регистре символов ) лол. теперь всегода устанавливаю регистронезависимое как это по умолчанию заботливо предусмотрели инженеры в аппле )