
Berkus
01.12.2017
21:25:43
в конпайлер флагах есть где-то

Igor
01.12.2017
21:25:44
не находит

Berkus
01.12.2017
21:25:48
да ладно
а если найду?

Google

Igor
01.12.2017
21:26:02
в этом вся и проблема, я бы не спрашивал ?
будет здорово
на 8-ке все нормально было
куча настроек clang, а в 9 не могу найти где это теперь
поиск в help'е ничего не дал

Berkus
01.12.2017
21:29:36
C++ Language Dialect это оно

Igor
01.12.2017
21:31:12
кажется разобрался, я в схеме искал =//
спасибо

Berkus
01.12.2017
21:35:16
да в build settings проекта оно всегда и было

Igor
01.12.2017
21:36:14
что-то значит затупил, просто нажал на корень проекта и появилось то что надо

Baruch
01.12.2017
21:39:32
все видели статейку про Conan на хабре?
https://habrahabr.ru/post/342982/

Google

Anatoly
01.12.2017
21:42:13
Да, автор оставлял уже ссылку :) Он как раз тебя просил похлопотать о поддержке Conan в CLion, и тебе огромное спасибо, что продвинул эту тему.

Roman
01.12.2017
21:51:55

Berkus
01.12.2017
21:56:05
читать-то не умеем?

Roman
01.12.2017
21:56:54

Berkus
01.12.2017
21:57:08
и не читай

Roman
01.12.2017
21:58:14

Berkus
01.12.2017
22:00:29
для установки пакетов для сборки

Grigor
01.12.2017
22:02:51

Roman
01.12.2017
22:03:31

Vladislav
01.12.2017
22:13:23

Alexander
02.12.2017
00:15:58
https://www.iso.org/standard/68564.html
http://cppcast.com/2017/11/victor-ciura/
https://github.com/bincrafters/conan-vs-extension

Stanislav
02.12.2017
06:10:00

Александр
02.12.2017
06:10:41
?

Александр
02.12.2017
06:41:20


Igor
02.12.2017
07:21:16
Окей, тогда, последняя написанная аннотация:
Аннотация на доклад с конференции Corehard 2017 о пакетных менеджерах в С++, а также небольшая подборка материалов по теме continuous integration.
» Преамбула. От себя:
Пакетный менеджер - очень нужная штука в более менее большом проекте, с ее помощью можно прописать зависимости вашего проекта от других. При необходимости она автоматически качает нужны версии зависимостей (библиотек) и компилирует их как вам надо.
Поработав какое-то время Java-программистом (и попробовав maven и gradle) я искал что-то подобное в 2014 году. Не нашел. Но вот теперь все это уже есть.
» Содержание доклада с таймингом:
{первые 2 минуты пропустите}
2:00 - рассказывается про пакетные менеджеры для других языков;
2:30 - что обычно позволяет менеджер пакетов.
4:50 - что умеет Maven в Java (в частности можно описать зависимости, которые можно привязать к тестам).
6:44 - небольшая история (смешная) о поиске менеджера пакетов в С++.
8:24 - список менеджеров для С++.
8:36 - требования к пакетному менеджеру (на их основе дальше идет сравнение).
9:44 - список "плохих" менеджеров (со списком недостатков) - nuget, vcpkg, Qpm, pacm, cget, cppget);
10:25 - список "хороших менеджеров" со списком особенностей - cpm, conan, hunter.
10:48 - особенности cpm, установка boost и подключение к проекту, описание проблем и того, почему cpm оказался не таким уж хорошим.
13:30 - особенности conan, установка boost, openssl.
16:16 - конструкция conan (что где лежит, как хранится).
17:25 - особенности hunter, установка boost, небольшие "проблемы" с установкой boost+thread+chrono+... - отличается от conan процессом компиляции скачанных библиотек, качает исходники и собирает все.
21.25 - добавление зависимости вашего проекта от boost+openssl.
21:40 - конструкция hunter (структура каталогов и т.п.)
23.10 - итоги (они выбрали hunter, хотя conan тоже хорош)
24.00 - вопросы: что если в системе несколько компиляторов и надо собирать под каждый из них? (ответ для hunter)
25:40 - нужен ли в С++ вообще такой менеджер пакетов как в руби и т.п. (филосовский вопрос, длинный ответ).
29:20 - что если пакеты надо использовать с патчами, собирать с флагами? (ответ для hunter).
» Ссылка на видео:
https://www.youtube.com/watch?v=Q7uR-4L7pVk&list=PLgsLnJ-wgYTZRDRK3jrSOoarFg0ART6Ea&index=9
» Дополнение. От себя.
По смежной теме стоит посмотреть и другие видео (ниже ссылки на развернутые аннотации):
1) доклад про travis.ci (а также conan и немного про docker): https://vk.com/wall-105242702_557
2) доаклад про обеспечение качества кода (про conan тоже есть, но также про статическую првоерку кода, ревью и т.п.): https://vk.com/wall-105242702_495
3) подробный разбор Conan: https://vk.com/wall-105242702_459
о) у меня есть табличка непросмотренного, просмотренного, и вкратце о чем было просмотренное, но это на пару голов выше и детальнее)


