Свежие комментарии

Title Comment
мне этот вариант нравится

мне этот вариант нравится

В данном случае отклонение от среднего происходит до даунсам

В данном случае отклонение от среднего происходит до даунсамплинга.

Не знаю про гипсокартон. С

Не знаю про гипсокартон. С обоев удаляется вместе с обоями.

Ну так десятилетиями было

Ну так десятилетиями было так, что реализация memcpy() была строже, чем ее описание. Вместо undefined behaviour на пересекающихся регионах, поведение было вполне defined.

Сильно много времени на

Сильно много времени на детальное изучение не потратил, да :-)
Сама по себе техническая сторона разруливания конкретной ситуации меня как-то не заинтересовала, пусть у вовлеченных сторон голова болит.
Но вот человеки некоторые удивили.

DualLock

-- слушай, а этот DualLock со стены потом уже только со стеной вместе удаляется? и как ты думаешь, будет он держаться на чем-то неровном типа рифленого гипсокартона как у меня на стене?

Ты видимо не очень

Ты видимо не очень внимательно читал дискуссию. Речь шла совсем о другом. Но вполне возможно что в мире есть люди которые встают в позы. Мир большой, людей много.

подожди, так я не понял - ты согласен с тем, что SNR при дау

подожди, так я не понял - ты согласен с тем, что SNR при даунсемплинге растёт ?

Если бы "просто писали" -

Если бы "просто писали" - надо посыпать голову пеплом, извиниться и выкатить фикс своего продукта. А если люди встают в позы и говорить мол десятилетиямы было "вот так" - то мне подобная осведомленность кажется подозрительной.

Наказывают то не поборников

Наказывают то не поборников совместимости, а пользователей.

И я не думаю, что кто-то осознанно "юзал фичу". Писали просто memcpy() не задумываясь. Оно работало. Даже если и читали описание, то давно и забыли, работает и зашибись. В типовой ситуации спеки же начинаешь читать только если что-то идет не так, как задумано.

Ну это понятно, если

Ну это понятно, если разработчик библиотеки поленился указать или обработать перекрытие буферов - кто без греха, можно понять, простить, пофиксить и линейкой по рукам не бить.

Но я немного о другом. Я о довольно массовых стонах про какое-то "дефакто" поведении memcpy. Т.е. эти люди годами совершенно сознательно "юзали фичу". А теперь эти чрезмерно эрудированые личности жалуются, мол, как же так, что ж такое...

Я например за 20 лет ваяния на c/c++ никаким "дефакто" поведением memcpy() не интересовался, даже в голову не приходило закладыватся на такое. Есть опасения - берем memove и все. Поэтому мне поборников "совместимости" нисколько не жаль, наоборот, наказывать нужно за такие вещи, если умом не доходит.

Да, кстати, по результатам

Да, кстати, по результатам истории я теперь точно знаю что
а) memcpy, memmove, bcopy в FreeBSD - просто одно и тоже (но три копии кода! Умножить на три реализации, C, i386, amd64)
б) и так и надо, блин! В смысле, не три реализации, а одно и то же.

А это место такое,

А это место такое, небанальное. Представим что есть библиотека, получающая два буфера (in и out) и ее закодировали по спекам, используя memcpy и вообще без задней мысли. Скажем, распаковка чего-то

А потом кто-то решает что-то поэкономить и дает туда один и тот же буфер и как источник и как назначение. Тестирует. Работает! Что там внутри memcpy() - никто и не думает.
Ура, мы поэкономили половину памяти, теперь раскодируем прямо in place.

Меня в этой истории больше

Меня в этой истории больше всего поразил факт наличия большого количества людей ЗНАЮЩИХ что memcpy как-то там "обычно" копирует, и в то же время НЕПОДОЗРЕВАЮЩИХ, что однажды это может прекратится. Этакая инфантильная эрудированность. По моему за такое нужно бить линейкой по рукам, причем длинной, железной и ребром.

Я так понимаю, это же плагины к браузерам, т.е. обертка долж

Я так понимаю, это же плагины к браузерам, т.е. обертка должна приехать ко всем бывшим и будущим браузерам, правильно? И во всех дистрибутивах?

И ко всем другим программам, которые оказались поломаны (кроме флэша есть еще найденные, а сколько еще не найденных?) ?

Не, если уж быть формалистами и действовать по процедуре, то
а) откатить изменение, выпустить апдейт
б) вернуть изменение; выпустить апдейт с другим major version
Потому что бинарная совместимость то - нарушена.

