
Spoonson
25.09.2018
10:51:36

Max
25.09.2018
10:52:37
и будет гонка за деструктором.

Yarique
25.09.2018
10:52:57

Google

Spoonson
25.09.2018
10:54:52

Yarique
25.09.2018
11:00:54

Ilia
25.09.2018
11:01:40

Yarique
25.09.2018
11:02:43

Spoonson
25.09.2018
11:04:23

Yarique
25.09.2018
11:08:33

Spoonson
25.09.2018
11:12:46

Ⱪonstantin
25.09.2018
11:21:03

Ilia
25.09.2018
12:03:53

Alex Фэils?︙
25.09.2018
12:06:18

Евгений
25.09.2018
12:24:05

Ⱪonstantin
25.09.2018
12:25:01

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

Google

Nikita
25.09.2018
12:30:30

Евгений
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

Ⱪonstantin
25.09.2018
13:04:18

Spoonson
25.09.2018
13:04:40

Олег
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

Max
25.09.2018
13:17:28

Yarique
25.09.2018
13:18:03

Alex Фэils?︙
25.09.2018
13:18:14

Max
25.09.2018
13:18:59
а 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
Он собрался и упал в SEGFAULT
И это при том, что мне уже почти 30
Представляете, какой старинный код?

Stanislav
25.09.2018
13:35:38

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
Пример кода (в конце страницы 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

Roman
25.09.2018
14:24:37
member initilizer находится далеко от места объявления поля
Т.е. он работает но ухудшает читаемость кода

PRoSToC0der
25.09.2018
14:26:24

Roman
25.09.2018
14:28:42
На данный момент в 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

PRoSToC0der
25.09.2018
14:51:34

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. Например, не понимаю может ли при этом быть ещё конструктор или он обязан быть единственным? Где бы про это почитать?

Roman
25.09.2018
15:07:42

Andrew
25.09.2018
15:15:17

Igor
25.09.2018
15:16:32

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
А, я не так понял.

Stanislav
25.09.2018
16:24:40

Igor
25.09.2018
16:30:47


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