@ProCxx

Страница 959 из 2477
Berkus
14.06.2017
09:53:39
эквивалентный, посмотри на expression templates еще раз

Constantine
14.06.2017
09:53:57
нет, не эквивалентный! а если строка 9 вызывает crash (stack overflow)?

Matway
14.06.2017
09:54:00
Google
Constantine
14.06.2017
09:54:22
хотя это шутка, но на самом-то деле суть примерно в этом

Matway
14.06.2017
09:54:58
нет, не эквивалентный! а если строка 9 вызывает crash (stack overflow)?
Это уже не с точки зрения плюсов, а с точки зрения рантайма =) Так-то clang вообще free(malloc(...)) оптимизирует нафиг :)

Constantine
14.06.2017
09:55:09
и потом, ничего не мешает сделать auto v3 = v0 + v1; v3 += v2;

хотя последнее очень неприятно

Berkus
14.06.2017
09:55:51
оно примерно так и делает на уровне SIMD - складывает всё кусками

Constantine
14.06.2017
09:56:16
емнип совпадение source и destination операции вызывает небольшой ручник процессора

Berkus
14.06.2017
09:56:41
для xmm пофигу кажется

Constantine
14.06.2017
09:57:04
потом, как я понимаю, на std::vector накладные расходы все на перемещении

Arseny
14.06.2017
09:57:21
Циклы в строчке 34 должны свернуться в один.
Я думал о том, что можно вычислять только несколько элементов в v3. Так не умеете?

Constantine
14.06.2017
09:57:25
т.е. их просто нет

мне неизвестно, что dynamicFloat() не обладает side-effect-ами

Matway
14.06.2017
09:58:11
Я думал о том, что можно вычислять только несколько элементов в v3. Так не умеете?
Это простая оптимизация, и это может легко сделать и плюсовый компилятор. Разговор же шёл за оптимизацию, которую он сделать не может.

Google
Matway
14.06.2017
09:58:49
мне неизвестно, что dynamicFloat() не обладает side-effect-ами
Да, но тебе известно, что далее результат не используется.

Arseny
14.06.2017
09:58:58
мне неизвестно, что dynamicFloat() не обладает side-effect-ами
dynamicFloat() нужно вызвать. А вот сумму можно считать только для нескольких элементов вектора. Заполнять полностью v3 не нужно

Constantine
14.06.2017
09:59:05
опять же, я не очень понимаю, почему это работа компилятора

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

Matway
14.06.2017
10:00:29
опять же, я не очень понимаю, почему это работа компилятора
Потому что не надо заставлять пользователя мудрить что-то со строчкой 34, если он на выходе использует только пару значений из вектора. Пользователь должен работать продуктивно. Вбросил код и быстро получил результат.

Constantine
14.06.2017
10:00:46
эта оптимизация поломается от любого чиха

Berkus
14.06.2017
10:01:24
чего ж она работает во всяких Eigen тогда?

дураки писали наверное

Matway
14.06.2017
10:06:10
Может и может, но не делает.
Ну, это уж так написали компилятор. Речь о том, что если сейчас какому-нибудь Intel приспичит оптимизировать подсчёт только нужных значений - они это сделают за пару недель. Сделать же автоматическую дедукцию ET будет намного сложнее.

Antony
14.06.2017
10:06:54
Циклы в строчке 34 должны свернуться в один.
Эту оптимизацию ещё просто не сделали в GCC https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80317 (в clang её ещё тоже не сделали, тикет искать лень, он такой же как в GCC)

Matway
14.06.2017
10:07:27
"This would require loop fusion, sth we don't do at the moment. For this particular case dependence analysis should even make it possible."

Constantine
14.06.2017
10:08:18
короче если подумать, то у компилятора плюсов вся информация есть

вопрос в том, что такой код компилятор оптимизирует хуже

чем человек

Matway
14.06.2017
10:08:54
Ну, формально есть. По факту - такую оптимизацию делать на данном уровне просто очень дорого.

Constantine
14.06.2017
10:09:09
совершенно нет

компилятору нужны формальные доказательства, что нет side effect

человек может выяснить, что там с dynamicFloat, компилятор в любом случае вынужден сделать вызовы

Google
Constantine
14.06.2017
10:10:19
в остальном компилятор может построить такое доказательство достаточно легко

ему нужно будет перепроверить, что const на самом деле работает как const

что копирования памяти просто так делаются

в реальности там вместо С-style массива будет стоять С++, еще и вектор в худшем, так что компилятору придется еще проверять что вектора доказанно на один элемент не указывают

и все это учитывая тот факт, что человек может просто в хотпафе такое увидеть и переделать за 5 минут

короче, меня пока не убедили

Дед Пегас
14.06.2017
10:18:12
Когда есть возможность обойти const.

И компилю ПРИХОДИТСЯ проверять и верить, что его никто не сломает.

Constantine
14.06.2017
10:21:25
void f(int & x, int const& y) { x += y; x += y; } void g() { int x = 1; f(x, x); }

не говоря о случаях, когда просто нельзя не написать const_cast

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

Constantine
14.06.2017
10:23:59
Когда есть возможность обойти const.
Собственно, я слышал, что оптимизатор просто вообще не может учитывать const

