Re[6]: Because we can!
От: CreatorCray  
Дата: 29.04.14 09:03
Оценка:
Здравствуйте, landerhigh, Вы писали:

L>А с каких это пор OpenSSL вошел в стандарт C++?

Я про доверие к несамописным библиотекам.
Стандарт описывает только интерфейс и контракты. Кто будет писать имплементацию стандарт не определяет.
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[2]: Зачем шаблоны в С++?
От: alpha21264 СССР  
Дата: 29.04.14 09:03
Оценка:
Здравствуйте, Artifact, Вы писали:

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


A>Чтоб не скучать на работе .


Всё понятно. Я читаю rsdn и не скучаю. Наверное поэтому мне темплейты и не нужны.

Течёт вода Кубань-реки куда велят большевики.
Re[7]: Because we can!
От: landerhigh Пират  
Дата: 29.04.14 09:05
Оценка:
Здравствуйте, CreatorCray, Вы писали:

L>>А с каких это пор OpenSSL вошел в стандарт C++?

CC>Я про доверие к несамописным библиотекам.

А кто говорил про доверие к несамописным библиотекам?

CC>Стандарт описывает только интерфейс и контракты. Кто будет писать имплементацию стандарт не определяет.


Так OpenSSL стандарт описывает или таки нет?
Re[6]: Because we can!
От: CreatorCray  
Дата: 29.04.14 09:08
Оценка:
Здравствуйте, jazzer, Вы писали:

J>ну т.е. претензии к реализации, а не к самой библиотеке. ОК.

То как она спроектирована (всё на шаблонах) даёт основания считать что сделать нормальную реализацию некоторых алгоритмов (того же мерсена, который крайне выигрывает от правильно написанного SSE) будет геморно, поэтому никто делать её просто не станет. А нафига — и так ведь сносно работает.
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[5]: Because we can!
От: CreatorCray  
Дата: 29.04.14 09:08
Оценка: :)
Здравствуйте, jazzer, Вы писали:

J>Т.е. у тебя претензии не к стандартной библиотеке (т.е. к интерфейсу) производства комитета по С++, а к конкретной реализации производства конкретного компиляторостроителя?


1. Любая реализация будет ограничена заданными рамками интерфейса.
2. В проект пойдёт код из "конкретной реализации" а не абстрактный стандарт.
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[6]: Because we can!
От: jazzer Россия Skype: enerjazzer
Дата: 29.04.14 09:11
Оценка:
Здравствуйте, CreatorCray, Вы писали:

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


J>>Т.е. у тебя претензии не к стандартной библиотеке (т.е. к интерфейсу) производства комитета по С++, а к конкретной реализации производства конкретного компиляторостроителя?


CC>1. Любая реализация будет ограничена заданными рамками интерфейса.

CC>2. В проект пойдёт код из "конкретной реализации" а не абстрактный стандарт.

Т.е. ты фактически утверждаешь, что в рамках описанного в Стандарте интерфейса невозможно написать эффективную реализацию?
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[8]: Because we can!
От: CreatorCray  
Дата: 29.04.14 09:14
Оценка:
Здравствуйте, landerhigh, Вы писали:

L>А кто говорил про доверие к несамописным библиотекам?

Ты

L>Да-да, надо использовать самописные...


Мы тут обсуждаем твою конкретную претензию к источнику кода. После того как выясним что самописные библиотеки ничем не хуже не-самописных можно будет двигаться дальше.
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[7]: Because we can!
От: jazzer Россия Skype: enerjazzer
Дата: 29.04.14 09:14
Оценка:
Здравствуйте, CreatorCray, Вы писали:

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


J>>ну т.е. претензии к реализации, а не к самой библиотеке. ОК.

CC>То как она спроектирована (всё на шаблонах) даёт основания считать что сделать нормальную реализацию некоторых алгоритмов (того же мерсена, который крайне выигрывает от правильно написанного SSE) будет геморно, поэтому никто делать её просто не станет. А нафига — и так ведь сносно работает.

