Re[34]: Звезда Ф ШОКЕ!!!
От: Piko  
Дата: 27.06.12 10:21
Оценка: -1
Здравствуйте, Erop, Вы писали:

P>>в каких случаях qsort, по твоему мнению, быстрее?

E>Слушайте, люди, вы меня правда пугаете.
E>Ты сам не можешь написать пример в котором qsort порвёт std::sort?
E>Хочешь совет? Напиши пример где функция сравнения ДОЛГАЯ.
E>Например, у тебя есть массив неотрицательных чисел,
E>чтобы сравнить два, ты от каждого вычисляешь exp( x / x_max ), с точностью 1 000 000 знаков, и потом в лексографическом с конца порядке сортируешь. Ну и чисел тысяч 10 хотя бы в массиве
E>Вот, что бы лучше думалось, попробуй угадать, что вернёт функция RN_test:
class RandNum {
E>
у меня, например, возвращает 182%


идея зачётная но, к дискуссии имеет мало отношения
это уже разница самих алгоритмов(вытекающих из интерфейсов). с тем же успехом, можно имея только предикат less, реализовать через него компаратор для qsort.
с этой точки зрения пример не удачный, имхо очевидно
с тем же успехом можно взять хорошую реализацию qsort, и плохую sort, эта тема уже обсуждалась в начале топика

P>>в каких случаях qsort, по твоему, мнению надёжней?

E>По моему мнению для всех. Ещё надёжнее, будет если её немножко шаблонно обернуть, но даже в чистом С-варианте она неверно работает только если передать не так буфер или напутать с типами.

ога, или с размером массива, или с размерам типа ...

E>Ещё надёжнее, будет если её немножко шаблонно обернуть


то есть ты согласен, что на C++ она была бы надёжней?

E>В std::sort способов накрячится есть просто невообразимое множество


не хочу опять начинать с тобой спорить на эту тему (ты же про duck-typing, отсутствие концепций и т.п.?).
но, вопрос: где по-твоему мнению программисты ошибаются чаще? с qsort или sort?
не количество возможных путей и бла-бла, а именно на практике что надёжней.

P>>>>3. что безопасней

E>>>Зависит от задачи и от программиста
P>>в каких случаях qsort, по твоему, мнению безопасней?
E>А что значит "безопаснее"? Какая модель угроз?

тот же buffer overflow
Re[35]: MSVC2010 + C99
От: Erop Россия  
Дата: 27.06.12 10:30
Оценка:
Здравствуйте, Piko, Вы писали:

P>уже писал.

P>вкратце: надёжность — больше ошибок(классов ошибок) ловится compile-time.
Я не согласен что это надёжность. Или поясни, что такое compile-time? Входит ли в него время прогона статических анализаторов кода и юнит-тестов?


P>безопасность — менее подверженность vulnerabilities.

P>но это вкратце

Я не совсем понимаю, как qsort или std::sort могут быть опасными, тогда...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[35]: Звезда Ф ШОКЕ!!!
От: Erop Россия  
Дата: 27.06.12 10:43
Оценка:
Здравствуйте, Piko, Вы писали:

P>идея зачётная но, к дискуссии имеет мало отношения

P>это уже разница самих алгоритмов(вытекающих из интерфейсов). с тем же успехом, можно имея только предикат less, реализовать через него компаратор для qsort.
P>с этой точки зрения пример не удачный, имхо очевидно
P>с тем же успехом можно взять хорошую реализацию qsort, и плохую sort, эта тема уже обсуждалась в начале топика

А я считаю, что имеет.
1) Ты тут всем вслед за Страуструпом проел всем плешь, что qsort медленнее std::sort, хотя для долгих операций сравнения это просто ПРЯМАЯ ЛОЖЬ.
Мне было смешно тебя читать, и все эти ужимки про то, что тормоз порвёт скорохода.
Страуструп всех просто немного подколол, он это любит, а вот ты тоже дурачился или на голубом глазу повёлся?
Если второе, то это очень неплохая иллюстрация, что С++ код и подхд к программированию СКРЫВАЕТ ОТ ПРОГРАММИСТА СУТЬ ДЕЛА, и это его главный и основной недостаток...

