Berkus
Berkus
C++ Language Dialect это оно
Igor
кажется разобрался, я в схеме искал =//
Igor
спасибо
Berkus
да в build settings проекта оно всегда и было
Igor
что-то значит затупил, просто нажал на корень проекта и появилось то что надо
JBáruch
все видели статейку про Conan на хабре?
JBáruch
https://habrahabr.ru/post/342982/
Anatoly
Да, автор оставлял уже ссылку :) Он как раз тебя просил похлопотать о поддержке Conan в CLion, и тебе огромное спасибо, что продвинул эту тему.
Roman
Berkus
Berkus
читать-то не умеем?
Roman
Berkus
и не читай
Roman
и не читай
росскажи в кратце , для чего он ?
Berkus
для установки пакетов для сборки
Danil
Roman
Vladislav
Alexander "SonnySlave"
https://www.iso.org/standard/68564.html
Alexander "SonnySlave"
http://cppcast.com/2017/11/victor-ciura/
Alexander "SonnySlave"
https://github.com/bincrafters/conan-vs-extension
Aleksandr
😁
Александр
Igor
Окей, тогда, последняя написанная аннотация:
Аннотация на доклад с конференции 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
о) у меня есть табличка непросмотренного, просмотренного, и вкратце о чем было просмотренное, но это на пару голов выше и детальнее)
Anonymous
Anonymous
Тогда еще одна "аннотация" (из старых, если кто-то уже читал это - прошу простить меня):
Понравилась заметка на 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, которые создают на стеке анонимную переменную, для которой будет вызван деструктор при возникновении исключения. Ну и к этой переменной привязывают лямбду, которая и будет вызвана в деструкторе. Решение в бусте чуть сложнее, т.к. деструктор проверяет причины возникновения исключения (наша лямбда вызывается не во всех случаях).
Некоторые детали реализации можно найти по ссылке.
Berkus
Matwey
Господа
Matwey
Я сейчас в gdb слуйчано распечатал std::unordered_set через команду print
Matwey
И от увиденного стал молиться Господу нашему
Matwey
Нет где-нибудь скриптов каких-нибудь чтобы по человечески выдавало?
Berkus
есть для lldb скрипты на питоне
Berkus
которые выводят все как положено
Berkus
в новом свежем ллдб кажется это даже встроили внутрь
Berkus
полуркай
🦥Alex Fails
Вкрутили бы натвис
🦥Alex Fails
Или что-то подобное
Stanislav
Stanislav
даже cdb умеет вроде, либо это хелпер qt creator
Matwey
Мне кажется у меня несвежий gdb
Matwey
8.0.1
Matwey
какой там нынче положено иметь?
Matwey
Ох, как я сейчас красиво отсосал - забыл виртуальный деструктор определить. :)
Alexander "SonnySlave"
Matwey
Пол часа искал почему объекты не удаляются
Vyacheslav
пол часа не пол месяца
Matwey
Ну плюсы не для слабых духом
Vyacheslav
бесспорно
Marko
привет почему у меня в програме вибивает такое число 1.43678e+06 как его можна перевести в 10 систему?
Vyacheslav
оно в десятичной системе
Vyacheslav
у тебя на чистом С прога?
Vyacheslav
для cout точность выстави
Marko
que.exec("SELECT SUM(ticket_price) FROM "+train_name + "_people");
if(que.next())
max_possible_income = que.value(0).toDouble();
Marko
qt с бази даних беру суму
Berkus
Vyacheslav
Marko
max_possible_income = que.value(0).toLongLong();
Marko
буру так но не паше
Vyacheslav
а у поля в БД какой тип?
Vyacheslav
и какая размерность
Marko
дальше ето число 1.43678e+06
Berkus
max_possible_income должен быть long long
Berkus
а не double
Vyacheslav
а где ты наблюдаешь это число?
Vyacheslav
куда выводится?
Matwey
Matwey
Какой тип переменной?
Roman
Egor
что за Элвис ?
foo ?: bar — примерно эквивалентно foo ? foo : bar, только foo вычисляется ровно один раз
https://en.wikipedia.org/wiki/Elvis_operator
Egor
Есть в некоторых языках
Roman
Egor
Вполне возможно, да
Matwey
А теперь внимание вопрос
Matwey
Сделает ли оптимизатор из тернарного оператора такую штуку сам при условии что в foo не вызывается функций или чего-то такого
Matwey
?