Alex
Ну там же копировали libc
что ты имеешь ввиду?
Loyd
То и имею: весь std::net и std::io — тонкие обёртки над сисколами в стиле libc
Loyd
лол, глянул что повыше уровнем — ноду, там тоже нет connect-а с таймаутом
Мерль
https://github.com/yberreby/rust-tcp-connection-timeout/blob/master/src/lib.rs
Anonymous
я помню на си убивал че-то используя системный вызов alarm(время в секундах). Но это был дикий костыль конечно, но так как надо было временно, можно было и покостылять
Alex
а возможность грохнуть свой трэд в раст добавить планируют?
Alex
т.е заспавнил и убил если надо
Sherzod
а возможность грохнуть свой трэд в раст добавить планируют?
есть фрейморки где это делать можно безболезнено? Ни в джаве, ни в дотнетах такого нет. В обоих случаях пишут что Thread.Kill делать не рекомендуется
Dmitry
а есть в rust'е что-нибудь подобное: public interface RangeMap<K extends Comparable,V> A mapping from disjoint nonempty ranges to non-null values. Queries look up the value associated with the range (if any) that contains a specified key. ?
Dmitry
чтоб потом map.put(1..5, "a") map.put(6..10, "b") и map.get(3) == "a"
Ilia
есть фрейморки где это делать можно безболезнено? Ни в джаве, ни в дотнетах такого нет. В обоих случаях пишут что Thread.Kill делать не рекомендуется
Я помню свою первую лабу в универе, когда решил распаралелить, а огреб еще больше за Kill. Дорогая операция это очень.
Dmitry
про 10 минут сильно сомневаюсь
Oleg
ну не в расте у меня отнимало точно 10 минут поверх TreeMap а
Dmitry
хз. мне это видится как не малое количество всяких аспектов, что за 10 минут не накрутить
Dmitry
склеивать ренджи, выкусывать куски..
Маjко
а возможность грохнуть свой трэд в раст добавить планируют?
Есть pthread_cancel в libc, но это не очень хорошая идея. Если тебе нужно завершить поток — сделай сигнальный oneshot канал для оповещение потока о том, что ему стоит умереть
Маjко
there's always a crate for it
Маjко
Про трединг винды не знаю ничего совсем, в 10ке может и есть с WSL
Dmitry
https://github.com/jneem/range-map
pub fn get(&self, x: T) -> Option<&V> { self.elts // The unwrap is ok because Range<T>::partial_cmp(&T) never returns None. .binary_search_by(|r| r.0.partial_cmp(&x).unwrap())
Dmitry
:(
Dmitry
/// Runs in `O(log n)` time, where `n` is the number of mapped ranges.
Sherzod
pthread для винды есть, но есть ли биндинги под раст хз, нужно гуглить
Dmitry
magic.gif
Sherzod
pthread для винды есть, но есть ли биндинги под раст хз, нужно гуглить
погуглил я немножко... лучше пишите свои мегапараллельщину на чем нибудь другом :) на ерланге, например :P
Dmitry
Маjко
Ты что-то имеешь против pthread?
Маjко
ty
Sherzod
ty
ничего против не имею. И против раста ничего против не имею. Все равно он не лучше чем до-диез. Но проблема в том, что либ для pthread я не нашел. наткнулся на древнегреческие pthread онли линух. И еще там posix либы нашел, но вродь тоже 2015 года, и под линуз
Oleg
magic.gif
но ведь... O(log n) - это оптимум, если о типе ключа ничего больше не известно...
Sherzod
Вот такая еще есть либа, для сейфодрочеров :) https://github.com/nix-rust/nix
Loo
https://github.com/afshinm/juggernaut
Oleg
ну известно же что это рэндж
Да, известно, что это рэндж чего?
Oleg
Например, это рэндж рациональных чисел, дай свою стратегию
Евгений
Если ключ не является ренджем, то и log(n) сложно достичь
Dmitry
ну в моем случае это рендж uint'а
Dmitry
да на самом деле вы правы тут все, а я заморачиваюсь. log n это не плохо.
Dmitry
ну будет там 7-10 сравнений, да и похрен.
Евгений
ну в моем случае это рендж uint'а
Ну ты можешь потратить много памяти и проиндексировать всё своими uint'ами. Возможно можно придумать под твои задачи более оптимальную структуру данных, но надо характер ключа поподробнее знать.
Евгений
Мы знаем, что ключ - рэндж
Не, я о том, что если бы не было порядка, то поиск занимал мы O(n) в худшем случае. Поэтому замечание "но у меня же рендж" такое..
Dmitry
ну как нету. есть множество uint'ов , оно напилено (не полностью) на непересекающиеся отрезки которые мапятся в определенные значения
Dmitry
ну я и говорю что log n это не так уж и плохо
Oleg
Ну в общем случае да, можно было бы задавать параметром типа бэкенд мэпу и искать со сложностью, предоставляемой ей
Oleg
Тогда модно было бы до константы снизить для отдельных типов
Oleg
Ну или до bitlen
Oleg
Нет
Oleg
О каких хешах мы говорим, если нам необходим порядок
Oleg
это что угодно, имеющее интерфейс ordered map . Может быть и BTree и ATree, а может быть и prefix tree
Oleg
Вот в последнем случае асимптотика лучше, чем O(log n * bitlen(t))
Oleg
А bitlen(t) всегда неявно включается в асимтотику
Oleg
prefix tree
Oleg
log (n * |compare t|) только в случае, если нам о типе не известно ничего, кроме того, что он упорядочен
Oleg
Да блин, я говорю, что для некоторых типов есть структуры, которые гарантируют O(1) worst case и порядок
Anonymous
В массиве по индексу )
Oleg
P T R R E E F E I X —------ TRIE ______
Anonymous
И в мапах O(1) не в worst case
Oleg
Да
Oleg
Нет
Oleg
Просто ты прочитал абзац, как в некоторых языках персистентные хэшмапы на нём реализуют
Oleg
IntMap\IntSet в хачкеле
Anonymous
Олег хитрец, у radix трудоемкость не O(1)
Oleg
Олег хитрец, у radix трудоемкость не O(1)
я же блин сказал, что O(bitlen(t))
Anonymous
Ну тогда ок)
Oleg
но bitlen(t) неявно включается и в вычисление хеша и в сравнение
Oleg
Так что хэшмапа и treemap не менее зависят от него в своих асимптотиках
Anonymous
Ну не обязательно в сравнении его юзать)
Oleg
Ну не обязательно в сравнении его юзать)
Не очень понял. Есть алгоритмы, которым не обязательно целиком читать значение элементов, чтобы работать?
Oleg
вот эту фразу я не могу понять. В какой мапе ключ - не конкретное значение? С другой стороны если ты в хешмапу складываешь строки неизвестной длины, какова будет сложность операций с ней?
Oleg
Для того, чтобы вычислить хеш тебе придётся пробежаться по строке. Если мы говорим не у кукушкиной или подобной мапе, а о хеш-таблице со связными списками, тебе, возможно, придётся пробегаться по строчкам для сравнения при коллизии. Так что bitlen(t), который для стрингов ты в лучшем случае можешь мажорировать, очень даже входит в асимптотику
Oleg
В случае сравнения тебе возможно не придётся пробегаться по всей строке, если максимальный общий префикс небольшой длины. Однако возможно тебе придётся пробегаться по строке несколько раз для нескольких сравнений. В случае префиксной мапы, тебе придётся пробежаться по твой строке не более одного раза, и, возможно, не целиком, если максимальный общий префикс будет небольшой длины
Oleg
Не обязательно бежать по строке, может у неё внутри уже вычисленный хэш)
1. Хотя бы раз, когда-то там в самом начале, тебе нужно по ней пробежаться. 2. Если это хэштаблица со связными списками, тебе нужно пробегаться для сравнения при коллизии
Alex
так так так, что почитать чтобы понимать как считать сложность алгоритма?