
Алексей
06.08.2018
17:30:55

Grigor
06.08.2018
17:30:55

Kirill
06.08.2018
17:31:17

Google

Denis
06.08.2018
17:33:17

Kirill
06.08.2018
17:34:02
Блин :) завтра прогоню тесты

Алексей
06.08.2018
17:34:30

Kirill
06.08.2018
17:35:50
Неплохо так отжирает, это правда при огромном рекурсивном стеке

Dmitry
06.08.2018
17:37:00

Алексей
06.08.2018
17:37:34

Denis
06.08.2018
17:38:44

Алексей
06.08.2018
17:39:51

Ilia
06.08.2018
18:35:10

Alexander
06.08.2018
18:36:42
это наверное наихудший вариант из сех возможных.

Pavel
06.08.2018
18:39:59

Google

Побитый
06.08.2018
19:41:00

Alexander
06.08.2018
19:46:49

Nikita
06.08.2018
19:56:30
Ребят, нужно быстро соориентироваться, в ninja и в msbuild есть "dry run" режим, типо как make -n ?

yuri
07.08.2018
00:22:10
В VC++ флаги компилятора могут вообще анвиндинг выбросить в пользу утечки ресурсов. Такие вот оптимизации.
Может быть я что-то путаю, это не Александреску рассказывал про использование std::expected<T, E> в конструкциях вида
return do(first())
.then_do(second())
.otherwise(report_error_here())
.then_do(third())
.otherwise(report_error_there());
?

Aleksandr
07.08.2018
06:25:27
что-то похожее было у Ивана Чукича (его фамилия же так пишется?) когда он про монады/функторы говорил


Ilia
07.08.2018
08:44:41
#announce #paper
Разработка больших сложных проектов невозможна без использования методологий программирования и инструментальных средств, помогающих контролировать качество кода. В первую очередь, это грамотный стандарт кодирования, обзоры кода, юнит-тесты, статические и динамические анализаторы кода. Всё это помогает выявлять дефекты в коде на самых ранних этапах разработки. В этой статье демонстрируются возможности статического анализатора PVS-Studio по выявлению ошибок и потенциальных уязвимостей в коде операционной системы Android. Надеемся, что статья привлечёт внимание читателей к методологии статического анализа кода и они захотят внедрить её в процесс разработки собственных проектов.
Читать статью: https://habr.com/company/pvs-studio/blog/418891/


Azoyan
07.08.2018
09:29:45
это шутка, чувак

P
07.08.2018
10:22:19

Ilia
07.08.2018
10:23:46
Блин, смотрю Александреску, видео про исключения и expected...
Да просто нихрена не понятно, что он тараторит...!

Stanislav
07.08.2018
10:24:12

A.D.
07.08.2018
10:24:25

Крис
07.08.2018
10:27:41

Aleksandr
07.08.2018
10:29:58
на cpprussia 2018 был немец Rainer Grimm, рассказывал про concurrency best practices, вот он хоть и немец, понятно было где-то 40%

yuri
07.08.2018
10:31:28

Aleksandr
07.08.2018
10:33:25
а скажите-ка, насколько законно инициализировать ссылку как Test & test = *static_cast<Test *>(nullptr)? после этой строки у меня уже будет UB, даже несмотря на то, что я ссылку нигде не использую далее?

Александр
07.08.2018
10:33:42

Aleksandr
07.08.2018
10:34:30
ок, а если я допустим Test & test = *static_cast<Test *>(reinterpret_cast<void *>(0x543210))?

Google

Aleksandr
07.08.2018
10:34:43
и потом её не трогаю, это же законно?)

Kathu
07.08.2018
10:36:56
а почему бы сразу не reinterpret_cast к Test* ? зачем сначала к void*?

Евгений
07.08.2018
10:37:02

Aleksandr
07.08.2018
10:37:17

Azoyan
07.08.2018
10:37:46

Kathu
07.08.2018
10:37:52
мне кажется будет UB в зависимости от того, что лежит в той ячейке памяти по адресу 0x543210

Aleksandr
07.08.2018
10:38:46
а зачем такие манипуляции?
есть класс А, в конструкторе принимающий ссылку на объект класса В, её себе сохраняющий. мне в тестах надо протестировать методы класса А, которые не используют ссылку. Объект В в тестах создавать очень сложно из-за огромной связанности.

Kathu
07.08.2018
10:40:00
создай stub какой-нибудь наследник B с заглушками в методах

Евгений
07.08.2018
10:40:18

Aleksandr
07.08.2018
10:40:38

Kathu
07.08.2018
10:41:23
это косяк проектирования, браво юнит тесты помогли даже не будучи написанными!

Aleksandr
07.08.2018
10:41:43

Kathu
07.08.2018
10:41:56
через friend вроде бы можно было как то это обойти
но детали что-то у меня в голове не уложились

Aidar
07.08.2018
10:42:35
Хотя хм

Евгений
07.08.2018
10:43:22
мб. подменить пока класс B каким либо образом?

Aidar
07.08.2018
10:43:50
Ну тебе в хедер надо залезть и посмотреть что ты сможешь подменить

Евгений
07.08.2018
10:44:14
Aleksandr надо единожды, или автоматически чтобы тесты проходили?

Google

Aleksandr
07.08.2018
10:44:40

Евгений
07.08.2018
10:45:31
@Aleksandr ну и ясное дело в хидере класса A заинклюден класс B?

Aleksandr
07.08.2018
10:47:45

Евгений
07.08.2018
10:47:50
о, ща подумаем

Ilia
07.08.2018
10:48:49

Egor
07.08.2018
10:48:58

Aleksandr
07.08.2018
10:50:19
да вот именно что nullptr нельзя, я вот думаю просто выделить кусок памяти размером с В и с выравниванием В, потом этот кусок reinterpret_cast<>, но это такое себе

Ilia
07.08.2018
10:50:27

Евгений
07.08.2018
10:51:10

Ilia
07.08.2018
10:51:45

Евгений
07.08.2018
10:52:40
если бы хранил ссылку, вроде forward declaration не сработал бы. Кстати, это так? Я чет засомневался

Aleksandr
07.08.2018
10:52:47

Евгений
07.08.2018
10:53:48
в конструкторе списком инициализации сразу?

Aleksandr
07.08.2018
10:54:05
ага

Egor
07.08.2018
10:54:15
A a2((B&)*new int); ну вот так работает

Евгений
07.08.2018
10:54:51

Egor
07.08.2018
10:54:59
в тестах?

Google

Евгений
07.08.2018
10:55:48
ога. Некошерно тип UB. Ну я хз насколько серьезные там тесты, но лучше все-таки попытаться избежать UB

Egor
07.08.2018
10:55:59
так это точно уб или не уб?
мы указатель отдаём, почему уб?

Ilia
07.08.2018
10:56:12
100%
Разименование nullptr -- UB.

Egor
07.08.2018
10:56:48
нет разыменования