
John
28.09.2018
07:54:40
Какой алгоритм разбивает массив на части по типу split и принимает функтор?
Из буста, конечно же

Евгений
28.09.2018
08:22:08
Привет всем. У меня очень много раз выполняется вызов функции. Так вот, когда я её убрал и весь этот кусок кода вставил прямо в цикл, то код стал в 2 раза быстрее. Вот скриншот http://imgur.com/a/5Goiqav , там же и результаты

Spoonson
28.09.2018
08:24:58
можно было бы просто forceinline поменить каким-либо

Google

Timur
28.09.2018
08:39:50
так так, libreverseengine, так и запишем

Tyrell
28.09.2018
08:59:09
Всем привет, есть ли среди Вас те, кто разбирается или использовал Стрибог?
Есть ли реализация на с/с++ потокового алгоритма?

Danil
28.09.2018
09:01:28

Tyrell
28.09.2018
09:05:17
Да, именно. те реализации, что я нашел, являются блочными, они считают конечный хэш от строки. Возможно, где-то есть готовые реализации за подсчет промежуточного хэша
Я к тому, что как нам получить хэш от очень большого файла? Если будем считывать его построчно, то и получим число хэшей == числу строк

Евгений
28.09.2018
09:06:54

Danil
28.09.2018
09:13:48

Egor
28.09.2018
09:15:13

Tyrell
28.09.2018
09:15:25

Egor
28.09.2018
09:16:19
так что стрибогу получится скормить файл построчно

Tyrell
28.09.2018
09:16:20

Google

Egor
28.09.2018
09:22:53
так оно и должно быть так реализовано изначально

Tyrell
28.09.2018
09:29:38
Сейчас смотрю гитхабе реализацию от Дегтярева. Тот, алгоритм, что был у меня, увы, такое не умеет

Antony
28.09.2018
09:39:26
Ты ошибаешься.
Точно говорю.
Вот как должна себя вести extern inline функция в С? Я не знаю

Aidar
28.09.2018
09:40:20
Шутка про decltype в лямбдах

Дед Пегас
28.09.2018
09:43:33
Пропозал принимают и теперь ты знаешь C.

Anton
28.09.2018
09:44:32

Antony
28.09.2018
09:48:00

yuri
28.09.2018
09:48:33
игнорируется и когда нужен, в Atmel Studio помню без реализации в хидере не инлайнилось никак

Anton
28.09.2018
09:49:20
сейчас святотатство скажу
макрос бы написал и не мучался

PRoSToC0der
28.09.2018
09:55:51

yuri
28.09.2018
09:56:51

PRoSToC0der
28.09.2018
09:59:28

Timur
28.09.2018
10:03:09

PRoSToC0der
28.09.2018
10:04:45

Antony
28.09.2018
10:05:27
макрос бы написал и не мучался
на самом деле вопрос про inline extern - это из рассылки ядра Линукс. И ведёт оно себя по разному в зависимости от флагов О_О

Stanislav
28.09.2018
10:05:41

Anton
28.09.2018
10:06:14
падает с duplicate symbol в отдельных случаях?

Timur
28.09.2018
10:06:18
ах да, C99 (на который VC кладет с прибором. Хотя и реализовал большую часть фич)
Спасибо что напомнили

Google

Antony
28.09.2018
10:06:27

Anton
28.09.2018
10:06:31
не линкуется то есть

PRoSToC0der
28.09.2018
10:09:56
https://www.fluentcpp.com/2018/09/28/auto-stick-changing-style/

Antony
28.09.2018
10:12:05
не линкуется то есть
Ну вот тут боль описана https://lkml.org/lkml/2014/10/19/217
И это всё gnu89 -> gnu99 боль, даже не не c11

Stanislav
28.09.2018
10:12:48
https://herbsutter.com/2012/05/03/reader-qa-what-about-vc-and-c99/

Anton
28.09.2018
10:13:34

Timur
28.09.2018
10:14:25
но однако же они (втихую) реализовали designated initializers для структур (и это была самая большая боль)
и в тот момент это еще не было подмножеством Си++

Antony
28.09.2018
10:19:05
О! Веселье в GCC подъехало: https://github.com/gcc-mirror/gcc/blob/e3cb810239595334bc66762574cb539af28bc1e6/gcc/testsuite/g%2B%2B.dg/cpp2a/constexpr-virtual11.C

Stanislav
28.09.2018
10:19:50