2) Про плохую и хорошую реализацию. Мы таки несём STL на помоечку или как? И то и то стандартные средства своих языков, а не поделки криворуких тенденциозных тестеров, вообще-то. И авторы стандарта С++ и STL, и самого std::sort конечно же понимали, что они пессимизируют свой код примерно в два раза, по сравнению с С, но при этом они вынужденно пошли на это, стыдливо прикрывшись подстановкой функций обмена и сравнения

Как ты думаешь, зачем std::sort в STL cделан тормозом?


P>ога, или с размером массива, или с размерам типа ...


Ну надо контролировать тип, это можно поручить статическому анализатору или макросу, а в С++ ещё и простому шаблону-обёртке.

E>>Ещё надёжнее, будет если её немножко шаблонно обернуть


P>то есть ты согласен, что на C++ она была бы надёжней?

Нет не согласен. На С++ писали бы как на С++ и получили бы в конце std::sort
E>>В std::sort способов накрячится есть просто невообразимое множество

P>не хочу опять начинать с тобой спорить на эту тему (ты же про duck-typing, отсутствие концепций и т.п.?).

P>но, вопрос: где по-твоему мнению программисты ошибаются чаще? с qsort или sort?
P>не количество возможных путей и бла-бла, а именно на практике что надёжней.

Я не согласен с твоим определением надёжности, но я думаю, что в готовом оттестированном коде ошибки с std::sort остаются чаще, чем с qsort...

Но тут надо учесть, что вызвать std::sort для vector<bool> я считаю ГРУБОЙ ошибкой. Но она на С++ скорее всего никогда не будет выявлена, если только случайно, в то время как на С ей вообще не удастся закодировать...

P>тот же buffer overflow

Очевидно, что неверные границы буфера можно передать в оба алгоритма...
Мало того, если в С-шный передают счётчик, что даёт надежду, что он будет сортировать не всю память, а посортирует какой-то кусок и расслабится, то в С++ный передают пару итераторов. Если они будут от разных массивов, то приятной вам отладки
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[36]: MSVC2010 + C99
От: Piko  
Дата: 27.06.12 10:58
Оценка:
Здравствуйте, Erop, Вы писали:

P>>уже писал.

P>>вкратце: надёжность — больше ошибок(классов ошибок) ловится compile-time.
E>Я не согласен что это надёжность. Или поясни, что такое compile-time? Входит ли в него время прогона статических анализаторов кода и юнит-тестов?

нет, не входят.
юнит-тесты — это во-превых runtime тесты, во-вторых их ещё необходимо написать. а например в случае sort мы получаем compile-time проверки без дополнительных усилий, и даже наоборот — его проще использовать.
статические анализаторы кода ловят далеко не все те ошибки, которые можно поймать используя типизацию и т.п.
хотя бы тупо по тому, что они могут не знать где есть ошибка, а где нет.
вот например, параметром функции является возраст, в случае с С, в каждой функции принимающей возраст нужно делать проверку. В случае C++ будет просто класс Age, и внутри функции не о чём не нужно парится. (можно даже использовать различные трюки, чтобы ловить конструкцию Age с неправильным возрастом compile time, но не об этом речь). И как тут поможет статический анализатор кода??

P>>безопасность — менее подверженность vulnerabilities.

P>>но это вкратце
E>Я не совсем понимаю, как qsort или std::sort могут быть опасными, тогда...

в qsort всегда нужно передавать размер массива, и элемента -> проще ошибиться и получить overflow
в std::sort конечно тоже можно ошибиться с границей, но имхо — это намного реже происходит, во вторых не нужно передавать размер элемента, и в третьих "unit-test" внутрb sort, для debug, легче добавить проверку диапазона — что и делается в некоторых реализациях.
Re[36]: Звезда Ф ШОКЕ!!!
От: Piko  
Дата: 27.06.12 11:21
Оценка: :)
Здравствуйте, Erop, Вы писали:

E>Если второе, то это очень неплохая иллюстрация, что С++ код и подхд к программированию СКРЫВАЕТ ОТ ПРОГРАММИСТА СУТЬ ДЕЛА, и это его главный и основной недостаток...


