gentoo.ru
Общение на окологентушные темы
gentoo@conference.gentoo.ru
Среда, 29 апреля 2020< ^ >
Pinkbyte установил(а) тему: Gentoo Linux || FAQ: http://www.gentoo.ru/faq || Вставки более 3 строк → app-text/wgetpaste || Логи: http://gentoo.ru/jabber/logs/ || Языками чешут в talks@conference.gentoo.ru ||  Фортунки http://fortunes.gentoo.ru || Фортунки, спасибо что живы!
Конфигурация комнаты
Участники комнаты

GMT+3
[00:07:53] nordwind вышел(а) из комнаты
[00:17:05] nordwind вошёл(а) в комнату
[01:20:24] <0xd34df00d> Больно быть тупым.
[01:20:28] <0xd34df00d> Умный бы давно выкинул эти плюсы нафиг.
[01:27:03] <Deda_Zych> 0xd34df00d: всё ещё бомбишь от лупхолов? ;)
[01:29:03] <0xd34df00d> Deda_Zych: вообще от всего бомблю.
[01:29:06] <0xd34df00d> Затрахали плюсы ппц.
[01:29:51] <Deda_Zych> какой ты чувствительный мальчик, Томми
[01:30:12] <Deda_Zych> небось тоже трёхэтажные темплейты любишь?
[01:30:25] <0xd34df00d> Десятиэтажные даж бывали.
[01:30:28] <0xd34df00d> И я не сарказмирую.
[01:30:43] <Deda_Zych> погоди, концепты скоро выкатят, порадуешься
[01:30:51] <Deda_Zych> (вроде уже выкатили)
[02:35:30] <nordwind> Дедфуд, да это нормально. Просто иди дальше.
[02:39:06] <michael_ul> 0xd34df00d: ты ещё скажи, что тебе не нравится страдать от десятиэтажных темплейтов )
[02:44:49] nordwind вышел(а) из комнаты
[02:44:59] nordwind вошёл(а) в комнату
[02:53:56] <0xd34df00d> Deda_Zych: плюсы всё равно имеют кучу UB.
[02:53:58] <0xd34df00d> Так жить нельзя.
[02:54:21] <0xd34df00d> nordwind: ну я вот сейчас всякий матан ботаю и думаю уже совсем сваливать хотя бы в хаскель, в идеале — в академический ресёрч в теории типов и всяком таком.
[02:54:29] <0xd34df00d> michael_ul: ну в продакшене это всё не оч.
[02:57:15] <michael_ul> Кто говорит про продакшн? )
[02:57:45] <michael_ul> А у нас есть кто занимается такими исследованиями?
[03:00:15] nordwind вышел(а) из комнаты
[03:01:32] <0xd34df00d> В РФ только jetbrains research по большому счёту.
[03:01:42] <0xd34df00d> Так-то ещё кто-то есть.
[03:16:39] nordwind вошёл(а) в комнату
[05:49:01] <Deda_Zych> 0xd34df00d: UB задокументированы. Не надо их игнорить.
[05:58:26] <0xd34df00d> Deda_Zych: но их много.
[05:58:32] <0xd34df00d> И в очень неочевидных местах местами.
[05:58:37] <0xd34df00d> Deda_Zych: вот тот же memset — тоже UB.
[05:59:52] <hhex> попросите тех кто пишет стандарт, чтобы вынесли все UB в отдельное место либо к каждому спец. пометку
[06:14:42] <Deda_Zych> 0xd34df00d: в каком месте memset -- C++ и в каком месте он -- UB?
[06:17:26] <michael_ul> Deda_Zych: в cstring, где ж ещё. Или, скажешь, это не плюсовый заголовок? )
[06:19:59] <Deda_Zych> нед, это лишь алиас над <string.h>
[06:23:26] <michael_ul> В C его нет, в C++ он есть.
[06:23:37] <michael_ul> Вывод очевиден )
[06:28:09] <Deda_Zych> michael_ul: как скажете
[06:28:11] <Deda_Zych> https://en.cppreference.com/w/cpp/header/cstring
[06:32:18] <michael_ul> И в чём противоречие со сказанным мной? Происхождение из C - это не отсутствие в C++. И да, memset в C++ и memset в C - разные, в том числе потому, что в C++ у него есть UB.
[06:41:08] <Deda_Zych> michael_ul: ни в чём, согласен. Ну и да, покажите мне место в стандарте, где memset один отличается от другого?
[06:41:30] <Deda_Zych> В С++ есть UB, а в C -- нету. Ога. :)
[06:46:19] <michael_ul> В C++ есть UB, если memset применяется к не TriviallyCopyable объекту.
[06:47:05] <michael_ul> Что-то я не вижу в C++ UB, если dest nullptr
[07:01:55] <Deda_Zych> > В C++ есть UB, если memset применяется к не TriviallyCopyable объекту.
Как минимум, логично.
[07:07:32] <Deda_Zych> Полагаю, что этот кейс: If the object is a potentially-overlapping subobject or is not TriviallyCopyable (e.g., scalar, C-compatible struct, or an array of trivially copyable type), the behavior is undefined.
и предполагает что NULL trivially copyable не является.
[07:12:24] <michael_ul> Похоже на то. Но могли и явно указать.
[07:25:09] <0xd34df00d> Deda_Zych: > в каком месте memset -- C++
Есть упоминание этой функции в стандарте C++.
[07:25:33] <0xd34df00d> > и в каком месте он -- UB?
Стандарт не определяет семантику memset и не определяет классы объектов, на которых его можно делать.
[07:25:59] <0xd34df00d> michael_ul: к TriviallyCopyable его применять тоже нельзя (cppreference тут нагло врёт).
[07:26:40] <michael_ul> 0xd34df00d: а к чему можно без UB?
[07:26:56] <0xd34df00d> michael_ul: в том-то и дело.
[07:26:59] <0xd34df00d> Стандарт не говорит, к чему.
[07:27:46] <Deda_Zych> 0xd34df00d: в том, что он часть стандартной библиотеки C
[07:28:02] <michael_ul> Но UB - вещь явно прописанная. Если оно для чего-то не указано, значит, это что-то не UB, не?
[07:28:05] <Deda_Zych> > Стандарт не определяет семантику memset и не определяет классы объектов, на которых его можно делать.
Определяет.
[07:43:41] <0xd34df00d> Deda_Zych: покажи, где.
[07:45:02] <0xd34df00d> michael_ul: если что-то не указано, то оно именно что не указано. Тут формально логический подход: стандарт конструктивно описывает семантику языка, поэтому для того, чтобы доказать, что данная конструкция корректна, приведи обоснование из стандарта, которое её разрешает и наделяет семантикой.
[07:45:43] <Deda_Zych> 0xd34df00d: выше же было:  If the object is a potentially-overlapping subobject or is not TriviallyCopyable (e.g., scalar, C-compatible struct, or an array of trivially copyable type), the behavior is undefined.
[07:46:41] <Deda_Zych> 0xd34df00d: michael_ul: если что-то не указано, то оно именно что не указано. Тут формально логический подход: стандарт конструктивно описывает семантику языка, поэтому для того, чтобы доказать, что данная конструкция корректна, приведи обоснование из стандарта, которое её разрешает и наделяет семантикой.
А вот тут уже неконструктивная демагогия начинается.
[07:48:21] <michael_ul> Да не, всё правильно. Стандарт на то и стандарт, чтобы описывать, что можно делать.
[07:48:24] <Deda_Zych> Если ты не умеешь читать стандарт -- увы ¯\_(ツ)_/¯
[07:48:48] <Deda_Zych> Это я дедфуду, если что.
[07:59:18] <0xd34df00d> > выше же было:  If the object is a potentially-overlapping subobject or is not TriviallyCopyable (e.g., scalar, C-compatible struct, or an array of trivially copyable type), the behavior is undefined.
Ты можешь дать ссылку на конкретный кусок стандарта, где это написано?
[07:59:22] <0xd34df00d> Хинт: cppreference не является стандартом.
[07:59:56] <0xd34df00d> И ещё один хинт, чтобы сэкономить твоё время: у тебя не получится дать ссылку на конкретный кусок стандарта, где это написано, потому что там это не написано.
[08:08:40] <michael_ul> В стандарте есть только "The contents and meaning of the header <cstring> are the same as the C standard library header <string.h>"
[08:09:30] <michael_ul> То есть,  Deda_Zych прав, что C++ memset тот же, что и в C.
[08:10:58] <0xd34df00d> Ну да.
[08:11:04] <0xd34df00d> Но С ничего не знает о плюсовых классах объектов.
[08:11:08] <0xd34df00d> Или о лайфтайме там, не знаю.
[08:11:24] <michael_ul> А 0xd34df00d прав, что на cppreference отсебятина. Хотя и логичная.
[08:11:40] <0xd34df00d> memcpy тоже такой же, как в C, однако ограничения есть.
[08:11:46] <0xd34df00d> michael_ul: кстати, это тоже формально некорректно.
[08:12:07] <0xd34df00d> Потому что тип class Foo { int a = 5; }; будет trivially copyable, но memset его на 0 — нарушение инварианта.
[08:12:16] <0xd34df00d> И, коли мы говорим о логике, то такое скорее должно быть запрещено.
[08:13:38] <michael_ul> Смотря какая логика. Ты исходишь из логики объектов, но есть и логика памяти, сказано записать по такому-то адресу ноль, пиши и не выпендривайся.
[08:14:44] <michael_ul> Вот что меня напрягает в последних версиях стандарта, так это уход от этой логики памяти. Причём и в C такая же фигня происходит.
[08:35:44] nordwind вышел(а) из комнаты
[08:37:54] nordwind вошёл(а) в комнату
[08:53:01] <Deda_Zych> 0xd34df00d: там спецом для тебя написано TriviallyCopyable. Очевидно, ты же знаешь, что это такое, да? :)
[08:53:53] <Deda_Zych> <0xd34df00d> Потому что тип class Foo { int a = 5; }; будет trivially copyable, но memset его на 0 — нарушение инварианта.
С чего ради? Это POD. Замени class на struct -- ничего не изменится.
[08:54:59] <Deda_Zych> Или ты имеешь в виду, что заменив private-поля класса -- мы нарушим его инвариант? Ну, отчасти, да.
[09:56:52] nehex вошёл(а) в комнату
[09:58:20] <0xd34df00d> Deda_Zych: где именно написано-то?
[09:58:37] <0xd34df00d> Deda_Zych: ты можешь прямую ссылку-то дать?
[10:09:40] <Deda_Zych> 0xd34df00d: сверху ссылка была: https://en.cppreference.com/w/cpp/string/byte/memcpy
[10:10:25] <0xd34df00d> Deda_Zych: я тебе уже пару раз сказал: cppreference не является стандартом.
[10:11:21] <0xd34df00d> Последний публичный драфт стандарта или eel.is тут будут более релевантны.
[10:15:08] <Deda_Zych> 0xd34df00d: там вполне себе адекватные выдержки из стандарта
[10:15:26] <0xd34df00d> Чаще всего да, но не в этом случае.
[10:15:28] <Deda_Zych> тебе этого будет вполне достаточно
[10:15:55] <Deda_Zych> идёшь на godbolt, проверяешь и не задаёшь больше глупых вопросов
[10:16:08] <0xd34df00d> Что проверяешь? UB?
[10:16:39] <0xd34df00d> Я тебе стопицот примеров UB могу сконструировать, которые на годболте себя никак не проявят.
[10:17:08] <0xd34df00d> Все ж рекомендую попробовать перестать фанатично отрицать непонятно что и попробовать самостоятельно порыться в тексте стандарта.
[10:17:38] <0xd34df00d> Олсо, когда мне надо доказать возможность чего-то (или явный запрет), я ссылаюсь на драфт, а не на цппреференс.
[10:19:03] <Deda_Zych> тебе на цппреференс уже написали, что если тип не тривиально конструктируемый, то UB. Что ещё надо?
[10:19:49] <0xd34df00d> Из этого не следует, что если тип тривиально конструируемый, то не UB.
[10:19:59] <Deda_Zych> Демагогия.
[10:20:32] <0xd34df00d> Окей, ты считаешь, что стандарт разрешает memset только для trivially copyable типов?
[10:21:23] <0xd34df00d> А то вдруг мы просто о разных вещах спорим.
[10:21:27] <Deda_Zych> Ок, приведи такой пример, где для тривиального конструктируемого типа memset вызывает UB?
[10:23:16] <0xd34df00d> memset не вызывает UB, он просто не разрешен стандартом.
[10:23:49] <0xd34df00d> Про memcpy, кстати, на cppreference тоже отсебятина написана, там можно сильно меньше.
[10:25:15] <Deda_Zych> Про memcpy тоже всё правильно написано.
[10:26:10] <0xd34df00d> «Тоже»
[10:26:24] <Deda_Zych> Наблюдаемое поведение у функции именно такое, как написано на cppreference.
[10:26:51] <0xd34df00d> В стандарте про мемсет нет, про связь memset и trivially copyable нет, то, что какой-то компилятор сегодня себя так ведёт — не показатель.
[10:29:08] <Deda_Zych> Сравни на годболте, говорю же.
[10:31:07] <0xd34df00d> Годболт у нас теперь истина в последней инстанции?
[10:31:26] <0xd34df00d> Такое совершенно непонятное мне желание просто взять и открыть стандарт, наконец.
[10:31:42] <0xd34df00d> Нежелание, то бишь.
[10:35:14] <Deda_Zych> 0xd34df00d: потому, что там вполне ясно указано, как ведёт себя функция memset
[10:35:27] <0xd34df00d> Ясно, но неверно, увы.
[10:36:02] <0xd34df00d> А главный источник истины в плюсомире — стандарт, а не godbolt и не cppreference.
[10:37:22] <Deda_Zych> 0xd34df00d:  обоснуйте чем неверно, гражданин.
[10:37:38] <0xd34df00d> Тем, что расходится со стандартом.
[10:37:51] <Deda_Zych> Чем именно?
[10:38:29] <0xd34df00d> В стандарте нет ни намека на то, что memset допустим для trivially copyable (или вообще каких бы то ни было) типов.
[10:39:02] <michael_ul> Да нету в стандарте описания поведения memset вообще. Отсылка на стандарт С и всё.
[10:39:14] <Deda_Zych> 0xd34df00d:  цитату в студию
[10:39:35] <0xd34df00d> Как я могу процитировать отсутствие упоминания?
[10:39:45] <0xd34df00d> Ну вот, разве что: «»
[10:40:29] <michael_ul> Deda_Zych: я выше цитировал стандарт, там ни черта нет больше
[10:40:35] <0xd34df00d> Deda_Zych: открываешь PDF C++17 standard draft.
[10:40:51] <0xd34df00d> Потом жмешь ctrl-f.
[10:40:58] <0xd34df00d> Пишешь memset
[10:41:08] <0xd34df00d> Читаешь все пять (или около того) вхождений.
[10:41:35] <0xd34df00d> Опционально потом пишешь memcpy, читаешь, сравниваешь.
[10:41:41] <Deda_Zych> 0xd34df00d:  ну ок, занули мне любой не POD-класс.
[10:41:53] <0xd34df00d> Не имею права.
[10:42:00] <0xd34df00d> POD тоже не имею права.
[10:42:03] <Deda_Zych> Ту же мапу, например.
[10:42:35] <Deda_Zych> Что значит "не имею права"? А кто там говорил недавно, что не будет UB?
[10:42:43] <0xd34df00d> Щито?
[10:42:44] <Deda_Zych> На ходу переобуваемся?
[10:42:53] <0xd34df00d> Что я говорил, ещё раз?
[10:43:07] <0xd34df00d> Я сразу сказал, что вообще любое использование memset — UB.
[10:43:37] <Deda_Zych> [11:08:16] <0xd34df00d> Deda_Zych: > в каком месте memset -- C++
Есть упоминание этой функции в стандарте C++.
[11:08:38] <0xd34df00d> > и в каком месте он -- UB?
[10:43:55] <Deda_Zych> А это что были за газирования лужи тогда?
[10:44:23] <0xd34df00d> Глазки разуй, это цитата из твоего сообщения.
[10:44:32] <0xd34df00d> После нее было вот это:
[10:44:32] <Deda_Zych> Если хочешь разводить демагогию -- пошли в канал по плюсам.
[10:44:37] <0xd34df00d> Стандарт не определяет семантику memset и не определяет классы объектов, на которых его можно делать.
[10:44:42] <Deda_Zych> Там таких любят.
[10:44:56] <0xd34df00d> То, что я сейчас скопировал, ты видел?
[10:45:49] <Deda_Zych> 0xd34df00d:  тебе ссылку на cppreference кидали
[10:46:07] <0xd34df00d> Ты на вопрос ответь.
[10:46:16] <0xd34df00d> Что это вообще за трэш с твоей стороны.
[10:46:18] <Deda_Zych> возьми, замемсети std::map
[10:46:35] <Deda_Zych> Не буду я на демагогию отвечать.
[10:47:00] <Deda_Zych> пошли у профи спросим
[10:47:03] <0xd34df00d> Кидать _кусок_ моего сообщения, где я _процитировал тебя_, как доказательство того, что _я_ говорил, что memset не UB.
[10:47:13] <Deda_Zych> ДЕМАГОГИЯ
[10:47:29] <0xd34df00d> У тебя то ли маразм, то ли патологическое неумение признавать свои ошибки.
[10:47:46] <Deda_Zych> у меня нет ошибок
[10:48:07] <0xd34df00d> Понимаю, мы бы вслух голосом говорили, но тут-то логи пишутся, все текстом.
[10:48:12] <0xd34df00d> Это даже не смешно уже.
[10:48:26] <Deda_Zych> начнём с того, что ты memset к плюсам приравнял
[10:48:27] <0xd34df00d> Ну, значит, маразм.
[10:49:06] <Deda_Zych> закончим тем, что тебе пояснили, как оно работает, но ты упрямишься
[10:49:27] <0xd34df00d> > 0xd34df00d: в каком месте memset -- C++ и в каком месте он -- UB?
Твои слова.
[10:49:42] <0xd34df00d> То есть, ты кидаешь кусок своей фразы и приписываешь его мне.
[10:49:44] <0xd34df00d> Красава.
[10:50:51] <0xd34df00d> Deda_Zych: тебе пояснили, что в стандарте (не) написано, но ты с завидным упорством копипастишь цитаты из нерелевантых источников, не желая просто взять и открыть первоисточник.
[10:51:53] <0xd34df00d> На самом деле примерно на этом этапе надо закругляться. Дай знать, если у тебя будет ответ на вопрос о том, как этот выверт с цитатами интерпретировать.
[10:53:22] <michael_ul> 0xd34df00d утверждает, что использование memset в c++ - это всегда UB, так как в стандарте поведение memset не описано вообще. Звучит логично.
[10:53:52] <0xd34df00d> А, ну и если твой комплюктер не тянет открыть pdf'ку, можешь ограничиться https://stackoverflow.com/questions/53339268/what-trait-concept-can-guarantee-memsetting-an-object-is-well-defined/53339983#53339983
[10:54:06] <Deda_Zych> [14:32:31] <0xd34df00d> > 0xd34df00d: в каком месте memset -- C++ и в каком месте он -- UB?
Ты даже на эти вопросы ответить даже не смог, собственно, что выдаёт в тебе демагога.
[10:54:50] <0xd34df00d> Ответил на оба из них, см. выше в логах.
[10:55:02] <michael_ul> Ну, я могу сказать, что это место - раздел 21.5.3 стандарта
[10:55:18] <Deda_Zych> Да всё, уймись уже. То memset у тебя UB, то не UB,
[10:56:13] <0xd34df00d> Deda_Zych: процитируй, когда я сказал, что memset не UB.
[10:59:04] <Deda_Zych> Не буду, устал я от тебя.
[10:59:13] <0xd34df00d> ДЕМАГОГИЯ
[10:59:25] <0xd34df00d> Обосрался — скажи, что устал от оппонента.
[10:59:34] <0xd34df00d> Ладно, короче. Сорян за потраченное время.
[11:54:37] 0xd34df00d вышел(а) из комнаты
[11:58:29] nordwind вышел(а) из комнаты
[12:08:24] <Deda_Zych> 0xd34df00d: как скажешь
[12:30:41] nordwind вошёл(а) в комнату
[14:53:16] nordwind вышел(а) из комнаты
[14:53:47] nordwind вошёл(а) в комнату
[16:54:11] nordwind вышел(а) из комнаты: Replaced by new connection
[16:54:21] Deda_Zych вышел(а) из комнаты
[16:54:21] nordwind вошёл(а) в комнату
[16:55:57] hhex вышел(а) из комнаты: Replaced by new connection
[16:56:07] hhex вошёл(а) в комнату
[17:19:59] hhex вышел(а) из комнаты
[17:20:10] hhex вошёл(а) в комнату
[17:23:47] nehex вышел(а) из комнаты
[17:39:36] nordwind вышел(а) из комнаты
[17:39:46] nordwind вошёл(а) в комнату
[17:59:25] hhex вышел(а) из комнаты: Replaced by new connection
[17:59:35] hhex вошёл(а) в комнату
[18:20:51] 0xd34df00d вошёл(а) в комнату
[19:08:00] nordwind вышел(а) из комнаты
[19:16:57] nordwind вошёл(а) в комнату
[19:23:00] nordwind вышел(а) из комнаты
[19:23:33] nordwind вошёл(а) в комнату
[19:30:12] nordwind вышел(а) из комнаты
[19:30:22] nordwind вошёл(а) в комнату
[19:35:28] 0xd34df00d вышел(а) из комнаты
[19:45:59] nordwind вышел(а) из комнаты
[19:46:21] nordwind вошёл(а) в комнату
[20:21:30] nehex вошёл(а) в комнату
[21:57:28] Deda_Zych вошёл(а) в комнату
[22:06:32] hhex вышел(а) из комнаты: Replaced by new connection
[22:06:42] hhex вошёл(а) в комнату
[22:32:36] 0xd34df00d вошёл(а) в комнату
[22:39:23] nordwind вышел(а) из комнаты
[22:40:04] nordwind вошёл(а) в комнату
[23:36:04] nordwind вышел(а) из комнаты
[23:45:38] nordwind вошёл(а) в комнату
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!