@ProCxx

Страница 2375 из 2477
Spoonson
25.09.2018
10:51:36
shared_ptr разумно в многопоточных программах использовать
а как же shared_ptr поможет в многопоточных программах? Хотелось бы посмотреть пример, хотя бы простенький.

Max
25.09.2018
10:52:37
а как же shared_ptr поможет в многопоточных программах? Хотелось бы посмотреть пример, хотя бы простенький.
Пример чего? Просто создавай ptr, создавай тред, передавай туда птр и завершай текущую функцию.

и будет гонка за деструктором.

Yarique
25.09.2018
10:52:57
а как же shared_ptr поможет в многопоточных программах? Хотелось бы посмотреть пример, хотя бы простенький.
В определении владения ресурсом поможет, если уже определен менеджер памяти(где атомарных 2 счетчика и водятся)

Google
Yarique
25.09.2018
11:00:54
ну, все равно. Стоимость атомарного инкремента это где-то 10-20 инструкций (не уверен за точность, может сильно ошибаюсь), а async_connect это syscall должен быть.
10-20 инструкций это если последний раз использовалась текущем потоком атомарная переменная и не используется другим, а иначе мб адовый простой.

Ilia
25.09.2018
11:01:40
В однопоточной программе shared_ptr имхо в 99% случаев можно заменить на uniq_ptr
Здрасьте, приехали.... Как поточность вообще связана с необходимостью shared ? Shared нужен когда владение коллективное.

Spoonson
25.09.2018
11:04:23
10-20 инструкций это если последний раз использовалась текущем потоком атомарная переменная и не используется другим, а иначе мб адовый простой.
и вероятность в итоге так высока, а контеншен за контрольный блок так велик, что это идет на равне с сисколлом?

Yarique
25.09.2018
11:08:33
и вероятность в итоге так высока, а контеншен за контрольный блок так велик, что это идет на равне с сисколлом?
Системный вызов за абстракцией boost asio io_context и на тот момент вообще не вызывается, а только ставится в список задач, которые будут исполнены вообще другим потоком, в котором boost::asio::io_context::run вызовится, так что уже 2 потока используют атомарные переменные при копии std::shared_ptr

Alex Фэils?︙
25.09.2018
12:06:18
https://godbolt.org/z/1LHVm1 ( ͡° ͜ʖ ͡°) ( ͡☉ ͜ʖ ͡☉) ( ͡◉ ͜ʖ ͡◉)
хе-хе, трай-кетч в списке инициализации, норм

Евгений
25.09.2018
12:24:05
В однопоточной программе shared_ptr имхо в 99% случаев можно заменить на uniq_ptr
вот есть у меня 2 разных индекса над набором данных - и мне нужен shared_ptr, хоть у меня и один поток

Евгений
25.09.2018
12:25:28
указатель?

Google
Евгений
25.09.2018
12:32:10
ну неверно выразился. наверно сходу не придумать зачем мне shared_ptr. ясное дело, что если вывернутсья во многих случаях можно обойтись без shared_ptr, вот только зачем, если он удобен?:

Yarique
25.09.2018
13:01:30
linux embed это значит никакого C++17 и STL или не все так плохо?

Stanislav
25.09.2018
13:02:17
я вообще под stm32 пишу на С++17 и мне норм

а под линукс тем более все хорошо

Yarique
25.09.2018
13:04:00
я вообще под stm32 пишу на С++17 и мне норм
А какие могут быть ограничения в использовании STL если в вакансии пишут arm, Linux embedded?

Ⱪonstantin
25.09.2018
13:04:18
ну неверно выразился. наверно сходу не придумать зачем мне shared_ptr. ясное дело, что если вывернутсья во многих случаях можно обойтись без shared_ptr, вот только зачем, если он удобен?:
Может я с 99% хватил конечно. Но о рефакторинге я бы задумался в однопоточной программе если вижу shared_ptr - выглядит как что-то неправильное.

Spoonson
25.09.2018
13:04:40
А какие могут быть ограничения в использовании STL если в вакансии пишут arm, Linux embedded?
я думаю, это вернее всего узнать у тех кто вакансию опубликовал

Олег
25.09.2018
13:07:28
Современный «linux embed» — это небось «воткнуть в качестве контроллера малинку», а на ней не то что c++17, третью кваку без проблем запустить можно.

Max
25.09.2018
13:13:25
так что всё ок.

а вот просто embed, без linux - там уж как повезёт.

