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

Title Comment
Ещё уточню: рассчитывать на негарантированный стандартом, но

Ещё уточню: рассчитывать на негарантированный стандартом, но "правильный" результат ещё простительно (хотя я так не считаю, но речь не о том), но рассчитывать на то, что явно неопределённое "неправильное" поведение будет всегда и везде таким же, какое оно на машине разработчика в момент написания — уже нет.

Нет. Поведение memcpy в случае пересекающихся регионов неоп

Нет.

Поведение memcpy в случае пересекающихся регионов неопределено. "Старый" memcpy(char *dst, const char *src, size_t len) работал правильно* в случае dst = src - N (где N < len), новый выдаёт условно непредсказуемый результат, а в случае dst = src + N они оба делают непредсказуемые вещи. memmove всегда работает правильно*. Таким образом, заменой memcpy на memmove мы добиваемся всегда правильной* работы.

Если кто-то закладывался на гарантированно непредсказуемый результат memcpy при dst = src + N, то это гарантированно неправильная программа. И была, и есть. Хотя бы просто потому, что результат зависит от ОС и даже от архитектуры.

То есть хак грязный, но правильный.

----
* В данном случае под "правильной работой" подразумевается, что по адресу dst после выполнения функции будет ровно то содержимое длиной len, что было в src до выполнения.

А зачем сквид со спамассасином скрещивать?

А зачем сквид со спамассасином скрещивать?

Так в том-то и дело, что программы сломались именно оттого,

Так в том-то и дело, что программы сломались именно оттого, что закладывались на поведение старого memcpy.
Конечно, они не специально закладывались, но так уж получилось, что с ним они работают нормально. А с новым - ломаются, потому что он работает по-другому. Но ведь и memmove работает по-другому, так что они и с ним могут ломаться. Поэтому хак не просто грязный, а неправильный.

Присоединяюсь к хору голосов

Присоединяюсь к хору голосов о том, что API должно быть задумано изначально так, чтобы его было трудно использовать неправильно. memmove -- вариант правильного API, memcpy надо было назвать memory_unsafe_copy.

Пропатчил свою libflashplayer.so, заработали игрушки вконтакта ;)

Это нормальный хак. Да, memmove всегда работает "правильно"

Это нормальный хак. Да, memmove всегда работает "правильно" (memcpy и старый непредсказуемое что-то выдавал в случае dst = src + 1), но если кто-то закладывался на поведение старого memcpy — то это такой ССЗБ, что я в такое не верю. Во всех остальных случаях они работают одинаково (ну, кроме скорости, очевидно).

PS: что не отменяет того факта, что это всё-таки грязный хак, как не крути.

Это очень плохой хак, потому что memmove работает хоть и иде

Это очень плохой хак, потому что memmove работает хоть и идеологически правильно, но скорее всего, не так, как прежний memcpy.

это такая штука, которую надо всё время патчить. и непременн

это такая штука, которую надо всё время патчить. и непременно под FreeBSD!

А я может чего-то не знаю?

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

<q><i>&gt; Новая реализация стала недетерминированной, отчег

> Новая реализация стала недетерминированной, отчего сломалось некоторое количество программ. В число сломанных программ попал Adobe Flash Player, который очень распространенный и при этом распространяется в бинарях т.е. быстро починить нельзя. Более того, сломалась неподдерживаемая (но более хорошая) 64-битная версия, которую чинить и не будут скорее всего.

Гентушники с помощью ломика, objdump, dd и какой-то там матери это при установке чинят подменой вызовов memcpy(2) на memmove(2). Хотя это тот ещё хак, конечно...

"В OSS человек - это только разработчик, ну или" вот и было

"В OSS человек - это только разработчик, ну или"

вот и было выше мудро сказано - фида, такая фида

из-за чего и получаются именно что объедки достойные помойки и пригодные лишь для специально тренированной кошки

Аналогичный случай имел место <s>в городе Тбилиси</s> в Wind

