Anton
нужно было переливать данные из оракла в постгрес, только у го обертка под либы оракла завелась без танцев с бубном
doc
а на расте у тебя был шанс написать свою!
Evgenii
doc
Loo
Loo
вот это топчик
Anton
Не юзал, по описанию супер пупер, живу на Postgres устраивает жду пока завезут master-master
Anton
искаропки
Евгений
О, нагуглил
Quet
Quet
фактически роль молодого поколения выполняет стек
Evgenii
а вы знали что раст на 31 месте в последнем тиобе
Evgenii
а го на 14
Alexander
Anton
A64m
тиобе это ерунда
Alexander
т.е. это какой-то принцип того, что большинство значений умирает молодыми доведённый до абсурда..
Евгений
Quet
Alexander
т.е. фактически ничего?
Alexander
в более обычных языках это обзывалось unbox-ингом и вроде тоже часто делалось, где можно
Quet
почему ничего? далеко не все переменные переживают функцию в которой они используются
A64m
ну не то чтобы ничего, но на "фактически нулевое поколение" это не тянет
A64m
тем более, насколько я понимаю, го не трансформирует код специально чтоб толку от этого было больше (как ghc, например)
Alexander
ну для большой пачки задач это может сработать
Alexander
особенно если структурки простые и на стек хорошо ложатся
Dårk
советую срочно пересмотреть эргономику своего рабочего пространства
Dårk
(и переехать поближе к холодильнику с чайником)
Alex
у меня вообще зал совмещенный с кухней
Alex
можно ходить туда сюда и трущить
кана
stalkerg
интересно, есть ли Раст тусовка в Японии? А то одни рубисты да явисты....
stalkerg
а и дотнетчики
Oleg
все чморят го, т.к. ок он слишком быстро набрал популярность. Я прям уверен, что если blodwen с такой же скоростью начал всюду заменять старое скриптовое говно на серверах, его так же чморили
stalkerg
stalkerg
и отчасти напоминает ёж с ужом
Anonymous
Anonymous
😉
Dårk
pub(crate) и здраствуй джавка
Сережа
//fn get_processor(req: &[u8]) -> &Fn(&mut Vec<u8>)
pub fn process(single_req: Option<&[u8]>, accum: &mut Vec<u8>) {
let cb = if let Some(req) = single_req {
get_processor(req)
} else {
//get_processor(accum.as_slice())
unsafe {
let i_guarantee_that_i_dont_need_vec_content_after_return = slice::from_raw_parts(accum.as_ptr(), accum.len());
get_processor(i_guarantee_that_i_dont_need_vec_content_after_return)
}
};
cb(accum);
}
Посоны, что я делаю не так, я понимаю что вывод лайфтаймов в случае get_processor(accum.as_slice()) привязывает ссылку accum.as_slice() к cb, т.е. пока есть cb, есть и accum.as_slice() и потом я не могу вызвать cb(accum), т.к. уже есть ссылка accum.as_slice().
Вот в го я просто беру и пишу программу, наверное потому что я понимаю го-вей, а раст-вей не понимаю.
Маjко
Я не понимаю твой пример
Маjко
Что такое get_processor и что она должна вернуть
Konstantin
ой вей
Маjко
Напиши полноценный пример на плейграунд, тогда подскажу как исправить
Маjко
Если там выбор статической функции в зависимости от контекста req — там не нужна ссылка перед Fn
Маjко
Если там возвращается замыкание — его надо боксить, ссылку нельзя вернуть на объект на стеке функции (очевидно)
Маjко
Ну или возвращать по значению через impl Trait
Сережа
а возвращать по значению только через обобщенную функцию что-ли?
Сережа
ты ответил на мой вопрос что я делаю не так, спасибо
Сережа
хотя нет, даже если я буду возвращать бокс или по значению, оно будет привязано к лайфтайму ссылки accum.slice()
asteglor
Nik
Oleg
Для случая с None я бы просто взял ()
Vladimir
Vladimir
Ещё раз, у тебя есть входные данные, которые могут быть как слайсом, так и вектором?
Ты хочешь, в случае если размер ответа меньше 1024 писать в то что есть, если больше использовать вектор?
Сережа
да ладно забей, вектор мне в любом случае нужен, я в нем хочу ответ формировать
Сережа
вопрос был в том как компилятор побороть без unsafe
Vladimir
Vladimir
Если вектор в любом случае нужен, но ты всё ещё хочешь переиспользовать данные
Vladimir
То выходит и запрос у тебя в векторе?
Сережа
это мне что еще и про архитектуру думать?
Vladimir
Нет, просто не быть гофером
Vladimir
Предлагаю тебе всё по значению передавать
Vladimir
Хули ты страдаешь?
Vladimir
Вот например у Токио кодеков аналогичная твоей ситуации, есть некий входной буфер, его обрабатывают, помещают в буффер кодека, а дальше из буфер кодека генерят сообщение. Да это не зирокопи, но при этом модульность.
Сережа
это не передавать по значению, а клонировать и передавать, что-ли?
Vladimir
Зачем клонировать?
Vladimir
У них есть мутабельный буфер, представляющий собой буфер входного потока
Vladimir
Ты из него читаешь байты, и говоришь сколько прочитал
Vladimir
Дальше когда начиталось нужное количество, ты возвращаешься объект новый, который сам сформировал
Сережа
http://play.integer32.com/?gist=c5ca9dfc954e930c1286aa7c8170f977&version=stable
вот что-то такое я хотел, но как-то криво сделал