Stanislav
25.09.2018
13:16:58
а вот просто embed, без linux - там уж как повезёт.
может там ваще говнокод 5 летней давности на си :)

Max
25.09.2018
13:17:28
Yarique
25.09.2018
13:18:03
может там ваще говнокод 5 летней давности на си :)
Я видел говнокод 12 летней давности на вперемешку C/C++ так что не страшно (: +winapi

Alex Фэils?︙
25.09.2018
13:18:14
5 лет — это очень неплохо ещё )
ну, по стилю кодирования может быть как K&R C

Max
25.09.2018
13:18:59
ну, по стилю кодирования может быть как K&R C
но сдругой стороны, может быть и вполне c++11 )

а K&R C и сейчас можно встретить. Тут не угадаешь.

yuri
25.09.2018
13:26:12
современные компиляторы могут и не дружить с K&R. Там, с параметрами функций вне скобок, варианты с for(int i...);

Google
Alex Фэils?︙
25.09.2018
13:28:53
да, они обычно и не дружат

Matwey
25.09.2018
13:34:49
ну, по стилю кодирования может быть как K&R C
Я однажды собирал код, который старше меня

Он собрался и упал в SEGFAULT

И это при том, что мне уже почти 30

Представляете, какой старинный код?

Matwey
25.09.2018
13:36:34
Я к сожалению не помню, был ли это K&R

Roman
25.09.2018
13:40:40
Покритикуйте пожалуйста https://stdcpp.ru/proposals/6d126adc-7852-41f7-8fdf-d0a8e9cccf72

Делаю DSL для описания аппаратуры на C++, по аналогии с Chisel/Scala https://chisel.eecs.berkeley.edu/ . И столкнулся с тем что нет удобного способа передачи параметров в in-class инициализаторы

Никакого удобного решения на макросах/шаблонах не получается

Alexandr
25.09.2018
13:42:45
Есть у кого канал такой как этот, только по java?

Yarique
25.09.2018
13:46:38
я думаю, это вернее всего узнать у тех кто вакансию опубликовал
Это несомненно, просто интересно было прочитать замечания сообщества.

Igor
25.09.2018
13:51:43
Я однажды собирал код, который старше меня
да, было дело во время диплома искал реализацию нейронечёткой сети, нашёл какую-то сишную - а она 80х годов выпуска, с пропуском типов для int и типами параметров после списка параметров

PRoSToC0der
25.09.2018
14:12:57
Никакого удобного решения на макросах/шаблонах не получается
конструировать через статическую функцию класса? а конструктор сделать приватным

Roman
25.09.2018
14:14:04
конструировать через статическую функцию класса? а конструктор сделать приватным
А как передать параметры в in-class инициализаторы. В этом основная проблема

Пример кода (в конце страницы class Fifo[T <: Data](gen: T, n: Int) extends Module) который хочется повторить https://github.com/freechipsproject/chisel3/wiki/Polymorphism-and-Parameterization

Просто в текущем варианте in-class инициализаторы достаточно бесполезны.

Я понимаю есть аргумент против этого в виде раздельной компиляции (конструктор должен быть в .cpp). Но вроде как модули это должны решить

Т.е. если будут модули, то можно и безболезненно добавить primary constructor

Т.е. комбинация из шаблонных параметров и параметров конструктора описывают интерфейс создания объекта. А тело класса уже содержит код для инициализации

Google
Spoonson
25.09.2018
14:23:59
Просто в текущем варианте in-class инициализаторы достаточно бесполезны.
я так понимаю, простой member initializer list не подходит только с точки зрения красоты кода?

Roman
25.09.2018
14:24:37
member initilizer находится далеко от места объявления поля

Т.е. он работает но ухудшает читаемость кода

PRoSToC0der
25.09.2018
14:26:24
А как передать параметры в in-class инициализаторы. В этом основная проблема
вычисляешь их в статической функции класса и передаёшь в приватный конструктор как параметры

Roman
25.09.2018
14:28:42
вычисляешь их в статической функции класса и передаёшь в приватный конструктор как параметры
Поясни. Они всё равно не будут в области видимости in-class инициализаторов

На данный момент в in-class инициализаторах можно использовать только шаблонные параметры. Но шаблоны это compile-time API, часто хочется иметь возможность параметризовать объекты и в runtime