Ну а дальше, да, можно разбираться, что же делать на самом деле.

если приехала в апдейте - то что мешает приехать в апдейте о

если приехала в апдейте - то что мешает приехать в апдейте обёртки к flashplayer с LD_PRELOAD?
зачем было впутывать в эту историю разработчииков glibc?

Да, я тоже согласен, что

Да, я тоже согласен, что Линус в данной ситуации выглядит разумно, а Дреппер - нет.

И, пожалуй, Дреппера на работу к себе я не хочу.

Ответ нашелся - он был со

Ответ нашелся - он был со ссылкой, а антиспам у меня теперь дюже подозрительный (потому как достали)

Я его оттуда достал, он там выше есть.

А, да, про перекрывающуюся

А, да, про перекрывающуюся память там у avva было: сначала она была не перекрывающейся, для чего приняли специальные меры (это не во флэше), а потом порефакторили.

Вопрос же вообше шире - а зачем такой дурной вызов, если есть нормальный. Ну вот исторически наросло за 40 лет или сколько там языку C

Да понятно что баг в плейере,

Да понятно что баг в плейере, никто и не отрицает. Но все можно было сделать так, что и проги с багами будут работать, и копирование будет быстрое. Вот не сделали, уперлись рогом, за то и порицаем.

Кудато делся мой предыдущий ответ, може потер кто то...

В смысле, "зачем"? Хочу и

В смысле, "зачем"? Хочу и пишу, руки есть, клавиатура, блог собственный.

Сама идея, что копирование назад, при всех префетчах и т.п. может оказаться быстрее - весьма удивительна, да.

Тогда зачем писать про траву?

Тогда зачем писать про траву? По спецификации можно, вещь элементарная, зачем кому-то использовать memcpy() на потенциально перекрывающейся памяти, непонятно. По факту, действительно, очень немного программ оказались с проблемами.

Я удивляюсь что на gcc никто не наезжает что delete вместо delete[] падает. Тоже, говорят, где-то работает.

Откуда у меня злость, если я

Откуда у меня злость, если я не пользуюсь линуксом на десктопе?
Мне вся эта история, сама по себе, безразлична, а вот то, какие бездны открылись в человечестве - любопытно да.

Пруфлинк же простой, "оно работало".

вы сейчас пытаетесь сорвать

вы сейчас пытаетесь сорвать злость на интеле. Наверняка у них нет в тесткейзах адобовского флеша, и их сложно за это винить. А где можно прочитать о каких-то объективных данных что "всегда копировали от головы к хвосту"?

Фактически всегда копировали

Фактически всегда копировали от головы к хвосту.

Надо выкурить много травы вместе с интелом, чтобы пришло в голову делать это в обратную сторону.

Масштабы важны. Флэш касается примерно каждого первого, а vm

Масштабы важны. Флэш касается примерно каждого первого, а vmware - сам понимаешь.

Ещё раз: конкретной реализацией это не определено. Точка. В

Ещё раз: конкретной реализацией это не определено. Точка. В том случае, который поменяли — да, было определено (на уровне сложившийся традиции), в обратном случае это всегда был UB, конкретно выливавшийся в разное поведение на (вот только по тому, что у меня под рукой есть) FreeBSD@x86, FreeBSD@amd64, glibc@x86, glibc@x86_64. Во всех трёх случаях будет разный выхлоп. Я не верю, что в здравом уме и трезвой памяти можно на такое закладываться.

clamav Это у меня оговорка, видно по Фрейду, спасибо что по

clamav

Это у меня оговорка, видно по Фрейду, спасибо что поправили. :)

Да конечно, программы кривые, об этом никто и не спорит. Та

Да конечно, программы кривые, об этом никто и не спорит.
Там вообще никто не думал, как написать правильно (если б думали, сразу бы и использовали memmove). Уж как написали, так и написали. Но речь-то сейчас не об этом, а только о том, как сделать, чтоб они продолжали работать.

"Всегда правильная работа" != "поведение старого memcpy" "П

"Всегда правильная работа" != "поведение старого memcpy"

"Поведение memcpy в случае пересекающихся регионов неопределено" - это оно стандартом не определено, а конкретной реализацией вполне определено. И вот с этой конкретной реализацией программы работали правильно. Если эту реализацию заменить на "правильную", но другую, программы тоже могут работать неправильно.

Pages

Subscribe to comments_recent_new