Sherzod
Вообще за троллинг я обеими руками за, но хоть понять бы почему :)
Loo
мде
Loo
պլհկ
меня плз
Anton
Скажите, сколько места занимает пустая строка в расте?
Anton
Я знаю, что в java это около 40 байт
Safort
big
как и Vec.
- указатель на данные
- capacity
- len
big
это что касается String
big
&str - ближе к slice. Это означает что он состоит из указателя на данные, и длинны.
big
все это величиной в слово. Для 64 битной машины это соответсвенно 8 байт.
Anonymous
std::mem::size_of::<&str😠) := 16
Судзумия
Anonymous
24
Судзумия
Anonymous
а std::mem::size_of_val("") := 0
Anton
Спасибо!
Судзумия
big
Anonymous
почему
big
он считает его не как &str
big
а именно как str
Anonymous
size_of_val берет референс
Anonymous
и считает значение на которое он поинтит
big
::std::mem::size_of_val("ab") == 2
big
дада
Bugworm
молча
Anonymous
по TRPL
Safort
В муках.
Anonymous
когда еще второго издания не было
Anonymous
которое значительно проще
Судзумия
Пишешь программы и учишься
Sherzod
Я по переводу
big
Пишешь программы и учишься
удваиваю. TRPL хорошо конечно, можешь даже все понять, но как только начнеш писать проги можно и всосать
Sherzod
rustbyexample
big
ща те накидают
Michael
для начала начал книгу читать, а вот скоро начну утилиты писать
Michael
там смотри что-то и по серьёзней будет
Safort
Ты любишь Go?
Anonymous
контрибьють в существующие проекты
big
я обожаю CHIP-8. Это виртуальная машина из бородатых годов. Она не очень большая, но реализовывая ее можно поработать с многими конструкциями языка. А так же звуком, графикой, файлами, итд
big
есть куча реализаций на любой вкус и цвет, на любом языке
Alex
я на кодеворз лабаю понемногу
Vladimir
でゲソ
&code
Vladimir
::std::mem::size_of_val("ab") == 2
круто 2, это работает даже для боксед строк
use std::ops::Deref;
fn main() {
let b = "sadasdsaфывd".to_owned().into_boxed_str();
let c = "sadasdsaфывd".to_owned();
println!("{} = {}", ::std::mem::size_of_val(b.deref()),::std::mem::size_of_val(c.deref()) );
}
Vladimir
забавно 3
есть два кода
use std::ops::Deref;
pub fn size_str(b:String) -> usize {
::std::mem::size_of_val(b.deref())
}
pub fn size_str2(b:String) -> usize
{
b.bytes().count()
}
В случае с овнед выхлоп, у первого лучше
_ZN7example8size_str17h24e0ccccbcca733dE:
push rbp
mov rbp, rsp
push rbx
push rax
mov rsi, qword ptr [rdi + 8]
mov rbx, qword ptr [rdi + 16]
test rsi, rsi
je .LBB0_2
mov rdi, qword ptr [rdi]
mov edx, 1
call __rust_dealloc@PLT
.LBB0_2:
mov rax, rbx
add rsp, 8
pop rbx
pop rbp
ret
_ZN7example9size_str217hafcd86f6ec7f7d28E:
push rbp
mov rbp, rsp
push rbx
sub rsp, 24
mov rax, qword ptr [rdi + 16]
mov qword ptr [rbp - 16], rax
movups xmm0, xmmword ptr [rdi]
movaps xmmword ptr [rbp - 32], xmm0
mov rsi, qword ptr [rbp - 24]
mov rbx, qword ptr [rbp - 16]
test rsi, rsi
je .LBB1_2
mov rdi, qword ptr [rbp - 32]
mov edx, 1
call __rust_dealloc@PLT
.LBB1_2:
mov rax, rbx
add rsp, 24
pop rbx
pop rbp
ret
Vladimir
в случае с реф одинаковый
_ZN7example8size_str17h425183a597cfe0d2E:
push rbp
mov rbp, rsp
mov rax, qword ptr [rdi + 16]
pop rbp
ret
_ZN7example9size_str217habc4fe76582c871bE:
push rbp
mov rbp, rsp
mov rax, qword ptr [rdi + 16]
pop rbp
ret
でゲソ
А пример с реф где?
でゲソ
Дереф отдаст овнаж?
Vladimir
С реф, это когда ссылку перед стрингом добавляешь
Vladimir
Дереф, как трейт, возвращает только ссылку
Vladimir
А вот дереф как оператор возвращает овнед
big
забавно, эту simd хрень rust перестает пихать при -C panic=abort
big
(код size_str2 становится = size_str1)
Vladimir
Ну вот, чёт он плохо оптимизирует паники
big
Но я вот пока не могу смекнуть, че это за код
Vladimir
Я не шарю в симдах вообще
big
походу там обычная копия )
Vladimir
Может инициализация какая-то осталась
Vladimir
Не оптимизированной
big
т.е. берется со стека String и копируется в свой стек фрейм )
big
там есть референс удобный
Loo
https://github.com/jq-rs/mles-rs
Loo
https://github.com/hawkw
Loo
нашёл вам сочную
Loo
Kerrigan
> witch
это точно не трап?
Kerrigan
вроде по описанию всё норм
Маjко
պլհկ
Loo
она ось там писала
Loo
ступид ос
Loo
а что сделал ты
Loo
тупой немощный неандерталец
Loo
Loo
ту претти век
պլհկ
Вставил мд5 в лмдб