
Pavel
16.03.2018
15:42:34
https://ldpreload.com/blog/signalfd-is-useless
в итоге я себе для отладки сделал слушающий unix сокет в отдельном треде. посылаешь в него команду а он чего-нибудь печатает в консоль. дешево и сердито.
+ абсолютно не мешает другому коду и отладочные команды можно парсить и параметризовать как угодно

Igor
16.03.2018
15:45:27
ну если для коммуникации между тредами то сигналы это конечно не то

Google

Pavel
16.03.2018
15:45:53
мне нужно было для ручного запуска GC по команде

Igor
16.03.2018
15:46:45
а, ясно

Dark
16.03.2018
15:51:18

Pavel
16.03.2018
15:51:41
Просто хотел посмотреть что произойдет )
происходило всякое странное
Много мусорных сокетов закрылось и написало что соединение завершено. В общем видно что GC много всякого делает.

Dark
16.03.2018
15:52:51
А где странное?

Pavel
16.03.2018
15:54:15
Думаю это код криво написан. Он пишет что соединение завершено когда уже покинули скоуп основного метода. Но видимо мусор как-то мешает коду покинуть скоуп.
Буду дальше разбираться, в целом все работает.

Dark
16.03.2018
15:55:11
Ээээ... А с чем разбираться то?

Pavel
16.03.2018
15:56:43
Почему мой код выполняется после GC и при этом не находится в деструкторе. Такого не должно быть.

Dark
16.03.2018
15:58:59
Он атеист, в GC не верит

Pavel
16.03.2018
15:59:38
GC это уже загробный мир, там код не живет

Google

Dark
16.03.2018
16:05:59
Значит, это какой то православный код

Igor
16.03.2018
16:07:28
А сокеты закрываются в деструкторе класса? Или где?

Denis
16.03.2018
16:10:37

Pavel
16.03.2018
16:10:45
нет, в моем коде
В стд.сокет да
А ну вот это может быть. Но я явно делаю на них .close()

Denis
16.03.2018
16:19:46
Я решил эти сокеты больше не юзать.

Dark
16.03.2018
16:34:37
Читаю я, значит, доку, а там: "Reduce... This is old implementation of fold".
Смотрю сорцы, а fold там просто оболочка над reduce. Вот она, новая имплементация)

Valeriy
16.03.2018
17:32:44

Dark
16.03.2018
18:01:26

Valeriy
16.03.2018
18:03:07

Dark
16.03.2018
18:04:59

Valeriy
16.03.2018
18:05:20

Dark
16.03.2018
18:08:22
не знаю :)
Вот я тебе прямо скажу - не отрицают, что это логично и правильно. Но меня смешат слова в доке

Pavel
16.03.2018
18:30:42
А я правильно понимаю что если я пишу какого-нибудь сетевого демона, то впринципе большинство классов можно помечать как shared ?

Dark
16.03.2018
19:24:35
Тут нужно Евгения призывать

Pavel
16.03.2018
19:25:53
Допустим у меня класс Application, он загружает текстовую конфигурацию из файла, парсит настройки и т.д., по настройкам создает слушающие сетевые сокеты. Все эти данные shared, нет смысла им копироваться в каждый тред по идее.

Igor
16.03.2018
19:26:04

Pavel
16.03.2018
19:27:11
Ну а зачем в демоне две копии приложения? Или две копии конфигурации. Это все глобальные данные.

Google

Dark
16.03.2018
19:27:23
Ну...
А если их кто-то захочет поменять?

Pavel
16.03.2018
19:27:39
Вот когда слушающий сокет принимает новое подключение - вот это подключение не shared, оно уходит в свой тред в очередь на обработку.

Dark
16.03.2018
19:28:39
Ок, а зачем так заморачиваться, если эти данные для всех?

Igor
16.03.2018
19:28:52
я бы попробовал такой конфиг оформить в иммутабельные данные, имхо гемороя должно быть меньше

Pavel
16.03.2018
19:29:19

Pavel
16.03.2018
19:29:21

Pavel
16.03.2018
19:29:59
А это не про shared?
Да, но я говорю про то что по умолчанию то классы не shared. То есть все что я щас разрабатываю - надо пойти и ко всем классам приписать shared.

