@dlangru

Страница 32 из 719
Oleg
23.06.2016
14:23:00
это не 2 библиотеки, а скорее phobos есть расширение core

Dmitry
23.06.2016
14:24:27
Тоесть в рантайме corе юзают?

Oleg
23.06.2016
14:24:47
ну рантайм это и есть core по сути

Dmitry
23.06.2016
15:49:47
Что он делает кроме GC?

Google
Oleg
23.06.2016
15:52:48
ну там много чего, открой и посмотри)

исходники всегда более точны, чем информация, которую люди могут запомнить

если хочешь разбираться (в целом) то не ленись читать исходники

Dmitry
23.06.2016
16:02:39
Ок щас до дома доеду гляну

Oleg
25.06.2016
10:37:31
может кому пригодится auto powerOfTwo = !((x-1)&x);

линейное время, битовая операция — максимально быстрая проверка

Мерлин
25.06.2016
11:57:27
https://habrahabr.ru/post/304072/

https://habrahabr.ru/post/304106/

Oleg
25.06.2016
18:18:27
чёт слабо понимаю чем это координально отличается от std.curl, зачем requests была написана? только чтобы интерфейс python библиотеки скопировать на D?

Dmitry
25.06.2016
18:24:36
Цурл будет помечен как деприкейтет вот вот

Уж очень он ненативный

Oleg
25.06.2016
18:25:34
оп, а откуда такая инфа? в std что-нибудь будет на его замену? reqests, как я понял, не метит в std.experimental

Dmitry
25.06.2016
18:26:15
На форуме тема была про это. Там же эта штука как замена предлагалась

Google
Oleg
25.06.2016
18:31:36
хм...

Eto
25.06.2016
20:00:17
https://habrahabr.ru/post/304106/
Кто-нибудь это счастье пробовал? Неблокирующее API там есть?

Oleg
25.06.2016
20:08:04
https://habrahabr.ru/post/304072/#comment_9674416

по всей видимости нет

Oleg
25.06.2016
20:39:11
ну 2018 это не вот вот

Dmitry
25.06.2016
20:42:20
К тому моменту выкинут. А депрекейтом вроде пометят уже скоро

Oleg
25.06.2016
20:42:40
в 2017

Dmitry
26.06.2016
13:56:44
Ну пол года осталось)

Не так уж и много)

Oleg
26.06.2016
23:34:24
может кого заинтересует https://code.dlang.org/packages/rc

Dmitry
27.06.2016
05:39:44
Чем от текущего отличается gc? Вроде он тоже ссылки считает

Oleg
27.06.2016
05:40:36
нет

gc в рантайме сканирует память

Dmitry
27.06.2016
05:41:20
А этот как работает?

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

Oleg
27.06.2016
05:42:14
если на неё не ведут ссылки из корня

корень это область памяти, доступная из кода

вся память выделяется через GC по умолчанию, поэтому он о всех участках знает

но вот этот stop-the-world это печальная ерунда, если нужна стабильная производительность

Google
Eto
27.06.2016
05:50:41
Есть опыт использования аллокаторов?

Oleg
27.06.2016
05:51:19
+/-

а что интересует?

Eto
27.06.2016
05:55:25
Интересно мнение в контексте данного обсуждения.

Dmitry
27.06.2016
06:19:40
У ГК какая то своя таблица есть где он помечает какая функция где что заняла? Как он понимает что память пора освободить?

Oleg
27.06.2016
06:24:53
GC знает о всей выделенной памяти есть root память — память, которая доступна из программы в момент выделения новой памяти GC анализирует необходимость уборки (сколько уже выделено, количество свободной и тд) если пора собирать мусор, GC начинает сканировать root и переходить по указателям, помечая доступную память затем он просматривает всю выделенную память и удаляет ту, что не помечена как доступная

Dmitry
27.06.2016
06:38:10
А подсчет ссылок как тогда работает? Он же вроде как медленный

Max
27.06.2016
07:38:20
А подсчет ссылок как тогда работает? Он же вроде как медленный
Если у тебя куча объектов - да, на парочку долгоживущих оверхеда почти не будет

Вроде же RC в стандартной библиотеке был, или я чего-то недопонял?

Max
27.06.2016
07:43:55
http://dlang.org/phobos/std_typecons.html#.RefCounted

Oleg
27.06.2016
07:45:18
о как

Oleg
27.06.2016
07:45:22
интересно)

но в целом я это делал для эксперимента, а не для результата)

Max
27.06.2016
07:52:11
Хотя там RC как-то странно через GC реализован

https://github.com/dlang/phobos/blob/d42eff4ff877dd154b103e89ee8198bd063ad232/std/typecons.d#L4742

Oleg
27.06.2016
08:16:29
addRange это не добавление в пул слежения за памятью

по сути так правильней делать

саму память GC не манажит, а вот по указателям проходит

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

Google
Pavel
27.06.2016
14:52:15
Скажите, кто-нибудь шарит в том как с сетевого интерфейса можно слизывать входящие данные параллельно основному потоку?