Vladimir
02.12.2017
07:23:19

Google


Vladimir
02.12.2017
07:24:36
Тогда еще одна "аннотация" (из старых, если кто-то уже читал это - прошу простить меня):
Понравилась заметка на habrahabr по декларативному программированию в С++: https://habrahabr.ru/post/270545/. (загляните в конец аннотации).
1) В статье говорится, что использовать напрямую try-catch - не очень хорошая идея, т.к. код будет нечитабельным (об этом же можно узнать почитав другие статьи по теме RAII-классов).
2) в статье описывается решение (уже лежит в boost 10 лет, но сейчас об этом говорят на конференциях по С++ достаточно много). Схематично показано как это решение внутри устроено - это особенно понравилось.
3) Дополнение (содержит мое личное мнение и с автором статьи не связано). Что касается примера из статьи - я бы (хотя кто я такой?) заменил его на что-то типа
int *a = new int[25];
int *b = new int[25];
Проблема примера точно такая же как и в примере из статьи (но такой код гигабайтами пишут студенты и поэтому им будет понятно о чем речь) - оператор new может выкинуть исключение. Если bad_alloc вылетит при первом new - то утечки не будет, а при втором - будет.
Решение проблемы очевидно - использовать RAII классы, например вектор. Если объект создается на стеке и если будет выработано исключение - стек "разматывается" и для таких объектов вызываются деструкторы.
vector<int> a;
vector<int> b;
Тут утечки не будет. В стандартной библиотеке С++ есть куча готовых классов, поддерживающих идиому RAII - fstream сам закроет файл, unique_ptr (и все прочие умные указатели) сам освободит память при выходе из функции (в т.ч. по исключению) и т.п. Очевидно, что RAII работает прекрасно и про это можно прочитать:
+ Идиома RAII. Объекты управления ресурсами в C++: https://pro-prof.com/forums/topic/resources-control-o..
+ Умный указатель unique_ptr: https://pro-prof.com/forums/topic/cplusplus-unique_pt..
4) Ну а что же делать, если при возникновении исключения надо выполнять какие-то нестандартные действия? (Еще одна проблема) - не городить же каждый раз RAII-класс? На самом деле, пример когда это нужно привести не так просто, в примере из статьи проблема могла бы быть решена использованием std::string (тоже RAII класс). Но допустим, такая ситуация возникает.
В качестве решения Александреску предложил идиому Scope Guard. Boost реализует ее и предлагает использовать макросы типа SCOPE_FAIL, которые создают на стеке анонимную переменную, для которой будет вызван деструктор при возникновении исключения. Ну и к этой переменной привязывают лямбду, которая и будет вызвана в деструкторе. Решение в бусте чуть сложнее, т.к. деструктор проверяет причины возникновения исключения (наша лямбда вызывается не во всех случаях).
Некоторые детали реализации можно найти по ссылке.