ипать, вот это выводы: в одном случае компаратор tristate — в другом обычный предикат, и ты из этого делаешь вывод, что С++ код и подхд к программированию СКРЫВАЕТ ОТ ПРОГРАММИСТА СУТЬ ДЕЛА

E>2) Про плохую и хорошую реализацию. Мы таки несём STL на помоечку или как? И то и то стандартные средства своих языков, а не поделки криворуких тенденциозных тестеров, вообще-то.


в стандартных use-case'ах sort рвёт qsort
далее, в своём же примере попробуй stable_sort

E>И авторы стандарта С++ и STL, и самого std::sort конечно же понимали, что они пессимизируют свой код примерно в два раза,


бред.
180% — это на каком компиляторе, и в каком режиме? не debug ли случайно?
и сколько выдаёт stable_sort???

E>по сравнению с С, но при этом они вынужденно пошли на это, стыдливо прикрывшись подстановкой функций обмена и сравнения

E>Как ты думаешь, зачем std::sort в STL cделан тормозом?

маразм

P>>ога, или с размером массива, или с размерам типа ...

E>Ну надо контролировать тип, это можно поручить статическому анализатору или макросу, а в С++ ещё и простому шаблону-обёртке.

макрос для контроля типа компаратора в студию. (либо поручение статическому анализатору)

E>>>Ещё надёжнее, будет если её немножко шаблонно обернуть

P>>то есть ты согласен, что на C++ она была бы надёжней?
E>Нет не согласен. На С++ писали бы как на С++ и получили бы в конце std::sort

то есть на C++ нельзя сделать сортировку, которая сортирует только массивы, принимает только указатели на компараторы, и при этом более надёжную?

E>>>В std::sort способов накрячится есть просто невообразимое множество

P>>не хочу опять начинать с тобой спорить на эту тему (ты же про duck-typing, отсутствие концепций и т.п.?).
P>>но, вопрос: где по-твоему мнению программисты ошибаются чаще? с qsort или sort?
P>>не количество возможных путей и бла-бла
, а именно на практике что надёжней.
E>Я не согласен с твоим определением надёжности, но я думаю, что в готовом оттестированном коде ошибки с std::sort остаются чаще, чем с qsort...

на выделенное ответишь?

E>Но тут надо учесть, что вызвать std::sort для vector<bool> я считаю ГРУБОЙ ошибкой. Но она на С++ скорее всего никогда не будет выявлена, если только случайно, в то время как на С ей вообще не удастся закодировать...


это не ошибка
сортировка отработает с заявленной сложностью. да, константа будет большой, но во-первых никто не запрещает
сделать специализацию для vector<bool>, никто не запрещает сделать сортировку, которая принимает только обычные массивы — и при этом будет лучше qsort

P>>тот же buffer overflow

E>Очевидно, что неверные границы буфера можно передать в оба алгоритма...

я это и сказал:

в std::sort конечно тоже можно ошибиться с границей,


зачем ты меня повторяешь

но имхо — это намного реже происходит

комментарии будут?

E>Мало того, если в С-шный передают счётчик, что даёт надежду, что он будет сортировать не всю память, а посортирует какой-то кусок и расслабится, то в С++ный передают пару итераторов. Если они будут от разных массивов, то приятной вам отладки


проверка итераторов делается в debug моде, во многих реализациях из каропки
Re[34]: Звезда Ф ШОКЕ!!!
От: Piko  
Дата: 27.06.12 11:26
Оценка: :)
Здравствуйте, Erop, Вы писали:

E>[/c]у меня, например, возвращает 182%


я тебя поздравляю, _Debug_lt небось
Re[36]: Звезда Ф ШОКЕ!!!
От: Piko  
Дата: 27.06.12 11:50
Оценка: :)
E>2) Про плохую и хорошую реализацию. Мы таки несём STL на помоечку или как? И то и то стандартные средства своих языков, а не поделки криворуких тенденциозных тестеров, вообще-то. И авторы стандарта С++ и STL, и самого std::sort конечно же понимали, что они пессимизируют свой код примерно в два раза, по сравнению с С, но при этом они вынужденно пошли на это, стыдливо прикрывшись подстановкой функций обмена и сравнения

