@ProCxx

Страница 2189 из 2477
Igor
10.07.2018
11:01:00
для void func(int (&arr[2])); тоже не сработает, ибо нельзя биндить временное значение в неконстантную ссылку

Igor
10.07.2018
11:01:24
а так std::vector или std::array в помощь

Alex
10.07.2018
11:01:50
Коллеги, такой вопрос имеется - пилится библиотека, в этой библиотеке для некоторых функций есть как обычная, так и платформозависимая реализации (на куче интринсиков), собственно вопрос - как бы это элегантно всё организовать? Пока склоняюсь к решению основанному на policy, как описано в ответе https://stackoverflow.com/questions/7548975/c-handling-specific-impl-ifdef-vs-private-inheritance-vs-tag-dispatch/7604607 Есть ещё варианты? Кто-нибудь делал что-то подобное?

Google
Alex
10.07.2018
11:03:26
сколняюсь к тому, что нет

Ilia
10.07.2018
11:04:16
сколняюсь к тому, что нет
Тогда зачем две функции? #ifdef -- и вперёд...

Какую фабрику?

Grigor
10.07.2018
11:05:28
Тогда зачем две функции? #ifdef -- и вперёд...
а как же красиво и по ООПшному?

Valeriy
10.07.2018
11:05:39
Alex
10.07.2018
11:06:42
ну ifdef не хочу из соображений того, чтобы попроще расширяемость была (не хочу новый ifdef при выходе очередного AVX-9000)

Юра Незнанов
10.07.2018
11:07:00
а там еще задачи прибавятся или это уже их финальное количество?

Alex
10.07.2018
11:07:01
в куче кода

Arseny
10.07.2018
11:07:19
Не совсем так просто. Тип надо.
прям при вызове ф-ии никаких типов не нужно: https://godbolt.org/g/D4inTr

Google
Grigor
10.07.2018
11:09:01
компайл-тайм предпочтительнее
Ну закрой внешним вызовом, внутри спрячь ifdef, ты от них все равно не уйдешь

Alex
10.07.2018
11:13:28
У gcc есть function multiversioning, runtime.
выглядит интересно, спасибо

Ilia
10.07.2018
11:13:38
Alex
10.07.2018
11:14:01
В чём расширяемость должна заключаться?
выходит новое верторное расширения - с минимальной болью организую её поддержку

Ilia
10.07.2018
11:14:18
Крипто хрень... Что нужно - не понятно...

Alex
10.07.2018
11:14:46
ладно, если ifdef в одном месте,, но не в сотне же

да

Ilia
10.07.2018
11:15:35
да
У тебя на одной платформе сколько реализаций данной функции будет?

Dmitry
10.07.2018
11:16:28
ладно, если ifdef в одном месте,, но не в сотне же
Ну дык а чего бы из сотни мест не завернуть всё в один вызов а там уже разрулить через ifdef или свой мостик или через multiversioning?

Alex
10.07.2018
11:18:11
должна быть одна, если пользователь либы не дурак и будет пользовать её там где собрал, на случай если это не так, я бы оставил ему реализацию по-умолчанию

Alex
10.07.2018
11:20:07
Ну дык а чего бы из сотни мест не завернуть всё в один вызов а там уже разрулить через ifdef или свой мостик или через multiversioning?
ну это либа, достаточным количеством функций (достаточным для того, чтобы в одном месте забыть дописать новый ifdef)

с этой точки зрения мне подход на шаблонах больше нравится - тк компилятор ругнется, если я забыл специальзировать новый шаблон

(не новый шаблон, а новую специализацию сделать, ну ты понел)

Alex
10.07.2018
11:25:13
ну в решении с policy напишет, что-то вроде typedef policy_list<avx512_policy> active policy;

active_policy

Google
Alex
10.07.2018
11:27:50
ну как вариант, меня это пока не сльно волнует, хочу для начала понять, как это у себя раскидать всё

Dmitry
10.07.2018
11:29:33
Ну или такие вот штуки: https://github.com/tunabrain/tungsten/blob/master/cmake/OptimizeForArchitecture.cmake

Alex
10.07.2018
11:34:47
спасибо, нормальная тема

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

https://github.com/tunabrain/tungsten/blob/62fdbba1a4549fb93e286dd22fbd58fa795a5bbc/src/thirdparty/embree/kernels/geometry/filter.h

например

