@dlangru

Страница 691 из 719
Igor
19.09.2018
11:12:41
Между тредами конечно, а не телами...

Pavel
19.09.2018
11:15:39
А если я буду передавать указатели то GC всегда поймет что где-то лежит указатель и не будет чистить этот объект?

Igor
19.09.2018
11:17:20
Да, почему нет?

Pavel
19.09.2018
11:19:57
Да, всмысле поймет, или не поймет? )

Google
Maxim
19.09.2018
11:21:32
если ты структуру через new сделаешь, всё отлично будет

Pavel
19.09.2018
11:24:28
struct S { string a = "kek"; } int main(string[] args) { auto s = new S(); S* sptr = s; ptrdiff_t dptr = cast(ptrdiff_t)s;

Насчет первого указателя видимо да, а второй мне кажется он не словит.

Maxim
19.09.2018
11:25:23
подозреваю, он с этой структурой будет обращаться так же, как и с объектом

Igor
19.09.2018
11:37:30
Да в смысле поймет

Пока указатель есть в памяти он его видит

Toha
19.09.2018
11:40:20
Там вообще задница?
Свои "нюансы" ?

Igor
19.09.2018
11:42:26
Есть тонкости когда указатель хранится в неподконтрольной gc памяти

Oleg
19.09.2018
12:07:16
struct S { string a = "kek"; } int main(string[] args) { auto s = new S(); S* sptr = s; ptrdiff_t dptr = cast(ptrdiff_t)s;
если ты указатель сохранил как число то gc может отчистить эту память в какой-то момент, он же не знает число это или память (тип то число просто)

Pavel
19.09.2018
12:08:15
Да логично, а если S* то компилятор знает в каких местах кода следить

Igor
19.09.2018
12:20:51
а точно нужен указатель на структуру для передачи в другой тред? пусть я зануда, но спрошу - а не проще ли передать структуру как значение? или планируется впихнуть в труктуру указатели?

Pavel
19.09.2018
12:30:13
> или планируется впихнуть в труктуру указатели? Возможно

Но это не должно быть неожиданностью

Google
Pavel
19.09.2018
12:30:42
Что у нас незаметно где то там что-то начало перезаписываться или подтекать, а мы и не заметили

Pavel
19.09.2018
12:31:40
Указателей я пытаюсь избежать всеми силами, в высокоуровневом приложении они ни к чему. Но почему то их нельзя просто так заменить классами со ссылочной семантикой.

почему ты не хочешь чтобы эта структура менялась?
Я тут уже раз 10 это описывал. Иммутабельность, value object, read only DTO, много терминов у этого явления

Когда код становится сложным и развесистым, спасают ограничения и контролирующие ассерты

Oleg
19.09.2018
12:33:07
типа обрезать инфу для части плагина

Pavel
19.09.2018
12:34:16
Примерно по той же причине в ООП рекомендуется делать все переменные private. И потом по надобности менять на public. Потому что когда уже наросла кодовая база, то менять public -> private гораздо сложнее чем private -> public

Toha
19.09.2018
12:36:33
Там где я работал, все переменные были паблик)

Геттеры? Сеттеры? Штоэта?))

Pavel
19.09.2018
12:37:44
Геттеры в C# лучше сделаны чем в D

Toha
19.09.2018
12:38:15
после пыхи шарповые геттеры кажутся оверинжинирными)

Pavel
19.09.2018
12:38:45
Там можно прямо на переменную навесить Get Set. А тут приходится как минимум создавать переменную-хранилище _foo, а потом к нему прописывать 2 метода и на них вешать @property

Причем эти методы нельзя назвать так же как переменную, получаем 2 символа в таблице класса - _foo и foo, хотя они делают одно и то же.

Toha
19.09.2018
12:41:16
Дак а в шарпе так же

Есть переменная приватная, и ты на нее паблик гет/сет делаешь

Oleg
19.09.2018
12:46:48
Pavel
19.09.2018
12:46:49
Есть переменная приватная, и ты на нее паблик гет/сет делаешь
А как она называется? К ней можно обратиться?

кажется видел библиотеку, которая сама mixin'ом делает getter и setter используя uda
Да я тоже видел, хорошая штука. Но там типа надо было создать переменную name_ и уже из нее делались геттер и сеттер

Надо что-то типа такого синтаксиса: class S { Property!"name"(Property.get | Property.set); }

Google
Oleg
19.09.2018
12:50:52
но вот вопрос: зачем нужны геттеры и сеттеры в структуре?

если это приватное поле, то это приватное поле

Pavel
19.09.2018
12:51:30
Чтобы readonly свойство сделать например

Oleg
19.09.2018
12:51:31
возможно геттер можно сделать

