Anton
нужно было переливать данные из оракла в постгрес, только у го обертка под либы оракла завелась без танцев с бубном
doc
а на расте у тебя был шанс написать свою!
Evgenii
а на расте у тебя был шанс написать свою!
опиши язык одним предложением
doc
опиши язык одним предложением
самореализация в стол
Anton
а на расте у тебя был шанс написать свою!
ненавижу оркл, еще в его либах ковырятся
Loo
вот это топчик
Anton
Не юзал, по описанию супер пупер, живу на Postgres устраивает жду пока завезут master-master
Anton
искаропки
A64m
А гц разве не 80'ые?
с поколениями - да. а в го с поколениями разве?
պլհկ
и чего даже их коммуникации до 80х изобретены были?
https://en.m.wikipedia.org/wiki/Communicating_sequential_processes
A64m
и чего даже их коммуникации до 80х изобретены были?
вроде нет, это все происходит из какого-то Хоаровского пейпера по CSP 77-го года
Евгений
с поколениями - да. а в го с поколениями разве?
А что такое gc с поколениями? Порой у меня ощущение, что ты не человек, а осознавшая себя экциклопедия по computer science
Евгений
О, нагуглил
Quet
с поколениями - да. а в го с поколениями разве?
нет, но в нем это не так актуально
Quet
фактически роль молодого поколения выполняет стек
Evgenii
а вы знали что раст на 31 месте в последнем тиобе
Evgenii
а го на 14
A64m
тиобе это ерунда
Alexander
фактически роль молодого поколения выполняет стек
т.е. получается, что как только мы возращаемся из метода, то возвращаемое значение и все на что оно ссылается попадает в heap?
Alexander
т.е. это какой-то принцип того, что большинство значений умирает молодыми доведённый до абсурда..
Евгений
а вы знали что раст на 31 месте в последнем тиобе
Delphi на 9'ом месте. Правдоподобно (нет)
Quet
т.е. получается, что как только мы возращаемся из метода, то возвращаемое значение и все на что оно ссылается попадает в heap?
там компилятор делает escape анализ и если безопасно можно держать значение на стеке то оно держится там
Alexander
т.е. фактически ничего?
Alexander
в более обычных языках это обзывалось unbox-ингом и вроде тоже часто делалось, где можно
Quet
почему ничего? далеко не все переменные переживают функцию в которой они используются
A64m
ну не то чтобы ничего, но на "фактически нулевое поколение" это не тянет
A64m
тем более, насколько я понимаю, го не трансформирует код специально чтоб толку от этого было больше (как ghc, например)
Alexander
ну для большой пачки задач это может сработать
Alexander
особенно если структурки простые и на стек хорошо ложатся
Dårk
Я не один такой?
просто у тебя комп не на кухне у дивана
Dårk
советую срочно пересмотреть эргономику своего рабочего пространства
Dårk
(и переехать поближе к холодильнику с чайником)
Alex
у меня вообще зал совмещенный с кухней
Alex
можно ходить туда сюда и трущить
кана
Даже рубисты чморят го
stalkerg
интересно, есть ли Раст тусовка в Японии? А то одни рубисты да явисты....
stalkerg
а и дотнетчики
Oleg
Даже рубисты чморят го
все чморят го, т.к. ок он слишком быстро набрал популярность. Я прям уверен, что если blodwen с такой же скоростью начал всюду заменять старое скриптовое говно на серверах, его так же чморили
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()
Oleg
хотя нет, даже если я буду возвращать бокс или по значению, оно будет привязано к лайфтайму ссылки accum.slice()
а ты не рассматривал возможность вместо передаяи Option сделать какой-то trait? Я то сам нуб, но я бы определил trait Processable{ process_req(& self, accum: & mut Vec<u8>) } . Соответственно process<T: Processable>(req: T, accum: &mut Vec<u8> А на самом деле и process внутрь какого-то нибудь impl засунул бы
Oleg
Для случая с None я бы просто взял ()
Vladimir
Ещё раз, у тебя есть входные данные, которые могут быть как слайсом, так и вектором? Ты хочешь, в случае если размер ответа меньше 1024 писать в то что есть, если больше использовать вектор?
Сережа
да ладно забей, вектор мне в любом случае нужен, я в нем хочу ответ формировать
Сережа
вопрос был в том как компилятор побороть без unsafe
Vladimir
Если вектор в любом случае нужен, но ты всё ещё хочешь переиспользовать данные
Vladimir
То выходит и запрос у тебя в векторе?
Vladimir
вопрос был в том как компилятор побороть без unsafe
Не возвращать заимствование которое протухнет после выполнения метода?
Сережа
это мне что еще и про архитектуру думать?
Vladimir
Нет, просто не быть гофером
Vladimir
Предлагаю тебе всё по значению передавать
Vladimir
Хули ты страдаешь?
Vladimir
Вот например у Токио кодеков аналогичная твоей ситуации, есть некий входной буфер, его обрабатывают, помещают в буффер кодека, а дальше из буфер кодека генерят сообщение. Да это не зирокопи, но при этом модульность.
Сережа
это не передавать по значению, а клонировать и передавать, что-ли?
Vladimir
Зачем клонировать?
Vladimir
У них есть мутабельный буфер, представляющий собой буфер входного потока
Vladimir
Ты из него читаешь байты, и говоришь сколько прочитал
Vladimir
Дальше когда начиталось нужное количество, ты возвращаешься объект новый, который сам сформировал
Сережа
http://play.integer32.com/?gist=c5ca9dfc954e930c1286aa7c8170f977&version=stable вот что-то такое я хотел, но как-то криво сделал