Здравствуйте, LordMAD, Вы писали:
S>>На написание безполезных ассертов в тривиальных это уходит время и несколько отвлекаешься от поставленной задачи. LMA>Безполезных assert'ов писать не надо. assert(true); — это не безполезный assert, это способ документирования. Или Вы не понимаете зачем документировать свой код?
-1
LMA>unit-тесты — это не панацея, они тем полезнее, чем менее квалифицированные люди пишут код. В ряде случаев они почти бесполезны. Скорее всего, на написание качественного unit-теста уйдет существенно больше времени, чем на грамотное внесение assert'ов.
Мсье продемонстрирует публике например как с помощью ассертов проверить что функциональность класса не сломана во время рефакторинга? Скажем на примере класса, который считает CRC32.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[16]: А разве в OpenSource бывают собеседования? :)
Здравствуйте, CreatorCray, Вы писали:
LMA>>Безполезных assert'ов писать не надо. assert(true); — это не безполезный assert, это способ документирования. Или Вы не понимаете зачем документировать свой код? CC>-1
А если по-существу?
LMA>>unit-тесты — это не панацея, они тем полезнее, чем менее квалифицированные люди пишут код. В ряде случаев они почти бесполезны. Скорее всего, на написание качественного unit-теста уйдет существенно больше времени, чем на грамотное внесение assert'ов. CC>Мсье продемонстрирует публике например как с помощью ассертов проверить что функциональность класса не сломана во время рефакторинга? Скажем на примере класса, который считает CRC32.
Во-первых, Ваша фраза звучит так, как будто я утверждал, что assert'ы — панацея! Если Вам угодно ПРИДУМЫВАТЬ ложные утверждения, а потом героически их опровергать — это Ваше дело, но мне бы не хотелось в этом участвовать.
Во-вторых, "проверить что функциональность класса не сломана во время рефакторинга" можно множеством способов, включая assert'ы, unit-тесты и пр.... и ни один из этих способов не будет гарантировать корректности кода, поэтому то, что Вы просите сделать — это обыкновенная провокация, на которую я не собираюсь поддаваться.
Re[21]: Месье ещё и с формальной логикой не дружит?
Здравствуйте, LordMAD, Вы писали:
LMA>Здравствуйте, Programador, Вы писали:
LMA>>>>>Просто вторым и третьим аргументом оператора "?:" являются выражения, а не значения — что я уже писал выше. P>>вообщето и значениями и выражениями delete выражение типа void а new типа указатель поэтому P>>
P>>1? delete x:new int;
P>>
P>>распарсится нормально, но отбракуется по несовместимым значениям LMA>Какое отношение то, что написали Вы, имеет к тому, что написал я?
P>>Здесь собственно особенность того что оператор торйной поэтому от ? идет к : и поскольку запятая меньший приоритет то всеже так
P>>p, (q ? (p, q ): q), q
P>>вариант ответа ошибка, вобщем тоже правдоподобно LMA>Что Вы хотели этим сказать?
1. имхо выражения, а не значения некоректно, вроде мухи с котлетами
2. Вроде Вы придерживались с Егором противоположных мнений на парсинга pqpqpq
правильный парсинг p, (q ? (p, q ): q), q
p, ( (q ? (p, q ): q), q ) эти скобки тоже правильные хоть не дают ничего
а почему Егор какашками кидался
Re[22]: Месье ещё и с формальной логикой не дружит?
Здравствуйте, LordMAD, Вы писали:
LMA>Здравствуйте, Programador, Вы писали:
P>>кстати простая арифметика не имеет приретив поскольку есть унарный плюс и минус LMA>Вы понимаете, надеюсь, что вычитание и смена знака — это разные операции?
Вестимо разные, просто когда парсер пишешь это один и тотже символ
Re[22]: Месье ещё и с формальной логикой не дружит?
Здравствуйте, Programador, Вы писали:
P>1. имхо выражения, а не значения некоректно, вроде мухи с котлетами
Отчасти — да.
P>2. Вроде Вы придерживались с Егором противоположных мнений на парсинга pqpqpq P>правильный парсинг p, (q ? (p, q ): q), q P> p, ( (q ? (p, q ): q), q ) эти скобки тоже правильные хоть не дают ничего
Да, Вы правы.
P>а почему Егор какашками кидался
Могу только предполагать
Re[23]: Месье ещё и с формальной логикой не дружит?
Здравствуйте, Programador, Вы писали:
P>>>кстати простая арифметика не имеет приретив поскольку есть унарный плюс и минус LMA>>Вы понимаете, надеюсь, что вычитание и смена знака — это разные операции? P>Вестимо разные, просто когда парсер пишешь это один и тотже символ
Так приоритеты — у операций, а не у символов. То, о чем Вы пишете, просто говорит о том, что парсер должен будет понять — какой оператор соответствует символу.
Re[23]: Месье ещё и с формальной логикой не дружит?
Здравствуйте, LordMAD, Вы писали:
P>>правильный парсинг p, (q ? (p, q ): q), q P>> p, ( (q ? (p, q ): q), q ) эти скобки тоже правильные хоть не дают ничего LMA>Да, Вы правы.
неа ошибся .
Подумавши: x,y,z =(x,y),z Left to right все скобки слева, как +-. для пары +- так и для перегруженных не одно и тоже
Re[16]: Месье ещё и с формальной логикой не дружит?
Здравствуйте, Erop, Вы писали:
E>Здравствуйте, LordMAD, Вы писали:
E>>>Выпиши её, пожалуйста, для двух операций: "?:" и ","... E>>>>>Если у "?:" приоритет выше, чем у "," то поясни пожалуйста, почему вторая запятая обрабатывается так, словно она имеет более высокий приоритет, чем "?:"
LMA>>Я не пойму к чему это ты. Пусть у тебя приоритет "?:" получится 101, а у "," — 103 (меньшее значение соответствует более высокому приоритету), что дальше? Что ты хочешь сказать?
E>Я так тебя понял, что для этих двух операций таблица приоритетов выглядит так, как я выделил у тебя? E>Тогда, согласно этой таблице, в выражении
p, q ? p, q : p, q
скобки должны быть расставлены так
p, (q?p), (q:p), q
но это таки не верно. Это одна из причин, почему подход с приоритетами в С++ выражениях не работает. Работает подходь с грамматиками. E>Увы.
E>>>То есть ты ссылаешься на то, что корректность С++ выражений и порядок применения операций определяется не приоритетами, а некими грамматиками? Несводимыми, при этом, к понятию "приоритет операции"? Если так, то это обозначает, что приоритетов операций в С++ нет...
E>>>Пока что ты не прошёл лично мой ценз на соответствие уровня знаний С++ и уровня понтов по этому поводу LMA>>Взаимно. E>Ну процитируй стандарт С++, где там вводятся приоритеты операций, пжлст... E>Или ты намекаешь на то, что я слишком мало понтуюсь?
Не знаю как из стандарта доказать что что это well-formed и распарсить его.
Из грамматик а*б+С можно породить 2-мя способами. Где про это в стандарте , тем хуже для стандарта.
парсинг для бинарных операторов начинается с низких приоритетов. Поскольку ?: не бинарный его парсят перед, отдельно, также как унарные +-. То что его приоритет выше чем запятой означает что всетаки не так p, (q ? p, q : p), q а если был ниже то так (p, q) ?( p, q ): (p, q)
Всем известная таблица работает
Здравствуйте, LordMAD, Вы писали:
LMA>А если по-существу?
По существу: assert который ничего не проверяет бесполезен и не несет никакой смысловой нагрузки..
Твоя надежда на то, что увидевший его догадается что других ассертов тут не надо — ничем не обоснована.
По результатам проведенного еще в пятницу по аське "опроса" выяснилось, что в большинстве своем тот кто видит подобный ассерт считает автора параноиком и при первом же рефакторинге такие ассерты будут вычищены.
LMA>>>unit-тесты — это не панацея, они тем полезнее, чем менее квалифицированные люди пишут код. В ряде случаев они почти бесполезны. Скорее всего, на написание качественного unit-теста уйдет существенно больше времени, чем на грамотное внесение assert'ов. CC>>Мсье продемонстрирует публике например как с помощью ассертов проверить что функциональность класса не сломана во время рефакторинга? Скажем на примере класса, который считает CRC32. LMA>Во-первых, Ваша фраза звучит так, как будто я утверждал, что assert'ы — панацея!
Ты утверждал, что юниттесты в ряде случаев почти бесполезны, что они нужнее для низкоквалифицированных разработчиков, что на них уходит больше времени чем на ассерты. Лично у меня создалось впечатление, что юниттестами аффтар вообще не пользуется и терпеть их не может. Зато крайне любит ассерты и применяет их везде и всюду, квадратно-гнездовым методом.
LMA>Во-вторых, "проверить что функциональность класса не сломана во время рефакторинга" можно множеством способов, включая assert'ы
Опять 25! Повторюсь: как в приведенном примере (CRC32) с помощью assertов проверить не сломана ли функциональность?
LMA> unit-тесты и пр.... и ни один из этих способов не будет гарантировать корректности кода
Ну приехали...
LMA>то, что Вы просите сделать — это обыкновенная провокация, на которую я не собираюсь поддаваться.
Некоторое время Выбегалло пусто смотрел на него, затем сказал:
-- Эту реплику из зала мы, товарищи, сейчас отметем с негодованием. Как неорганизованную
(С)
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[15]: А разве в OpenSource бывают собеседования? :)
Здравствуйте, Programador, Вы писали:
P>Здравствуйте, CreatorCray, Вы писали:
CC>>Здравствуйте, LordMAD, Вы писали:
LMA>>>Ты считаешь, что это менее читабельно, чем LMA>>>
LMA>>>delete p;
LMA>>>p = 0;
LMA>>>
LMA>>>? CC>>Да. CC>>Код через запятую не имеет никакого преимущества, а вероятность неверного понимания или сотворения в том месте неоднозначной ошибки только повышает. P>как правило, вторая половина вообще не нужна, ее пишут для а вероятность неверного понимания или сотворения в ДРУГОМ месте неоднозначной ошибки только повышает. P>А вероятность закопипастить, одно без другого повышается, таким образом код c ; менее писабелен
А выделенное — вообще UB
Re[16]: А разве в OpenSource бывают собеседования? :)
Здравствуйте, Programador, Вы писали:
P>Здравствуйте, Юрий Жмеренецкий, Вы писали:
LMA>>>>>
LMA>>>>>delete p;
ЮЖ>>LMA>>>p = 0;
LMA>>>>>
ЮЖ>>А выделенное — вообще UB
мне так показалось что nulptr не отменяет преобразование 0 в указатель. nulptr конвертабельное значение какогото класса вводится дополнительно, на старые правила плевались, но рука вроде на основы не поднялась
Re[18]: А разве в OpenSource бывают собеседования? :)
Здравствуйте, CreatorCray, Вы писали:
CC>По существу: assert который ничего не проверяет бесполезен и не несет никакой смысловой нагрузки..
Т.е. комментарии тоже бесполезны... ну-ну.
CC>Твоя надежда на то, что увидевший его догадается что других ассертов тут не надо — ничем не обоснована.
Да уж какая надежда на то, что они читали K&R, Страуструпа, Степанова или хотя бы Макконнелла... (Степанов как раз "assert(true);" использовал даже в своих статьях). Советую Вам почитать стандарты написания кода хотя бы одной приличной (не местечковой) конторы.
CC>По результатам проведенного еще в пятницу по аське "опроса" выяснилось, что в большинстве своем тот кто видит подобный ассерт считает автора параноиком и при первом же рефакторинге такие ассерты будут вычищены.
Точно! Тот же Степанов (см. выше об использовании такого в его статьях) — параноик! Что-то мне Ваш "опрос" очень напоминает, не сочтите за грубость, анекдот про конкурс красоты в гей-баре.
LMA>>>>unit-тесты — это не панацея, они тем полезнее, чем менее квалифицированные люди пишут код. В ряде случаев они почти бесполезны. Скорее всего, на написание качественного unit-теста уйдет существенно больше времени, чем на грамотное внесение assert'ов. CC>>>Мсье продемонстрирует публике например как с помощью ассертов проверить что функциональность класса не сломана во время рефакторинга? Скажем на примере класса, который считает CRC32. LMA>>Во-первых, Ваша фраза звучит так, как будто я утверждал, что assert'ы — панацея! CC>Ты утверждал, что юниттесты в ряде случаев почти бесполезны, что они нужнее для низкоквалифицированных разработчиков, что на них уходит больше времени чем на ассерты. Лично у меня создалось впечатление, что юниттестами аффтар вообще не пользуется и терпеть их не может. Зато крайне любит ассерты и применяет их везде и всюду, квадратно-гнездовым методом.
У Вас создалось ложное впечатление. Я ими пользуюсь, только не для того, чтобы проверить то, что можно проверить assert'ом.
CC>Опять 25! Повторюсь: как в приведенном примере (CRC32) с помощью assertов проверить не сломана ли функциональность?
Зачем проверять assert'ом то, что нужно проверить другими способами?
LMA>> unit-тесты и пр.... и ни один из этих способов не будет гарантировать корректности кода CC>Ну приехали...
А Вы считаете иначе?
Re[18]: А разве в OpenSource бывают собеседования? :)
Здравствуйте, Programador, Вы писали:
P>Здравствуйте, Programador, Вы писали:
P>>Здравствуйте, Юрий Жмеренецкий, Вы писали:
LMA>>>>>>
LMA>>>>>>delete p;
ЮЖ>>>LMA>>>p = 0;
LMA>>>>>>
ЮЖ>>>А выделенное — вообще UB P>мне так показалось что nulptr не отменяет преобразование 0 в указатель. nulptr конвертабельное значение какогото класса вводится дополнительно, на старые правила плевались, но рука вроде на основы не поднялась
После удаления с указателем формально ничего делать нельзя(разве что можно использовать в невычисляемых выражениях), так как его значение неопределено.
Re[16]: А разве в OpenSource бывают собеседования? :)
Здравствуйте, Юрий Жмеренецкий, Вы писали:
LMA>>>>
LMA>>>>delete p;
ЮЖ>LMA>>>p = 0;
LMA>>>>
ЮЖ>А выделенное — вообще UB
Erop, -1 ?
Мало того что значение указателя после удаления не определено, так он еще и перестает удовлетворять требованиям Copy Constructable и Assignable и фактически не может находится в стандартных контейнерах после удаления. Понятно что это формальности подобные i++ + ++i и на конкретных платформах это будет работать.
Re[17]: А разве в OpenSource бывают собеседования? :)
Здравствуйте, Юрий Жмеренецкий, Вы писали:
ЮЖ>Мало того что значение указателя после удаления не определено, так он еще и перестает удовлетворять требованиям Copy Constructable и Assignable и фактически не может находится в стандартных контейнерах после удаления. Понятно что это формальности подобные i++ + ++i и на конкретных платформах это будет работать.
Тем не менее новое значение в переменную присвоить можно... В коде
int* p = new int( 5 );
delete p;
p = 0;
UB нет...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[18]: А разве в OpenSource бывают собеседования? :)
Здравствуйте, Programador, Вы писали:
P>Незя, так низя. Это сечас левое от голого указателя, а сделаю GC тут все UB и повылазят
В текущем стандарте переменная, содержащая удалённый указатель не хуже, чем просто неинициализированная переменная. Так как в неинициализированную переменную присваисать можно (смотри на совместимость с С), то и в переменную с удалённым указателем тоже можно.
Если не так, приврли пункит стандарта, где утверждается, что это UB.
IMHO, вы путаете с таким вот кодом:
int* deletedPtr()
{
int p* = new int;
delete p;
return p;// Копируем невалидный указаетль => UB
}
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[20]: А разве в OpenSource бывают собеседования? :)