Igor
28.09.2018
10:25:20
https://www.fluentcpp.com/2018/09/28/auto-stick-changing-style/
Theoretically, the expression Widget{42} creates a temporary Widget which is then moved to myWidget. So this syntax could incur the price of a move.
But even then, the compiler is allowed (and compilers are getting very good at that) to elide this move, and direclty construct the Widget{42} inside the memory space of myWidget.
как будто бы allowed != should != will, и при потенциальной компиляции моего хитрозакрученного с++11 кода дряхлым но c++11-compliant компилятором, юзер оного может внезапно влететь в просадки по производительности

PRoSToC0der
28.09.2018
10:26:17

Rabu
28.09.2018
10:26:31

Antony
28.09.2018
10:27:41


Igor
28.09.2018
10:28:20
а так да, согласен, как будто бы если живём на острие прогресса по заветам Винтерса - то всё ок
а в конструкциях вида
const ... &map = get();
for (auto it = map[a][b].begin(); it != map[a][b].end(); ++it)
компилятор может сообразить, что map изменяться не собирается, .end() сдвигаться не будет, и operator[]x2 и end() можно соптимизировать прочь до
for (auto it = .begin(), e =.end(); it != e; ++it) ?
или в цикле на тыщу элементов мы будем честно делать каждый раз два поиска по дереву?

John
28.09.2018
11:24:04
Как правильно прочитать int* (*p[10]), и валидно ли это вообще?

Google

Igor
28.09.2018
11:24:43

yuri
28.09.2018
11:25:14

Pavel
28.09.2018
11:25:52
ребята, кто знает - если std::sort вызывается с компаратором который не соответсвует Compare, то все, UB? sort имеет право крашнуться? у меня на маке улетает за границы вектора сорт. как то это жестоко. понятно конечно что ничего хорошего оно не насортирует, но все же.

Igor
28.09.2018
11:26:18

yuri
28.09.2018
11:27:35

Andrew
28.09.2018
11:27:35
Ну конкретно в твоем случае есть 100% вариант const auto& current = map[a][b]
На оптимизацию тут я бы не полагался

Igor
28.09.2018
11:29:30

Andrew
28.09.2018
11:30:31
А почему завернул, если не секрет? Норм же.
Вроде его никто не обязывает догадываться, оптимизация — дело добровольное.

PRoSToC0der
28.09.2018
11:32:43

Igor
28.09.2018
11:37:15

Anton
28.09.2018
11:37:36
а в чём проблема написать int size = something.size() перед циклом и не гадать?
в оптимизаторе тупо баг могут добавить

Andrew
28.09.2018
11:38:44
Я просто так понял сообщение, что ты забанил на ревью код с const auto&
вариант то безусловно есть, я уже завернул ревью с таким чудом)
мне больше интересно, о чём догадается или не догадается компилятор, если оставить как есть

Igor
28.09.2018
11:38:58

PRoSToC0der
28.09.2018
11:41:13

Igor
28.09.2018
11:42:31
не пробовал на годболте проверить?
если взять стандартную мапу, то творится чёрная магия, мне не хватает скиллов ассемблера чтобы разобраться в этих перепрыгиваниях
https://godbolt.org/z/t5sjZQ
но если взять свои типы без определений методов, чтобы компилеру было видно только call, то действительно дёргает два [] в цикле, не кэшируя(
https://godbolt.org/z/_2FgIq

Google

Arseny
28.09.2018
12:08:15
Он теоретически не может убрать вызовы, если не видит их определения.

Igor
28.09.2018
12:09:57
потому что даже при сигнатуре const& fun(...) const, под капотом всё равно могут возвращаться ссылки на разные объекты, в зависимости от всяких глобальных условий и статических счётчиков?

Ilia
28.09.2018
12:10:45


Igor
28.09.2018
12:12:36
эх, прям захотелось модификатор pure в терминах классической функциональщины, "при одном и том же параметре функция возвращает один и тот же результат, йа горонтирую это"
...хотя он наверняка неприменим к возврату ссылок и указателей на элементы контейнеров, которые допускают реаллоцирование памяти, перебалансировку и прочее жонглирование своим содержимым, при котором старые указатели становятся невалидными

Ilia
28.09.2018
12:13:41

Arseny
28.09.2018
12:14:29

Igor
28.09.2018
12:17:28
хм
auto &e = map.at(x);
map.insert(y);
func(e); // бабах, да?

Ilia
28.09.2018
12:20:06


Igor
28.09.2018
12:22:23

Ilia
28.09.2018
12:23:35

Pavel
28.09.2018
12:23:47
ну там внутри сорт оно выходит за vector::end(), это жестко, может мем корапт сделать. если бы просто зависло я бы еще понял. немного странно для стандартной либы. я думал может им надо отрепортить. просто libstdc++ хэндлит такое. но конечно если UB то не сожгла мой жесткий диск и ладно вобщем.

Ilia
28.09.2018
12:24:47