а вот сеттер простой не пойму зачем

только в классе для работы с мьютексами это удобно

Pavel
19.09.2018
12:52:25
Да много типичных ситуаций, например хочется посчитать количество обращений к переменной

Или запретить чтение из переменной, если объект еще не готов

Oleg
19.09.2018
12:54:01
но в этом случае не получится просто так сделать геттер и сеттер

я про простые геттеры и сеттеры

которые типа автоматически генерируются

Oleg
19.09.2018
12:54:36
если их потом можно переопределить это другое — это опять классы

Pavel
19.09.2018
12:55:56
``` class S { Property!(string, "name")(Property.get); string name(string value) { _name = value; } } ``` А вот так переопределять

А шаблон должен смотреть, если у же есть такой метод, то не генерировать для переменной сеттер

Pavel
19.09.2018
12:58:09
Ну так писать быстрее чем по честному объявить _name и написать для нее геттер еще.

Oleg
19.09.2018
12:58:11
не думаю что это должно быть в синтаксисе

Pavel
19.09.2018
12:59:04
Хехе на форуме есть обсуждение как раз той странной библиотеки с генератором геттеров, там Александреску отписался что идея замечательная и уже чуть ли не DIP пошел сочинять.

Google
Igor
19.09.2018
13:20:22
вот есть описание с птичьего полёта про передачу между тредами и иммутабельность https://bartoszmilewski.com/2013/12/10/functional-data-structures-and-concurrency-in-c/

Dmitry
19.09.2018
14:25:33
если ты указатель сохранил как число то gc может отчистить эту память в какой-то момент, он же не знает число это или память (тип то число просто)
На сегодня GC не умеет отличать указатель от числа, когда оно лежит на стеке или внутри объекта/структуры. Только если это массив чисел или структура совсем без ссылочных типов в куче, тогда там будет NO_SCAN, туда ГЦ не будет смотреть.

Поэтому если записать указатель в локальную числовую переменную, ГЦ его найдет и просканирует.

Pavel
19.09.2018
14:27:40
А если в поле структуры то не найдет? ;)

Pavel
19.09.2018
14:28:39
Я считаю ему это и не нужно уметь
Если я создал структуру в куче и разослал адрес на нее по разным тредам, то как тогда GC узнает что ее можно подчистить

Ievgenii
19.09.2018
14:31:32
Если я создал структуру в куче и разослал адрес на нее по разным тредам, то как тогда GC узнает что ее можно подчистить
Ну если на структуру, в момент работа СМ, нет указателей/ссылок, то и удалять ее можно

Admin
ERROR: S client not available

Ievgenii
19.09.2018
14:31:34
Имхо

Ты же адрес и в пайп можешь записать

И вычитывать его из пайпа спустя только 10 минут

Это твои проблемы! Если хочешь "вечный" или контролируемый срок жизни объекта - конструируй и контролируй его сам

Pavel
19.09.2018
14:33:54
Dmitry
19.09.2018
14:34:20
Пайп имеет смысл между процессами, а там указатели бестолку передавать, у процессов адресные пространства разные.

Toha
19.09.2018
14:35:12
Шаред мемори

Pavel
19.09.2018
14:35:58
омг да причем тут процессы мы не про них вообще

Dmitry
19.09.2018
14:36:08
А если в поле структуры то не найдет? ;)
Зависит от типа структуры.

Google
Pavel
19.09.2018
14:36:58
Ну если на структуру, в момент работа СМ, нет указателей/ссылок, то и удалять ее можно
Указатель это просто число, и если СМ не видит разницу S* от ptrdiff_t то ничего и не сможет сделать.

Dmitry
19.09.2018
14:40:54


Минутка хороших новостей.

D есть в ентерпрайзе.

И работа на нем есть.

Toha
19.09.2018
14:42:15
Это remedy? ?

Dmitry
19.09.2018
14:42:19
Можно весь день писать, за это еще и платят.



Сегодня приходил Robert Schadek

John Colvin, Atila Neves и некоторые другие уже тут

Скоро добрая половина сообщества вместе работать будет )

Секрет успеха - засветиться на форумах dlang.org )

Это та же контора, что symmetry autumn of code финансирует.

Oleg
19.09.2018
14:46:48
?

Pavel
19.09.2018
14:47:40
Dmitry
19.09.2018
14:48:37


Да, тот же Атила на удаленке, я тоже еще недавно был.

Только не в курсе насчет вакансий прямо сейчас.

Pavel
19.09.2018
14:49:44
И как вы посылаете данные между тредами? )

Не делаете их иммутабельными?

Dmitry
19.09.2018
14:49:58
Самолетами )

Страница 691 из 719