🐙 Antony
не, проблема грамматики из-за использования угловых скобок для шаблонов
Ха, наивные :) не забываёте про контекстно чувствительные слова, неоднозначность описание-переменной-или-декларация-функции, весёлости связанные с двухфазным поиском и т.п.
Крылатый
main :: int = { let vec = {1, 2, 3} :: vector<int> for x& : vec { cout x endl } return 0 :: int }
Крылатый
9_9
Ruslan
если так, все б уже решили
Ruslan
не, проблема грамматики из-за использования угловых скобок для шаблонов
Ruslan
попробуйте еще написать с++ на лиспе
🐙 Antony
новые предложения по улучшению С++ выложили: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/#mailing2017-06
Evgenii
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0238r1.html больше auto богу auto
Evgenii
я видел
Evgenii
можешь поискать по фамилии)
Александр
есть оно там
Anatoly
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0539r0.html
Arseny
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0238r1.html больше auto богу auto
Интересно почему нельзя сделать, чтобы просто исходные варианты работали
Berkus
wtf
pattern-matching, bitches
Igor
Это про хранение ссылки на активити в статик-переменной?
долгоживущая анонимка в любом контекстозависимом классе даст утечку
🦥Alex Fails
Это тож
Berkus
а я запостил вчера линк на статью? вроде да
Berkus
там перечислены разные способы утечек в дроиде
🦥Alex Fails
Maria
Пцсс, запилили материал про тестовые задания для разработчиков. Норм - не норм? Баян - не баян? Если не норм, то что? https://goo.gl/4WnFb8
Maria
Не, я только гифки умею клепать ;) а вообще спасибо
Berkus
не завезли?
Maria
Что вычитал? Можешь скинуть абзац, где нашёл ошибку?
Berkus
> Пцсс, запилили материал про тестовые задания для разработчиков. Норм - не норм? Баян - не баян? Если не норм, то что? вот абзац
vladislav
mf doom
Maria
Ясно, но не по делу, минус тебе ;)
Berkus
тебе тоже, раз уж ты русский язык не умеешь
Roman
я ещё раз со своим вопросом по асинхронному тестированию: вот есть тест кейс, нужно убедиться что первый поток выполнился, после чего выполнился и второй, но failure поток выполниться в данном случае не должен. Запускаются данные потоки асинхронно, т.е. control flow нужно заблокировать в конце тестовой функции void ExampleTest::verifyAttach() { streams->create([]( const StreamHandle& handle, const QVariant& data ) { // ensure this is called handle.close("testdata"); }) ->attach([]( const StreamHandle& handle, const QVariant& data ) { // ensure this is called and data is correct QCOMPARE(data, "testdata"); handle.close(); }); ->failure([]( const StreamHandle& handle, const QVariant& error ) { // ensure this is never called }); // control flow must be locked here until all async code is done } мне интересно как бы это реализовать наиболее элегантно, как бы вы реализовали?
Berkus
> т.е. control flow нужно заблокировать в конце тестовой функции я тебе вчера вечером писал именно про это
Roman
> т.е. control flow нужно заблокировать в конце тестовой функции я тебе вчера вечером писал именно про это
да я сегодня попробовал std::future, но к сожалению std::future подобную конструкцию не разрешает.. _set_value не даёт вызвать
Berkus
std::future нельзя использовать, оно broken by design (by committee)
Roman
std::promise на замену?
Anatoly
future - это результат в будущем, его нельзя установить, вызывай thread с промисом и т.п. и устанавливай значения промиса
Anatoly
std::promise<int> p; std::future<int> f = p.get_future(); std::thread( [](std::promise<int>& p){ p.set_value(9); }, std::ref(p) ).detach(); f.wait()
Roman
надо попробовать
Roman
мда, правда усложняет код теста
Anatoly
std::async еще посмотри
Anatoly
он возвращает std::future
Berkus
хмм, поясни плиз
https://github.com/facebook/folly/blob/master/folly/futures/README.md ну вот это несколько более композабельно
Berkus
а value через промис ставится, из него фьючер вытаскивается и возвращается
Kirill
по поводу тестовых заданий напомнило доклад https://www.youtube.com/watch?v=zUVQhcu32rg там нужно было человеку из строки выпилить подстроку и заменить. ну он заюзал готовый фреймворк, написал 2 строчки кода, отправил и получил работу)
Kirill
Berkus
std::promise на замену?
нет, они вместе используются
Roman
понял, короче нужно написать некую обёрткну чтоб можно было просто: Checkpoint cp1; cp1.resolve(); cp1.await();
Berkus
хмм, поясни плиз
в частности std::future не cancellable
Roman
в частности std::future не cancellable
это кстати та причина по которой я работаю над https://qbeon.github.io/QuickStreams/ эта парадигма мощнее Callback'ов, Promise'ов и Future'ов и даже Rx подхода, но я разработал QS специально для Qt, не std cpp
Roman
пишу вот автотесты для неё (библиотеки), но асинхронных функциональных тестов видимо пишут не много поэтому опять приходится изобретать
Aragaer
o/
Aragaer
Совершенно случайно - кто-нибудь может помочь с запуском pvs studio?
Aragaer
не помогает
Aragaer
линукс
Aragaer
ну вот у меня почему-то не заводится
Aragaer
No compilation units found
Aragaer
не, не cmake
Aragaer
да, кросс-компилятор
Aragaer
не cmake, просто make
Aragaer
кросс-компилятор, но я вроде бы его указал
Aragaer
$ 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
Aragaer
пробовал сгенерить compile_commands.json - аналогично, не ест
Aragaer
сначала вызывал trace. Он создал strace_out
Aragaer
потом вызываю analyze - он должен это самый strace_out подцепить
Aragaer
но даже если явно укажу -f strace_out результат тот же
Berkus
strace? wat
Aragaer
да
Aragaer
-f FILE, --file FILE (default: 'compile_commands.json', 'strace_out') Use trace output or compile commands database FILE.
Aragaer
да, нормально генерируется
Aragaer
попробую
Mikhail
что такое noexcept квалификатор в двух словах?
Roman
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 как примитив блокиратор плюс
Roman
есть конечно недостаток.. timeout здесь обязателен, дабы убедиться что failure не вызывается
Berkus
я бы свернул must() и mustNot() вместе с експектом, чтобы меньше писать
Mikhail
ага, спаибо!