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

Matway
14.06.2017
09:53:41

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

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

Constantine
14.06.2017
09:57:25
т.е. их просто нет
мне неизвестно, что dynamicFloat() не обладает side-effect-ами

Matway
14.06.2017
09:58:11

Google

Matway
14.06.2017
09:58:49

Arseny
14.06.2017
09:58:58

Constantine
14.06.2017
09:59:05
опять же, я не очень понимаю, почему это работа компилятора
практика показывает, что плохой оптимизатор лучше, чем оптимизатор, сгенерировавший неправильный код)

Matway
14.06.2017
10:00:29

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

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

Arseny
14.06.2017
10:03:14

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

Antony
14.06.2017
10:06:54

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
как вообще обойти вот этот пример:
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.

Olesya
14.06.2017
10:39:18
спасибо, попробую fromUTF8()

Admin
ERROR: S client not available

Constantine
14.06.2017
10:39:37
видимо, в этом вся ваша проблема
но я не уверен, что string на самом деле в UTF-8

Friedrich
14.06.2017
10:40:27

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

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

Google

Constantine
14.06.2017
10:44:24

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
лишний assert и тест в коде еще никому не мешал

Simon
14.06.2017
10:56:29

Constantine
14.06.2017
11:01:35

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
хотел сказать - с няшными хедхантершами?