Если кто-то помнит, то я хотел сделать дублятор трафика, но с самого начала завис :)

Eto
27.06.2016
14:55:00
Открыть сокет и читать из него иногда?

Pavel
27.06.2016
14:55:59
Выглядит как-то слишком просто. А к чему именно открыть сокет?

Олег
27.06.2016
14:56:14
https://ru.wikipedia.org/wiki/Pcap ?

Pavel
27.06.2016
14:56:51
Да, именно типа такого. Но интересна какая-то D специфика, может есть уже готовые инструменты

Олег
27.06.2016
15:02:10
Я не встречал, но я думаю не сложно будет сделать биндинг к libpcap.

0x9d8e
27.06.2016
18:26:42
Народ, видел кто-нибудь либы для пробивания двух NAT'ов? Не важно на каком языке. Когда-то надо было, но думал, что невозможно. Оказалось возможно, да везде только описание принципа. Хочется на это в коде глянуть, да демку запустить.

Ruslan
27.06.2016
18:32:25
да

я делал

Admin
ERROR: S client not available

Ruslan
27.06.2016
18:32:33
в своей

могу объяснить

человеческим языком

0x9d8e
27.06.2016
18:33:19
Буду признателен

Ruslan
27.06.2016
18:33:22
https://github.com/RevenantX/LiteNetLib вот либа

а человеческим языком

если это UDP hole punching

есть сервер с белым айпи - допустим X есть два клиента за NAT (важно не симметричным) первый и второй клиенты шлют на сервер просто собственные IP адресы локальные и порт локальный на котором bind выполнил. формат данных не важен. Хоть бинарно хоть JSON сервер получает эти данные и заодно в receive приходит IP и Порт внешний и рассылает этим клиентам IP другого тоесть первому клиенту IP второго а второму наоборот. Клиенты получают эти данные и подключаются к IP адресам(точнее к паре Адрес:порт) которые выдал сервер там должно быть две штуки локальный и внешний готово

0x9d8e
27.06.2016
18:52:34
То есть, допустим, я слушаю на сервере порт, приходит коннект, передаёт нечто в духе "Привет, я zxI49-#35f45yfc4t*&*9ufujh4rUJHKJH3r, пожалуйста, если кто меня спросит, сообщи им мой ip:port.". Я ему "Ок" (ему же самому по идее до фонаря кто он там снаружи?), кладу этот его идентификатор куда-нибудь вместе с таймштампом и ip:port'ом. Приходит другой коннект, говорит "Здоарова, не знаешь ли где zxI49-#35f45yfc4t*&*9ufujh4rUJHKJH3r?" Я ему "Да вот же он: 123.45.67.89:666". Тогда он просто берёт и коннектится к 123.45.67.89:666. Или они обязательно должны оба друг к другу стучаться? Если tcp надо, то поверх udp?

Google
Мерлин
27.06.2016
18:52:35
Короче вот https://habrahabr.ru/post/304150/

Ruslan
27.06.2016
18:55:52
не

такая схема работает и через TCP

" Я ему "Да вот же он: "

тут когда сервер получает

он принимает локальный айпи и порт ( на случай если они в одной сетке сидят ) и в сокет на удп (или тцп) приходит внешний айпи и порт

ты второму отправляешь и внешний айпи с портом и внутренний

но просто в случае UDP удобнее иногда (в плане соединения)

единственное, что удобней пытаться сразу коннект кидать с обеих сторон

на случай если один из них за симметричным натом

ID по которому они хотят соедениться можно какой угодно придумать

а на этом коннекторе просто в dictionary класть

https://habrahabr.ru/post/304150/ в этой статье 1 лишний шаг

STUN сервер лишний

сигнальный сервер сам это всё и так узнает

0x9d8e
27.06.2016
19:10:21
Ага, то есть первый клиент (который хочет "сервером" быть) стучится ко внешнему серверу, вышеупомянутым образом, сервер его запоминает, закрывает соедиенение. Первый клиент открывает через тот-же порт, через который стучался к серверу сокет и начинает слушать. Второй клиент получает от сервера ip:port и коннектится туда. Так? А в случае с UDP можно ещё сразу с двух сторон. Может ещё для подтверждения сервер через небольшой промежуток времени сам попытаться подключиться к первому клиенту и в случае успеха сообщить ему, что всё у него прекрасно (а тот по таймауту бить тревогу, мол "не могу быть сервером, сделайте что-нибудь").

Правильно я понимаю?

Ruslan
27.06.2016
19:13:38
в целом да

просто в случае UDP они оба пытаются подрубиться к друг-другу и там нет понятия клиент/сервер. Хотя поидее так можно и в TCP

если им например в течении 10 секунд не удалось таким образом установить соединение

то дропать эту процедуру

Может ещё для подтверждения сервер через небольшой промежуток времени сам попытаться подключиться к первому клиенту и в случае успеха сообщить ему, что всё у него прекрасно (а тот по таймауту бить тревогу, мол "не могу быть сервером, сделайте что-нибудь").

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