كيف يتعامل Rust مع الأعداد الصحيحة 128 بت `i128` على نظام 64 بت؟ هل يؤثر ذلك على الأداء؟
مرحباً بالجميع! أنا أدرس Rust ووجدت النوع `i128` (عدد صحيح 128 بت مع إشارة). أكتب محللاً للأعداد الكبيرة من JSON، وأحتاج لتخزين قيم مثل `2^64` وأكبر. أنا معتاد على أن معالجات x86-64 تحتوي على سجلات 64 بت، ولا أفهم كيف يقوم المعالج بتنفيذ العمليات على الأعداد 128 بت.
لقد كتبت اختبار أداء بسيط (باستخدام `cargo bench`) يقيس جمع اثنين من `i128` واثنين من `i64`:
```rust
#![feature(test)]
extern crate test;
#[bench]
fn add_i64(b: &mut test::Bencher) {
let a: i64 = 1234567890123456789;
let b_val: i64 = 987654321098765432;
b.iter(|| {
let c = a + b_val;
test::black_box(c);
});
}
#[bench]
fn add_i128(b: &mut test::Bencher) {
let a: i128 = 123456789012345678901234567890123456789;
let b_val: i128 = 98765432109876543210987654321098765432;
b.iter(|| {
let c = a + b_val;
test::black_box(c);
});
}
```
أظهرت النتائج أن `i128` يعمل تقريباً