Взглянем:
use std::convert::{From, TryFrom};
fn main() {
let size: usize = 42;
let good: u128 = u128::try_from(size).unwrap(); // works fine
let bad: u128 = u128::from(size); // doesn't compile!
}
Насколько я знаю, usize — целочисленный тип, и они никогда не превышают 128 бит. Поэтому я не вижу возможности, чтобы преобразование usize -> u128 могло потерпеть неудачу. Итак, почему u128 не реализует From<usize>?
Обновление: документация Rust говорит :
Из T для U подразумевается In U для T
Хотя usize -> u128 выглядит нормально, u128 -> usize нет. Хорошо, но почему вместо usize не реализовано Into<u128>?
usize— размер указателя. Теоретически у вас может быть система с адресным пространством, требующим более 128 бит для адресации... когда-нибудь. Проверка на будущее? ;-) - person T.J. Crowder   schedule 10.07.2020usize -> u128, иu128 <- usizeподходят. Он ничего не говорит оu128 -> usize. - person mcarton   schedule 10.07.2020