Пример: template <unsigned RPTR_W = 10> class MyFIFO { public: MyFIFO(unsigned WPTR_W = 10) {} private: sc_int rptr{RPTR_W}; // OK! sc_int wptr{WPTR_W}; // Compile Error! };

PRoSToC0der
25.09.2018
14:39:20
@ripopov https://godbolt.org/z/dIW08_ а такое устраивает?

Spoonson
25.09.2018
14:51:08
@ripopov https://godbolt.org/z/dIW08_ а такое устраивает?
а так точно легально делать? гарантируется, что S(int x) вызовется до инциализатора y?

Roman
25.09.2018
14:53:47
Гарантируется

Igor
25.09.2018
14:54:12
ща буит мясо ... а бывают в природе утилиты для профайлинга мейкфайлов? особенно с flamegraph-совместимым выхлопом?

Roman
25.09.2018
14:54:17
Но агрегатная инициализация для структур это не то

PRoSToC0der
25.09.2018
14:55:53
@ripopov вообще говоря, я не совсем понимаю идею primary constructors. Например, не понимаю может ли при этом быть ещё конструктор или он обязан быть единственным? Где бы про это почитать?

Igor
25.09.2018
15:16:32
Я компилировал Make с дебаг символами и юзал perf на нем.
мощно а там, питончик, гошечка, nodejs на худой конец?.. пересобирать binutils ну прям вообще DO NOT WANT )

Andrew
25.09.2018
15:17:23
А что мощного? Он вроде в пару команд собирался, ничего сложного.

Igor
25.09.2018
15:18:54
а он разве не кусок одного большого, жирного репозитория, в котором и гдб, и гцц, и всё это переплетено в великий клубок судьбы?

Google
Spoonson
25.09.2018
15:20:01
хороший вопрос)
да, кажется гарантируется потому что есть строго определенные правила как инициализируются члены ( http://eel.is/c++draft/class.init#class.base.init-9 ) и есть правила что они инициализируются последовательно как было в обьявлении http://eel.is/c++draft/class.init#class.base.init-13.3

Andrew
25.09.2018
15:22:07
Нет, у него есть нормальные такие сорцы отдельно.

Даже собирается как "cd src && make" ?

Igor
25.09.2018
15:22:54
а, окей, тогда это звучит лучше и по перфу можно было судить, какая из команд сборки сильнее тормозит?

Andrew
25.09.2018
15:24:57
Упс, вот не совсем. Я в свое время вычислил, какой тип команд тормозил (у меня было куча автогенеренных .s целей).

Тогда можно попытаться повтыкать output в Makefile, ну и дальше дедовскими методами

Roman
25.09.2018
16:16:54
В общем что-то никто не покритиковыл идею primary конструкторов с точки зрения реализации. Как я понял основной аргумент против: Используйте синтаксис constructor initialization list из C++98 , всё и так хорошо.

Can you provide some feedback for this C++ idea / proposal? Primary constructors for C++ Problem: C++11 allows in-class member initialization. However, in-class initializers have no access to constructor parameters, which makes them useless in many scenarios. Example: template<typename T, unsigned INIT> class MyClass { public: MyClass(unsigned init) {} private: T x0 {INIT}; // OK T x1 {init}; // Error } So essentially in this case C++ favors compile-time template interfaces over run-time constructor interfaces. Possible solution: Primary constructors (similar to Scala, Kotlin and abandoned C# proposal) We can designate one constructor as primary. Parameters of primary constructor should be visible to in-class initializers. All other constructors must call primary constructor in their constructor initialization list. For example, we can use following syntax (similar to Scala/Kotlin): template<typename T, unsigned INIT> class MyClass (unsigned init) { public: // secondary ctor MyClass() : MyClass(42) {} private: T x0 {INIT}; // OK T x1 {init}; // OK }

Думаю залить на какой-нибудь англоговорящий форум за фидбеком. Не посоветуете куда?

reddit?

Stanislav
25.09.2018
16:22:49
есть mailing list future proposals можешь туда )

Andrew
25.09.2018
16:23:12
А, я не так понял.

Roman
25.09.2018
16:31:30
Чем этот подход лучше чем самому написать primary constructor и в нем поля проинициализировать?
В этом случае инициализация отделена в коде от объявления, что снижает его читаемость

Плюс необходимо дублировать имена полей

В этом случае инициализация отделена в коде от объявления, что снижает его читаемость
Пример Что предлагается: class MyClass (int initX, int initY ) { int x = initX; int y = initY; } Что сейчас: class MyClass { int x; int y; public: MyClass(int initX, int initY) : x(initX) , y(initY) {} }

Понятно что на маленьких примерах разница не большая. Но в реальном коде часто бесит от обявлений полей переходить к конструктору чтобы понять как они инициализируются

Страница 2375 из 2477