(эта запись будет интересна лишь программистам и сочувствующим)
Из
недавно обнаруженного бага в дистрибутиве Линукса Федора сложилась очень поучительная история, которую на мой взгляд неплохо бы преподавать в университетах, на уроках программирования, чтобы объяснять студентам не только как ключевые слова писать, но и как работать вместе с другими
(
Read more... )
Comments 557
Reply
Это всё-таки не то же самое, чтобы студенту пару строчек в скрипте поправить.
Reply
Reply
Reply
Reply
Reply
Reply
Reply
не совсем только понятно, как можно быть на стороне программистов федоры.
Reply
Reply
В подавляющем большинстве случаев регионы не пересекаются (это вообще редко происходит), а цена дополнительных инструкций для проверки того, что они не пересекаются, совершенно и абсолютно тривиальна по сравнению с тем, что и так делается каждый раз в "оптимизированной" версии.
Reply
Reply
Торвальдс - прагматик. Предпочитает "free as in free beer, not as in free speech" (как-то так, по памяти).
Дреппер - давно известен упёртостью; разработчики glibc правы в принципе, но, наверное, могли бы уступить. В конце концов, стандарт C не требует от memcpy, чтобы она именно не проверяла перекрытия и не вела себя как memmove.
Adobe - просто не могла упустить удобный случай написать глючный софт и, вместо исправления, сохранять гордое молчание. Дреппер прав, по крайней мере, в одном - если софт пишут люди, которых вообще не стоит подпускать к клавиатуре, то результат будет именно таким.
Reply
Reply
(The comment has been removed)
Мне трудно представить, что кто-то обкурится настолько сильно, что будет сознательно закладываться на то, что система грохнется, если источник и приемник в memcpy находятся в некотором взаимном расположении.
Reply
A different question is what to do about this situation, when many applications have managed to screw up and misuse memcpy?
It is the answer to this question that seems more interesting. I would, indeed, vote for using memmove instead of memcpy by default and add a compiler parameter and, possibly, pragma to turn on the original "fast" memcpy.
I do have some small reservations about this approach, though, because in a typical server-type application, when you run a profiler, memcpy typically shows up in the top 20-30 functions (because it is used so often to copy around little buffers and strings). This "fix" would make it even slightly more expensive.
Reply
и "оптимизированный" вариант glibc, и "надежный" Торвальдса оба делают memcpy непригодным для того, что мы используем очень часто - копирования множества маленьких объектов. Оба варианта, как указал чуть ниже lazyreader, ломают широко известный "hack", в котором memcpy используется для размножения короткого фрагмента ("слова") памяти.
Чего я не понимаю во всём этом шуме - где патч работающая версия от Adobe? Можно сколько угодно спорить, нужно ли исправлять glibc, но если все вынуждены пользоваться неофициальной версией флеш-плейера, то что-то не ладно в адобском королевстве.
А пока для Федоры решение должно быть - воспользоваться методами Microsoft Windows, и вписать в систему tweak: для флеш плейера такой-то версии - подставить memmove вместо memcpy. Никто не знает, к каким странным эффектам подобная подстановка может привести в еще одной неприкаянной аппликации.
Reply
Reply
В одном мы с тобой абсолютно согласны: позиция Федоры "чего это мы будем поддерживать какую-то чужую аппликацию? Никогда не поддреживали, и сейчас не станем" - совершенно уродская.
Хотя, ковыряясь сегодня в кривых имплементациях Android framework, я хотел бы конечно сказать "система должна строго следовать спецификациям, а не оглядываться на те или иные usecases".
Reply
Leave a comment