Э-э-э... Специализации для SSE-совместимых типов никто не отменял (SSE все равно только с конкретными типами будет работать).
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[7]: Because we can!
От: CreatorCray  
Дата: 29.04.14 09:17
Оценка:
Здравствуйте, jazzer, Вы писали:

J>Т.е. ты фактически утверждаешь, что в рамках описанного в Стандарте интерфейса невозможно написать эффективную реализацию?

Думаю что можно. Но это будет геморройнее, поэтому вряд ли кто либо это станет делать ради стандартной либы.
Куда проще будет сделать нешаблонную версию и забацать её как полагается.
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[8]: Because we can!
От: CreatorCray  
Дата: 29.04.14 09:20
Оценка:
Здравствуйте, jazzer, Вы писали:

J>Э-э-э... Специализации для SSE-совместимых типов никто не отменял (SSE все равно только с конкретными типами будет работать).

Можешь попробовать реализовать.
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[8]: Because we can!
От: jazzer Россия Skype: enerjazzer
Дата: 29.04.14 09:22
Оценка:
Здравствуйте, CreatorCray, Вы писали:

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


J>>Т.е. ты фактически утверждаешь, что в рамках описанного в Стандарте интерфейса невозможно написать эффективную реализацию?

CC>Думаю что можно. Но это будет геморройнее, поэтому вряд ли кто либо это станет делать ради стандартной либы.
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[9]: Because we can!
От: jazzer Россия Skype: enerjazzer
Дата: 29.04.14 09:29
Оценка: +1
Здравствуйте, CreatorCray, Вы писали:

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


J>>Э-э-э... Специализации для SSE-совместимых типов никто не отменял (SSE все равно только с конкретными типами будет работать).

CC>Можешь попробовать реализовать.
Ну если бы мне это было нужно, реализовал бы. Например, некоторые stl-ные алгоритмы я специализировал для конкретных типов, полет нормальный.

В общем, в сухом остатке, претензий к самой библиотеке у тебя нет, есть претензии к конкретным реализациям, и есть смутные подозрения, что подсунуть правильную реализацию, оставаясь в рамках интерфейса, будет трудно.
Я правильно резюмировал?
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[9]: Because we can!
От: landerhigh Пират  
Дата: 29.04.14 09:32
Оценка:
Здравствуйте, CreatorCray, Вы писали:

L>>А кто говорил про доверие к несамописным библиотекам?

CC>Ты
CC>

L>Да-да, надо использовать самописные...


CC>Мы тут обсуждаем твою конкретную претензию к источнику кода. После того как выясним что самописные библиотеки ничем не хуже не-самописных можно будет двигаться дальше.


Кому, надо, тот понял, что я имею в виду. А дальше кормить тролля я не намерен.
Re[2]: Зачем шаблоны в С++?
От: Privalov  
Дата: 29.04.14 10:02
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

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


Эээ... А почему не Б3-21? Еще сильнее к экономии приучит. У него, ЕМНИП, 7 регистров против 14 у 34-ки.
Re: Зачем цифровые компьютеры?
От: Няшка Россия  
Дата: 29.04.14 10:15
Оценка:
Аналоговые гораздо проще и быстрее!
80% людей оценивают свое мастерство выше среднего...
Re[2]: Зачем шаблоны в С++?
От: Няшка Россия  
Дата: 29.04.14 10:19
Оценка:
BZ>в общем, я считаю что компиляторы и калькуляторы — это зло. и начать бороться с ними надо с детсада. вместо айфона выдавать каждому ребёнку бз-34, это и для мускулов нагрузка, и для ума

даешь тачку-смартфон и чемодан с аккумулятором в массы!
80% людей оценивают свое мастерство выше среднего...
Re[5]: Зачем шаблоны в С++?
От: Molchalnik  
Дата: 29.04.14 10:44
Оценка: -3
Здравствуйте, Stanislav V. Zudin, Вы писали:


__>>Что же в вашей "реальности" по другому?


SVZ>А в реальности 90% кода пишется под конкретную задачу и шаблоны там ничем не помогут. Вот сделать код нечитабельным — это запросто (таких примеров предостаточно).


