struct Api {
key: String
}
struct ApiPart<'a>{
api: &'a Api
}
impl Api {
pub fn part<'a>(&'a self) -> ApiPart<'a> {
ApiPart {api: self}
}
}
fn new(api_key: *const String) -> Self {
let api_key = unsafe { &*api_key };
return Self {
api_key,
};
}
fn new(api_key: impl Into<String>) -> Self {
let api_key = api_key.into();
return Self {
api_key,
};
}
let res = self.get_index_and_file(key);
if res.is_none() {
return None;
}
let (file, info) = unsafe { res.unwrap_unchecked() };
let Some((file,info)) = self.get_index_and_file(key) else {
return None;
};
let mut buf = vec![0; info.0 as usize];
file.read().unwrap().read_at(info.1, &mut buf).expect("failed to read");
return Some(BinValue::new(buf.as_slice()));
Если оставить код таким, то через 10 400 000 вызовов этой функции с заполнение буфера 100-байтовыми значениями утечёт примерно 1 ГБ памяти
нынче развелось довольно много
НО это неудобно и не правильно
с Докером пока единственная мысль это собирать образ локально и его docker push
сразу скажу я в раст пришёл после разработки на скриптовых языках, там весь исходный код летит на ВДС
fn main() {
let items = [1,2];
let mut iter = items.into_iter().map(|x|5+x);
let a = iter.next().unwrap();
let b = iter.next().unwrap();
println!("{a} {b}");
}
fn main() {
let items = [1,2];
let [a,b] = items.map(|x|5+x);
println!("{a} {b}");
}
use itertools::Itertools; // 0.9.0
fn main() {
let items = [1,2];
let (a,b) = items.iter().map(|x|5+x).next_tuple().unwrap();
println!("{a} {b}");
}
Можно ли увидеть аналог пример кода на c# java с этим типом?
А еще, вот к примеру я придумал, почему нету(может этот тип и есть), К примеру в c# есть понятие Boxing типов при касте через object
int a=(int)(object)1;
Что довольно дорого и долго. С выделением памяти в куче.
А почему нету Типа, который ни чего не упаковывает, а просто передает двойное машинной слово? Ведь это прекрасно покроет все простые структурные типы, int char double., Enum, кортежи в 8 байт. А все остальное уже как объект.
Ведь нет какой-то волшебной операции вернуть владение
pushq %rbx
movq %rdi, %rbx
movq __rust_no_alloc_shim_is_unstable@GOTPCREL(%rip), %rax
movzbl (%rax), %eax
movl $5, %edi
movl $1, %esi
callq *__rust_alloc@GOTPCREL(%rip)
testq %rax, %rax
je .LBB10_1
movb $114, 4(%rax)
movl $1701736041, (%rax)
movq %rax, (%rbx)
movq $5, 8(%rbx)
movq $5, 16(%rbx)
popq %rbx
retq
pushq %r14
pushq %rbx
pushq %rax
movq __rust_no_alloc_shim_is_unstable@GOTPCREL(%rip), %r14
movzbl (%r14), %eax
movl $5, %edi
movl $1, %esi
callq *__rust_alloc@GOTPCREL(%rip)
testq %rax, %rax
je .LBB11_6
movq %rax, %rbx
movb $114, 4(%rax)
movl $1701736041, (%rax)
movzbl (%r14), %eax
movl $24, %edi
movl $8, %esi
callq *__rust_alloc@GOTPCREL(%rip)
testq %rax, %rax
je .LBB11_2
movq %rbx, (%rax)
movq $5, 8(%rax)
movq $5, 16(%rax)
addq $8, %rsp
popq %rbx
popq %r14
retq
fn main() {
let thread = thread::spawn(|| {
loop {
process();
thread::sleep(Duration::from_secs(3));
}
});
thread.join().unwrap(); // но так как у нас в потоке будет loop - дальше выполнение не пойдёт никогда
tauri::Builder::default()
.invoke_handler(tauri::generate_handler![greet])
.run(tauri::generate_context!())
.expect("error while running tauri application");
}
FloatStruct::<f32>::new()
но вместо FloatStruct<f32>
ты пытаешься вернуть мне FloatStruct<f64>
impl<T: Clone + Into<JsValue>> MyIntoJsValue for T {
fn into_jsvalue(&self) -> JsValue{
self.clone().into()
}
}
В wasm-bindgen::JsValue Нету impl From for JsValue
impl From<Element> for JsValue
Не работает. Работает только с &element
Тут тоже подвоха нет. get_element_by_id() возвращает Option<Element>, а не Option<&Element>
Но эти поганые макросы наносят уроны документации, и не видно какие именно есть поля и функции у JsValue.