Alexander
10.07.2018
11:48:04
Хм, не знал про такое - https://gcc.gnu.org/wiki/FunctionMultiVersioning

Aleksey
10.07.2018
12:20:17
Хм, не знал про такое - https://gcc.gnu.org/wiki/FunctionMultiVersioning
Непонятно почему в начале пишут саппорт только 386, а в примере и арм, и прочие камни. Имеется ввиду хост компайлера только 386?

Aleksey
10.07.2018
13:05:12
можно уточнить, где именно в примере "арм и прочие камни" ?
Еще и по посту промахнулся, все, точно домой. Вопрос снят, а я домой, а то уже вместо АМД армы кровавые в глазах.

Thorn
10.07.2018
13:33:54
почему у std::min, std::max оба аргумента одного типа? в результате std::max(const int, volatile int) нельзя без каста

Ignat
10.07.2018
13:36:54
иначе можно проиграть, сравнив -1 и 0ULL

Thorn
10.07.2018
13:39:12
тернарный оператор как-то может это делать

Ilia
10.07.2018
13:40:54
тернарный оператор как-то может это делать
Запросто! #define max(a,b) ((a)>(b)?(a):(b))

Ⱪonstantin
10.07.2018
13:41:06
тернарный оператор как-то может это делать
Не работает для -1 и 0ull как ожидается. То есть наоборот работает как ожидается, но доволен ситуаций не будешь

Alexander
10.07.2018
13:41:38
Запросто! #define max(a,b) ((a)>(b)?(a):(b))
не надо - за тебя уже сделали виндовые хедеры это

Thorn
10.07.2018
13:41:43
Запросто! #define max(a,b) ((a)>(b)?(a):(b))
ну это известно со времен K&R

Alexander
10.07.2018
13:41:51
как же я устал патчить код от этого говна

Google
Ilia
10.07.2018
13:42:46
как же я устал патчить код от этого говна
Просто надо выдыхнуть перед нырком!

Дмитрий
10.07.2018
13:43:13
Меня одногруппник один раз просил помочь, почему у него дерево отрезков тормозит, а он решил не париться с инклудами.... Долго искал.

Ⱪonstantin
10.07.2018
13:43:14
C99? Ха-ха, я int i; перед for часто вижу

Ilia
10.07.2018
13:43:36
Я тоже. В кошмарных снах...

Alexander
10.07.2018
13:44:59
C99? Ха-ха, я int i; перед for часто вижу
ну это править довольно просто. также как и макрос - пишем плагин под clang-tidy и ок

там, где не отработал плагин - правим ручками

Igor
10.07.2018
13:46:27
а tidy может их на лету подцеплять, или только переконпеляция, только хардкор?

Igor
10.07.2018
14:00:44
что значит на лету?
ну не хотеть пересобирать всю прилогу ради одного плагина, а хотеть $ sudo apt-get install clang-tidy $ clang-tidy --plugins-dir /work/tidy-plugins src.cpp > loaded formatting.so > loaded odr.so > loaded microseconds.so src.cpp:250:24: consider using 'boost::chrono' instead of 'uint64_t' uint64_t delay = MAX_DELAY - time_spent*1000000ULL ?

Igor
10.07.2018
14:01:22
а лучше даже > loaded formatting.py

всё собираюсь распотрошить питоньи биндинги и синтаксис clang-query, да никак не соберусь

Alexander
10.07.2018
14:01:57
с нужным набором плагинов. а потом плагины уже включать через cli да, выглядит неудобно. но что ж поделать - плагины то на крестах пишутся

Ignat
10.07.2018
14:03:03
какая связь? что мешает собрать .so отдельно и сделать ей dlopen?

Alexander
10.07.2018
14:05:48
конечно, никто не мешает как ты говоришь

но тогда придётся перекомпилять либу

Dmitry
10.07.2018
14:26:34
как же я устал патчить код от этого говна
Можно же вроде через NOMINMAX отключить.

Alexander
10.07.2018
14:27:00
Можно же вроде через NOMINMAX отключить.
можно. И тогда код перестаёт компилироваться

Dmitry
10.07.2018
14:28:08
replace max (std::max) ;)

Google
Alexander
10.07.2018
14:29:21
replace max (std::max) ;)
не всё так просто - выползяют проблемы с переменными разных типов - нужно писать касты и так далее

Страница 2189 из 2477