
Roman
27.06.2017
11:53:14
понял, короче нужно написать некую обёрткну чтоб можно было просто:
Checkpoint cp1;
cp1.resolve();
cp1.await();

Berkus
27.06.2017
11:53:20

Roman
27.06.2017
11:54:47
в частности std::future не cancellable
это кстати та причина по которой я работаю над https://qbeon.github.io/QuickStreams/
эта парадигма мощнее Callback'ов, Promise'ов и Future'ов и даже Rx подхода, но я разработал QS специально для Qt, не std cpp
пишу вот автотесты для неё (библиотеки), но асинхронных функциональных тестов видимо пишут не много поэтому опять приходится изобретать

Google

Aragaer
27.06.2017
12:03:08
o/
Совершенно случайно - кто-нибудь может помочь с запуском pvs studio?

Alexander
27.06.2017
12:03:47

Aragaer
27.06.2017
12:03:52
не помогает

Alexander
27.06.2017
12:03:57
под виндой элементарно - плагин в студию и вперёд

Aragaer
27.06.2017
12:04:09
линукс

Alexander
27.06.2017
12:04:22
под линем - чуть больше мороки, но тоже заводится. По карйней мере, когда я пробовал, то у меня заводилось
заводил на проекте с cmake

Aragaer
27.06.2017
12:04:35
ну вот у меня почему-то не заводится
No compilation units found

Alexander
27.06.2017
12:04:48

Aragaer
27.06.2017
12:04:53
не, не cmake

Alexander
27.06.2017
12:04:58

Google

Aragaer
27.06.2017
12:05:00
да, кросс-компилятор
не cmake, просто make

Alexander
27.06.2017
12:05:17
ну под этим я не заводил

Aragaer
27.06.2017
12:05:21
кросс-компилятор, но я вроде бы его указал
$ pvs-studio-analyzer analyze -o pvs.log -C sparc-rtems-g++ -C g++ -C sparc-rtems-gcc -C gcc
No compilation units found
Analysis finished in 0:00:00.00
пробовал сгенерить compile_commands.json - аналогично, не ест

Alexander
27.06.2017
12:06:32
а что он такой командой должен анализировать?
откуда ему input приходит? или это в make пишешь внутри?

Aragaer
27.06.2017
12:07:21
сначала вызывал trace. Он создал strace_out
потом вызываю analyze - он должен это самый strace_out подцепить
но даже если явно укажу -f strace_out результат тот же

Berkus
27.06.2017
12:07:54
strace? wat

Alexander
27.06.2017
12:07:56
написано где-нибудь, что он его сам подцепить должен?

Aragaer
27.06.2017
12:08:01
да
-f FILE, --file FILE (default: 'compile_commands.json', 'strace_out')
Use trace output or compile commands database FILE.

Alexander
27.06.2017
12:08:56
и сам файл этот нормально генерируется?
я просто хз, что там внутри этого файла может находиться

Aragaer
27.06.2017
12:09:17
да, нормально генерируется

Alexander
27.06.2017
12:10:14

Aragaer
27.06.2017
12:10:28
попробую

Google

Mikhail
27.06.2017
12:16:47
что такое noexcept квалификатор в двух словах?

Roman
27.06.2017
12:17:00
so how about that?
test() {
Checkpoint cpMain(1000);
Checkpoint cpAttached(1000);
Checkpoint cpFailure(1000);
streams.create([]{
// this stream must be awoken!
cpMain()
})
.attach([]{
// this stream must be awoken!
cpAttached()
})
.failure([]{
// this stream shall never be awoken!
cpFailure()
});
// await cpMain and cpAttached to be unlocked
// if those time out - test fails
cpMain.must()
cpAttached.must()
// await cpFailure to time out
// because it's not exepected to be reached
// if it's unlocked - test fails
cpFailure.mustNot()
EXPECT_FALSE(cpMain.failed())
EXPECT_FALSE(cpAttached.failed())
EXPECT_FALSE(cpFailure.failed())
}
Checkpoint как примитив блокиратор плюс
есть конечно недостаток.. timeout здесь обязателен, дабы убедиться что failure не вызывается

Alexander
27.06.2017
12:20:42

Berkus
27.06.2017
12:20:56
я бы свернул must() и mustNot() вместе с експектом, чтобы меньше писать