как вообще обойти вот этот пример: struct CachedComputingEngine: ComputingEngine { int get() const override { /*суперсложный расчет, который надо кэшировать */ } mutable bool cached = false; mutable int cache; };

Olesya
14.06.2017
10:27:22
привет, народ. есть русский текст и английский. надо искать там регулярки. регулярка на вход поступает как string val. текст тоже в string. пробовала icu - не работает с русским текстом - возможно, что-то идёт не так, когда я из string делаю UnicodeString. в общем, кто-нибудь может посоветовать, какими регулярками пользоваться?

Constantine
14.06.2017
10:27:53
ну, не считая читов под названием "const не очевиден при нарушении семантики типа" как вообще обойти вот этот пример: struct CachedComputingEngine: ComputingEngine { int get() const override { /*суперсложный расчет, который надо кэшировать */ } std::unique_ptr<std::unique_ptr<int>> container; };

я полагаю, что для std::string еще бы кодировку знать и проверить, что она читается как надо

Olesya
14.06.2017
10:35:38
ну для тестирования работы я просто насоздавала строк в коде. через string test("что-нибудь);. перевожу в UnicodeString через c_str(). по идее, там не может быть ничего, кроме UTF-8. разработка на Ubuntu.

Constantine
14.06.2017
10:36:19
вы точно уверены, что перекодировка не поломана?

Google
Constantine
14.06.2017
10:36:33
UnicodeString это UTF-8, UTF-16 или UCS-2?

выведите побайтово строчку

до и после

и я крайне не уверен, что std::string будет в какой-то кодировке юникода

Friedrich
14.06.2017
10:38:18
Я бы попробовал UnicodeString::fromUTF8().

Конструктор из const char * явно делает ерунду: http://icu-project.org/apiref/icu4c/classicu_1_1UnicodeString.html#ae436989ec7fc5a488e48f775cbfae711 > Uses the default converter (and thus depends on the ICU conversion code) unless U_CHARSET_IS_UTF8 is set to 1.

Admin
ERROR: S client not available

Constantine
14.06.2017
10:39:37
видимо, в этом вся ваша проблема

но я не уверен, что string на самом деле в UTF-8

Friedrich
14.06.2017
10:40:27
но я не уверен, что string на самом деле в UTF-8
std::string это массив char'ов, у него нет кодировки. Если был файл, сохранённый в UTF-8, и он был прочитан в std::string, то там будут байты из файла. Без перекодировок.

Constantine
14.06.2017
10:41:02
слишком долго думать, не написали ли мне U+FEFF первым символом и нет ли кода 0 в файле

Friedrich
14.06.2017
10:42:19
Ну, это другой вопрос. В unix-среде обычно можно без проблем читать и отправлять в stdin/stdout данные в UTF-8, и использовать для них std::string вполне естественно.

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

Constantine
14.06.2017
10:43:02
Ну а в более других операционных системах могут возникнуть разные интересные проблемы.
Проблема не в операционной системе, а в том, что надо еще провалидировать кучу всего

Ну а в более других операционных системах могут возникнуть разные интересные проблемы.
Я крайне не уверен, что код U+B800 просто не положит мне программу

Friedrich
14.06.2017
10:43:33
Ничо не надо валидировать, взял да и прочитал. std::string не имеет проблем с нулевыми байтами или ещё какими-то магическими последовательностями.

Google
Constantine
14.06.2017
10:44:24
Ничо не надо валидировать, взял да и прочитал. std::string не имеет проблем с нулевыми байтами или ещё какими-то магическими последовательностями.
Тогда мне надо на входе каждый std::string валидировать, это же нарушение конвенции логического типа будет

Friedrich
14.06.2017
10:44:39
std::string это враппер с удобствами вокруг массива байт, он не делает никаких предположений о кодировках.

Olesya
14.06.2017
10:44:43
а скажем, как прочитает boost xml-файл тоже зависит от кодировки xml-файла?

Friedrich
14.06.2017
10:44:50
Так что проблемы я (здесь) не вижу.

Olesya
14.06.2017
10:45:16
у меня просто регулярки лежат в xml-файле.

Constantine
14.06.2017
10:45:30
Так что проблемы я (здесь) не вижу.
Я бы предпочел, что если я использую std::string как контейнер UTF-8 строк, у меня в коде все переменные std::string содержали исключительно UTF-8 строки

А код символа U+B800 не является корректной UTF-8 строкой

для массива байтов я предпочитаю писать std::vector<int8_t>

Friedrich
14.06.2017
10:47:34
Ок, с этим соглашусь.

Constantine
14.06.2017
10:48:26
у меня просто регулярки лежат в xml-файле.
просто. проверьте. все. предположения.

лишний assert и тест в коде еще никому не мешал

Constantine
14.06.2017
11:01:35
std::vector<std::byte> !!!!!
да как угодно

просто. проверьте. все. предположения.
в частности, обязательно проверьте, что будет выполнена нормализация C перед поиском!

KrivdaTheTriewe
14.06.2017
12:38:42
ребят , есть канал с работой на плюсах ?

Дед Пегас
14.06.2017
12:38:57
Есть.

KrivdaTheTriewe
14.06.2017
12:39:06
Есть.
подскажите

Дед Пегас
14.06.2017
12:39:31
https://t.me/ProCxxJobs

Sergey
14.06.2017
12:41:05
хотел сказать - с няшными хедхантершами?

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