Igor
16.03.2018
19:30:06
shared это данные котороые шарятся и могут меняться

Pavel
16.03.2018
19:31:17
Мне что-то подсказывает что если я щас напишу для одного треда то потом будет очень трудно адаптировать для нескольких. Поэтому надо сразу учитывать.

Pavel
16.03.2018
19:31:40
И еще receiveOnly! и send! шаблоны уже заранее требуют чтобы эта проблема была решена.

Igor
16.03.2018
19:32:13
send требует что-бы ты посылал либо иммутабельные данные либо данные без ссылок
это разные вещи

Pavel
16.03.2018
19:32:34
Да он еще что-то про shared предлагал
Без ссылок - логично, иначе в новом треде объект скопируется вместе со ссылкой и это будут две ссылки на разные объекты. Очевидно что ссылка на главный объект приложения должна быть одна и та же во всех тредах и всех местах приложения.

Igor
16.03.2018
19:36:46
да, похоже shared тоже можно
Sends the supplied value to the thread represented by tid. As with spawn, T must not have unshared aliasing.

Pavel
16.03.2018
19:38:09
Что такое unshared aliasing ?

Google

Pavel
16.03.2018
19:38:35
Это значит что все элементы в T должны быть рассматриваемы как shared?

Igor
16.03.2018
19:47:56
https://dlang.org/library/std/traits/has_unshared_aliasing.html

Pavel
16.03.2018
19:53:09
?

Evgeny
16.03.2018
21:27:57
shared это жопа
прилепите, потом замучаетесь кастовать. я пытался. программирование превращается в страдания.
данные которые не планируется менять, должны быть immutable

Pavel
16.03.2018
21:35:33

Admin
ERROR: S client not available

Evgeny
16.03.2018
21:41:52
все методы такого класса, тоже станут shared
лучше immutable

Igor
16.03.2018
21:43:38
именно
поэтому и предложил попробовать на одном классе

Pavel
16.03.2018
21:45:45
Ну Application то не может быть immutable т.к. меняет свое состояние

Igor
16.03.2018
21:54:19
раз не может то нужно делать shared, хотя можно использовать и стандартные трюки с мутексами и вот этим всем
вместе c __gshared

Pavel
16.03.2018
21:57:47
А ну хотя.. нафига мне как-то заморачиваться над Application если треды создаются где-то уже внутри него и значит сам объект Application никогда в TLS не захватывается
Надо просто следить чтобы нигде в локальном объекте не оказалось ссылки на него.

Evgeny
17.03.2018
06:48:01

Google

Evgeny
17.03.2018
06:48:59
Application, нопример, может быть создан на стеке в функции main и передаваться затем в каждый вновь созданный поток.

Dark
17.03.2018
12:33:48
Всемогущий рандом решил нас посетить

Denis
17.03.2018
12:49:28

Dark
17.03.2018
12:50:51
Кривая библиотека
Можно поконкретнее? Все говорят, что не надо юзать std.socket, но никто не говорит почему конкретно

Pavel
17.03.2018
13:12:15
Все говорят что deprecated на уровне слухов, что особо ничего не значит

Dark
17.03.2018
13:13:46
Слухи на ровном месте не возникают, как правило

Pavel
17.03.2018
13:15:40
Этот процесс может года 3 идти. Пока раздуплятся, глядишь к версии 2.0.99 выпилят)

Dark
17.03.2018
13:25:50
И?
Депрекейт на ровном месте не возикнет
Нужны претензии

Dmitry
17.03.2018
13:30:59
Альтернативу кто нить пилит?

Pavel
17.03.2018
13:43:34
Неа)

Denis
18.03.2018
11:17:48
Нужны претензии
std.socket с соектами работает неудачно, плохая получилась абстракция

Dark
18.03.2018
11:26:00

Denis
18.03.2018
11:42:31
ну да. например иногда нужен сокет posix - достать его из сокета нельзя

Pavel
18.03.2018
11:55:47
Так это же наверное можно просто дописать геттер в класс и проблема будет рншена

Denis
18.03.2018
11:57:31
Спрашивал, сказали нинадо
Потом уже увидел что все кому надо (Людвиг) пишут свои обёртки вокруг позикс соектов)