Size: a a a

2020 February 07

λ

λоλторт in rust_offtopic
λоλторт
вот это хороший, годный, читаемый код (за исключением того, что он дико тормозит, но это понятно почему):
S.unfold readeWithBufferOf (16 * 1024, iHandle)
 & S.decodeUtf8
 & lines
 >>= splitColumns
 >>= chars
 & S.encodeUtf8
 & S.fold (S.writeWithBufferOf (16 * 1024) oHandle)
 & serially
where
 lines = S.splitOn (== '\n') (T.pack <$> SF.toList)
 splitColumns = S.fromList . fmap (<> "\n") . T.split (== ',')
 chars = S.fromList . T.unpack

прув ми вронг
S.repeatM (T.hGetLine iHandle)
 >>= splitColumns
 & S.fold (SF.drainBy $ T.hPutStr oHandle)
 & serially
 & S.drain
 & handleEof
where
 splitColumns = S.fromList . fmap (<> "\n") . T.split (== ',')

вот нетормозящий вариант
источник

AZ

Alex Zhukovsky in rust_offtopic
λоλторт
S.repeatM (T.hGetLine iHandle)
 >>= splitColumns
 & S.fold (SF.drainBy $ T.hPutStr oHandle)
 & serially
 & S.drain
 & handleEof
where
 splitColumns = S.fromList . fmap (<> "\n") . T.split (== ',')

вот нетормозящий вариант
сори, но кроме тебя 1.5 человека могут это прочитать
источник

AZ

Alex Zhukovsky in rust_offtopic
я так понимаю это conduit или что-то подобное
источник

λ

λоλторт in rust_offtopic
Alex Zhukovsky
сори, но кроме тебя 1.5 человека могут это прочитать
источник

λ

λоλторт in rust_offtopic
у него интерфейс как у fs2 в скале
источник

AZ

Alex Zhukovsky in rust_offtopic
я скалу еще меньше хаскеля знаю
источник

p

polunin.ai in rust_offtopic
А Раст после оптимизации преобразует ссылку на ссылку в просто ссылку?
источник

AK

Alexander Krivitskiy in rust_offtopic
Alex Zhukovsky
А что тут такого? У меня вон в сишарпе есть функции принимающае функции и возвращающая функции))
Ну обычно шаблонный код работающий с функциями в среднем выглядит как-то так. Не сказал бы что тут что-то запредельно сложное, но если впервые сталкиваешься, то посидеть, вкурить, придется.

https://github.com/larspensjo/SimpleSignal/blob/master/SimpleSignal.h
источник

λ

λоλторт in rust_offtopic
Alex Zhukovsky
я так понимаю это conduit или что-то подобное
1. делает бесконечный стрим, каждый из элементов которого вычитывает строку из файл хэндла
2. каждую строчку бьёт на колонки (в качестве инпута файл с CSV), в итоге имеем стрим, в котором каждый элемент — текст одной колонки
3. сворачивает стрим записывая его содержимое в выходной файл
4. указывает, что стрим должен отработать последовательно
5. делает из стрима IO ()
6. ловит эксепшн, который говорит о том, что во входном файле закончились строки
источник

AZ

Alex Zhukovsky in rust_offtopic
λоλторт
1. делает бесконечный стрим, каждый из элементов которого вычитывает строку из файл хэндла
2. каждую строчку бьёт на колонки (в качестве инпута файл с CSV), в итоге имеем стрим, в котором каждый элемент — текст одной колонки
3. сворачивает стрим записывая его содержимое в выходной файл
4. указывает, что стрим должен отработать последовательно
5. делает из стрима IO ()
6. ловит эксепшн, который говорит о том, что во входном файле закончились строки
ну так-то да, общий смсыл понять можно
источник

AK

Alexander Krivitskiy in rust_offtopic
Да, тут человек скучал, решил сломать лайфтаймы. Можешь порыться в ишью, найдешь другие не менее интересные хаки.
источник

AZ

Alex Zhukovsky in rust_offtopic
ну тут дич
источник

AZ

Alex Zhukovsky in rust_offtopic
схера ли &'a u64 становится &'static
источник

p

polunin.ai in rust_offtopic
Why not
источник

AZ

Alex Zhukovsky in rust_offtopic
trait Object {
   type Output;
}

impl<T: ?Sized> Object for T {
   type Output = &'static u64;
}

fn foo<T: ?Sized>(x: <T as Object>::Output) -> &'static u64 {
   x
}

fn transmute_lifetime<'b>(x: &'static u64) -> &'b u64 {
   foo::<dyn Object<Output=&'static u64>>(x)
}

// And yes this is a genuine `transmute_lifetime`!
fn get_dangling<'a>() -> &'a u64 {
   let x = 0;
   transmute_lifetime(&x)
}

fn main() {
   let r = get_dangling();
   println!("{}", r);
}
источник

AZ

Alex Zhukovsky in rust_offtopic
так не работает
источник

AZ

Alex Zhukovsky in rust_offtopic
fn transmute_lifetime<'a, 'b>(x: &'a u64) -> &'b u64 {
   foo::<dyn Object<Output=&'a u64>>(x)
}
источник

AZ

Alex Zhukovsky in rust_offtopic
а так -да
источник

AZ

Alex Zhukovsky in rust_offtopic
то есть 'static не работает, а 'a работает, при этом он передается как 'static
источник

AZ

Alex Zhukovsky in rust_offtopic
короч нахуй
источник