Re[15]: А разве в OpenSource бывают собеседования? :)
От: CreatorCray  
Дата: 22.06.08 16:07
Оценка:
Здравствуйте, 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 бывают собеседования? :)
От: LordMAD Россия  
Дата: 22.06.08 16:33
Оценка: :))
Здравствуйте, CreatorCray, Вы писали:

LMA>>Безполезных assert'ов писать не надо. assert(true); — это не безполезный assert, это способ документирования. Или Вы не понимаете зачем документировать свой код?

CC>-1
А если по-существу?

LMA>>unit-тесты — это не панацея, они тем полезнее, чем менее квалифицированные люди пишут код. В ряде случаев они почти бесполезны. Скорее всего, на написание качественного unit-теста уйдет существенно больше времени, чем на грамотное внесение assert'ов.

CC>Мсье продемонстрирует публике например как с помощью ассертов проверить что функциональность класса не сломана во время рефакторинга? Скажем на примере класса, который считает CRC32.
Во-первых, Ваша фраза звучит так, как будто я утверждал, что assert'ы — панацея! Если Вам угодно ПРИДУМЫВАТЬ ложные утверждения, а потом героически их опровергать — это Ваше дело, но мне бы не хотелось в этом участвовать.
Во-вторых, "проверить что функциональность класса не сломана во время рефакторинга" можно множеством способов, включая assert'ы, unit-тесты и пр.... и ни один из этих способов не будет гарантировать корректности кода, поэтому то, что Вы просите сделать — это обыкновенная провокация, на которую я не собираюсь поддаваться.
Re[21]: Месье ещё и с формальной логикой не дружит?
От: Programador  
Дата: 22.06.08 16:34
Оценка:
Здравствуйте, 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]: Месье ещё и с формальной логикой не дружит?
От: Programador  
Дата: 22.06.08 16:36
Оценка:
Здравствуйте, LordMAD, Вы писали:

LMA>Здравствуйте, Programador, Вы писали:


P>>кстати простая арифметика не имеет приретив поскольку есть унарный плюс и минус

LMA>Вы понимаете, надеюсь, что вычитание и смена знака — это разные операции?
Вестимо разные, просто когда парсер пишешь это один и тотже символ
Re[22]: Месье ещё и с формальной логикой не дружит?
От: LordMAD Россия  
Дата: 22.06.08 16:42
Оценка:
Здравствуйте, Programador, Вы писали:

P>1. имхо выражения, а не значения некоректно, вроде мухи с котлетами

Отчасти — да.

P>2. Вроде Вы придерживались с Егором противоположных мнений на парсинга pqpqpq

P>правильный парсинг p, (q ? (p, q ): q), q
P> p, ( (q ? (p, q ): q), q ) эти скобки тоже правильные хоть не дают ничего
Да, Вы правы.

P>а почему Егор какашками кидался

Могу только предполагать
Re[23]: Месье ещё и с формальной логикой не дружит?
От: LordMAD Россия  
Дата: 22.06.08 16:46
Оценка:
Здравствуйте, Programador, Вы писали:

P>>>кстати простая арифметика не имеет приретив поскольку есть унарный плюс и минус

LMA>>Вы понимаете, надеюсь, что вычитание и смена знака — это разные операции?
P>Вестимо разные, просто когда парсер пишешь это один и тотже символ
Так приоритеты — у операций, а не у символов. То, о чем Вы пишете, просто говорит о том, что парсер должен будет понять — какой оператор соответствует символу.
Re[23]: Месье ещё и с формальной логикой не дружит?
От: Programador  
Дата: 22.06.08 17:51
Оценка:
Здравствуйте, 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]: Месье ещё и с формальной логикой не дружит?
От: Programador  
Дата: 22.06.08 19:02
Оценка: -1
Здравствуйте, 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)
Всем известная таблица работает
Re[24]: delete x, y, z; -- аналог булыжника? :)
От: neFormal Россия  
Дата: 22.06.08 20:47
Оценка:
Здравствуйте, Erop, Вы писали:

E>Так ты "delete x, y, z" в качестве орудия классовой борьбы применять хочешь?


вы так неделю будете спорить ни о чем +)
имхо тут дело в психологии, а не в большей эффективности..
...coding for chaos...
Re[17]: А разве в OpenSource бывают собеседования? :)
От: CreatorCray  
Дата: 22.06.08 21:16
Оценка:
Здравствуйте, 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 бывают собеседования? :)
От: Юрий Жмеренецкий ICQ 380412032
Дата: 23.06.08 04:58
Оценка: -1
Здравствуйте, 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  
Дата: 23.06.08 08:21
Оценка:
Здравствуйте, Юрий Жмеренецкий, Вы писали:

LMA>>>>
LMA>>>>delete p;
ЮЖ>LMA>>>p = 0;
LMA>>>>


ЮЖ>А выделенное — вообще UB