ога, ога.
замени
RandNum() : body( rand() ) {}
на
RandNum() {static int cnt=100000000; body=cnt;--cnt;}

и сравни qsort, sort и stable_sort, раз уж мы об алгоритмах заговорили и об C++way
у stable_sort почти в три раз меньше вызовов предиката чем вызовов компаратора у qsort.
и что теперь?
я жду новых чудесных выводов с твоей стороны
Re[34]: MSVC2010 + C99
От: CreatorCray  
Дата: 27.06.12 13:12
Оценка:
Здравствуйте, Alexey Sudachen, Вы писали:

Передача по значению вместо ссылки, введён совершенно бесполезный класс Y. Мда...
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[38]: MSVC2010 + C99
От: CreatorCray  
Дата: 27.06.12 13:12
Оценка: +2
Здравствуйте, Erop, Вы писали:

E>Не затруднит пояснить с чем конкретно ты не согласен и почему? Ну кроме тона...

С формулировкой в стиле "первые 10 лет в тюрьме тяжело, а потом привыкнешь".
Сколько бы у тебя опыта не было — недостаток автоматики в С это никак не исправляет. С этим можно только смириться и писать всё руками.

CC>>Советовать.

E>IMHO, советую как-то иначе, в иных тонах и наклонениях и т. п...
Тон бывает в устной речи. Как его углядеть в тексте —
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[34]: MSVC2010 + C99
От: CreatorCray  
Дата: 27.06.12 13:12
Оценка:
Здравствуйте, Alexey Sudachen, Вы писали:

Т.е. ты тут упираешь на то, что алгоритмически qsort и std::sort отличаются, и у qsort в твоём случае колво вызовов компаратора меньше.
А речь шла об интерфейсе вызова.
Т.е. для правильного сравнения надо брать алгоритм qsort и модифицировать его в тот вид, в котором юзеру вытарчивает std::sort, т.е.

template<class _RanIt, class _Pr> void sort (_RanIt _First, _RanIt _Last, _Pr _Pred)

Тогда сравним то, о чём на самом деле ведётся речь.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[36]: MSVC2010 + C99
От: Alexéy Sudachén Чили  
Дата: 27.06.12 13:30
Оценка:
E>>>>>Зависит от задачи и от программиста
P>>>>в каких случаях qsort, по твоему мнению, быстрее?
AS>>> X(const X &x) { for( int i=0; i < x.q_.size(); ++i ) q_.push_back(x.q_[i]); }
AS>>> qsort(&y[0],y.size(),sizeof(y[0]),(int(*)(const void*,const void*))X_sum_comp);
P>>шутник, UB'шник

Ну вот, опять догматы... таки не готов ты пока смотреть за шоры. ))) Всего осталного ты не заметил?

P>
P>bool operator < (const X& a, const X &b){
P>void swap(X &l,X &r){
P>

P>и sort рвёт qsort, и при том без UB

Вот прямо рвёт? ))) Может таки работает с статистически незначительной разницей, особенно с учётом что там разные алгоритмы? Или сливает, если программист забыл или сделал ОДНУ опечатку. Однако очень надёжно и безопастно. )))
Re[35]: MSVC2010 + C99
От: Alexéy Sudachén Чили  
Дата: 27.06.12 13:41
Оценка:
CC>Передача по значению вместо ссылки, введён совершенно бесполезный класс Y. Мда...

Да именно так. Предполагалось что читающий таки умеет думать и чуток знает язык, а не только способен внимательно читать )))
Re[37]: MSVC2010 + C99
От: Piko  
Дата: 27.06.12 13:44
Оценка:
Здравствуйте, Alexéy Sudachén, Вы писали:

E>>>>>>Зависит от задачи и от программиста

