Size: a a a

2021 February 16

OB

Oleg B in dlang.ru
Oleg
не юзай const в D, он кривой.. а параметры функций - in
ну ну
источник

МВ

Макс Воробьев... in dlang.ru
Dark Hole
Нелогично, однако
логично, просто immutable сильнее руки выворачивает
источник

OB

Oleg B in dlang.ru
Oleg
не юзай const в D, он кривой.. а параметры функций - in
собственно in это сокращение для auto ref const
источник

МВ

Макс Воробьев... in dlang.ru
можно кастануть обычный объект в const и передать в другой поток, при этом свободно менять в исходном потоке
источник

МВ

Макс Воробьев... in dlang.ru
immutable должен быть immutable везде
источник

OB

Oleg B in dlang.ru
Dark Hole
Нелогично, однако
переданный const может быть не const для передающей стороны
источник

OB

Oleg B in dlang.ru
Макс Воробьев
можно кастануть обычный объект в const и передать в другой поток, при этом свободно менять в исходном потоке
а можно ещё указатели как int хранить, ага
источник

OB

Oleg B in dlang.ru
Макс Воробьев
можно кастануть обычный объект в const и передать в другой поток, при этом свободно менять в исходном потоке
пример как можно обойти систему типов, которая предполагает ограничение стрельбы по ногам
источник

O

Oleg in dlang.ru
Макс Воробьев
можно кастануть обычный объект в const и передать в другой поток, при этом свободно менять в исходном потоке
так низя
источник

МВ

Макс Воробьев... in dlang.ru
Oleg B
пример как можно обойти систему типов, которая предполагает ограничение стрельбы по ногам
class Test {
   this(){}
   ~this(){}
   
   void test() {}
}



void test_fun(const Test a) {
   /// тут a константный
}

int main(string[] args) {
   auto a = new Test;
   a.test_fun();
   // но тут a можно по прежнему менять
   return 0;
}
я про такой пример
источник

OB

Oleg B in dlang.ru
Oleg
не юзай const в D, он кривой.. а параметры функций - in
вот shared странно сделан, а const норм
источник

OB

Oleg B in dlang.ru
Макс Воробьев
class Test {
   this(){}
   ~this(){}
   
   void test() {}
}



void test_fun(const Test a) {
   /// тут a константный
}

int main(string[] args) {
   auto a = new Test;
   a.test_fun();
   // но тут a можно по прежнему менять
   return 0;
}
я про такой пример
при многопоточной работе нужны синхронизации
источник

O

Oleg in dlang.ru
низя менять объект в 1м потоке, чтобы другой поток думал, что с объектом всё ок и пахал на нем дальше.. ты просто нарываешься на неприятности
- не ходи туда, там тебя ждут неприятности!
- как это не ходи? они же ждут!
источник

МВ

Макс Воробьев... in dlang.ru
ок
источник

МВ

Макс Воробьев... in dlang.ru
class Test {
   this(){}
   ~this(){}
   
   void test() {}
}

class Test2 {
   private const Test m_a;
   this(const Test a) {
       m_a = a;
   }
}


int main(string[] args) {
   Test a = new Test;
   Test2 a2 = new Test2(a);
   return 0;
}
источник

МВ

Макс Воробьев... in dlang.ru
то, что Test2 не может изменить a внутри себя еще не означает, что a не может измениться вообще
источник

МВ

Макс Воробьев... in dlang.ru
a можно изменить снаружи
источник

МВ

Макс Воробьев... in dlang.ru
я просто к тому, что const не гарантирует не изменяемость объекта. он гарантирует только, что его не изменят в том контексте, где он const
источник

МВ

Макс Воробьев... in dlang.ru
и то есть всякие консткасты %)
источник

DH

Dark Hole in dlang.ru
Макс Воробьев
логично, просто immutable сильнее руки выворачивает
Конст = константа
источник