Re[3]: Зачем шаблоны в С++?
От: a_g_99 США http://www.hooli.xyz/
Дата: 28.04.14 10:30
Оценка:
Здравствуйте, alpha21264, Вы писали:

A>А зачем нужно такое средство, при котором увеличивается сложность понимания и отладки?

A>Ведь сложность понимания для программиста — один из важных параметров, если не самый важный.
Сложность просто повышает порог входа для специалиста. Если бы все было просто, вознаграждение программистов было бы весьма низким

A>Вопрос-то был не про это. Не про то, нужны ли ли не нужны шаблоны. Допустим, нужны.

A>А про то, как вы их используете.
В соответствии с их предназначением. Если не боитесь прослыть национал-предателем, можете почитать вражеские книги Александреску, Мейерса и Саттера. Там более менее разжевано. Гораздо более эффективный вариант — сделать быстрое ревью на гитхабе какого-нибудь блинка.
Re: Зачем шаблоны в С++?
От: landerhigh Пират  
Дата: 28.04.14 11:55
Оценка:
Здравствуйте, alpha21264, Вы писали:


A>Люди! А для чего вы используете шаблоны?


Техподдержки программистов троллить чтобы для!

A>Может я чего упускаю?


Метапрограммирование, compile time voodoo magic, SFINAE трюки и прочие способы прицельной стрельбы по ногам
Re: Зачем шаблоны в С++?
От: Lazin Россия http://evgeny-lazin.blogspot.com
Дата: 28.04.14 13:39
Оценка: :)))
Здравствуйте, alpha21264, Вы писали:

A>Вот дожил до 45 лет и не знаю, зачем в С++ шаблоны.


Для того, чтобы потом офигевать от мегабайтных ошибок компиляции.
Re: Because we can!
От: Mamut Швеция http://dmitriid.com
Дата: 28.04.14 13:54
Оценка:
A>Люди! А для чего вы используете шаблоны?

Чтобы делать код короче и понятнее ©™ конечно же


auto ns = chrono::duration_cast<std::chrono::nanoseconds>(end — start).count();

uniform_int_distribution<mt19937::result_type>(0, n)(rng)




Взято отсюда: http://levin-matveev.livejournal.com/86372.html


dmitriid.comGitHubLinkedIn
Re: Зачем шаблоны в С++?
От: BulatZiganshin  
Дата: 28.04.14 16:37
Оценка:
Здравствуйте, alpha21264, Вы писали:

A>Вот дожил до 45 лет и не знаю, зачем в С++ шаблоны.


дожил до 80 лет, но так и не понял зачем все эти формульные трансляторы? простой пример — моя программа ищущая дубликаты данных, работает со скоростью один байт/такт, а вражеская созданная компилятором — втрое медленней. недавно читал статью с FAST'12, где этот алгоритм перенесли на GPU поскольку на CPU он видите ли лажает. а всё потому что нынешняя молодёжь не умеет в машкодах писать

в общем, я считаю что компиляторы и калькуляторы — это зло. и начать бороться с ними надо с детсада. вместо айфона выдавать каждому ребёнку бз-34, это и для мускулов нагрузка, и для ума

всяких сопливых детей младше 80 прошу в тему не писать
Люди, я люблю вас! Будьте бдительны!!!
Re: Зачем шаблоны в С++?
От: Artifact  
Дата: 28.04.14 16:44
Оценка: +1
Здравствуйте, alpha21264, Вы писали:

Чтоб не скучать на работе .
__________________________________
Не ври себе.
Re[2]: Зачем шаблоны в С++?
От: sergey2b ЮАР  
Дата: 28.04.14 16:55
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

BZ>в общем, я считаю что компиляторы и калькуляторы — это зло. и начать бороться с ними надо с детсада. вместо айфона выдавать каждому ребёнку бз-34, это и для мускулов нагрузка, и для ума


бз-34 раслаюляет, тк в системе команд даже * и "/" есть, обратная польская запись, нормальный индикатор, клавиатура и БП от холодильника не сбрасываеться
лучше ИК80 без ROM, с поразрядным вводом и контролем на светодиодах (видел такую систему, занрузчик монитора с перфоленты по понедельникам вносили вручную)
Re[2]: Зачем шаблоны в С++?
От: CreatorCray  
Дата: 29.04.14 03:04
Оценка:
Здравствуйте, Lazin, Вы писали:

A>>Вот дожил до 45 лет и не знаю, зачем в С++ шаблоны.

L>Для того, чтобы потом офигевать от мегабайтных ошибок компиляции.

Ты их просто overcook
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[2]: Because we can!
От: CreatorCray  
Дата: 29.04.14 03:04
Оценка: -1 :)
Здравствуйте, Mamut, Вы писали:

M>