Alexander
02.12.2017
08:01:48

Berkus
02.12.2017
08:02:33

Matwey
02.12.2017
10:02:47
Господа
Я сейчас в gdb слуйчано распечатал std::unordered_set через команду print
И от увиденного стал молиться Господу нашему
Нет где-нибудь скриптов каких-нибудь чтобы по человечески выдавало?

Berkus
02.12.2017
10:03:30
есть для lldb скрипты на питоне
которые выводят все как положено
в новом свежем ллдб кажется это даже встроили внутрь
полуркай

Alex Фэils?︙
02.12.2017
10:16:27
Вкрутили бы натвис

Alex Фэils?︙
02.12.2017
10:16:43
Или что-то подобное

Stanislav
02.12.2017
10:26:47
даже cdb умеет вроде, либо это хелпер qt creator

Matwey
02.12.2017
10:28:44
Мне кажется у меня несвежий gdb
8.0.1
какой там нынче положено иметь?
Ох, как я сейчас красиво отсосал - забыл виртуальный деструктор определить. :)

Alexander
02.12.2017
10:29:39

Google

Matwey
02.12.2017
10:29:56
Пол часа искал почему объекты не удаляются

vyacheslav@deepin:~$
02.12.2017
10:30:07
пол часа не пол месяца

Matwey
02.12.2017
10:32:51
Ну плюсы не для слабых духом

vyacheslav@deepin:~$
02.12.2017
10:41:52
бесспорно

Mark
02.12.2017
10:48:45
привет почему у меня в програме вибивает такое число 1.43678e+06 как его можна перевести в 10 систему?

vyacheslav@deepin:~$
02.12.2017
10:49:27
оно в десятичной системе

Admin
ERROR: S client not available

vyacheslav@deepin:~$
02.12.2017
10:49:41
у тебя на чистом С прога?
для cout точность выстави

Mark
02.12.2017
10:50:08
que.exec("SELECT SUM(ticket_price) FROM "+train_name + "_people");
if(que.next())
max_possible_income = que.value(0).toDouble();
qt с бази даних беру суму

Berkus
02.12.2017
10:50:28

vyacheslav@deepin:~$
02.12.2017
10:50:57

Mark
02.12.2017
10:52:24
max_possible_income = que.value(0).toLongLong();
буру так но не паше

vyacheslav@deepin:~$
02.12.2017
10:52:53
а у поля в БД какой тип?
и какая размерность

Berkus
02.12.2017
10:53:40

Mark
02.12.2017
10:54:13
дальше ето число 1.43678e+06

Berkus
02.12.2017
10:54:18
max_possible_income должен быть long long

Google

Berkus
02.12.2017
10:54:22
а не double

vyacheslav@deepin:~$
02.12.2017
10:54:32
а где ты наблюдаешь это число?
куда выводится?

Matwey
02.12.2017
11:13:04
Какой тип переменной?

Roman
02.12.2017
11:14:31

Egor
02.12.2017
11:15:14
что за Элвис ?
foo ?: bar — примерно эквивалентно foo ? foo : bar, только foo вычисляется ровно один раз
https://en.wikipedia.org/wiki/Elvis_operator
Есть в некоторых языках

Roman
02.12.2017
11:15:46

Egor
02.12.2017
11:16:06
Вполне возможно, да

Matwey
02.12.2017
11:19:07
А теперь внимание вопрос
Сделает ли оптимизатор из тернарного оператора такую штуку сам при условии что в foo не вызывается функций или чего-то такого
?

Egor
02.12.2017
11:20:52
Сможет ли оптимизатор не вычислять одно и то же сложное выражение два раза при условии отсутствия побочных эффектов? Вполне может справиться.

Vladislav
02.12.2017
11:39:46

Александр
02.12.2017
11:40:11
и нет, он не является "вариантом" тернарного

Vladislav
02.12.2017
11:40:51
не стандартный вариант - тоже вариант