Ты что, GUI приложения пишешь?
Ощущается так.

Шаблоны позволяют писать БОЛЕЕ БЫСТРЫЙ код. Шаблоны дают компилятору возможность соптимизировать код под определённый тип, и это значительно ускоряет.


Например, пишешь ты массив через шаблоны. Ну или кэш подкачки с диска. Дела это не меняет.

В массиве пишешь адресацию типа

ParameterType & address_of_type = base[index]; (*)


Задаёшь написанный массив для типа длинной 9 бит

Если бы ты писал универсальный код на С, адресация (*) разложилась на ассемблере как

mov eax, index
mov edx, sizeof(ParameterType)
mul eax
add eax, base


здесь операция умножения mul весьма медленная!!! это будет работать плохо и долго

А для шаблона с параметром длиной 9 компилятор сможет записать

lea eax, [edx][edx*8]

это ЗНАЧИТЕЛЬНО увеличивает скорость доступа!!! К кэшу или к массиву, например.


При этом подобные оптимизации компилятор способен делать для большинства длин типов, например, для 3, 5,7,8 и так далее


И для типа каждой длины компилятор сгенерит оптимальный код. Индивидуально.


Плата за это — это раздувание кода: шаблон не создаёт тип, тип создаётся для каждой вариации шаблона.

И компилер для каждого набора параметров будет генерить свой код массива, например.


Использовал код массива для 20 типов — получил 20 наборов функций для работы с массивом.


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


Резюмирую: шаблоны мощное средство написания оптимального кода, приводящее к раздуванию размера итогового исполнимого файла.
Re[6]: Зачем шаблоны в С++?
От: Stanislav V. Zudin Россия  
Дата: 29.04.14 11:28
Оценка: +1
Здравствуйте, Molchalnik, Вы писали:

M>Здравствуйте, Stanislav V. Zudin, Вы писали:



__>>>Что же в вашей "реальности" по другому?


SVZ>>А в реальности 90% кода пишется под конкретную задачу и шаблоны там ничем не помогут. Вот сделать код нечитабельным — это запросто (таких примеров предостаточно).


M>Ты что, GUI приложения пишешь?

M>Ощущается так.

Хе-хе, не совсем. Хотя и гуя предостаточно.

M>Шаблоны позволяют писать БОЛЕЕ БЫСТРЫЙ код. Шаблоны дают компилятору возможность соптимизировать код под определённый тип, и это значительно ускоряет.


  M>Например, пишешь ты массив через шаблоны. Ну или кэш подкачки с диска. Дела это не меняет.
.
M>В массиве пишешь адресацию типа

M>ParameterType & address_of_type = base[index]; (*)


M>Задаёшь написанный массив для типа длинной 9 бит


M>Если бы ты писал универсальный код на С, адресация (*) разложилась на ассемблере как


M>mov eax, index

M>mov edx, sizeof(ParameterType)
M>mul eax
M>add eax, base


M>здесь операция умножения mul весьма медленная!!! это будет работать плохо и долго


M>А для шаблона с параметром длиной 9 компилятор сможет записать


M>lea eax, [edx][edx*8]


M>это ЗНАЧИТЕЛЬНО увеличивает скорость доступа!!! К кэшу или к массиву, например.



M>При этом подобные оптимизации компилятор способен делать для большинства длин типов, например, для 3, 5,7,8 и так далее



M>И для типа каждой длины компилятор сгенерит оптимальный код. Индивидуально.



M>Плата за это — это раздувание кода: шаблон не создаёт тип, тип создаётся для каждой вариации шаблона.


M>И компилер для каждого набора параметров будет генерить свой код массива, например.



M>Использовал код массива для 20 типов — получил 20 наборов функций для работы с массивом.


Превосходно, ты привел пример контейнера, который используется для 20 разных типов. В данном случае логично использовать шаблоны. Кстати, если бы ты был чуточку внимательнее, я этот случай упоминал в сообщении строчкой выше:

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


