@dlangru

Страница 683 из 719
Pavel
13.09.2018
17:04:01
Ну да, но он мне и нужен

Мне нужно получать только одну структуру и все

Даже если я возьму receive я разве смогу принимать иммутабельную структуру?

Igor
13.09.2018
17:21:47
Возможно нужно определить оператор присваивания. Похоже на нем валится

Google
Oleg
13.09.2018
18:08:30
Ну да, но он мне и нужен
над чем ты работаешь? зачем тебе этот receive и вообще std.concurrency?

там такая лажа во внутрянке, что жесть (была, когда в последний раз смотрел)

легче самому очередь сделать

тогда будет понятно что как и куда

всмысле лажа не прям дно, а типа для самых бытовых случаев код

когда нужно что-то накидать побыстрому и не париться

Ievgenii
13.09.2018
18:10:52
Единственное что, это а инхронно отправить сигнал другому потоку

А как передать данные - это уже второй вопрос

Oleg
13.09.2018
18:13:49
хотя та же лажа осталась и по сей день) получается что новый поток использует переменные из старого потока, которые при этом не shared https://github.com/dlang/phobos/blob/master/std/concurrency.d#L525

но на простых вещах работает

при этом в Thread передаётся указатель на делегат, который вообще внутри другой функции объявлен

Igor
13.09.2018
18:26:23
ну конкретно с примером про иммутабельную структуру в том что для неё не работает присваивание

при помещении в очередь она должна скопироваться, да и при возвращении из receive тоже должна копироваться, то оно и обламывется.

Google
qwerty
13.09.2018
18:28:40
Есть такой системный вызов brk, который лежит в основе malloc. Он увеливает data segment приложения из пространства виртульной памяти, которое ОС выдало для процесса. Это пространство фиксированное или динамически задаваемое?

qwerty
13.09.2018
18:29:48
вопрос о размере этого пространства

Igor
13.09.2018
18:29:56
у него есть лимит

qwerty
13.09.2018
18:30:14
4 gb для 32 bit и 8 для 64 ?

Igor
13.09.2018
18:30:21
если наступит на другой сегмент то будет ошибка нарушения защиты или что-то в этом роде

Dark
13.09.2018
18:30:49
Oleg
13.09.2018
18:30:57
4 gb для 32 bit и 8 для 64 ?
ну если отталкиваться от количества бит, то немного не так

>>> 2**32 4294967296 >>> 2**64 18446744073709551616 >>>

ну это так, для справки, к вопросу не относится

Igor
13.09.2018
18:32:40
зависит от сегментрованности адресного пространсва процесса. в линухе можно простомреть командой pmap

qwerty
13.09.2018
18:32:42
спасибо @deviator. Но у меня тогда другой вопрос. Если наступить на другой сегмент нельзя и пространство фиксированное, то как получается так, что процессов много. Ведь для каждого дают 4 гига

Dark
13.09.2018
18:33:37
++

Oleg
13.09.2018
18:34:10
адресное пространство процесса это одно, объём оперативной памяти это другое

qwerty
13.09.2018
18:34:43
что?!!? Я думал, что адресное пространство map к реальному

Google
Oleg
13.09.2018
18:34:58
нет, уже давно не так

помимо этого это всё дело бъётся на страницы и может выгружаться из физической оперативы

даже память одного процесса

qwerty
13.09.2018
18:35:42
стоп

Oleg
13.09.2018
18:36:06
там несколько слоёв переадресаций полуается

qwerty
13.09.2018
18:36:46
ответ так просто не дать? Если мне надо что-то почитать, скажите что? Про то как формируется адресное пространство?

Oleg
13.09.2018
18:37:17
таненбаум "современные операционные системы"

qwerty
13.09.2018
18:37:30
вот блин >_<

Oleg
13.09.2018
18:37:42
но там всё ок рассказанно

но много читать

qwerty
13.09.2018
18:38:14
мне знакомый сказал сначала почитать michael kerrisk linux api, а потом "современные операционные системы"

а там как раз про brk рассказывается и меня понесло

Oleg
13.09.2018
18:39:05
я бы сначала таненбаума советовал бы

чтобы от основ к конкретным реализациям

qwerty
13.09.2018
18:39:40
ок! Всем большое спасибо!

