@dlangru

Страница 466 из 719
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
а, ясно

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
А сокеты закрываются в деструкторе класса? Или где?

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
Так они одно и тоже делают. Просто порядок аргументов разный. Так что, логично.
Дело тут не в логично-нелогично, а в том, что "старая реализация fold" по сути и есть новая реализация. Меня это забавляет

Valeriy
16.03.2018
18:03:07
Дело тут не в логично-нелогично, а в том, что "старая реализация fold" по сути и есть новая реализация. Меня это забавляет
Всё верно. У Reduce был неудобный порядок аргументов. Сделали обёркту. Назвали её fold. Незачем было писать новую реализацию

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

Pavel
16.03.2018
18:30:42
Дело тут не в логично-нелогично, а в том, что "старая реализация fold" по сути и есть новая реализация. Меня это забавляет
Надо еще посмотреть историю коммитов, а то может там действительно была другая реализация, а потом как сделали новую, то старую выразили через новую.

А я правильно понимаю что если я пишу какого-нибудь сетевого демона, то впринципе большинство классов можно помечать как 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
Ок, а зачем так заморачиваться, если эти данные для всех?
Заморачиваться == приписывать shared к классам, иначе они будут копироваться.

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

Что такое unshared aliasing ?
это ссылки на не 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
Всемогущий рандом решил нас посетить

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 с соектами работает неудачно, плохая получилась абстракция

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

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

Denis
18.03.2018
11:57:31
Спрашивал, сказали нинадо

Потом уже увидел что все кому надо (Людвиг) пишут свои обёртки вокруг позикс соектов)

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