Аналогичный случай имел место в городе Тбилиси в Windows. И там пользователи однозначно считают виноватыми вовсе не криворуких разработчиков софта, а разработчиков Windows.. Но это отдельный вопрос.

А на твой вопрос "что должен делать разработчик библиотеки" там ответ однозначный: делать так, чтоб у пользователя всё работало.
Вот пример: http://deadracoon.livejournal.com/51397.html
У него там ещё более показательные случаи были, но я сейчас найти не могу.

p.s. быстро починить можно, принудительно подсовывая библиотеку посредством LD_PRELOAD со старым вариантом memcpy. Что не отменяет всего остального.

Реальная проблема -- FF 3.6 перестал открывать плагин консол

Реальная проблема -- FF 3.6 перестал открывать плагин консоли VMWare. Это не заинтересовало ни FF ни VmWare. И что?

Не очень большой масштаб? Хорошо.

Сколько лет интеграция сквида и спамасасина делалась какими-то студенческими соплями на пхп?

А про всякие выверты в html и его обработке -- это да. Возможно что скорее всего поправят стандарт, а не сайт. Но такая практика не пошла на пользу ни разработчикам браузеров ни разработчикам сайтов. :)

Ну это маятник. На транспорте вдруг вырастает ЖЖ, гейтование

Ну это маятник. На транспорте вдруг вырастает ЖЖ, гейтование в ЖЖ и всё такое прочее :)

Ну как, моральное удовлетворение от правильности, и даже нав

Ну как, моральное удовлетворение от правильности, и даже наверное какая-то экономия если строгий человек заставляет всех пользующихся продуктом людей следовать идеологии :) Теоретически это "правильный путь", но практически -- конь в нечистом вакууме :(

Мне лично симпатичнее "чтобы работало" -- у нас контора с клиентами напрямую общается, и главный приоритет -- счастливый клиент :)

Наверно кривая, я её переупростил. :) Меня в ней интересовал

Наверно кривая, я её переупростил. :) Меня в ней интересовала иллюстративность того, что люди и сообщества могут свободно пересекаться оставаясь собой. То есть и люди и стулья, конечно.

И о мотивациях. Конечно своя, но совпадение фрагментов мотивация и усилий и используются в сообществе.

Я всё сделал хорошо и даже лучше, из-за чьей-то криворукости где-то что-то отвалилось и теперь от меня требуют, чтобы я обратно сделал плохо. Зачем это мне? Кому я тут должен?

И для коммерса масштаб проблемы измеряется не количеством абстрактных людей. Если у миллионов пользователей OpenOffice перестанут открываться документы их собственных пользователей, разве это остановит коммерческих разработчиков? :)

А смысл? Может лучше всё равно исправить, а лишнего этого че

А смысл? Может лучше всё равно исправить, а лишнего этого человека отправить искать новых клиентов? :)

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

Ну если не монополист в своей области и продаётся продукт юзерам, то, конечно надо к ним лицом "чтобы работало" а не попой "вас много а я одна/насовали тут а мне разбирайся/конец квартала, напильником сами доработаете".

Если, скажем, продукт для контор, и есть возможность поставить человека с плёткой "чтобы муштровал" и всё было идеологически правильно, то битте шон, конечно :)

Чуваки ж тычут в спеку где

Чуваки ж тычут в спеку где написано, что behavior undefined. Если оно undefined, то оно может быть и таким, когда все работает, ан нет, они придумали себе, что нужно именно undefined и типо где то там быстрее. Заметь, про бенефиты никто и не говорил.

> Проблема в том, что при возникновении конфликтов между правилами и реальной жизнью - должен быть какой-то внятный механизм
> разрешения этих конфликтов
Для нормальных людей, как Линус такие механизмы не нужны, собсно об этом и был мой пост. Не берите на работу людей которые программируют (или там еще чего делают) для компьютеров и плюют на окружающих. А то потом получаются всякие http://www.eglibc.org/home :)

я ж вроде зареганый, а капчу спрашивает.

Firefox - несколько особый случай. Его присутствие можно хот