M>auto ns = chrono::duration_cast<std::chrono::nanoseconds>(end — start).count();
M>uniform_int_distribution<mt19937::result_type>(0, n)(rng)


А не надо использовать стандартные библиотеки. Они на то и стандартные чтоб покрывать как можно бОльшую площадь платформ, оттого работают на них одинаково плохо и спроектированы по общему знаменателю.
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[3]: Because we can!
От: landerhigh Пират  
Дата: 29.04.14 07:07
Оценка:
Здравствуйте, CreatorCray, Вы писали:


CC>А не надо использовать стандартные библиотеки. Они на то и стандартные чтоб покрывать как можно бОльшую площадь платформ, оттого работают на них одинаково плохо и спроектированы по общему знаменателю.


Да-да, надо использовать самописные с непонятным интерфейсом и никому не известным количеством внутренних багов!
Re[2]: Because we can!
От: jazzer Россия Skype: enerjazzer
Дата: 29.04.14 07:27
Оценка: 2 (1) +5
Здравствуйте, Mamut, Вы писали:

A>>Люди! А для чего вы используете шаблоны?


M>Чтобы делать код короче и понятнее ©™ конечно же

Чтобы делать код короче и понятнее, придуманы typedef-ы. Ваш кэп.
Товарищ бездумно копипастит все в одну строчку и потом удивляется, почему строчки длинные получаются.

M>auto ns = chrono::duration_cast<chrono::nanoseconds>(end - start).count();

А вот у меня вот так все отлично работает, аж в двух вариантах:
auto ns1 = chrono::duration<double, nano>(end - start).count();
auto ns2 = chrono::nanoseconds(end - start).count();

Не говоря уже о том, что даже в стандартной поставке есть сразу 3 таймера: system_clock, steady_clock, high_resolution_clock (и реализация/платформа может добавить свои, если они есть, с внешнего генератора, например).

M>uniform_int_distribution<mt19937::result_type>(0, n)(rng)

А тут ему что не понравилось?

Я вообще фигею просто. Сначала кричат, что стандартная библиотека плохая, потому что в ней всего один генератор псевдослучайных чисел, взыскательных пользователей не удовлетворяет.
Ладно, дают им на выбор туеву хучу оных (побогаче, чем в Rust): http://en.cppreference.com/w/cpp/numeric/random — на выбор и алгоритмы (включая аппаратный источник!), и распределения (штук двадцать!)
Так нет же, опять крик: теперь заставляют выбирать!
Вы, блин, определитесь уже наконец, что вам нужно — функциональный инструмент или поделка для домохозяек из серии "640к хватит всем".

Не говоря уже о том, что если ты собираешься использовать один единственный генератор, то просто делаешь
typedef uniform_int_distribution<mt19937::result_type> dist;

И тем более уж не говоря о том, что если ему нужно генерить простые инты, а не обобщенное хз что из mt19937 (у которого, к слову, result_type прописан в Стандарте), то достаточно просто написать uniform_int_distribution<> и не парить никому мозг страшным mt19937::result_type.

И, опять же, не говоря о том, что и в Rust полноценная генерация совсем не короче, чем плюсовая версия:
use std::rand;
use std::rand::distributions::{Normal, IndependentSample};
// mean 2, standard deviation 3
let normal = Normal::new(2.0, 3.0);
let v = normal.ind_sample(&mut rand::task_rng());

http://web.mit.edu/rust-lang_v0.9/doc/std/rand/distributions/normal/struct.Normal.html

То же на С++11 (я даже std убирать не буду):
#include <random>
std::mt19937 gen(std::random_device()());
// mean 2, standard deviation 3
std::normal_distribution<> normal(2,3);
auto v = normal(gen);
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[3]: Because we can!
От: jazzer Россия Skype: enerjazzer
Дата: 29.04.14 07:28
Оценка:
Здравствуйте, CreatorCray, Вы писали:

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


M>>

M>>auto ns = chrono::duration_cast<std::chrono::nanoseconds>(end — start).count();
M>>uniform_int_distribution<mt19937::result_type>(0, n)(rng)


CC>А не надо использовать стандартные библиотеки. Они на то и стандартные чтоб покрывать как можно бОльшую площадь платформ, оттого работают на них одинаково плохо и спроектированы по общему знаменателю.


Можно ткнуть пальцем, в каком месте chrono/random работают плохо?
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[3]: Because we can!
От: Mamut Швеция http://dmitriid.com
Дата: 29.04.14 07:34
Оценка:
M>>Чтобы делать код короче и понятнее ©™ конечно же
J>Чтобы делать код короче и понятнее, придуманы typedef-ы костыли. Ваш кэп.

Я тебе фразу поправил, теперь она правильная


dmitriid.comGitHubLinkedIn
Re[4]: Because we can!
От: jazzer Россия Skype: enerjazzer
Дата: 29.04.14 07:36
Оценка:
Здравствуйте, Mamut, Вы писали:

M>>>Чтобы делать код короче и понятнее ©™ конечно же

J>>Чтобы делать код короче и понятнее, придуманы typedef-ы костыли. Ваш кэп.

M>Я тебе фразу поправил, теперь она правильная


Отличная Шутка! ©™
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[4]: Because we can!
От: CreatorCray  
Дата: 29.04.14 08:56
Оценка: :)
Здравствуйте, jazzer, Вы писали:

J>Можно ткнуть пальцем, в каком месте chrono/random работают плохо?


К рандому у меня лично претензии performance плана: правильная реализация Mersenne на моей машине выдаёт ~7.8 Gb/s fillrate (2Gb за 0.254 сек). Библиотечный до этого "несколько" не дотягивает.\
Колво разных генераторов — радует. Но код внутри оставляет ощущение overcomplicated и overengineered.

chrono просто overcomplicated. Ну и по качеству реализации тоже так себе: в гнусной версии это просто обёртка над time_t, какой там HRT. На винде в код не смотрел, но HRT выдаёт очень даже low resolution значения. Я интринсиками или системным API получаю более точные цифры.

Если заглянуть в код то, если цензурно, "сложно о простом" будет самым точным описанием. Там Александреску не просто укусил, он авторов грыз походу недели две а то и больше.

Как generic библиотеки они ОК.
Но есть лучше.
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[3]: Because we can!
От: CreatorCray  
Дата: 29.04.14 08:56
Оценка:
Здравствуйте, jazzer, Вы писали:

J>Не говоря уже о том, что даже в стандартной поставке есть сразу 3 таймера: system_clock, steady_clock, high_resolution_clock (и реализация/платформа может добавить свои, если они есть, с внешнего генератора, например).


Дада, стандартная поставка.
typedef system_clock high_resolution_clock;

По умолчанию даже монотоник на system_clock завёрнута.

J>Я вообще фигею просто. Сначала кричат, что стандартная библиотека плохая, потому что в ней всего один генератор псевдослучайных чисел, взыскательных пользователей не удовлетворяет.

J>Ладно, дают им на выбор туеву хучу оных (побогаче, чем в Rust): http://en.cppreference.com/w/cpp/numeric/random — на выбор и алгоритмы (включая аппаратный источник!), и распределения (штук двадцать!)

Если бы они ещё и написаны были хорошо с точки зрения производительности.
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[4]: Because we can!
От: CreatorCray  
Дата: 29.04.14 08:56
Оценка:
Здравствуйте, landerhigh, Вы писали:

CC>>А не надо использовать стандартные библиотеки. Они на то и стандартные чтоб покрывать как можно бОльшую площадь платформ, оттого работают на них одинаково плохо и спроектированы по общему знаменателю.


L>Да-да, надо использовать самописные с непонятным интерфейсом и никому не известным количеством внутренних багов!

Чтоб далеко за примером не ходить: у нас уже есть OpenSSL, написанный известными личностями, с простым, удобным и понятным интерфейсом (и особенно кодом внутри) и совершенно без багов.
Не боги горшки обжигают.
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[5]: Because we can!
От: landerhigh Пират  
Дата: 29.04.14 09:00
Оценка:
Здравствуйте, CreatorCray, Вы писали:

L>>Да-да, надо использовать самописные с непонятным интерфейсом и никому не известным количеством внутренних багов!

CC>Чтоб далеко за примером не ходить: у нас уже есть OpenSSL, написанный известными личностями, с простым, удобным и понятным интерфейсом (и особенно кодом внутри) и совершенно без багов.
CC>Не боги горшки обжигают.

А с каких это пор OpenSSL вошел в стандарт C++?
Re[4]: Because we can!
От: jazzer Россия Skype: enerjazzer
Дата: 29.04.14 09:01
Оценка: +1
Здравствуйте, CreatorCray, Вы писали:

CC>Если бы они ещё и написаны были хорошо с точки зрения производительности.


Т.е. у тебя претензии не к стандартной библиотеке (т.е. к интерфейсу) производства комитета по С++, а к конкретной реализации производства конкретного компиляторостроителя?
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[5]: Because we can!
От: jazzer Россия Skype: enerjazzer
Дата: 29.04.14 09:02
Оценка: +1
Здравствуйте, CreatorCray, Вы писали:

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


J>>Можно ткнуть пальцем, в каком месте chrono/random работают плохо?


CC>К рандому у меня лично претензии performance плана: правильная реализация Mersenne на моей машине выдаёт ~7.8 Gb/s fillrate (2Gb за 0.254 сек). Библиотечный до этого "несколько" не дотягивает.\


ну т.е. претензии к реализации, а не к самой библиотеке. ОК.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.