Здравствуйте, Alexéy Sudachén, Вы писали:
AS>>>>>У меня только один вопрос, откуда такой мистический страх перед void* и макросами? P>>>>страха нет. P>>>>это тупо не type-safe, разве не очевидно? (есть и другие, но менее важные причины) AS>>>Нет не очевидно. Type-safe это что такое магическое заклинание? Не, не слышал )))) P>>а type rich interfaces?
AS>Это когда можно попить кофе пока а-цатаи процессорный монстер компилирует несколько строчек
в грубом приближении — да. но, почему бы не делегировать часть своей работы этому монстрику?
AS>и код раздувается до эпических размеров...
нет
P>>>>может ли компаратор сравнивающий double, скомпилироваться вместе с int массивом? AS>>>Вот можно в С++ лёгким росчерком пера нарваться нарушение ODR, и скомпилировать код пользующиий совсем не ту структуру какую хотелось? Да легко. Чем монструознее софтина и больше программеров. И куда интересно подевалась это хвалёная типа безопасность? P>>мастер ухода от ответа 4го разряда AS>А ты думал.
я думал ты ответишь: P>>>>может ли компаратор сравнивающий double, скомпилироваться вместе с int массивом?
------- AS>Однако, куда таки девается 'типА безопасность'?
И видим что ты придумал веру в void* и низкокачественных программистов. И чего?
P>я не считаю эту дискуссию бесполезной. P>1. я как уже сказал, всё больше убеждаюсь что с другой стороны объективных аргументов нет. после вдалбливания, и разжёвывания что и почему является P>2. больше людей будут aware -> будет больше хорошего кода -> мир, зелёная травка
Типа пророк, популизатор, просветитель и борец с язычеством и ересью? Возвращатель заблудших душ в лоно веры страуса... бывает, да. Книжку написать не пробовал?
Каких аргументов ты хочешь, если для тебя 'типА безопастность' это бог, а тривиальщина а-ля std::sort евангилье? Ты разве готов слушать что-то выходящие за рамки правильной картины мира, построенной в догматах C++. Так что считай — не считай, но дискуссия бесполезна. Да и не дискуссия это. Ну на самом деле, с кем ты дискутировать то собрался? Тот всего несколько человек с тобой будут 'дискутировать' и то по приколу.
Здравствуйте, CreatorCray, Вы писали:
CC>В нормальных это в каких? По мне так эта часть достаточно крупная чтоб заколебать через некоторое время. Всё то, что на плюсах делается контейнерами, RAII и прочими простыми упрощениями жизни тут приходится колбасить вручную каждый раз. Или делать на макросах, отлаживать которые потом то ещё развлечение.
А и не надо на макросах. Надо честно писать. а то что работа вообще штука тяжёлая -- ну так тут никто не спорит.
Мало того, ты сейчас написал, только другими словами, что на С++ прогать более ПРИКОЛЬНО, чем на С. Так это и не оспаривается. Просто, насколько я понимаю, есть идея, что когда прогать прикольно, прогеры склонны раздувать код, а когда неприкольно -- склонны сокращать...
E>>>>У большинства это от недостатка опыта, и постепенно проходит, но у некоторых не проходит никогда... CC>>>Оставь этот менторский тон. Он не действует как ты рассчитываешь.
ПО существу, тем не менее, ты со мной согласился...
E>>Я думаю, что он злит коллег, которые обсуждают персоны, а не идеи... CC>Значит он способствует скатыванию темы в простой срач. CC>Тем более оставь.
Месье имеет власть мне приказывать?..
тогда предъявите звезду, мой шериф!
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
AS>И видим что ты придумал веру в void* и низкокачественных программистов. И чего?
а то, что я про void* говорил в контексте C++, но ты этого не заметил...
AS>Каких аргументов ты хочешь,
объективных
AS>если для тебя 'типА безопастность' это бог,
возможность сэкономить время
AS>а тривиальщина а-ля std::sort евангилье?
маленький пример C++style в контексте сравнения с C.
и кстати, эта тривиальнщина далеко не для всех тривиальщина. многие думают(и в этом топике в том чилсе) что более абстраный код <-> более медленный.
AS>Ты разве готов слушать что-то выходящие за рамки правильной картины мира, построенной в догматах C++.
конечно
AS>Так что считай — не считай, но дискуссия бесполезна. Да и не дискуссия это. Ну на самом деле, с кем ты дискутировать то собрался? Тот всего несколько человек с тобой будут 'дискутировать' и то по приколу.
ну так я тоже тут, "по приколу", бывает интересные мысли проскакивают
и ты не поверишь, но мне некоторые из твоих идей тоже интересны, не смотря на то, что они спрятаны за фасадом ... не знаю, как лучше назвать это фасад, пусть просто будет фасад
Здравствуйте, Piko, Вы писали:
P>ок, но сначала ответь, желательно с аргументами: qsort vs std::sort P>1. что быстрее
Зависит от задачи и от программиста
P>2. что надёжней
Зависит от задачи и от программиста
P>3. что безопасней
Зависит от задачи и от программиста
P>4. что более абстрактно
std::sort
P>?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, Erop, Вы писали:
P>>ок, но сначала ответь, желательно с аргументами: qsort vs std::sort P>>1. что быстрее E>Зависит от задачи и от программиста
в каких случаях qsort, по твоему мнению, быстрее?
P>>2. что надёжней E>Зависит от задачи и от программиста
в каких случаях qsort, по твоему, мнению надёжней?
P>>3. что безопасней E>Зависит от задачи и от программиста
в каких случаях qsort, по твоему, мнению безопасней?
Здравствуйте, Erop, Вы писали:
CC>>В нормальных это в каких? По мне так эта часть достаточно крупная чтоб заколебать через некоторое время. Всё то, что на плюсах делается контейнерами, RAII и прочими простыми упрощениями жизни тут приходится колбасить вручную каждый раз. Или делать на макросах, отлаживать которые потом то ещё развлечение. E>А и не надо на макросах. Надо честно писать. а то что работа вообще штука тяжёлая -- ну так тут никто не спорит.
Дык это получается почти копипаст. Что есть error prone и опять таки плохо поддерживаемо.
E>Мало того, ты сейчас написал, только другими словами, что на С++ прогать более ПРИКОЛЬНО, чем на С.
Более удобно. Мне достаточно написать один раз шаблонную обёртку, чтоб потом парой движений обеспечить схожий функционал в сотнях мест, где он нужен. На С для облегчения жизни у меня есть только макросы, у которых дофига ограничений и подводных камней.
E>Просто, насколько я понимаю, есть идея, что когда прогать прикольно, прогеры склонны раздувать код, а когда неприкольно -- склонны сокращать...
У меня таких идей нет. Да и идея мягко говоря странная. Мне когда "прикольно" хочется код написать максимально корректным (читай "без хаков"), простым и понятным. Когда "не прикольно" — абы скорее заработал как надо и забыть про него.
E>>>>>У большинства это от недостатка опыта, и постепенно проходит, но у некоторых не проходит никогда... CC>>>>Оставь этот менторский тон. Он не действует как ты рассчитываешь. E>ПО существу, тем не менее, ты со мной согласился...
Тебе похоже хочется выдать желаемое за действительное.
Говорю прямым текстом: я с тобой не согласен, и считаю что ты это написал троллинга ради.
E>>>Я думаю, что он злит коллег, которые обсуждают персоны, а не идеи... CC>>Значит он способствует скатыванию темы в простой срач. CC>>Тем более оставь. E>Месье имеет власть мне приказывать?
Советовать.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Здравствуйте, Alexey Sudachen, Вы писали:
AS>С++ настолько же надёжен и безопасен как и ассемблер.
Пацталом. Ты что то там про знания С++ говорил? Щас похоже ты нам их продемонстрируешь.
AS> Это факт установленный эмперически
Где можно ознакомиться с этими эмпирически установленными фактами?
AS> просто существуют разные мифы что путём некоторых заклинаний можно сделать код абстрактно надёжно-безопасным. От только корка, как истина в последней инстанции, показыает что это именно что миф.
Пруф или GTFO!
AS>Абстрактность вообще в статическую типизацию не то чтобы плохо лжится, но весьма с трудом запихивается.
Какими ещё глубинами "знанимй" нас порадуешь?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Ты не улыбки ставь а на вопросы ответь.
А то блаблабла ты умеешь, как насчёт аргументированного и развёрнутого ответа, базирующегося исключительно на проверяемых фактах?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Здравствуйте, Alexey Sudachen, Вы писали:
AS>Это когда можно попить кофе пока а-цатаи процессорный монстер компилирует несколько строчек и код раздувается до эпических размеров... да что-то такое слышал.
Интересу ради, какой у тебя там год на календаре?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
P>>>ок, но сначала ответь, желательно с аргументами: qsort vs std::sЗort P>>>1. что быстрее E>>Зависит от задачи и от программиста P>в каких случаях qsort, по твоему мнению, быстрее?
#include <stdlib.h>
#include <stdio.h>
#include <algorithm>
#include <vector>
#include <time.h>
using namespace std;
struct X {
vector<long> q_;
X(int n) { q_.resize(n); for ( int i=0; i < q_.size(); ++i ) q_[i] = rand(); }
X(const X &x) { for( int i=0; i < x.q_.size(); ++i ) q_.push_back(x.q_[i]); }
};
int N_sum(const vector<long> &q) { int N = 0; for ( int i = 0; i < q.size(); ++i ) N += q[i]; return N; }
struct Y{
int N;
Y(const X x) { N = N_sum(x.q_); }
};
bool operator < (const Y& a, const Y b){
return a.N < b.N;
}
int X_sum_comp(const X *a,const X *b) {
return N_sum(a->q_) - N_sum(b->q_);
}
int main(int argc, char **argv){
if ( argc < 2 ) exit(-1);
int n = strtol(argv[1],0,0);
vector<X> x;
for ( int i = 0; i < n; ++i ) x.push_back(X(n));
vector<X> y = x;
double c0 = clock();
sort(x.begin(),x.end());
double c1 = clock();
qsort(&y[0],y.size(),sizeof(y[0]),(int(*)(const void*,const void*))X_sum_comp);
double c2 = clock();
printf("sort: %.3f, qsort: %.3f\n",(c1-c0)/CLOCKS_PER_SEC,(c2-c1)/CLOCKS_PER_SEC);
}
P>>>2. что надёжней E>>Зависит от задачи и от программиста P>в каких случаях qsort, по твоему, мнению надёжней? P>в каких случаях qsort, по твоему, мнению безопасней?
Критерии для надёжности и безопасности пожалуйста в студию. Иначе можно с таким же успехом спрашивать что и них пушистее и овальнее.
AS>>Абстрактность вообще в статическую типизацию не то чтобы плохо лжится, но весьма с трудом запихивается. ))) P>STL статически типизирован(практически полностью), и при этом абстрактен
Ой ли! Ну то есть я могу сделать вектор содержащий строку, число и другой вектор?! Крута, да!
Критерий абстрактности в студию, пожалуйста!
int main(int argc, char **argv){
AS> if ( argc < 2 ) exit(-1);
AS> int n = strtol(argv[1],0,0);
AS> vector<X> x;
AS> for ( int i = 0; i < n; ++i ) x.push_back(X(n));
AS>
Для тех, кто не понял что этот код делает, и получает краш на больших числах =) чуток поменяйте строчку и будет счастье. На суть проблемы это всёравно не влияет, но вот память действительно не резиновая.
for ( int i = 0; i < n; ++i ) x.push_back(X(n%101));
Здравствуйте, CreatorCray, Вы писали:
E>>>>>>У большинства это от недостатка опыта, и постепенно проходит, но у некоторых не проходит никогда... CC>>>>>Оставь этот менторский тон. Он не действует как ты рассчитываешь. E>>ПО существу, тем не менее, ты со мной согласился... CC>Тебе похоже хочется выдать желаемое за действительное. CC>Говорю прямым текстом: я с тобой не согласен, и считаю что ты это написал троллинга ради.
Не затруднит пояснить с чем конкретно ты не согласен и почему? Ну кроме тона...
CC>Советовать.
IMHO, советую как-то иначе, в иных тонах и наклонениях и т. п...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, Alexéy Sudachén, Вы писали:
P>>>>ок, но сначала ответь, желательно с аргументами: qsort vs std::sЗort P>>>>1. что быстрее 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);
шутник, UB'шник
P>>>>2. что надёжней E>>>Зависит от задачи и от программиста P>>в каких случаях qsort, по твоему, мнению надёжней? P>>в каких случаях qsort, по твоему, мнению безопасней? AS>Критерии для надёжности и безопасности пожалуйста в студию. Иначе можно с таким же успехом спрашивать что и них пушистее и овальнее.
уже писал.
вкратце: надёжность — больше ошибок(классов ошибок) ловится compile-time. безопасность — менее подверженность vulnerabilities.
но это вкратце
Здравствуйте, Alexéy Sudachén, Вы писали:
AS>>>Абстрактность вообще в статическую типизацию не то чтобы плохо лжится, но весьма с трудом запихивается. ))) P>>STL статически типизирован(практически полностью), и при этом абстрактен
AS>Ой ли! Ну то есть я могу сделать вектор содержащий строку, число и другой вектор?! Крута, да! AS>Критерий абстрактности в студию, пожалуйста!
Абстра́кция (от лат. abstractio — отвлечение) — отвлечение в процессе познания от несущественных сторон, свойств, связей объекта (предмета или явления) с целью выделения их существенных, закономерных признаков; абстрагирование; теоретическое обобщение как результат такого отвлечения.
Здравствуйте, Piko, Вы писали:
P>в каких случаях qsort, по твоему мнению, быстрее?
Слушайте, люди, вы меня правда пугаете.
Ты сам не можешь написать пример в котором qsort порвёт std::sort?
Хочешь совет? Напиши пример где функция сравнения ДОЛГАЯ.
Например, у тебя есть массив неотрицательных чисел,
чтобы сравнить два, ты от каждого вычисляешь exp( x / x_max ), с точностью 1 000 000 знаков, и потом в лексографическом с конца порядке сортируешь. Ну и чисел тысяч 10 хотя бы в массиве
Вот, что бы лучше думалось, попробуй угадать, что вернёт функция RN_test:
class RandNum {
int body;
static int countCpp;
static int countC;
public:
RandNum() : body( rand() ) {}
bool operator < ( const RandNum& other ) const
{ countCpp++; return body < other.body; }
static int CmpImpl( const RandNum* arg1, const RandNum* arg2 )
{ countC++; return arg1->body - arg2->body; }
static int Cmp( const void* arg1, const void* arg2 ) { return CmpImpl( (const RandNum*) arg1, (const RandNum*) arg2 ); }
static const int CppCount() { return countCpp; }
static const int CCount() { return countC; }
};
int RandNum::countC = 0;
int RandNum::countCpp = 0;
int RN_test( int n = 1000 )
{
std::vector<RandNum> arrCpp;
for( int i = 0; i < n; i++ ) {
arrCpp.push_back( RandNum() );
}
std::vector<RandNum> arrC( arrCpp );
qsort( &arrC[0], arrC.size(), sizeof( RandNum ), RandNum::Cmp );
std::sort( arrCpp.begin(), arrCpp.end() );
return RandNum::CppCount() * 100 / RandNum::CCount();
}
у меня, например, возвращает 182%
P>в каких случаях qsort, по твоему, мнению надёжней?
По моему мнению для всех. Ещё надёжнее, будет если её немножко шаблонно обернуть, но даже в чистом С-варианте она неверно работает только если передать не так буфер или напутать с типами. В std::sort способов накрячится есть просто невообразимое множество
P>>>3. что безопасней E>>Зависит от задачи и от программиста
P>в каких случаях qsort, по твоему, мнению безопасней?
А что значит "безопаснее"? Какая модель угроз?
Не, ну правда, скажите, что вы просто в полемическом запале немного троллили, а не на полном серьёзе считали, что std::sort быстрее qsort'а?
Я же совсем веру в коллег потеряю!
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, Piko, Вы писали:
P>>>>>ок, но сначала ответь, желательно с аргументами: qsort vs std::sЗort P>>>>>1. что быстрее 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'шник
добавляем
bool operator < (const X& a, const X &b){
return N_sum(a.q_) - N_sum(b.q_);
}
void swap(X &l,X &r){
swap(l.q_,r.q_);
}