Firefox - несколько особый случай. Его присутствие можно хотя бы по строчке user-agent в логах web-серверов вычислить.

+1, согласен про найм. Не нужно пытаться объять необъятное и

+1, согласен про найм. Не нужно пытаться объять необъятное и впихнуть невпихуемое (с). Важно достижение результата, а оно будет получено быстрее, когда команда работает как единый организм (а значит - одинаково мыслит), чем когда вместе трудятся лебедь, рак и щука.

Не рублем единым. Точнее, бесплатная userbase тоже прекрасно

Не рублем единым. Точнее, бесплатная userbase тоже прекрасно конвертируется в рубли, просто курс ниже.

Поэтому пользователь, который голосует просто установкой (и использованием) firefox или chrome или линукса - он тоже проголосовал. Вниманием. Экономика внимания, туды ее растуды.

Но, конечно, разработчики библиотек эту экономику внимания чувствуют меньше

Проблема не в следовании

Проблема не в следовании (выдуманным) правилам, при отсутствии дополнительных обстоятельств следовать им надо, ибо вовсе без правил сильно хуже.

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

Ну тут я немножко не согласен .Людьми можно и нужно считать

Ну тут я немножко не согласен .Людьми можно и нужно считать тех, кто способен высказать свое мнение.

В коммерческом софте пользователь - человек, потому что он может ХОТЯ БЫ проголосовать рублем. Другое дело что для интерпретации действий таких людей нужне авгур-маркетолог, который позволит перевести "знамения" на понятный разработчикам язык.

В OSS community пользователь, который ничего не контрибьютит - вообще "темная материя", Даже по количеству скачиваний ничего нельзя опрелделить.

Человека, на мой взгляд, следует определять как существо, способное к социальному взаимодействию.

ох да. свиньи не кормлены, поля не паханы, а они... а что т

ох да. свиньи не кормлены, поля не паханы, а они...

а что такое KDE? (навно хлопая глазками)

По счастью, есть и нормальные люди. В смысле, разработчики,

По счастью, есть и нормальные люди. В смысле, разработчики, которые считают людей - людьми.

Без этого тот же Firefox не взлетел бы.

Она (glibc) им скорее всего не нужна, но приехала к ним в ап

Она (glibc) им скорее всего не нужна, но приехала к ним в апдейте.

А flash им нужен т.к. они хотят страшные ролики про Фукусиму смотреть.

Тут проблема интереснее. Вот представь Firefox и его пользо

Тут проблема интереснее.

Вот представь Firefox и его пользователей. Допустим, версия 7.18.42 перестала отображать какой-то достаточно популярный сайт, вроде cnn.com (не гугл, но тоже много). Допустим, даже, на cnn кривая верстка, но IE и прочие Operы его отображают. Разработчики FF не будут кричать "пусть эти уроды переделают сайт", а постараются вернуть совместимость с версией 7.18.41.

А вот в случае *библиотек* пользователями являются вовсе не настоящие конечные пользователи, а другие разработчики. А пользователей авторы libc обычно вовсе не видят. А вот когда внезапно увидели, да и то, не пользователей а Линуса, тут и случилась веселуха.

Конечно, не человек. В OSS человек - это только разработчик,

Конечно, не человек. В OSS человек - это только разработчик, ну или хотя бы человек, который грамотные багрепорты контрибьютит. Чистый пользователь, который ничего не контрибьютит, это даже не вроде пойнта в фидо. Это кошка, которая питается выброшенными на помойку объедками. Ну да, бывает еще домашняя кошка, которую какой-нибудь челвоека специально кормит.

Но надо учитывать, что любой разработчик ОДНОВРЕМЕННО является пользователем.

ИМХО пользователей, которым НУЖНА свежая glibc и flashplayer

ИМХО пользователей, которым НУЖНА свежая glibc и flashplayer одновременно - единицы.
а через полгода adobe починит flashplayer в этом отношении.

PS: а вообще flashplayer пожалуй самая глючная штука у меня на десктопе.

Pages

Subscribe to comments_recent_new