Ievgenii
13.09.2018
18:44:30
таненбаум "современные операционные системы"
Нужно будет почитать. Если будет в наличии

Pavel
13.09.2018
19:00:09
над чем ты работаешь? зачем тебе этот receive и вообще std.concurrency?
Я делаю бота. Один Task занимается тем что забирает апдейты с сервера, и рассылает их по плагинам программы. Каждый плагин работает тоже в виде Task и когда он получает апдейт то может с ним что-то сделать. Залогировать, отправить ответ и т.д.

Структура простая, символьные данные, по факту несколько string. И еще я туда засунул Tid чтобы плагин знал куда отправить ответ.

Oleg
13.09.2018
19:07:52
Структура простая, символьные данные, по факту несколько string. И еще я туда засунул Tid чтобы плагин знал куда отправить ответ.
если используешь std.concurrency, то может ownerTid подойдёт вместо засовывания tid в структуру?

Pavel
13.09.2018
19:08:13
А я не знаю кто кому посылает. Там owner может быть вообще другой

Google
Oleg
13.09.2018
19:08:46
чтобы быть уверенным, что никто ничего не изменил?

так если это структура, то она копируется же в каждый поток

Oleg
13.09.2018
19:15:16
а внутри потоков ты их по ссылке передаёшь?

откуда у тебя страх, что там что-то изменится?

Pavel
13.09.2018
19:16:14
Ну, это неоднозначный вопрос, я же не знаю какие могут быть плагины. Они могут быть с очень сложной логикой, работать с событием по ссылке, по указателю, по копии, как угодно. Я не могу себе ничего гарантировать.

Igor
13.09.2018
19:16:52
ты можешь плагинам отдавать иммутабельную копию стркутуры

Oleg
13.09.2018
19:17:09
вот прям это и хотел написать

Pavel
13.09.2018
19:17:16
Это как отдавать?

Admin
ERROR: S client not available

Oleg
13.09.2018
19:17:39
интерфейс плагина просто должен принимать immutable(Foo)* например

Igor
13.09.2018
19:17:40
а как они её получают у тебя?

Oleg
13.09.2018
19:17:55
а не просто Foo

Oleg
13.09.2018
19:18:18
ну ты же ссылками и указателями хочешь передавать?

Pavel
13.09.2018
19:18:28
Нет я хочу передавать копией

Oleg
13.09.2018
19:18:29
иначе она просто скопируется

тогда вообще не понял проблемы

Pavel
13.09.2018
19:18:41
Так не хочет она копироваться, падает с ошибкой

Google
Igor
13.09.2018
19:18:48
immutable S s = a; - работает даже если а mutable

Pavel
13.09.2018
19:19:06
Джва раза постил )

https://run.dlang.io/is/9o3ebQ вот такое вот супердно )

Вот такое не компилируется хотя ничего криминального в коде нет.

Dark
13.09.2018
19:19:43
Хм

Oleg
13.09.2018
19:19:54
Джва раза постил )
так мы тебе уже 2 раза говорим, что нужно убрать immutable из объявления структуры

Igor
13.09.2018
19:20:00
ты идешь поперёк реализации. и неизвестно есть ли реализация которая такое реализует

Dark
13.09.2018
19:20:00
Я чего то не понимаю

Зачем иммутабле, если все равно копируется?

Igor
13.09.2018
19:20:40
Зачем иммутабле, если все равно копируется?
что-бы в других местах не меняло ничего

Pavel
13.09.2018
19:20:57
Зачем иммутабле, если все равно копируется?
Пусть она хоть 100 раз скопируется, это нормально до тех пор пока я уверен что данные в ней не менялись

Oleg
13.09.2018
19:21:03
Igor
13.09.2018
19:21:26
Oleg
13.09.2018
19:21:32
логика то в чём?

Pavel
13.09.2018
19:21:54
если она копируется, то это уже не одна а 2 и более структуры
Главное что это достоверная неизменная копия оригинальной структуры, вот что важно

Oleg
13.09.2018
19:22:06
чтобы изменённую не передали дальше?

Pavel
13.09.2018
19:22:09
Да

Oleg
13.09.2018
19:22:48
тоесть один плагин может инициализировать другой с уже изменённой структурой?

плагины вообще не ты пишешь, так?

там всё что угодно может произойти?

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