А если задача стоит, ну скажем, написать восстановление электрической схемы из геометрических примитивов, то куда ты присобачишь шаблоны? Задача одна, выполняется для одного вполне определенного набора данных и параметризировать ее смысла нет. А таких задач, что у меня, что у топикстартера как раз примерно 90% от общего кода.

M>И вообще: то, что вы не умеете пользоватся инструментом, ещё не значит, что он не нужен. Просто нужно знать свой манёвр: когда и какой инструмент использовать хорошо, когда плохо, а когда на вкус разработчика.


Да ладно, что нас старых попрекать-то, кодим как можем...

M>Резюмирую: шаблоны мощное средство написания оптимального кода, приводящее к раздуванию размера итогового исполнимого файла.


Все-таки не удержусь и проедусь по твоему примеру.
Ну вот имеем мы твой массив
std::vector<ParameterType> base;

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

Или я неправильно понял и ты имел в виду работу с массивом байт, типа такого:
ParameterType* base = (ParameterType*)malloc(num * sizeof(ParameterType));
M>ParameterType & address_of_type = base[index]; (*)
_____________________
С уважением,
Stanislav V. Zudin
Re[7]: Зачем шаблоны в С++?
От: Molchalnik  
Дата: 29.04.14 11:39
Оценка:
Здравствуйте, Stanislav V. Zudin, Вы писали:


SVZ>Все-таки не удержусь и проедусь по твоему примеру.

SVZ>Ну вот имеем мы твой массив
SVZ>
SVZ>std::vector<ParameterType> base;
SVZ>

SVZ>Куда нужно воткнуть шаблон, чтобы компилятор поменял вычисление смещения?

уточняю: пусть у тебя есть функции в стиле С для работы с вектором, например

bool AddVector(struct Vector * base, void * element_to_add, size_t position, size_t size_of_element)

функция в стиле C++ будет значительно эффективнее

template <typename ParameterType> AddVector(Vector &base, ParameterType & element_to_add, size_t position);

т.к. размер типа известен на этапе компиляции и поэтому код подвергается дополнительным оптимизациям на ассемблерном уровне.

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

SVZ>Или я неправильно понял и ты имел в виду работу с массивом байт, типа такого:

SVZ>
SVZ>ParameterType* base = (ParameterType*)malloc(num * sizeof(ParameterType));
M>>ParameterType & address_of_type = base[index]; (*)
SVZ>


уточняю: нет разницы между конкретной реализацией и реализацией шаблона. Шаблон — лишь метод получения конкретной реализации кода.

Разница возникает, когда ты пишешь универсальный код в стиле C++ vs универсальный код в стиле C

В первом случае компилятор знает размер типа на этапе компиляции, и поэтому может эффективно оптимизировать.
Во втором размер типа передаётся как параметр, что требует дополнительно пушить параметр в стек, неоптимально выполнять вычислительные действия с ним и так далее.
Re[10]: Because we can!
От: CreatorCray  
Дата: 29.04.14 16:48
Оценка:
Здравствуйте, jazzer, Вы писали:

J>В общем, в сухом остатке, претензий к самой библиотеке у тебя нет

К многим её частям есть — overcomplicated и overengineered интерфейс, который тянет за собой множество проблем реализации.

J> есть претензии к конкретным реализациям

Имеются, верно.
Надо заметить что во многом реализации сделаны чтоб удовлетворять требованиям интерфейса. Кстати я допускаю что в этих рамках сделано максимально хорошо.
Но overall результат получается увы довольно средний.
Далеко ходить не надо, уже кстати обсасывали — стандартный std::sort ускоряется в несколько раз если научить его принимать tree way comparison operator вместо operator < (). И чем тяжелее компаратор — тем лучше это видно.
На том же самом алгоритме.
Выходит в угоду интерфейсу сделано намеренное ухудщение О характеристик алгоритма. Я кстати в той теме показал как можно было сделать sort внутри с 3-way а снаружи сделать стаб для less only.

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

Не смутные, а так верно, да.
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.