/****************************************************************************
**
** Copyright (C) 1992-2008 Trolltech ASA. All rights reserved.
**
...........................

class Q_GUI_EXPORT QAccessible
{
public:
    enum Event {
        SoundPlayed          = 0x0001,
        Alert                = 0x0002,
        ForegroundChanged    = 0x0003,
        MenuStart            = 0x0004,
        MenuEnd              = 0x0005,
        PopupMenuStart       = 0x0006,
        PopupMenuEnd         = 0x0007,
        ContextHelpStart     = 0x000C,
        ContextHelpEnd       = 0x000D,
        DragDropStart        = 0x000E,
        DragDropEnd          = 0x000F,
        DialogStart          = 0x0010,
        DialogEnd            = 0x0011,
        ScrollingStart       = 0x0012,
        ScrollingEnd         = 0x0013,

        MenuCommand          = 0x0018,

ага и енум то инт скоро отменят ибо некошерно Вот дефайны констант с именами в пол экрана это да
Re[17]: А разве в OpenSource бывают собеседования? :)
От: Programador  
Дата: 23.06.08 08:39
Оценка:
Здравствуйте, Programador, Вы писали:

P>Здравствуйте, Юрий Жмеренецкий, Вы писали:


LMA>>>>>
LMA>>>>>delete p;
ЮЖ>>LMA>>>p = 0;
LMA>>>>>


ЮЖ>>А выделенное — вообще UB

мне так показалось что nulptr не отменяет преобразование 0 в указатель. nulptr конвертабельное значение какогото класса вводится дополнительно, на старые правила плевались, но рука вроде на основы не поднялась
Re[18]: А разве в OpenSource бывают собеседования? :)
От: LordMAD Россия  
Дата: 23.06.08 12:44
Оценка: :)
Здравствуйте, 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 бывают собеседования? :)
От: Юрий Жмеренецкий ICQ 380412032
Дата: 23.06.08 13:58
Оценка: :))
Здравствуйте, Programador, Вы писали:

P>Здравствуйте, Programador, Вы писали:


P>>Здравствуйте, Юрий Жмеренецкий, Вы писали:


LMA>>>>>>
LMA>>>>>>delete p;
ЮЖ>>>LMA>>>p = 0;
LMA>>>>>>


ЮЖ>>>А выделенное — вообще UB

P>мне так показалось что nulptr не отменяет преобразование 0 в указатель. nulptr конвертабельное значение какогото класса вводится дополнительно, на старые правила плевались, но рука вроде на основы не поднялась

После удаления с указателем формально ничего делать нельзя(разве что можно использовать в невычисляемых выражениях), так как его значение неопределено.
Re[16]: А разве в OpenSource бывают собеседования? :)
От: Юрий Жмеренецкий ICQ 380412032
Дата: 23.06.08 22:45
Оценка: :)
Здравствуйте, Юрий Жмеренецкий, Вы писали:

LMA>>>>
LMA>>>>delete p;
ЮЖ>LMA>>>p = 0;
LMA>>>>


ЮЖ>А выделенное — вообще UB


Erop, -1 ?

Мало того что значение указателя после удаления не определено, так он еще и перестает удовлетворять требованиям Copy Constructable и Assignable и фактически не может находится в стандартных контейнерах после удаления. Понятно что это формальности подобные i++ + ++i и на конкретных платформах это будет работать.
Re[17]: А разве в OpenSource бывают собеседования? :)
От: Erop Россия  
Дата: 24.06.08 04:13
Оценка: +1
Здравствуйте, Юрий Жмеренецкий, Вы писали:

ЮЖ>Мало того что значение указателя после удаления не определено, так он еще и перестает удовлетворять требованиям Copy Constructable и Assignable и фактически не может находится в стандартных контейнерах после удаления. Понятно что это формальности подобные i++ + ++i и на конкретных платформах это будет работать.


Тем не менее новое значение в переменную присвоить можно... В коде
int* p = new int( 5 );
delete p;
p = 0;
UB нет...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[18]: А разве в OpenSource бывают собеседования? :)
От: Programador  
Дата: 24.06.08 11:57
Оценка:
Здравствуйте, Erop, Вы писали:

E>Тем не менее новое значение в переменную присвоить можно... В коде
int* p = new int( 5 );
E>delete p;
E>p = 0;
UB нет...

Незя, так низя. Это сечас левое от голого указателя, а сделаю GC тут все UB и повылазят
Re[19]: А разве в OpenSource бывают собеседования? :)
От: Erop Россия  
Дата: 24.06.08 14:50
Оценка:
Здравствуйте, Programador, Вы писали:

P>Незя, так низя. Это сечас левое от голого указателя, а сделаю GC тут все UB и повылазят

В текущем стандарте переменная, содержащая удалённый указатель не хуже, чем просто неинициализированная переменная. Так как в неинициализированную переменную присваисать можно (смотри на совместимость с С), то и в переменную с удалённым указателем тоже можно.
Если не так, приврли пункит стандарта, где утверждается, что это UB.

IMHO, вы путаете с таким вот кодом:
int* deletedPtr()
{
    int p* = new int;
    delete p;
    return p;  // Копируем невалидный указаетль => UB
}
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[20]: А разве в OpenSource бывают собеседования? :)
От: Programador  
Дата: 24.06.08 15:24
Оценка:
Здравствуйте, Erop, Вы писали:

E>IMHO, вы путаете с таким вот кодом:
int* deletedPtr()
E>{
E>    int p* = new int;
E>    delete p;
E>    return p;  // Копируем невалидный указаетль => UB
E>}


ясно что фактически UB это преобразование указателя к другому типу при виртуальном наследовании, здесь требуется обьект.

Если комитет по недомыслию или для перестраховки написал такое
int *a,*b,*p = new int;
a=p;  // можно
delete p;
b=p;  // UB

то тут уж не знаешь смеяться или плакать
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.