P>>>>>в каких случаях qsort, по твоему мнению, быстрее?
AS>>>> X(const X &x) { for( int i=0; i < x.q_.size(); ++i ) q_.push_back(x.q_[i]); }
AS>>>> qsort(&y[0],y.size(),sizeof(y[0]),(int(*)(const void*,const void*))X_sum_comp);
P>>>шутник, UB'шник
AS>Ну вот, опять догматы...

какие догматы — насколько я помню побитовое копирование non-POD — UB, но могу ошибаться

AS>таки не готов ты пока смотреть за шоры. ))) Всего осталного ты не заметил?


чего? отсутствие "&" ? заметил, отчасти поэтому и сделал отдельный operator<

P>>
P>>bool operator < (const X& a, const X &b){
P>>void swap(X &l,X &r){
P>>

P>>и sort рвёт qsort, и при том без UB
AS>Вот прямо рвёт? ))) Может таки работает с статистически незначительной разницей, особенно с учётом что там разные алгоритмы?

это уже действительно уныло

AS>Или сливает, если программист забыл или сделал ОДНУ опечатку. Однако очень надёжно и безопастно. )))


int X_sum_comp(const X *a,const X *b) {
  return N_sum(a->q_) - N_sum(b->q_);
}


перепутал "-" на "+" и "шеф, усё пропало"
Re[35]: MSVC2010 + C99
От: Alexéy Sudachén Чили  
Дата: 27.06.12 13:47
Оценка:
CC>Т.е. ты тут упираешь на то, что алгоритмически qsort и std::sort отличаются, и у qsort в твоём случае колво вызовов компаратора меньше.

Я упираю совсем не на это.

CC>А речь шла об интерфейсе вызова.


ДА, именно об этом. ИМХО, код — истина в последней инстанции. Мне к нему вобщем-то добавить нечего. Скушно это, каждую закорючку обьеснять, всё равно что обьяснять шутки ))))
Re[38]: MSVC2010 + C99
От: Alexéy Sudachén Чили  
Дата: 27.06.12 13:49
Оценка:
Здравствуйте, Piko, Вы писали:

P>это уже действительно уныло

P>перепутал "-" на "+" и "шеф, усё пропало"

Что ты там говорл про кнопку бачка?
Re[39]: MSVC2010 + C99
От: Piko  
Дата: 27.06.12 13:56
Оценка:
Здравствуйте, Alexéy Sudachén, Вы писали:

P>>это уже действительно уныло

P>>перепутал "-" на "+" и "шеф, усё пропало"
AS>Что ты там говорл про кнопку бачка?

просто это:

AS>Вот прямо рвёт? ))) Может таки работает с статистически незначительной разницей, особенно с учётом что там разные алгоритмы?

действительно уныло, так как я здесь ни раз говорил "при одинаковых алгоритмах"
Re[40]: MSVC2010 + C99
От: Alexéy Sudachén Чили  
Дата: 27.06.12 14:04
Оценка:
Здравствуйте, Piko, Вы писали:

P>

AS>>Вот прямо рвёт? ))) Может таки работает с статистически незначительной разницей, особенно с учётом что там разные алгоритмы?

P>действительно уныло, так как я здесь ни раз говорил "при одинаковых алгоритмах"

Именно это я и уточнил. Уточнил что мы говорим о языке а не о алгоритмике.
Так что свою унылость ты можешь отнести к тому же бачку.
Re[41]: MSVC2010 + C99
От: Piko  
Дата: 27.06.12 17:35
Оценка:
Здравствуйте, Alexéy Sudachén, Вы писали:

P>>

AS>>>Вот прямо рвёт? ))) Может таки работает с статистически незначительной разницей, особенно с учётом что там разные алгоритмы?

P>>действительно уныло, так как я здесь ни раз говорил "при одинаковых алгоритмах"
AS>Именно это я и уточнил. Уточнил что мы говорим о языке а не о алгоритмике.
AS>Так что свою унылость ты можешь отнести к тому же бачку.

ну мы вроде как весь топик говорим об языках, не?

http://www.rsdn.ru/forum/cpp/4728340.flat.24.aspx
Автор: org_256
Дата: 07.05.12

