Mannaro
Хм, стартанул несколько тредов, везде функция ссылается на одно и то же место. Значит, все-такие не копируется?
Sheldhur
ку
Sheldhur
https://pastebin.com/fAAGUrQM
Sheldhur
подскажите, чё оно от меня хочет?
adam
лечение
Sheldhur
ы?
Loo
Ты читал текст ошибки компиляции?
Sheldhur
да
Loo
Что там написано в ожидаемом и найденном типе?
Sheldhur
объект и ссылка
Loo
Как по твоему, конструктор Json принимает владение объектом или его заимствует?
Sheldhur
принимает
Sheldhur
без ссылки cannot move out of borrowed content
Loo
Представь себе случай когда твой запрос дёрнули 2 раза,и в первый раз в функцию Json передалось владение и твой AccountsData уничтожится в конце
Sheldhur
ну я понял, как быть то
Loo
ну я понял, как быть то
1) Можешь попытаться .clone 2) Можешь через response builder и .raw_body передать курсор на данные, тогда только их придётся вручную сериализовывать
Sheldhur
СЛОЖНА
Sheldhur
Sheldhur
Ilya
Mannaro
:)
Mannaro
struct MyStruct {
name: fn() -> String,
}
impl MyStruct {
fn check_it(&self) {
let f = self.handler; // fn() -> String
thread::spawn(move || {
let answer = f();
// юзаем answer
});
}
}
Товарищи, а вот тут (если я правильно понимаю), то у функции реализован трейт Copy, это значит, что внутри треда уже будет копия этой функции? И даже если структура живет меньше треда, то все будет ок? :)
Mannaro
Хм, стартанул несколько тредов, везде функция ссылается на одно и то же место. Значит, все-такие не копируется?
Loo
Anton
Mannaro
Anton
и что выводит? =)
Loo
Mannaro
Опа, дропнули структуру
0x55dd10819bc0: Ыы, работаем!
0x55dd10819bc0: Ыы, работаем!
Nikita
Приветствую
Mannaro
это из разных тредов выводы
Nikita
А есть математическиe библиотеки для Раста, схожие по функционалу с C++ шным Alglib
Anton
лол
Ну с вопросом выведет сигнатуру функции не? она будет одинакова
Mannaro
Хм, не знал. А адрес как-то можно посмотреть?
Mannaro
Вывожу даже как f as *const ()
Mannaro
адрес одинаковый
Mannaro
Anton
Ну тоже самое
Anton
Не нашел описание поведения, по ссылке - которую дал Арсен написано
Anton
Plain function pointers are obtained by casting either plain functions, or closures that don't capture an environment
Anton
Поскольку у функции нет внешних зависимостей это так называемая чистая функция
Anton
которая не меняет глобальный стейт
Anton
Как следствие, компилятор наверно не копирует - её а ссылается на один и тот же поинтер
Anton
так как это не противоречит thread safety
Mannaro
то есть, есди бы были внешние зависимости, то компилятор бы ее скопировал?)
Anton
А вот хз скорее всего тоже нет
Anton
Поскольку у тебя захват - ты должен описать что хочешь - и если ты внешние переменные move - то больше одного раза тебе не даст её указать
Anton
Если копия - то она модифицируется внутри функции опять же не меняя внешний стейт
Anton
ну это предположение - раз все молчат
Anonymous
fn - это тупо указатель на функцию. У него не может быть окружения.
Fn, FnMut, FnOne - это уже может быть замыкание.
Anonymous
https://doc.rust-lang.org/std/primitive.fn.html
Anonymous
> In addition, function pointers of any signature, ABI, or safety are Copy
Anonymous
Указатель тупо копируется в каждый тред
Anton
Но трейты можно юзать тольько в дженериках же
Anton
Fn/FnOne ..
Anonymous
Так у него там fn а не Fn
Anonymous
Если поменяешь - не скомпилится
Anton
Ну я про то что в внешними зависимостями получается не скомпилит
Anton
Anton
Anton
Спасибо
Aleksey
ЧСЗХ?
https://play.rust-lang.org/?gist=d8f5159514f8ade6edcc12f5d0867ee2&version=stable
Nikita
Nikita
Anonymous
ЧСЗХ?
https://play.rust-lang.org/?gist=d8f5159514f8ade6edcc12f5d0867ee2&version=stable
fn main() {
macro_rules! bar(( ) => {
foo ! ( moo ) ; println ! ( "Hello stackoverflow" ) ; });
macro_rules! moo(( ) => {
foo ! ( moo ) ; println ! ( "Hello stackoverflow" ) ; });
::io::_print(::std::fmt::Arguments::new_v1(&["Hello stackoverflow\n"],
&match () { () => [], }));
macro_rules! moo(( ) => {
foo ! ( moo ) ; println ! ( "Hello stackoverflow" ) ; });
::io::_print(::std::fmt::Arguments::new_v1(&["Hello stackoverflow\n"],
&match () { () => [], }));
}
kitsu
D:
Aleksey
Sergey
Nikita
Anton
Совы плодятся
Loo
извините не удержался
Антон