Mikhail
27.06.2017
12:21:53

Alexander
27.06.2017
12:22:08
нет

Kirill
27.06.2017
12:22:23
не забываем что ноексепт принимает буль

Alexander
27.06.2017
12:22:44

Kirill
27.06.2017
12:23:07
тоесть можно как указать что функция/метод не будет кидать експешн, как можно и явно указать,что будет
например деструктору сказать, все ок, ты можешь кидать ексепшн и не умереть

Roman
27.06.2017
12:25:01
я бы свернул must() и mustNot() вместе с експектом, чтобы меньше писать
тогда лучше ожидать true и возвращать bool из must / mustNot
ASSERT(cpMain.must())
ASSERT(cpAttached.must())
ASSERT(cpFailure.mustNot())
тогда получается что первый ASSERT на cpMain блокирует control flow и только позже получает boolean. mustNot() в таком случае должен вернуть true если checkpoint таймаутил, а must() наоборот, вернуть true если таймаута не было

Дед Пегас
27.06.2017
12:36:43
http://foonathan.net/blog/2017/06/27/lazy-evaluation.html

Mikhail
27.06.2017
12:38:58

Berkus
27.06.2017
12:39:09

Tema
27.06.2017
12:39:16

Yury
27.06.2017
13:53:49
Подскажите аналог promise из js в c++?

Дед Пегас
27.06.2017
13:59:35
http://en.cppreference.com/w/cpp/thread/promise
Это?

Google

Yury
27.06.2017
13:59:48
нет
нужна однопоточная обертка для вызова колбека

Alexander
27.06.2017
14:00:26
так, что ты хочешь сделать?
я просто с js не знаком, не знаю, как там что работает

Yury
27.06.2017
14:00:51
https://learn.javascript.ru/promise
вот пример

Arseny
27.06.2017
14:01:04
В javascript так future называют

Admin
ERROR: S client not available

Yury
27.06.2017
14:02:11
я пробежался по std::async, promise, future, и как понял это обертки для многопоточного апи.
мне просто удобно вызов колбека хочется обернуть

Anatoly
27.06.2017
14:02:58
Подскажите аналог promise из js в c++?
наверняка что-то должно найтись на гихабе, на коленке это выглядит так
std::async(std::launch::async, [](std::function<void()> success, std::function<void()> fail) {
try {
// async throwable process
success();
}
catch (...) {
fail();
}
}, []() {
}, []() {
});

Yury
27.06.2017
14:03:39
Да, мне кажется много решений должно быть. Но решил спросить, вдруг более менее стандартизированное есть.

Arseny
27.06.2017
14:04:11
Если просто callback, то это про lambda и std::function видимо.

Yury
27.06.2017
14:05:01
httpGet('/article/promise/user.json')
.then(JSON.parse)
Вот пример из js.

Anatoly
27.06.2017
14:05:09

Yury
27.06.2017
14:05:17
httpGet возвращает промис
у промиса метод then, куда можно передать колбек

Anatoly
27.06.2017
14:05:44
два колбека

Yury
27.06.2017
14:06:07
да, но суть не в этом :)

Google

Simon
27.06.2017
14:06:45

Yury
27.06.2017
14:07:05
в таком апи можно строить удобные цепочки асинхронных вызовов

Anatoly
27.06.2017
14:07:45

Alexander
27.06.2017
14:08:05
так мб ему просто std::function хватит?
присвоил функцию ему, и потом вызвал

Yury
27.06.2017
14:08:15
Посмотрю, спасибо.
да, это просто обертка над колбеком, все верно

Anatoly
27.06.2017
14:08:38

Yury
27.06.2017
14:08:38
просто удобная, читабельная и т.д.

Alexander
27.06.2017
14:09:04

Дед Пегас
27.06.2017
14:10:05

Yury
27.06.2017
14:10:15
У меня с++ 11
cocos2d-x

Arseny
27.06.2017
14:10:27
Не, then в std::future только планируется

Дед Пегас
27.06.2017
14:10:36
Boobs твой выбор!

Arseny
27.06.2017
14:11:33

Alexander
27.06.2017
14:13:38

Дед Пегас
27.06.2017
14:14:24
Boost

Anatoly
27.06.2017
14:15:33
Boost
а что там в бусте аналог JS Promise?