AS>>В С вот нет конструктора копирования и требований на exception-safe код, что бывает сильно раляет в сравнении. Если сортировать не целые числа ... то std::sort далеко не всегда так крут как хотелось бы некоторым.
P>ээ... std::sort это лишь пример, что имхо очевидно. и дело тут вовсе не в алгоритме сортировки.

или например
http://www.rsdn.ru/forum/cpp/4728340.flat.9.aspx
Автор: org_256
Дата: 07.05.12

P>>>>Понимаете, для сортировки есть разные алгоритмы, разные реализации std::sort
1>>>Ну я то тут причем? Это вы ведь приводите исследование их сравнивающее. Причем уже во второй раз. На Си там быстрая сортировка.
P>>я согласен, просто сравнение скорости std::sort и qsort из какой-нибудь реализации не полностью честно.
P>>Но, идея в том, что если взять одинаковые алгоритмы, один из которых обвернуть в qsort, другой в std::sort, std::sort будет быстрее.
1>Но это си. Здесь нельзя ничего обернуть не получив проигрыша в скорости. Но если взять одинаковые алгоритмы, хорошо написанные, то 1>скорость либо будет одинаковой либо у С больше.

Re[42]: MSVC2010 + C99
От: Alexéy Sudachén Чили  
Дата: 27.06.12 18:29
Оценка: +1
Здравствуйте, Piko, Вы писали:

P>http://www.rsdn.ru/forum/cpp/4728340.flat.24.aspx
Автор: org_256
Дата: 07.05.12

P>

AS>>>В С вот нет конструктора копирования и требований на exception-safe код, что бывает сильно раляет в сравнении. Если сортировать не целые числа ... то std::sort далеко не всегда так крут как хотелось бы некоторым.
P>>ээ... std::sort это лишь пример, что имхо очевидно. и дело тут вовсе не в алгоритме сортировки.


Ну, то есть ты не понимаешь что специфика конструкторов, операторов и ограничений на обработку исключений к алгоритму сортировки не относится, но влияет на скорость и валидность? И никакая 'типа надёжность' тебя не спасёт от тривиальной опечатки или забывчивости. Ровно так же как и в С. По корке же вся эта магия только усложнит поиск проблемы. Я тебе написал пример, и что? Всё что ты увидел это UB, которого в С, с которым мы сравниваем, просто нет. Увидел что можно дописать пару заклинаний... вот только самого примера ты не увидел.

Когда скорость и корректность работы строчки кода зависит от наличия/отсутствия в области видимости неких заклинаний... это нечто, да. )))
Re[43]: MSVC2010 + C99
От: Piko  
Дата: 27.06.12 19:05
Оценка:
Здравствуйте, Alexéy Sudachén, Вы писали:

P>>http://www.rsdn.ru/forum/cpp/4728340.flat.24.aspx
Автор: org_256
Дата: 07.05.12

P>>

AS>>>>В С вот нет конструктора копирования и требований на exception-safe код, что бывает сильно раляет в сравнении. Если сортировать не целые числа ... то std::sort далеко не всегда так крут как хотелось бы некоторым.
P>>>ээ... std::sort это лишь пример, что имхо очевидно. и дело тут вовсе не в алгоритме сортировки.


AS>Ну, то есть ты не понимаешь что специфика конструкторов, операторов и ограничений на обработку исключений к алгоритму сортировки не относится, но влияет на скорость и валидность?


что ты хочешь сказать?

AS>И никакая 'типа надёжность' тебя не спасёт от тривиальной опечатки или забывчивости.


спасёт, но не от всего

AS>Ровно так же как и в С. По корке же вся эта магия только усложнит поиск проблемы. Я тебе написал пример, и что? Всё что ты увидел это UB, которого в С, с которым мы сравниваем, просто нет.


так там нет и конструкторов , которые в твоей структуре были
а что, я ещё должен был увидеть? опечатки с сылками? да, я их сразу увидел, хочешь верь, хочешь нет

AS>Увидел что можно дописать пару заклинаний... вот только самого примера ты не увидел.


примера опечаток? или чего?

AS>Когда скорость и корректность работы строчки кода зависит от наличия/отсутствия в области видимости неких заклинаний... это нечто, да. )))


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